/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet = (obj, member, getter) => { __accessCheck(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet = (obj, member, value, setter) => { __accessCheck(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateWrapper = (obj, member, setter, getter) => ({ set _(value) { __privateSet(obj, member, value, setter); }, get _() { return __privateGet(obj, member, getter); } }); var __privateMethod = (obj, member, method) => { __accessCheck(obj, member, "access private method"); return method; }; // node_modules/@obsidian-ai-providers/sdk/dist/index.js var require_dist = __commonJS({ "node_modules/@obsidian-ai-providers/sdk/dist/index.js"(exports, module2) { var __defProp2 = Object.defineProperty; var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp2(target, "name", { value, configurable: true }); var __export2 = (target, all) => { for (var name in all) __defProp2(target, name, { get: all[name], enumerable: true }); }; var __copyProps2 = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames2(from)) if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var sdk_exports = {}; __export2(sdk_exports, { initAI: () => initAI2, waitForAI: () => waitForAI3 }); module2.exports = __toCommonJS2(sdk_exports); var import_obsidian4 = require("obsidian"); var FALLBACK_TIMEOUT = 100; var REQUIRED_AI_PROVIDERS_VERSION = 3; var AI_PROVIDERS_READY_EVENT = "ai-providers-ready"; var aiProvidersReadyAiResolver = null; async function waitForAIProviders(app, plugin) { if (aiProvidersReadyAiResolver) { return aiProvidersReadyAiResolver; } const abortController = new AbortController(); let aiProvidersReady = /* @__PURE__ */ __name(() => { }, "aiProvidersReady"); const result = { promise: new Promise((resolve, reject) => { aiProvidersReady = /* @__PURE__ */ __name(() => { app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady); aiProvidersReadyAiResolver = null; resolve(app.aiProviders); }, "aiProvidersReady"); if (app.aiProviders) { aiProvidersReady(); } else { const eventRef = app.workspace.on( AI_PROVIDERS_READY_EVENT, aiProvidersReady ); plugin.registerEvent(eventRef); } abortController.signal.addEventListener("abort", () => { app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady); aiProvidersReadyAiResolver = null; reject(new Error("Waiting for AI Providers was cancelled")); }); }), cancel: () => abortController.abort() }; if (!app.aiProviders) { aiProvidersReadyAiResolver = result; } return result; } __name(waitForAIProviders, "waitForAIProviders"); var _AIProvidersManager = class { constructor(app, plugin) { this.app = app; this.plugin = plugin; } static getInstance(app, plugin) { if (!this.instance) { if (!app || !plugin) { throw new Error( "AIProvidersManager not initialized. Call initialize() first" ); } this.instance = new _AIProvidersManager(app, plugin); } return this.instance; } static reset() { this.instance = null; } getApp() { return this.app; } getPlugin() { return this.plugin; } }; var AIProvidersManager = _AIProvidersManager; __name(AIProvidersManager, "AIProvidersManager"); AIProvidersManager.instance = null; async function initAI2(app, plugin, onDone, options) { AIProvidersManager.getInstance(app, plugin); let isFallbackShown = false; if (options == null ? void 0 : options.disableFallback) { await onDone(); return; } try { const timeout = setTimeout(async () => { plugin.addSettingTab( new AIProvidersFallbackSettingsTab(app, plugin) ); isFallbackShown = true; }, FALLBACK_TIMEOUT); const aiProvidersAiResolver = await waitForAIProviders(app, plugin); const aiProviders = await aiProvidersAiResolver.promise; clearTimeout(timeout); try { aiProviders.checkCompatibility(REQUIRED_AI_PROVIDERS_VERSION); } catch (error) { console.error(`AI Providers compatibility check failed: ${error}`); if (error.code === "version_mismatch") { plugin.addSettingTab( new AIProvidersFallbackSettingsTab(app, plugin) ); throw new Error( `AI Providers version ${REQUIRED_AI_PROVIDERS_VERSION} is required` ); } throw error; } await onDone(); } finally { if (isFallbackShown && app.plugins) { await app.plugins.disablePlugin(plugin.manifest.id); await app.plugins.enablePlugin(plugin.manifest.id); } } } __name(initAI2, "initAI"); async function waitForAI3() { const manager = AIProvidersManager.getInstance(); return waitForAIProviders(manager.getApp(), manager.getPlugin()); } __name(waitForAI3, "waitForAI"); var AIProvidersFallbackSettingsTab = class extends import_obsidian4.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; } async display() { const { containerEl } = this; containerEl.empty(); const aiProvidersNotice = containerEl.createEl("div"); aiProvidersNotice.addClass("ai-providers-notice"); aiProvidersNotice.appendChild( (0, import_obsidian4.sanitizeHTMLToDom)(`

\u26A0\uFE0F This plugin requires AI Providers plugin to be installed.

Please install and configure AI Providers plugin first.

`) ); } }; __name(AIProvidersFallbackSettingsTab, "AIProvidersFallbackSettingsTab"); } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => LocalGPT }); module.exports = __toCommonJS(main_exports); var import_obsidian3 = require("obsidian"); // src/LocalGPTSettingTab.ts var import_obsidian = require("obsidian"); // src/defaultSettings.ts var DEFAULT_SETTINGS = { aiProviders: { main: null, embedding: null, vision: null }, defaults: { creativity: "low", contextLimit: "local" }, actions: [ { name: "\u{1FA84} General help", prompt: "", system: "You are an assistant helping a user write more content in a document based on a prompt. Output in markdown format. Do not use links. Do not include literal content from the original document." }, { name: "\u270D\uFE0F Continue writing", prompt: "Act as a professional editor with many years of experience as a writer. Carefully finalize the following text, add details, use facts and make sure that the meaning and original style are preserved. Purposely write in detail, with examples, so that your reader is comfortable, even if they don't understand the specifics. Don't use clericalisms, evaluations without proof with facts, passive voice. Use Markdown markup language for formatting. Answer only content and nothing else, no introductory words, only substance.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F36D} Summarize", prompt: "Make a concise summary of the key points of the following text.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F4D6} Fix spelling and grammar", prompt: "Proofread the below for spelling and grammar.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can.", replace: true }, { name: "\u2705 Find action items", prompt: 'Act as an assistant helping find action items inside a document. An action item is an extracted task or to-do found inside of an unstructured document. Use Markdown checkbox format: each line starts with "- [ ] "', system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F9E0} New System Prompt", prompt: "", system: `You are a highly skilled AI prompt engineer with expertise in creating tailored prompts for a wide range of professional roles. You have a deep knowledge of how to craft prompts that effectively guide the language model to produce high-quality, contextually appropriate responses. Your task is to generate a custom system prompt for different roles based on user input. This involves understanding the specific requirements of each role, the context in which the prompt will be used, and the desired output format. You are skilled in structuring prompts that ensure clarity, relevance, and utility. Create a custom system prompt for an LLM to assist users in generating contextually appropriate and highly effective responses for various roles. The prompt should provide clear instructions to the LLM on how to handle specific scenarios related to the role, including the tone and format of the response. Start by providing a role "You are..." and context as a summary of the situation or background information relevant to the prompt. Define the main objective, outlining what the LLM needs to accomplish. Include instructions on the appropriate style and tone (e.g., formal, casual, technical, empathetic) based on the role and audience. Identify the target audience to tailor the LLM's output effectively. Specify the format of the response, whether it should be a narrative, bullet points, step-by-step guide, code, or another format. Avoid using headings or examples; the prompt should read as a continuous, cohesive set of instructions. ANSWER PROMPT AND NOTHING ELSE!` } ], _version: 8 }; var CREATIVITY = { "": { temperature: 0 }, low: { temperature: 0.2 }, medium: { temperature: 0.5 }, high: { temperature: 1 } }; var SELECTION_KEYWORD = "{{=SELECTION=}}"; var CONTEXT_KEYWORD = "{{=CONTEXT=}}"; var CONTEXT_CONDITION_START = "{{=CONTEXT_START=}}"; var CONTEXT_CONDITION_END = "{{=CONTEXT_END=}}"; // src/LocalGPTSettingTab.ts var import_sdk = __toESM(require_dist()); // src/i18n/de.json var de_default = { commands: { showContextMenu: "Kontextmen\xFC anzeigen", actionPalette: { name: "Aktionspalette", placeholder: "Ihr Prompt... | Enter: senden, Esc: abbrechen", changeProvider: "KI\u2011Provider wechseln", changeModel: "Modell wechseln", changeCreativity: "Kreativit\xE4t \xE4ndern", changeSystemPrompt: "System-Prompt wechseln", unknownModel: "Unbekanntes Modell" } }, statusBar: { enhancing: "\u2728 Verbessern", enhancingWithProgress: "\u2728 Verbessern {{percent}}%" }, notices: { errorGenerating: "Fehler bei der Texterzeugung: {{message}}", errorProcessingRag: "Fehler bei der Verarbeitung verkn\xFCpfter Dokumente: {{message}}. Fahre mit dem Originaltext fort.", importantUpdate: "\uFE0F\u{1F6A8} WICHTIG! Aktualisiere die Local GPT Einstellungen!", newVersion: "\u2B06\uFE0F Local GPT: Eine neue Version ist verf\xFCgbar", actionNameRequired: "Bitte gib einen Namen f\xFCr die Aktion ein.", actionNameExists: 'Eine Aktion mit dem Namen "{{name}}" existiert bereits.', actionRewritten: 'Aktion "{{name}}" \xFCberschrieben', actionAdded: 'Aktion "{{name}}" hinzugef\xFCgt', copied: "Kopiert" }, settings: { mainProvider: "Haupt-AI-Provider", embeddingProvider: "Embedding AI Provider", embeddingProviderDesc: "Optional. Wird f\xFCr \u2728\xA0Erweiterte\xA0Aktionen.", visionProvider: "Vision AI Provider", visionProviderDesc: "Optional. Dies wird f\xFCr Bilder verwendet. Wenn nicht festgelegt, wird der Haupt-AI-Provider verwendet.", creativity: "Kreativit\xE4t", creativityNone: "\u26AA Keine", creativityLow: "\uFE0F\u{1F4A1} Niedrig", creativityMedium: "\u{1F3A8} Mittel", creativityHigh: "\u{1F680} Hoch", actions: "Aktionen", quickAdd: "Schnell hinzuf\xFCgen", quickAddPlaceholder: "Aktion einf\xFCgen", quickAddDesc: 'Sie k\xF6nnen die besten S\xE4tze von Prompts teilen oder einen aus der Community erhalten.
Wichtig: Wenn Sie bereits eine Aktion mit demselben Namen haben, wird sie \xFCberschrieben.', addNewManually: "Manuell hinzuf\xFCgen", actionName: "Aktionsname", actionNamePlaceholder: "Auswahl zusammenfassen", systemPrompt: "System-Prompt", systemPromptDesc: "Optional", systemPromptPlaceholder: "Du bist ein hilfreicher Assistent.", prompt: "Prompt", promptDesc: 'Bitte lesen Sie \xFCber
Prompt-Vorlagen
, wenn Sie Ihre
resultierenden Prompts anpassen m\xF6chten', replaceSelected: "Ausgew\xE4hlten Text ersetzen", replaceSelectedDesc: "Wenn diese Option aktiviert ist, wird der hervorgehobene Text durch eine Antwort des Modells ersetzt.", remove: "Entfernen", close: "Schlie\xDFen", save: "Speichern", actionsList: "Aktionsliste", changeOrder: "Reihenfolge \xE4ndern", done: "Fertig", advancedSettings: "Erweiterte Einstellungen", advancedSettingsDesc: "\u2728 Erweiterte Aktionen (RAG), Alle Aktionen zur\xFCcksetzen", enhancedActions: "Erweiterte Aktionen", enhancedActionsLabel: "RAG\u2011Kontext", enhancedActionsDesc: "Mehr Kontext kann die Antwortqualit\xE4t bei leistungsstarken Modellen verbessern, bei schw\xE4cheren jedoch verschlechtern. Gr\xF6\xDFerer Kontext verbraucht au\xDFerdem mehr Tokens und erh\xF6ht die Kosten pro Anfrage (bei kostenpflichtigen Modellen).", contextLimitLocal: "Lokale Modelle", contextLimitCloud: "Cloud\u2011Modelle", contextLimitAdvanced: "Top: GPT, Claude, Gemini", contextLimitMax: "Keine Limits (Achtung)", dangerZone: "Gefahrenzone", resetActions: "Aktionen zur\xFCcksetzen", resetActionsDesc: "\u{1F6A8} Setzt alle Aktionen auf die Standardeinstellungen zur\xFCck. Dies kann nicht r\xFCckg\xE4ngig gemacht werden und l\xF6scht alle Ihre benutzerdefinierten Aktionen.", reset: "Zur\xFCcksetzen", confirmReset: "Zur\xFCcksetzen best\xE4tigen" } }; // src/i18n/en.json var en_default = { commands: { showContextMenu: "Show context menu", actionPalette: { name: "Action Palette", placeholder: "Your prompt... | Enter: send, Esc: cancel", changeProvider: "Change the AI provider", changeModel: "Change the model", changeCreativity: "Change creativity", changeSystemPrompt: "Change system prompt", unknownModel: "Unknown model" } }, statusBar: { enhancing: "\u2728 Enhancing", enhancingWithProgress: "\u2728 Enhancing {{percent}}%" }, notices: { errorGenerating: "Error while generating text: {{message}}", errorProcessingRag: "Error processing related documents: {{message}}. Continuing with original text.", importantUpdate: "\uFE0F\u{1F6A8} IMPORTANT! Update Local GPT settings!", newVersion: "\u2B06\uFE0F Local GPT: a new version is available", actionNameRequired: "Please enter a name for the action.", actionNameExists: 'An action with the name "{{name}}" already exists.', actionRewritten: 'Rewritten "{{name}}" action', actionAdded: 'Added "{{name}}" action', copied: "Copied" }, settings: { mainProvider: "Main AI Provider", embeddingProvider: "Embedding AI Provider", embeddingProviderDesc: "Optional. Used for \u2728\xA0Enhanced\xA0Actions.", visionProvider: "Vision AI Provider", visionProviderDesc: "Optional. This is used for images. If not set, the main AI provider will be used.", creativity: "Creativity", creativityNone: "\u26AA None", creativityLow: "\uFE0F\u{1F4A1} Low", creativityMedium: "\u{1F3A8} Medium", creativityHigh: "\u{1F680} High", actions: "Actions", quickAdd: "Quick add", quickAddPlaceholder: "Paste action", quickAddDesc: 'You can share the best sets prompts or get one from the community.
Important: if you already have an action with the same name it will be overwritten.', addNewManually: "Add new manually", actionName: "Action name", actionNamePlaceholder: "Summarize selection", systemPrompt: "System prompt", systemPromptDesc: "Optional", systemPromptPlaceholder: "You are a helpful assistant.", prompt: "Prompt", promptDesc: 'Please read about
Prompt templating
if you want to customize
your resulting prompts', replaceSelected: "Replace selected text", replaceSelectedDesc: "If checked, the highlighted text will be replaced with a response from the model.", remove: "Remove", close: "Close", save: "Save", actionsList: "Actions list", changeOrder: "Change order", done: "Done", advancedSettings: "Advanced settings", advancedSettingsDesc: "\u2728 Enhanced Actions (RAG), Reset all actions", enhancedActions: "Enhanced Actions", enhancedActionsLabel: "RAG context", enhancedActionsDesc: "More context can improve answer quality for powerful models, but may reduce quality for weaker ones. Larger context also consumes more tokens and increases request cost for paid models.", contextLimitLocal: "Local models", contextLimitCloud: "Cloud models", contextLimitAdvanced: "Top: GPT, Claude, Gemini", contextLimitMax: "No limits (danger)", dangerZone: "Danger zone", resetActions: "Reset actions", resetActionsDesc: "\u{1F6A8} Reset all actions to the default. This cannot be undone and will delete all your custom actions.", reset: "Reset", confirmReset: "Confirm reset" } }; // src/i18n/ru.json var ru_default = { commands: { showContextMenu: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043C\u0435\u043D\u044E", actionPalette: { name: "\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", placeholder: "\u0412\u0430\u0448 \u043F\u0440\u043E\u043C\u043F\u0442... | Enter: \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C, Esc: \u043E\u0442\u043C\u0435\u043D\u0430", changeProvider: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C AI\u2011\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430", changeModel: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C", changeCreativity: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u0440\u0435\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C", changeSystemPrompt: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0443\u044E \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044E", unknownModel: "\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043C\u043E\u0434\u0435\u043B\u044C" } }, statusBar: { enhancing: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435", enhancingWithProgress: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435 {{percent}}%" }, notices: { errorGenerating: "\u041E\u0448\u0438\u0431\u043A\u0430 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043A\u0441\u0442\u0430: {{message}}", errorProcessingRag: "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432: {{message}}. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E \u0441 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u043C \u0442\u0435\u043A\u0441\u0442\u043E\u043C.", importantUpdate: "\uFE0F\u{1F6A8} \u0412\u0410\u0416\u041D\u041E! \u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Local GPT!", newVersion: "\u2B06\uFE0F Local GPT: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F", actionNameRequired: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.", actionNameExists: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \xAB{{name}}\xBB \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.", actionRewritten: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E", actionAdded: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E", copied: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E" }, settings: { mainProvider: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440", embeddingProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u044D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u043E\u0432", embeddingProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u2728\xA0\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0445\xA0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.", visionProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", visionProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u0415\u0441\u043B\u0438 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440.", creativity: "\u041A\u0440\u0435\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C", creativityNone: "\u26AA \u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442", creativityLow: "\uFE0F\u{1F4A1} \u041D\u0438\u0437\u043A\u0430\u044F", creativityMedium: "\u{1F3A8} \u0421\u0440\u0435\u0434\u043D\u044F\u044F", creativityHigh: "\u{1F680} \u0412\u044B\u0441\u043E\u043A\u0430\u044F", actions: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F", quickAdd: "\u0411\u044B\u0441\u0442\u0440\u043E\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435", quickAddPlaceholder: "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0433\u043E\u0442\u043E\u0432\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", quickAddDesc: '\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0441\u0432\u043E\u0438\u043C\u0438 \u043D\u0430\u0431\u043E\u0440\u0430\u043C\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432 \u0438\u043B\u0438 \u043D\u0430\u0439\u0442\u0438 \u043D\u043E\u0432\u044B\u0435 \u0432 \u0441\u043E\u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435.
\u0412\u0430\u0436\u043D\u043E: \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0430\u043A\u0438\u043C \u0436\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C, \u043E\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E.', addNewManually: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E", actionName: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", actionNamePlaceholder: "\u041A\u0440\u0430\u0442\u043A\u043E \u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435", systemPrompt: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F", systemPromptDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E", systemPromptPlaceholder: "\u0412\u044B \u2014 \u043F\u043E\u043B\u0435\u0437\u043D\u044B\u0439 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442.", prompt: "\u041F\u0440\u043E\u043C\u043F\u0442", promptDesc: '\u0423\u0437\u043D\u0430\u0439\u0442\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E \u0448\u0430\u0431\u043B\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u0438\u0445 \u043F\u043E\u0434 \u0441\u0435\u0431\u044F.', replaceSelected: "\u0417\u0430\u043C\u0435\u043D\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442", replaceSelectedDesc: "\u0415\u0441\u043B\u0438 \u043E\u043F\u0446\u0438\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0451\u043D \u043E\u0442\u0432\u0435\u0442\u043E\u043C \u043E\u0442 \u043C\u043E\u0434\u0435\u043B\u0438.", remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", actionsList: "\u0421\u043F\u0438\u0441\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", changeOrder: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0440\u044F\u0434\u043E\u043A", done: "\u0413\u043E\u0442\u043E\u0432\u043E", advancedSettings: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", advancedSettingsDesc: "\u2728 \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F (RAG), \u0421\u0431\u0440\u043E\u0441 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", enhancedActions: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", enhancedActionsLabel: "RAG\u2011\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442", enhancedActionsDesc: "\u0427\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u2014 \u0442\u0435\u043C \u0432\u044B\u0448\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0443 \u043C\u043E\u0449\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439, \u043D\u043E \u043D\u0438\u0436\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0443 \u0441\u043B\u0430\u0431\u044B\u0445. \u0411\u043E\u043B\u044C\u0448\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0442\u0430\u043A\u0436\u0435 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0434\u043B\u044F \u043F\u043B\u0430\u0442\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439.", contextLimitLocal: "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", contextLimitCloud: "\u041E\u0431\u043B\u0430\u0447\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", contextLimitAdvanced: "\u0422\u043E\u043F: GPT, Claude, Gemini", contextLimitMax: "\u0411\u0435\u0437 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0439 (\u043E\u043F\u0430\u0441\u043D\u043E)", dangerZone: "\u041E\u043F\u0430\u0441\u043D\u0430\u044F \u0437\u043E\u043D\u0430", resetActions: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", resetActionsDesc: "\u{1F6A8} \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0434\u043E \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0445. \u042D\u0442\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043E\u0431\u0440\u0430\u0442\u0438\u043C\u043E \u0438 \u0443\u0434\u0430\u043B\u0438\u0442 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.", reset: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C", confirmReset: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0441\u0431\u0440\u043E\u0441" } }; // src/i18n/zh.json var zh_default = { commands: { showContextMenu: "\u663E\u793A\u4E0A\u4E0B\u6587\u83DC\u5355", actionPalette: { name: "\u52A8\u4F5C\u9762\u677F", placeholder: "\u60A8\u7684\u63D0\u793A... | Enter: \u53D1\u9001, Esc: \u53D6\u6D88", changeProvider: "\u5207\u6362 AI \u63D0\u4F9B\u5546", changeModel: "\u5207\u6362\u6A21\u578B", changeCreativity: "\u66F4\u6539\u521B\u9020\u529B", changeSystemPrompt: "\u66F4\u6539\u7CFB\u7EDF\u63D0\u793A", unknownModel: "\u672A\u77E5\u6A21\u578B" } }, statusBar: { enhancing: "\u2728 \u589E\u5F3A\u4E2D", enhancingWithProgress: "\u2728 \u589E\u5F3A\u4E2D {{percent}}%" }, notices: { errorGenerating: "\u751F\u6210\u6587\u672C\u65F6\u51FA\u9519: {{message}}", errorProcessingRag: "\u5904\u7406\u76F8\u5173\u6587\u6863\u65F6\u51FA\u9519: {{message}}\u3002\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u59CB\u6587\u672C\u3002", importantUpdate: "\uFE0F\u{1F6A8} \u91CD\u8981\u63D0\u793A\uFF01\u8BF7\u66F4\u65B0 Local GPT \u8BBE\u7F6E\uFF01", newVersion: "\u2B06\uFE0F Local GPT: \u65B0\u7248\u672C\u53EF\u7528", actionNameRequired: "\u8BF7\u8F93\u5165\u64CD\u4F5C\u540D\u79F0\u3002", actionNameExists: '\u540D\u4E3A"{{name}}"\u7684\u64CD\u4F5C\u5DF2\u5B58\u5728\u3002', actionRewritten: '\u5DF2\u91CD\u5199\u64CD\u4F5C"{{name}}"', actionAdded: '\u5DF2\u6DFB\u52A0\u64CD\u4F5C"{{name}}"', copied: "\u5DF2\u590D\u5236" }, settings: { mainProvider: "\u4E3B\u8981AI\u63D0\u4F9B\u5546", embeddingProvider: "\u5D4C\u5165AI\u63D0\u4F9B\u5546", embeddingProviderDesc: "\u53EF\u9009\u3002\u7528\u4E8E\u2728\u589E\u5F3A\u64CD\u4F5C\u3002", visionProvider: "\u89C6\u89C9AI\u63D0\u4F9B\u5546", visionProviderDesc: "\u53EF\u9009\u3002\u6B64\u9009\u9879\u7528\u4E8E\u56FE\u7247\u3002\u5982\u679C\u672A\u8BBE\u7F6E\uFF0C\u5C06\u4F7F\u7528\u4E3B\u8981\u7684AI\u63D0\u4F9B\u5546\u3002", creativity: "\u521B\u9020\u529B", creativityNone: "\u26AA \u65E0", creativityLow: "\uFE0F\u{1F4A1} \u4F4E", creativityMedium: "\u{1F3A8} \u4E2D", creativityHigh: "\u{1F680} \u9AD8", actions: "\u64CD\u4F5C", quickAdd: "\u5FEB\u901F\u6DFB\u52A0", quickAddPlaceholder: "\u7C98\u8D34\u64CD\u4F5C", quickAddDesc: '\u60A8\u53EF\u4EE5\u5206\u4EAB\u6700\u4F73\u7684\u63D0\u793A\u96C6\uFF0C\u6216\u4ECE\u793E\u533A\u83B7\u53D6\u4E00\u4E2A\u3002
\u91CD\u8981\u63D0\u793A: \u5982\u679C\u60A8\u5DF2\u7ECF\u6709\u4E00\u4E2A\u540C\u540D\u64CD\u4F5C\uFF0C\u5B83\u5C06\u88AB\u8986\u76D6\u3002', addNewManually: "\u624B\u52A8\u6DFB\u52A0", actionName: "\u64CD\u4F5C\u540D\u79F0", actionNamePlaceholder: "\u603B\u7ED3\u9009\u62E9", systemPrompt: "\u7CFB\u7EDF\u63D0\u793A", systemPromptDesc: "\u53EF\u9009", systemPromptPlaceholder: "\u4F60\u662F\u4E00\u4E2A\u4E50\u4E8E\u52A9\u4EBA\u7684\u52A9\u624B\u3002", prompt: "\u63D0\u793A", promptDesc: '\u5982\u679C\u60A8\u60F3\u81EA\u5B9A\u4E49
\u60A8\u7684\u7ED3\u679C\u63D0\u793A\uFF0C
\u8BF7\u9605\u8BFB\u63D0\u793A\u6A21\u677F', replaceSelected: "\u66FF\u6362\u9009\u5B9A\u7684\u6587\u672C", replaceSelectedDesc: "\u5982\u679C\u9009\u4E2D\uFF0C\u7A81\u51FA\u663E\u793A\u7684\u6587\u672C\u5C06\u88AB\u6A21\u578B\u7684\u54CD\u5E94\u66FF\u6362\u3002", remove: "\u5220\u9664", close: "\u5173\u95ED", save: "\u4FDD\u5B58", actionsList: "\u64CD\u4F5C\u5217\u8868", changeOrder: "\u66F4\u6539\u987A\u5E8F", done: "\u5B8C\u6210", advancedSettings: "\u9AD8\u7EA7\u8BBE\u7F6E", advancedSettingsDesc: "\u2728 \u589E\u5F3A\u64CD\u4F5C\uFF08RAG\uFF09\u3001\u91CD\u7F6E\u6240\u6709\u64CD\u4F5C", enhancedActions: "\u589E\u5F3A\u64CD\u4F5C", enhancedActionsLabel: "RAG \u4E0A\u4E0B\u6587", enhancedActionsDesc: "\u66F4\u591A\u4E0A\u4E0B\u6587\u53EF\u63D0\u5347\u5F3A\u5927\u6A21\u578B\u7684\u7B54\u6848\u8D28\u91CF\uFF0C\u4F46\u53EF\u80FD\u964D\u4F4E\u8F83\u5F31\u6A21\u578B\u7684\u8D28\u91CF\u3002\u66F4\u5927\u7684\u4E0A\u4E0B\u6587\u4E5F\u4F1A\u6D88\u8017\u66F4\u591A Token\uFF0C\u5E76\u63D0\u9AD8\u6BCF\u6B21\u8BF7\u6C42\u6210\u672C\uFF08\u5BF9\u4ED8\u8D39\u6A21\u578B\u800C\u8A00\uFF09\u3002", contextLimitLocal: "\u672C\u5730\u6A21\u578B", contextLimitCloud: "\u4E91\u7AEF\u6A21\u578B", contextLimitAdvanced: "\u9876\u7EA7\uFF1AGPT\u3001Claude\u3001Gemini", contextLimitMax: "\u65E0\u9650\u5236\uFF08\u6CE8\u610F\uFF09", dangerZone: "\u5371\u9669\u533A\u57DF", resetActions: "\u91CD\u7F6E\u64CD\u4F5C", resetActionsDesc: "\u{1F6A8} \u5C06\u6240\u6709\u64CD\u4F5C\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u503C\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\uFF0C\u5E76\u5C06\u5220\u9664\u6240\u6709\u60A8\u7684\u81EA\u5B9A\u4E49\u64CD\u4F5C\u3002", reset: "\u91CD\u7F6E", confirmReset: "\u786E\u8BA4\u91CD\u7F6E" } }; // src/logger.ts var Logger = class { constructor() { this.logLevel = 0 /* DEBUG */; this.timers = /* @__PURE__ */ new Map(); this.colorIndex = 0; this.colors = [ "#FFB3BA", "#BAFFC9", "#BAE1FF", "#FFFFBA", "#FFDFBA", "#E0BBE4" ]; this.isDevMode = false; } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setLogLevel(level) { this.logLevel = level; } logWithEmoji(level, message, ...args) { if (this.isDevMode && level >= this.logLevel) { const emoji = this.getEmojiForLevel(level); if (args.length === 0) { console.log(`${emoji} %c${message}`, "font-weight: bold;"); } else { console.group(`${emoji} %c${message}`, "font-weight: bold;"); this.logArgs(args); console.groupEnd(); } } } logArgs(args) { args.forEach((arg) => { console.log(arg); }); } getEmojiForLevel(level) { switch (level) { case 0 /* DEBUG */: return "\u{1F41B}"; case 1 /* INFO */: return "\u2139\uFE0F"; case 2 /* WARN */: return "\u26A0\uFE0F"; case 3 /* ERROR */: return "\u{1F6AB}"; case 4 /* SUCCESS */: return "\u2705"; default: return ""; } } debug(message, ...args) { this.logWithEmoji(0 /* DEBUG */, message, ...args); } info(message, ...args) { this.logWithEmoji(1 /* INFO */, message, ...args); } warn(message, ...args) { this.logWithEmoji(2 /* WARN */, message, ...args); } error(message, ...args) { this.logWithEmoji(3 /* ERROR */, message, ...args); } success(message, ...args) { this.logWithEmoji(4 /* SUCCESS */, message, ...args); } table(message, ...args) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { console.group(`\u{1F4CA} %c${message}`, "font-weight: bold;"); this.logNestedGroups(args); console.groupEnd(); } } logNestedGroups(args) { args.forEach((arg) => { if (typeof arg === "object" && arg !== null) { this.logObjectAsGroups(arg); } else { console.log(arg); } }); } logObjectAsGroups(obj) { Object.entries(obj).forEach(([key, value]) => { if (typeof value === "object" && value !== null) { console.group(`${key}:`); this.logObjectAsGroups(value); console.groupEnd(); } else { console.log(`${key}: ${value}`); } }); } time(label) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { const color = this.getNextColor(); this.timers.set(label, { startTime: performance.now(), color }); console.log( `\u23F1\uFE0F %c${label}: timer started`, `color: black; font-weight: bold; background-color: ${color}; padding: 2px 5px; border-radius: 3px;` ); } } timeEnd(label) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { const timerData = this.timers.get(label); if (timerData) { const duration = performance.now() - timerData.startTime; console.log( `\u23F1\uFE0F %c${label}: ${duration.toFixed(2)}ms`, `color: black; font-weight: bold; background-color: ${timerData.color}; padding: 2px 5px; border-radius: 3px;` ); this.timers.delete(label); } else { console.warn(`Timer '${label}' does not exist`); } } } getNextColor() { const color = this.colors[this.colorIndex]; this.colorIndex = (this.colorIndex + 1) % this.colors.length; return color; } // Добавляем новый метод для создания разделителя separator(message = "") { if (this.isDevMode) { const lineLength = 20; const line = "\u2501".repeat(lineLength); const paddedMessage = message ? ` ${message} ` : ""; const leftPadding = Math.floor( (lineLength - paddedMessage.length) / 2 ); const rightPadding = lineLength - paddedMessage.length - leftPadding; const separatorLine = message ? line.slice(0, leftPadding) + paddedMessage + line.slice(lineLength - rightPadding) : line; console.log( "\n%c" + separatorLine, "color: #FF4500; font-weight: bold; font-size: 1.2em;" ); } } }; var logger = Logger.getInstance(); // src/i18n/index.ts var locales = { en: en_default, ru: ru_default, de: de_default, zh: zh_default }; var I18n = class { static t(key, params) { const locale = window.localStorage.getItem("language") || "en"; const keys = key.split("."); let translations = locales[locale] || locales["en"]; for (const k of keys) { if ((translations == null ? void 0 : translations[k]) === void 0) { logger.warn(`Translation missing: ${key}`); translations = locales["en"]; let engValue = translations; for (const ek of keys) { engValue = engValue == null ? void 0 : engValue[ek]; } return engValue || key; } translations = translations[k]; } let result = translations; if (params) { Object.entries(params).forEach(([key2, value]) => { result = result.replace(`{{${key2}}}`, value); }); } return result; } }; // node_modules/sortablejs/modular/sortable.esm.js function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function(key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function(obj2) { return typeof obj2; }; } else { _typeof = function(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof(obj); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } var version = "1.15.6"; function userAgent(pattern) { if (typeof window !== "undefined" && window.navigator) { return !!/* @__PURE__ */ navigator.userAgent.match(pattern); } } var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); var Edge = userAgent(/Edge/i); var FireFox = userAgent(/firefox/i); var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); var IOS = userAgent(/iP(ad|od|hone)/i); var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); var captureMode = { capture: false, passive: false }; function on(el, event, fn) { el.addEventListener(event, fn, !IE11OrLess && captureMode); } function off(el, event, fn) { el.removeEventListener(event, fn, !IE11OrLess && captureMode); } function matches(el, selector) { if (!selector) return; selector[0] === ">" && (selector = selector.substring(1)); if (el) { try { if (el.matches) { return el.matches(selector); } else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); } else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); } } catch (_) { return false; } } return false; } function getParentOrHost(el) { return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode; } function closest(el, selector, ctx, includeCTX) { if (el) { ctx = ctx || document; do { if (selector != null && (selector[0] === ">" ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) { return el; } if (el === ctx) break; } while (el = getParentOrHost(el)); } return null; } var R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { el.classList[state ? "add" : "remove"](name); } else { var className = (" " + el.className + " ").replace(R_SPACE, " ").replace(" " + name + " ", " "); el.className = (className + (state ? " " + name : "")).replace(R_SPACE, " "); } } } function css(el, prop, val) { var style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { val = document.defaultView.getComputedStyle(el, ""); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { if (!(prop in style) && prop.indexOf("webkit") === -1) { prop = "-webkit-" + prop; } style[prop] = val + (typeof val === "string" ? "" : "px"); } } } function matrix(el, selfOnly) { var appliedTransforms = ""; if (typeof el === "string") { appliedTransforms = el; } else { do { var transform = css(el, "transform"); if (transform && transform !== "none") { appliedTransforms = transform + " " + appliedTransforms; } } while (!selfOnly && (el = el.parentNode)); } var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; return matrixFn && new matrixFn(appliedTransforms); } function find(ctx, tagName, iterator) { if (ctx) { var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; if (iterator) { for (; i < n; i++) { iterator(list[i], i); } } return list; } return []; } function getWindowScrollingElement() { var scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; } else { return document.documentElement; } } function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { if (!el.getBoundingClientRect && el !== window) return; var elRect, top, left, bottom, right, height, width; if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); top = elRect.top; left = elRect.left; bottom = elRect.bottom; right = elRect.right; height = elRect.height; width = elRect.width; } else { top = 0; left = 0; bottom = window.innerHeight; right = window.innerWidth; height = window.innerHeight; width = window.innerWidth; } if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) { container = container || el.parentNode; if (!IE11OrLess) { do { if (container && container.getBoundingClientRect && (css(container, "transform") !== "none" || relativeToNonStaticParent && css(container, "position") !== "static")) { var containerRect = container.getBoundingClientRect(); top -= containerRect.top + parseInt(css(container, "border-top-width")); left -= containerRect.left + parseInt(css(container, "border-left-width")); bottom = top + elRect.height; right = left + elRect.width; break; } } while (container = container.parentNode); } } if (undoScale && el !== window) { var elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d; if (elMatrix) { top /= scaleY; left /= scaleX; width /= scaleX; height /= scaleY; bottom = top + height; right = left + width; } } return { top, left, bottom, right, width, height }; } function isScrolledPast(el, elSide, parentSide) { var parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide]; while (parent) { var parentSideVal = getRect(parent)[parentSide], visible = void 0; if (parentSide === "top" || parentSide === "left") { visible = elSideVal >= parentSideVal; } else { visible = elSideVal <= parentSideVal; } if (!visible) return parent; if (parent === getWindowScrollingElement()) break; parent = getParentAutoScrollElement(parent, false); } return false; } function getChild(el, childNum, options, includeDragEl) { var currentChild = 0, i = 0, children2 = el.children; while (i < children2.length) { if (children2[i].style.display !== "none" && children2[i] !== Sortable.ghost && (includeDragEl || children2[i] !== Sortable.dragged) && closest(children2[i], options.draggable, el, false)) { if (currentChild === childNum) { return children2[i]; } currentChild++; } i++; } return null; } function lastChild(el, selector) { var last = el.lastElementChild; while (last && (last === Sortable.ghost || css(last, "display") === "none" || selector && !matches(last, selector))) { last = last.previousElementSibling; } return last || null; } function index(el, selector) { var index2 = 0; if (!el || !el.parentNode) { return -1; } while (el = el.previousElementSibling) { if (el.nodeName.toUpperCase() !== "TEMPLATE" && el !== Sortable.clone && (!selector || matches(el, selector))) { index2++; } } return index2; } function getRelativeScrollOffset(el) { var offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement(); if (el) { do { var elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d; offsetLeft += el.scrollLeft * scaleX; offsetTop += el.scrollTop * scaleY; } while (el !== winScroller && (el = el.parentNode)); } return [offsetLeft, offsetTop]; } function indexOfObject(arr, obj) { for (var i in arr) { if (!arr.hasOwnProperty(i)) continue; for (var key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } return -1; } function getParentAutoScrollElement(el, includeSelf) { if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); var elem = el; var gotSelf = false; do { if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { var elemCSS = css(elem); if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll") || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) { if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); if (gotSelf || includeSelf) return elem; gotSelf = true; } } } while (elem = elem.parentNode); return getWindowScrollingElement(); } function extend(dst, src) { if (dst && src) { for (var key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } } } return dst; } function isRectEqual(rect1, rect2) { return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); } var _throttleTimeout; function throttle(callback, ms) { return function() { if (!_throttleTimeout) { var args = arguments, _this = this; if (args.length === 1) { callback.call(_this, args[0]); } else { callback.apply(_this, args); } _throttleTimeout = setTimeout(function() { _throttleTimeout = void 0; }, ms); } }; } function cancelThrottle() { clearTimeout(_throttleTimeout); _throttleTimeout = void 0; } function scrollBy(el, x, y) { el.scrollLeft += x; el.scrollTop += y; } function clone(el) { var Polymer = window.Polymer; var $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); } else if ($) { return $(el).clone(true)[0]; } else { return el.cloneNode(true); } } function getChildContainingRectFromElement(container, options, ghostEl2) { var rect = {}; Array.from(container.children).forEach(function(child) { var _rect$left, _rect$top, _rect$right, _rect$bottom; if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl2) return; var childRect = getRect(child); rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left); rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top); rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right); rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom); }); rect.width = rect.right - rect.left; rect.height = rect.bottom - rect.top; rect.x = rect.left; rect.y = rect.top; return rect; } var expando = "Sortable" + new Date().getTime(); function AnimationStateManager() { var animationStates = [], animationCallbackId; return { captureAnimationState: function captureAnimationState() { animationStates = []; if (!this.options.animation) return; var children2 = [].slice.call(this.el.children); children2.forEach(function(child) { if (css(child, "display") === "none" || child === Sortable.ghost) return; animationStates.push({ target: child, rect: getRect(child) }); var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); if (child.thisAnimationDuration) { var childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; fromRect.left -= childMatrix.e; } } child.fromRect = fromRect; }); }, addAnimationState: function addAnimationState(state) { animationStates.push(state); }, removeAnimationState: function removeAnimationState(target) { animationStates.splice(indexOfObject(animationStates, { target }), 1); }, animateAll: function animateAll(callback) { var _this = this; if (!this.options.animation) { clearTimeout(animationCallbackId); if (typeof callback === "function") callback(); return; } var animating = false, animationTime = 0; animationStates.forEach(function(state) { var time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), prevFromRect = target.prevFromRect, prevToRect = target.prevToRect, animatingRect = state.rect, targetMatrix = matrix(target, true); if (targetMatrix) { toRect.top -= targetMatrix.f; toRect.left -= targetMatrix.e; } target.toRect = toRect; if (target.thisAnimationDuration) { if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); } } if (!isRectEqual(toRect, fromRect)) { target.prevFromRect = fromRect; target.prevToRect = toRect; if (!time) { time = _this.options.animation; } _this.animate(target, animatingRect, toRect, time); } if (time) { animating = true; animationTime = Math.max(animationTime, time); clearTimeout(target.animationResetTimer); target.animationResetTimer = setTimeout(function() { target.animationTime = 0; target.prevFromRect = null; target.fromRect = null; target.prevToRect = null; target.thisAnimationDuration = null; }, time); target.thisAnimationDuration = time; } }); clearTimeout(animationCallbackId); if (!animating) { if (typeof callback === "function") callback(); } else { animationCallbackId = setTimeout(function() { if (typeof callback === "function") callback(); }, animationTime); } animationStates = []; }, animate: function animate(target, currentRect, toRect, duration) { if (duration) { css(target, "transition", ""); css(target, "transform", ""); var elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), translateY = (currentRect.top - toRect.top) / (scaleY || 1); target.animatingX = !!translateX; target.animatingY = !!translateY; css(target, "transform", "translate3d(" + translateX + "px," + translateY + "px,0)"); this.forRepaintDummy = repaint(target); css(target, "transition", "transform " + duration + "ms" + (this.options.easing ? " " + this.options.easing : "")); css(target, "transform", "translate3d(0,0,0)"); typeof target.animated === "number" && clearTimeout(target.animated); target.animated = setTimeout(function() { css(target, "transition", ""); css(target, "transform", ""); target.animated = false; target.animatingX = false; target.animatingY = false; }, duration); } } }; } function repaint(target) { return target.offsetWidth; } function calculateRealTime(animatingRect, fromRect, toRect, options) { return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; } var plugins = []; var defaults = { initializeByDefault: true }; var PluginManager = { mount: function mount(plugin) { for (var option2 in defaults) { if (defaults.hasOwnProperty(option2) && !(option2 in plugin)) { plugin[option2] = defaults[option2]; } } plugins.forEach(function(p) { if (p.pluginName === plugin.pluginName) { throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once"); } }); plugins.push(plugin); }, pluginEvent: function pluginEvent(eventName, sortable, evt) { var _this = this; this.eventCanceled = false; evt.cancel = function() { _this.eventCanceled = true; }; var eventNameGlobal = eventName + "Global"; plugins.forEach(function(plugin) { if (!sortable[plugin.pluginName]) return; if (sortable[plugin.pluginName][eventNameGlobal]) { sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({ sortable }, evt)); } if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { sortable[plugin.pluginName][eventName](_objectSpread2({ sortable }, evt)); } }); }, initializePlugins: function initializePlugins(sortable, el, defaults2, options) { plugins.forEach(function(plugin) { var pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; var initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; sortable[pluginName] = initialized; _extends(defaults2, initialized.defaults); }); for (var option2 in sortable.options) { if (!sortable.options.hasOwnProperty(option2)) continue; var modified = this.modifyOption(sortable, option2, sortable.options[option2]); if (typeof modified !== "undefined") { sortable.options[option2] = modified; } } }, getEventProperties: function getEventProperties(name, sortable) { var eventProperties = {}; plugins.forEach(function(plugin) { if (typeof plugin.eventProperties !== "function") return; _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); }); return eventProperties; }, modifyOption: function modifyOption(sortable, name, value) { var modifiedValue; plugins.forEach(function(plugin) { if (!sortable[plugin.pluginName]) return; if (plugin.optionListeners && typeof plugin.optionListeners[name] === "function") { modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value); } }); return modifiedValue; } }; function dispatchEvent(_ref) { var sortable = _ref.sortable, rootEl2 = _ref.rootEl, name = _ref.name, targetEl = _ref.targetEl, cloneEl2 = _ref.cloneEl, toEl = _ref.toEl, fromEl = _ref.fromEl, oldIndex2 = _ref.oldIndex, newIndex2 = _ref.newIndex, oldDraggableIndex2 = _ref.oldDraggableIndex, newDraggableIndex2 = _ref.newDraggableIndex, originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, extraEventProperties = _ref.extraEventProperties; sortable = sortable || rootEl2 && rootEl2[expando]; if (!sortable) return; var evt, options = sortable.options, onName = "on" + name.charAt(0).toUpperCase() + name.substr(1); if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent(name, { bubbles: true, cancelable: true }); } else { evt = document.createEvent("Event"); evt.initEvent(name, true, true); } evt.to = toEl || rootEl2; evt.from = fromEl || rootEl2; evt.item = targetEl || rootEl2; evt.clone = cloneEl2; evt.oldIndex = oldIndex2; evt.newIndex = newIndex2; evt.oldDraggableIndex = oldDraggableIndex2; evt.newDraggableIndex = newDraggableIndex2; evt.originalEvent = originalEvent; evt.pullMode = putSortable2 ? putSortable2.lastPutMode : void 0; var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable)); for (var option2 in allEventProperties) { evt[option2] = allEventProperties[option2]; } if (rootEl2) { rootEl2.dispatchEvent(evt); } if (options[onName]) { options[onName].call(sortable, evt); } } var _excluded = ["evt"]; var pluginEvent2 = function pluginEvent3(eventName, sortable) { var _ref = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, originalEvent = _ref.evt, data = _objectWithoutProperties(_ref, _excluded); PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({ dragEl, parentEl, ghostEl, rootEl, nextEl, lastDownEl, cloneEl, cloneHidden, dragStarted: moved, putSortable, activeSortable: Sortable.active, originalEvent, oldIndex, oldDraggableIndex, newIndex, newDraggableIndex, hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, cloneNowHidden: function cloneNowHidden() { cloneHidden = true; }, cloneNowShown: function cloneNowShown() { cloneHidden = false; }, dispatchSortableEvent: function dispatchSortableEvent(name) { _dispatchEvent({ sortable, name, originalEvent }); } }, data)); }; function _dispatchEvent(info2) { dispatchEvent(_objectSpread2({ putSortable, cloneEl, targetEl: dragEl, rootEl, oldIndex, oldDraggableIndex, newIndex, newDraggableIndex }, info2)); } var dragEl; var parentEl; var ghostEl; var rootEl; var nextEl; var lastDownEl; var cloneEl; var cloneHidden; var oldIndex; var newIndex; var oldDraggableIndex; var newDraggableIndex; var activeGroup; var putSortable; var awaitingDragStarted = false; var ignoreNextClick = false; var sortables = []; var tapEvt; var touchEvt; var lastDx; var lastDy; var tapDistanceLeft; var tapDistanceTop; var moved; var lastTarget; var lastDirection; var pastFirstInvertThresh = false; var isCircumstantialInvert = false; var targetMoveDistance; var ghostRelativeParent; var ghostRelativeParentInitialScroll = []; var _silent = false; var savedInputChecked = []; var documentExists = typeof document !== "undefined"; var PositionGhostAbsolutely = IOS; var CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float"; var supportDraggable = documentExists && !ChromeForAndroid && !IOS && "draggable" in document.createElement("div"); var supportCssPointerEvents = function() { if (!documentExists) return; if (IE11OrLess) { return false; } var el = document.createElement("x"); el.style.cssText = "pointer-events:auto"; return el.style.pointerEvents === "auto"; }(); var _detectDirection = function _detectDirection2(el, options) { var elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width; if (elCSS.display === "flex") { return elCSS.flexDirection === "column" || elCSS.flexDirection === "column-reverse" ? "vertical" : "horizontal"; } if (elCSS.display === "grid") { return elCSS.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal"; } if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== "none") { var touchingSideChild2 = firstChildCSS["float"] === "left" ? "left" : "right"; return child2 && (secondChildCSS.clear === "both" || secondChildCSS.clear === touchingSideChild2) ? "vertical" : "horizontal"; } return child1 && (firstChildCSS.display === "block" || firstChildCSS.display === "flex" || firstChildCSS.display === "table" || firstChildCSS.display === "grid" || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none" || child2 && elCSS[CSSFloatProperty] === "none" && firstChildWidth + secondChildWidth > elWidth) ? "vertical" : "horizontal"; }; var _dragElInRowColumn = function _dragElInRowColumn2(dragRect, targetRect, vertical) { var dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height; return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2; }; var _detectNearestEmptySortable = function _detectNearestEmptySortable2(x, y) { var ret; sortables.some(function(sortable) { var threshold = sortable[expando].options.emptyInsertThreshold; if (!threshold || lastChild(sortable)) return; var rect = getRect(sortable), insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; if (insideHorizontally && insideVertically) { return ret = sortable; } }); return ret; }; var _prepareGroup = function _prepareGroup2(options) { function toFn(value, pull) { return function(to, from, dragEl2, evt) { var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; if (value == null && (pull || sameGroup)) { return true; } else if (value == null || value === false) { return false; } else if (pull && value === "clone") { return value; } else if (typeof value === "function") { return toFn(value(to, from, dragEl2, evt), pull)(to, from, dragEl2, evt); } else { var otherGroup = (pull ? to : from).options.group.name; return value === true || typeof value === "string" && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; } }; } var group = {}; var originalGroup = options.group; if (!originalGroup || _typeof(originalGroup) != "object") { originalGroup = { name: originalGroup }; } group.name = originalGroup.name; group.checkPull = toFn(originalGroup.pull, true); group.checkPut = toFn(originalGroup.put); group.revertClone = originalGroup.revertClone; options.group = group; }; var _hideGhostForTarget = function _hideGhostForTarget2() { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, "display", "none"); } }; var _unhideGhostForTarget = function _unhideGhostForTarget2() { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, "display", ""); } }; if (documentExists && !ChromeForAndroid) { document.addEventListener("click", function(evt) { if (ignoreNextClick) { evt.preventDefault(); evt.stopPropagation && evt.stopPropagation(); evt.stopImmediatePropagation && evt.stopImmediatePropagation(); ignoreNextClick = false; return false; } }, true); } var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent2(evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { var event = {}; for (var i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } } event.target = event.rootEl = nearest; event.preventDefault = void 0; event.stopPropagation = void 0; nearest[expando]._onDragOver(event); } } }; var _checkOutsideTargetEl = function _checkOutsideTargetEl2(evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } }; function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); } this.el = el; this.options = options = _extends({}, options); el[expando] = this; var defaults2 = { group: null, sort: true, disabled: false, store: null, handle: null, draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*", swapThreshold: 1, // percentage; 0 <= x <= 1 invertSwap: false, // invert always invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, direction: function direction() { return _detectDirection(el, this.options); }, ghostClass: "sortable-ghost", chosenClass: "sortable-chosen", dragClass: "sortable-drag", ignore: "a, img", filter: null, preventOnFilter: true, animation: 0, easing: null, setData: function setData(dataTransfer, dragEl2) { dataTransfer.setData("Text", dragEl2.textContent); }, dropBubble: false, dragoverBubble: false, dataIdAttr: "data-id", delay: 0, delayOnTouchOnly: false, touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: "sortable-fallback", fallbackOnBody: false, fallbackTolerance: 0, fallbackOffset: { x: 0, y: 0 }, // Disabled on Safari: #1571; Enabled on Safari IOS: #2244 supportPointer: Sortable.supportPointer !== false && "PointerEvent" in window && (!Safari || IOS), emptyInsertThreshold: 5 }; PluginManager.initializePlugins(this, el, defaults2); for (var name in defaults2) { !(name in options) && (options[name] = defaults2[name]); } _prepareGroup(options); for (var fn in this) { if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } this.nativeDraggable = options.forceFallback ? false : supportDraggable; if (this.nativeDraggable) { this.options.touchStartThreshold = 1; } if (options.supportPointer) { on(el, "pointerdown", this._onTapStart); } else { on(el, "mousedown", this._onTapStart); on(el, "touchstart", this._onTapStart); } if (this.nativeDraggable) { on(el, "dragover", this); on(el, "dragenter", this); } sortables.push(this.el); options.store && options.store.get && this.sort(options.store.get(this) || []); _extends(this, AnimationStateManager()); } Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, _isOutsideThisEl: function _isOutsideThisEl(target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, _getDirection: function _getDirection(evt, target) { return typeof this.options.direction === "function" ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; }, _onTapStart: function _onTapStart(evt) { if (!evt.cancelable) return; var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === "touch" && evt, target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, filter = options.filter; _saveInputCheckedState(el); if (dragEl) { return; } if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { return; } if (originalTarget.isContentEditable) { return; } if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === "SELECT") { return; } target = closest(target, options.draggable, el, false); if (target && target.animated) { return; } if (lastDownEl === target) { return; } oldIndex = index(target); oldDraggableIndex = index(target, options.draggable); if (typeof filter === "function") { if (filter.call(this, evt, target, this)) { _dispatchEvent({ sortable: _this, rootEl: originalTarget, name: "filter", targetEl: target, toEl: el, fromEl: el }); pluginEvent2("filter", _this, { evt }); preventOnFilter && evt.preventDefault(); return; } } else if (filter) { filter = filter.split(",").some(function(criteria) { criteria = closest(originalTarget, criteria.trim(), el, false); if (criteria) { _dispatchEvent({ sortable: _this, rootEl: criteria, name: "filter", targetEl: target, fromEl: el, toEl: el }); pluginEvent2("filter", _this, { evt }); return true; } }); if (filter) { preventOnFilter && evt.preventDefault(); return; } } if (options.handle && !closest(originalTarget, options.handle, el, false)) { return; } this._prepareDragStart(evt, touch, target); }, _prepareDragStart: function _prepareDragStart(evt, touch, target) { var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && target.parentNode === el) { var dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; Sortable.dragged = dragEl; tapEvt = { target: dragEl, clientX: (touch || evt).clientX, clientY: (touch || evt).clientY }; tapDistanceLeft = tapEvt.clientX - dragRect.left; tapDistanceTop = tapEvt.clientY - dragRect.top; this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; dragEl.style["will-change"] = "all"; dragStartFn = function dragStartFn2() { pluginEvent2("delayEnded", _this, { evt }); if (Sortable.eventCanceled) { _this._onDrop(); return; } _this._disableDelayedDragEvents(); if (!FireFox && _this.nativeDraggable) { dragEl.draggable = true; } _this._triggerDragStart(evt, touch); _dispatchEvent({ sortable: _this, name: "choose", originalEvent: evt }); toggleClass(dragEl, options.chosenClass, true); }; options.ignore.split(",").forEach(function(criteria) { find(dragEl, criteria.trim(), _disableDraggable); }); on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent); on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent); on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent); if (options.supportPointer) { on(ownerDocument, "pointerup", _this._onDrop); !this.nativeDraggable && on(ownerDocument, "pointercancel", _this._onDrop); } else { on(ownerDocument, "mouseup", _this._onDrop); on(ownerDocument, "touchend", _this._onDrop); on(ownerDocument, "touchcancel", _this._onDrop); } if (FireFox && this.nativeDraggable) { this.options.touchStartThreshold = 4; dragEl.draggable = true; } pluginEvent2("delayStart", this, { evt }); if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { if (Sortable.eventCanceled) { this._onDrop(); return; } if (options.supportPointer) { on(ownerDocument, "pointerup", _this._disableDelayedDrag); on(ownerDocument, "pointercancel", _this._disableDelayedDrag); } else { on(ownerDocument, "mouseup", _this._disableDelayedDrag); on(ownerDocument, "touchend", _this._disableDelayedDrag); on(ownerDocument, "touchcancel", _this._disableDelayedDrag); } on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler); on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler); options.supportPointer && on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(e) { var touch = e.touches ? e.touches[0] : e; if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { this._disableDelayedDrag(); } }, _disableDelayedDrag: function _disableDelayedDrag() { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, _disableDelayedDragEvents: function _disableDelayedDragEvents() { var ownerDocument = this.el.ownerDocument; off(ownerDocument, "mouseup", this._disableDelayedDrag); off(ownerDocument, "touchend", this._disableDelayedDrag); off(ownerDocument, "touchcancel", this._disableDelayedDrag); off(ownerDocument, "pointerup", this._disableDelayedDrag); off(ownerDocument, "pointercancel", this._disableDelayedDrag); off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler); off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler); off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler); }, _triggerDragStart: function _triggerDragStart(evt, touch) { touch = touch || evt.pointerType == "touch" && evt; if (!this.nativeDraggable || touch) { if (this.options.supportPointer) { on(document, "pointermove", this._onTouchMove); } else if (touch) { on(document, "touchmove", this._onTouchMove); } else { on(document, "mousemove", this._onTouchMove); } } else { on(dragEl, "dragend", this); on(rootEl, "dragstart", this._onDragStart); } try { if (document.selection) { _nextTick(function() { document.selection.empty(); }); } else { window.getSelection().removeAllRanges(); } } catch (err) { } }, _dragStarted: function _dragStarted(fallback, evt) { awaitingDragStarted = false; if (rootEl && dragEl) { pluginEvent2("dragStarted", this, { evt }); if (this.nativeDraggable) { on(document, "dragover", _checkOutsideTargetEl); } var options = this.options; !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); Sortable.active = this; fallback && this._appendGhost(); _dispatchEvent({ sortable: this, name: "start", originalEvent: evt }); } else { this._nulling(); } }, _emulateDragOver: function _emulateDragOver() { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); var parent = target; while (target && target.shadowRoot) { target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); if (target === parent) break; parent = target; } dragEl.parentNode[expando]._isOutsideThisEl(target); if (parent) { do { if (parent[expando]) { var inserted = void 0; inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target, rootEl: parent }); if (inserted && !this.options.dragoverBubble) { break; } } target = parent; } while (parent = getParentOrHost(parent)); } _unhideGhostForTarget(); } }, _onTouchMove: function _onTouchMove(evt) { if (tapEvt) { var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, ghostMatrix = ghostEl && matrix(ghostEl, true), scaleX = ghostEl && ghostMatrix && ghostMatrix.a, scaleY = ghostEl && ghostMatrix && ghostMatrix.d, relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); if (!Sortable.active && !awaitingDragStarted) { if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) { return; } this._onDragStart(evt, true); } if (ghostEl) { if (ghostMatrix) { ghostMatrix.e += dx - (lastDx || 0); ghostMatrix.f += dy - (lastDy || 0); } else { ghostMatrix = { a: 1, b: 0, c: 0, d: 1, e: dx, f: dy }; } var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); css(ghostEl, "webkitTransform", cssMatrix); css(ghostEl, "mozTransform", cssMatrix); css(ghostEl, "msTransform", cssMatrix); css(ghostEl, "transform", cssMatrix); lastDx = dx; lastDy = dy; touchEvt = touch; } evt.cancelable && evt.preventDefault(); } }, _appendGhost: function _appendGhost() { if (!ghostEl) { var container = this.options.fallbackOnBody ? document.body : rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; if (PositionGhostAbsolutely) { ghostRelativeParent = container; while (css(ghostRelativeParent, "position") === "static" && css(ghostRelativeParent, "transform") === "none" && ghostRelativeParent !== document) { ghostRelativeParent = ghostRelativeParent.parentNode; } if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) { if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement(); rect.top += ghostRelativeParent.scrollTop; rect.left += ghostRelativeParent.scrollLeft; } else { ghostRelativeParent = getWindowScrollingElement(); } ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent); } ghostEl = dragEl.cloneNode(true); toggleClass(ghostEl, options.ghostClass, false); toggleClass(ghostEl, options.fallbackClass, true); toggleClass(ghostEl, options.dragClass, true); css(ghostEl, "transition", ""); css(ghostEl, "transform", ""); css(ghostEl, "box-sizing", "border-box"); css(ghostEl, "margin", 0); css(ghostEl, "top", rect.top); css(ghostEl, "left", rect.left); css(ghostEl, "width", rect.width); css(ghostEl, "height", rect.height); css(ghostEl, "opacity", "0.8"); css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"); css(ghostEl, "zIndex", "100000"); css(ghostEl, "pointerEvents", "none"); Sortable.ghost = ghostEl; container.appendChild(ghostEl); css(ghostEl, "transform-origin", tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + "% " + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + "%"); } }, _onDragStart: function _onDragStart(evt, fallback) { var _this = this; var dataTransfer = evt.dataTransfer; var options = _this.options; pluginEvent2("dragStart", this, { evt }); if (Sortable.eventCanceled) { this._onDrop(); return; } pluginEvent2("setupClone", this); if (!Sortable.eventCanceled) { cloneEl = clone(dragEl); cloneEl.removeAttribute("id"); cloneEl.draggable = false; cloneEl.style["will-change"] = ""; this._hideClone(); toggleClass(cloneEl, this.options.chosenClass, false); Sortable.clone = cloneEl; } _this.cloneId = _nextTick(function() { pluginEvent2("clone", _this); if (Sortable.eventCanceled) return; if (!_this.options.removeCloneOnHide) { rootEl.insertBefore(cloneEl, dragEl); } _this._hideClone(); _dispatchEvent({ sortable: _this, name: "clone" }); }); !fallback && toggleClass(dragEl, options.dragClass, true); if (fallback) { ignoreNextClick = true; _this._loopId = setInterval(_this._emulateDragOver, 50); } else { off(document, "mouseup", _this._onDrop); off(document, "touchend", _this._onDrop); off(document, "touchcancel", _this._onDrop); if (dataTransfer) { dataTransfer.effectAllowed = "move"; options.setData && options.setData.call(_this, dataTransfer, dragEl); } on(document, "drop", _this); css(dragEl, "transform", "translateZ(0)"); } awaitingDragStarted = true; _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt)); on(document, "selectstart", _this); moved = true; window.getSelection().removeAllRanges(); if (Safari) { css(document.body, "user-select", "none"); } }, // Returns true - if no further action is needed (either inserted or another condition) _onDragOver: function _onDragOver(evt) { var el = this.el, target = evt.target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = activeGroup === group, canSort = options.sort, fromSortable = putSortable || activeSortable, vertical, _this = this, completedFired = false; if (_silent) return; function dragOverEvent(name, extra) { pluginEvent2(name, _this, _objectSpread2({ evt, isOwner, axis: vertical ? "vertical" : "horizontal", revert, dragRect, targetRect, canSort, fromSortable, target, completed, onMove: function onMove(target2, after2) { return _onMove(rootEl, el, dragEl, dragRect, target2, getRect(target2), evt, after2); }, changed }, extra)); } function capture() { dragOverEvent("dragOverAnimationCapture"); _this.captureAnimationState(); if (_this !== fromSortable) { fromSortable.captureAnimationState(); } } function completed(insertion) { dragOverEvent("dragOverCompleted", { insertion }); if (insertion) { if (isOwner) { activeSortable._hideClone(); } else { activeSortable._showClone(_this); } if (_this !== fromSortable) { toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); toggleClass(dragEl, options.ghostClass, true); } if (putSortable !== _this && _this !== Sortable.active) { putSortable = _this; } else if (_this === Sortable.active && putSortable) { putSortable = null; } if (fromSortable === _this) { _this._ignoreWhileAnimating = target; } _this.animateAll(function() { dragOverEvent("dragOverAnimationComplete"); _this._ignoreWhileAnimating = null; }); if (_this !== fromSortable) { fromSortable.animateAll(); fromSortable._ignoreWhileAnimating = null; } } if (target === dragEl && !dragEl.animated || target === el && !target.animated) { lastTarget = null; } if (!options.dragoverBubble && !evt.rootEl && target !== document) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); !insertion && nearestEmptyInsertDetectEvent(evt); } !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); return completedFired = true; } function changed() { newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); _dispatchEvent({ sortable: _this, name: "change", toEl: el, newIndex, newDraggableIndex, originalEvent: evt }); } if (evt.preventDefault !== void 0) { evt.cancelable && evt.preventDefault(); } target = closest(target, options.draggable, el, true); dragOverEvent("dragOver"); if (Sortable.eventCanceled) return completedFired; if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) { return completed(false); } ignoreNextClick = false; if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) { vertical = this._getDirection(evt, target) === "vertical"; dragRect = getRect(dragEl); dragOverEvent("dragOverValid"); if (Sortable.eventCanceled) return completedFired; if (revert) { parentEl = rootEl; capture(); this._hideClone(); dragOverEvent("revert"); if (!Sortable.eventCanceled) { if (nextEl) { rootEl.insertBefore(dragEl, nextEl); } else { rootEl.appendChild(dragEl); } } return completed(true); } var elLastChild = lastChild(el, options.draggable); if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { if (elLastChild === dragEl) { return completed(false); } if (elLastChild && el === evt.target) { target = elLastChild; } if (target) { targetRect = getRect(target); } if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { capture(); if (elLastChild && elLastChild.nextSibling) { el.insertBefore(dragEl, elLastChild.nextSibling); } else { el.appendChild(dragEl); } parentEl = el; changed(); return completed(true); } } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) { var firstChild = getChild(el, 0, options, true); if (firstChild === dragEl) { return completed(false); } target = firstChild; targetRect = getRect(target); if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { capture(); el.insertBefore(dragEl, firstChild); parentEl = el; changed(); return completed(true); } } else if (target.parentNode === el) { targetRect = getRect(target); var direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), side1 = vertical ? "top" : "left", scrolledPastTop = isScrolledPast(target, "top", "top") || isScrolledPast(dragEl, "top", "top"), scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0; if (lastTarget !== target) { targetBeforeFirstSwap = targetRect[side1]; pastFirstInvertThresh = false; isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel; } direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); var sibling; if (direction !== 0) { var dragIndex = index(dragEl); do { dragIndex -= direction; sibling = parentEl.children[dragIndex]; } while (sibling && (css(sibling, "display") === "none" || sibling === ghostEl)); } if (direction === 0 || sibling === target) { return completed(false); } lastTarget = target; lastDirection = direction; var nextSibling = target.nextElementSibling, after = false; after = direction === 1; var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { after = moveVector === 1; } _silent = true; setTimeout(_unsilent, 30); capture(); if (after && !nextSibling) { el.appendChild(dragEl); } else { target.parentNode.insertBefore(dragEl, after ? nextSibling : target); } if (scrolledPastTop) { scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop); } parentEl = dragEl.parentNode; if (targetBeforeFirstSwap !== void 0 && !isCircumstantialInvert) { targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]); } changed(); return completed(true); } } if (el.contains(dragEl)) { return completed(false); } } return false; }, _ignoreWhileAnimating: null, _offMoveEvents: function _offMoveEvents() { off(document, "mousemove", this._onTouchMove); off(document, "touchmove", this._onTouchMove); off(document, "pointermove", this._onTouchMove); off(document, "dragover", nearestEmptyInsertDetectEvent); off(document, "mousemove", nearestEmptyInsertDetectEvent); off(document, "touchmove", nearestEmptyInsertDetectEvent); }, _offUpEvents: function _offUpEvents() { var ownerDocument = this.el.ownerDocument; off(ownerDocument, "mouseup", this._onDrop); off(ownerDocument, "touchend", this._onDrop); off(ownerDocument, "pointerup", this._onDrop); off(ownerDocument, "pointercancel", this._onDrop); off(ownerDocument, "touchcancel", this._onDrop); off(document, "selectstart", this); }, _onDrop: function _onDrop(evt) { var el = this.el, options = this.options; newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); pluginEvent2("drop", this, { evt }); parentEl = dragEl && dragEl.parentNode; newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); if (Sortable.eventCanceled) { this._nulling(); return; } awaitingDragStarted = false; isCircumstantialInvert = false; pastFirstInvertThresh = false; clearInterval(this._loopId); clearTimeout(this._dragStartTimer); _cancelNextTick(this.cloneId); _cancelNextTick(this._dragStartId); if (this.nativeDraggable) { off(document, "drop", this); off(el, "dragstart", this._onDragStart); } this._offMoveEvents(); this._offUpEvents(); if (Safari) { css(document.body, "user-select", ""); } css(dragEl, "transform", ""); if (evt) { if (moved) { evt.cancelable && evt.preventDefault(); !options.dropBubble && evt.stopPropagation(); } ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== "clone") { cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { off(dragEl, "dragend", this); } _disableDraggable(dragEl); dragEl.style["will-change"] = ""; if (moved && !awaitingDragStarted) { toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); } toggleClass(dragEl, this.options.chosenClass, false); _dispatchEvent({ sortable: this, name: "unchoose", toEl: parentEl, newIndex: null, newDraggableIndex: null, originalEvent: evt }); if (rootEl !== parentEl) { if (newIndex >= 0) { _dispatchEvent({ rootEl: parentEl, name: "add", toEl: parentEl, fromEl: rootEl, originalEvent: evt }); _dispatchEvent({ sortable: this, name: "remove", toEl: parentEl, originalEvent: evt }); _dispatchEvent({ rootEl: parentEl, name: "sort", toEl: parentEl, fromEl: rootEl, originalEvent: evt }); _dispatchEvent({ sortable: this, name: "sort", toEl: parentEl, originalEvent: evt }); } putSortable && putSortable.save(); } else { if (newIndex !== oldIndex) { if (newIndex >= 0) { _dispatchEvent({ sortable: this, name: "update", toEl: parentEl, originalEvent: evt }); _dispatchEvent({ sortable: this, name: "sort", toEl: parentEl, originalEvent: evt }); } } } if (Sortable.active) { if (newIndex == null || newIndex === -1) { newIndex = oldIndex; newDraggableIndex = oldDraggableIndex; } _dispatchEvent({ sortable: this, name: "end", toEl: parentEl, originalEvent: evt }); this.save(); } } } this._nulling(); }, _nulling: function _nulling() { pluginEvent2("nulling", this); rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; savedInputChecked.forEach(function(el) { el.checked = true; }); savedInputChecked.length = lastDx = lastDy = 0; }, handleEvent: function handleEvent(evt) { switch (evt.type) { case "drop": case "dragend": this._onDrop(evt); break; case "dragenter": case "dragover": if (dragEl) { this._onDragOver(evt); _globalDragOver(evt); } break; case "selectstart": evt.preventDefault(); break; } }, /** * Serializes the item into an array of string. * @returns {String[]} */ toArray: function toArray() { var order = [], el, children2 = this.el.children, i = 0, n = children2.length, options = this.options; for (; i < n; i++) { el = children2[i]; if (closest(el, options.draggable, this.el, false)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } } return order; }, /** * Sorts the elements according to the array. * @param {String[]} order order of the items */ sort: function sort(order, useAnimation) { var items = {}, rootEl2 = this.el; this.toArray().forEach(function(id, i) { var el = rootEl2.children[i]; if (closest(el, this.options.draggable, rootEl2, false)) { items[id] = el; } }, this); useAnimation && this.captureAnimationState(); order.forEach(function(id) { if (items[id]) { rootEl2.removeChild(items[id]); rootEl2.appendChild(items[id]); } }); useAnimation && this.animateAll(); }, /** * Save the current sorting */ save: function save() { var store = this.options.store; store && store.set && store.set(this); }, /** * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. * @param {HTMLElement} el * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ closest: function closest$1(el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, /** * Set/get option * @param {string} name * @param {*} [value] * @returns {*} */ option: function option(name, value) { var options = this.options; if (value === void 0) { return options[name]; } else { var modifiedValue = PluginManager.modifyOption(this, name, value); if (typeof modifiedValue !== "undefined") { options[name] = modifiedValue; } else { options[name] = value; } if (name === "group") { _prepareGroup(options); } } }, /** * Destroy */ destroy: function destroy() { pluginEvent2("destroy", this); var el = this.el; el[expando] = null; off(el, "mousedown", this._onTapStart); off(el, "touchstart", this._onTapStart); off(el, "pointerdown", this._onTapStart); if (this.nativeDraggable) { off(el, "dragover", this); off(el, "dragenter", this); } Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function(el2) { el2.removeAttribute("draggable"); }); this._onDrop(); this._disableDelayedDragEvents(); sortables.splice(sortables.indexOf(this.el), 1); this.el = el = null; }, _hideClone: function _hideClone() { if (!cloneHidden) { pluginEvent2("hideClone", this); if (Sortable.eventCanceled) return; css(cloneEl, "display", "none"); if (this.options.removeCloneOnHide && cloneEl.parentNode) { cloneEl.parentNode.removeChild(cloneEl); } cloneHidden = true; } }, _showClone: function _showClone(putSortable2) { if (putSortable2.lastPutMode !== "clone") { this._hideClone(); return; } if (cloneHidden) { pluginEvent2("showClone", this); if (Sortable.eventCanceled) return; if (dragEl.parentNode == rootEl && !this.options.group.revertClone) { rootEl.insertBefore(cloneEl, dragEl); } else if (nextEl) { rootEl.insertBefore(cloneEl, nextEl); } else { rootEl.appendChild(cloneEl); } if (this.options.group.revertClone) { this.animate(dragEl, cloneEl); } css(cloneEl, "display", ""); cloneHidden = false; } } }; function _globalDragOver(evt) { if (evt.dataTransfer) { evt.dataTransfer.dropEffect = "move"; } evt.cancelable && evt.preventDefault(); } function _onMove(fromEl, toEl, dragEl2, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; if (window.CustomEvent && !IE11OrLess && !Edge) { evt = new CustomEvent("move", { bubbles: true, cancelable: true }); } else { evt = document.createEvent("Event"); evt.initEvent("move", true, true); } evt.to = toEl; evt.from = fromEl; evt.dragged = dragEl2; evt.draggedRect = dragRect; evt.related = targetEl || toEl; evt.relatedRect = targetRect || getRect(toEl); evt.willInsertAfter = willInsertAfter; evt.originalEvent = originalEvent; fromEl.dispatchEvent(evt); if (onMoveFn) { retVal = onMoveFn.call(sortable, evt, originalEvent); } return retVal; } function _disableDraggable(el) { el.draggable = false; } function _unsilent() { _silent = false; } function _ghostIsFirst(evt, vertical, sortable) { var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true)); var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl); var spacer = 10; return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left; } function _ghostIsLast(evt, vertical, sortable) { var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable)); var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl); var spacer = 10; return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top; } function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { var mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, invert = false; if (!invertSwap) { if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) { pastFirstInvertThresh = true; } if (!pastFirstInvertThresh) { if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance : mouseOnAxis > targetS2 - targetMoveDistance) { return -lastDirection; } } else { invert = true; } } else { if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) { return _getInsertDirection(target); } } } invert = invert || invertSwap; if (invert) { if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) { return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1; } } return 0; } function _getInsertDirection(target) { if (index(dragEl) < index(target)) { return 1; } else { return -1; } } function _generateId(el) { var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; while (i--) { sum += str.charCodeAt(i); } return sum.toString(36); } function _saveInputCheckedState(root) { savedInputChecked.length = 0; var inputs = root.getElementsByTagName("input"); var idx = inputs.length; while (idx--) { var el = inputs[idx]; el.checked && savedInputChecked.push(el); } } function _nextTick(fn) { return setTimeout(fn, 0); } function _cancelNextTick(id) { return clearTimeout(id); } if (documentExists) { on(document, "touchmove", function(evt) { if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { evt.preventDefault(); } }); } Sortable.utils = { on, off, css, find, is: function is(el, selector) { return !!closest(el, selector, el, false); }, extend, throttle, closest, toggleClass, clone, index, nextTick: _nextTick, cancelNextTick: _cancelNextTick, detectDirection: _detectDirection, getChild, expando }; Sortable.get = function(element2) { return element2[expando]; }; Sortable.mount = function() { for (var _len = arguments.length, plugins2 = new Array(_len), _key = 0; _key < _len; _key++) { plugins2[_key] = arguments[_key]; } if (plugins2[0].constructor === Array) plugins2 = plugins2[0]; plugins2.forEach(function(plugin) { if (!plugin.prototype || !plugin.prototype.constructor) { throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); } if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils); PluginManager.mount(plugin); }); }; Sortable.create = function(el, options) { return new Sortable(el, options); }; Sortable.version = version; var autoScrolls = []; var scrollEl; var scrollRootEl; var scrolling = false; var lastAutoScrollX; var lastAutoScrollY; var touchEvt$1; var pointerElemChangedInterval; function AutoScrollPlugin() { function AutoScroll() { this.defaults = { scroll: true, forceAutoScrollFallback: false, scrollSensitivity: 30, scrollSpeed: 10, bubbleScroll: true }; for (var fn in this) { if (fn.charAt(0) === "_" && typeof this[fn] === "function") { this[fn] = this[fn].bind(this); } } } AutoScroll.prototype = { dragStarted: function dragStarted(_ref) { var originalEvent = _ref.originalEvent; if (this.sortable.nativeDraggable) { on(document, "dragover", this._handleAutoScroll); } else { if (this.options.supportPointer) { on(document, "pointermove", this._handleFallbackAutoScroll); } else if (originalEvent.touches) { on(document, "touchmove", this._handleFallbackAutoScroll); } else { on(document, "mousemove", this._handleFallbackAutoScroll); } } }, dragOverCompleted: function dragOverCompleted(_ref2) { var originalEvent = _ref2.originalEvent; if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, drop: function drop3() { if (this.sortable.nativeDraggable) { off(document, "dragover", this._handleAutoScroll); } else { off(document, "pointermove", this._handleFallbackAutoScroll); off(document, "touchmove", this._handleFallbackAutoScroll); off(document, "mousemove", this._handleFallbackAutoScroll); } clearPointerElemChangedInterval(); clearAutoScrolls(); cancelThrottle(); }, nulling: function nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; autoScrolls.length = 0; }, _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, _handleAutoScroll: function _handleAutoScroll(evt, fallback) { var _this = this; var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, elem = document.elementFromPoint(x, y); touchEvt$1 = evt; if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) { autoScroll(evt, this.options, elem, fallback); var ogElemScroller = getParentAutoScrollElement(elem, true); if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { pointerElemChangedInterval && clearPointerElemChangedInterval(); pointerElemChangedInterval = setInterval(function() { var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } autoScroll(evt, _this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; } } else { if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) { clearAutoScrolls(); return; } autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); } } }; return _extends(AutoScroll, { pluginName: "scroll", initializeByDefault: true }); } function clearAutoScrolls() { autoScrolls.forEach(function(autoScroll2) { clearInterval(autoScroll2.pid); }); autoScrolls = []; } function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } var autoScroll = throttle(function(evt, options, rootEl2, isFallback) { if (!options.scroll) return; var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, sens = options.scrollSensitivity, speed = options.scrollSpeed, winScroller = getWindowScrollingElement(); var scrollThisInstance = false, scrollCustomFn; if (scrollRootEl !== rootEl2) { scrollRootEl = rootEl2; clearAutoScrolls(); scrollEl = options.scroll; scrollCustomFn = options.scrollFn; if (scrollEl === true) { scrollEl = getParentAutoScrollElement(rootEl2, true); } } var layersOut = 0; var currentParent = scrollEl; do { var el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, left = rect.left, right = rect.right, width = rect.width, height = rect.height, canScrollX = void 0, canScrollY = void 0, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), scrollPosX = el.scrollLeft, scrollPosY = el.scrollTop; if (el === winScroller) { canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll" || elCSS.overflowX === "visible"); canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll" || elCSS.overflowY === "visible"); } else { canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll"); canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll"); } var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { for (var i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } } } if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { autoScrolls[layersOut].el = el; autoScrolls[layersOut].vx = vx; autoScrolls[layersOut].vy = vy; clearInterval(autoScrolls[layersOut].pid); if (vx != 0 || vy != 0) { scrollThisInstance = true; autoScrolls[layersOut].pid = setInterval(function() { if (isFallback && this.layer === 0) { Sortable.active._onTouchMove(touchEvt$1); } var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; if (typeof scrollCustomFn === "function") { if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== "continue") { return; } } scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY); }.bind({ layer: layersOut }), 24); } } layersOut++; } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false))); scrolling = scrollThisInstance; }, 30); var drop = function drop2(_ref) { var originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, dragEl2 = _ref.dragEl, activeSortable = _ref.activeSortable, dispatchSortableEvent = _ref.dispatchSortableEvent, hideGhostForTarget = _ref.hideGhostForTarget, unhideGhostForTarget = _ref.unhideGhostForTarget; if (!originalEvent) return; var toSortable = putSortable2 || activeSortable; hideGhostForTarget(); var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; var target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); if (toSortable && !toSortable.el.contains(target)) { dispatchSortableEvent("spill"); this.onSpill({ dragEl: dragEl2, putSortable: putSortable2 }); } }; function Revert() { } Revert.prototype = { startIndex: null, dragStart: function dragStart(_ref2) { var oldDraggableIndex2 = _ref2.oldDraggableIndex; this.startIndex = oldDraggableIndex2; }, onSpill: function onSpill(_ref3) { var dragEl2 = _ref3.dragEl, putSortable2 = _ref3.putSortable; this.sortable.captureAnimationState(); if (putSortable2) { putSortable2.captureAnimationState(); } var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl2, nextSibling); } else { this.sortable.el.appendChild(dragEl2); } this.sortable.animateAll(); if (putSortable2) { putSortable2.animateAll(); } }, drop }; _extends(Revert, { pluginName: "revertOnSpill" }); function Remove() { } Remove.prototype = { onSpill: function onSpill2(_ref4) { var dragEl2 = _ref4.dragEl, putSortable2 = _ref4.putSortable; var parentSortable = putSortable2 || this.sortable; parentSortable.captureAnimationState(); dragEl2.parentNode && dragEl2.parentNode.removeChild(dragEl2); parentSortable.animateAll(); }, drop }; _extends(Remove, { pluginName: "removeOnSpill" }); Sortable.mount(new AutoScrollPlugin()); Sortable.mount(Remove, Revert); var sortable_esm_default = Sortable; // src/LocalGPTSettingTab.ts var SEPARATOR = "\u2702\uFE0F"; function escapeTitle(title) { if (!title) { return ""; } return title.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); } var LocalGPTSettingTab = class extends import_obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.editEnabled = false; this.modelsOptions = {}; this.changingOrder = false; // Controls visibility of the Advanced settings section this.isAdvancedMode = false; // Guard to require a second click before destructive reset this.isConfirmingReset = false; this.plugin = plugin; } async display() { const { containerEl } = this; containerEl.empty(); try { const aiProvidersWaiter = await (0, import_sdk.waitForAI)(); const aiProvidersResponse = await aiProvidersWaiter.promise; const providers = aiProvidersResponse.providers.reduce( (acc, provider) => ({ ...acc, [provider.id]: provider.model ? [provider.name, provider.model].join(" ~ ") : provider.name }), { "": "" } ); new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.mainProvider")).setClass("ai-providers-select").addDropdown( (dropdown) => dropdown.addOptions(providers).setValue(String(this.plugin.settings.aiProviders.main)).onChange(async (value) => { this.plugin.settings.aiProviders.main = value; this.plugin.actionPaletteProviderId = value; await this.plugin.saveSettings(); await this.display(); }) ); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.embeddingProvider")).setDesc(I18n.t("settings.embeddingProviderDesc")).setClass("ai-providers-select").addDropdown( (dropdown) => dropdown.addOptions(providers).setValue( String(this.plugin.settings.aiProviders.embedding) ).onChange(async (value) => { this.plugin.settings.aiProviders.embedding = value; await this.plugin.saveSettings(); await this.display(); }) ); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.visionProvider")).setClass("ai-providers-select").setDesc(I18n.t("settings.visionProviderDesc")).addDropdown( (dropdown) => dropdown.addOptions(providers).setValue( String(this.plugin.settings.aiProviders.vision) ).onChange(async (value) => { this.plugin.settings.aiProviders.vision = value; await this.plugin.saveSettings(); await this.display(); }) ); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.creativity")).setDesc("").addDropdown((dropdown) => { dropdown.addOption("", I18n.t("settings.creativityNone")).addOptions({ low: I18n.t("settings.creativityLow"), medium: I18n.t("settings.creativityMedium"), high: I18n.t("settings.creativityHigh") }).setValue( String(this.plugin.settings.defaults.creativity) || "" ).onChange(async (value) => { this.plugin.settings.defaults.creativity = value; await this.plugin.saveSettings(); await this.display(); }); }); } catch (error) { console.error(error); } const editingAction = this.editExistingAction || { name: "", prompt: "", temperature: void 0, system: "", replace: false }; const sharingActionsMapping = { name: "Name: ", system: "System: ", prompt: "Prompt: ", replace: "Replace: ", model: "Model: " }; containerEl.createEl("div", { cls: "local-gpt-settings-separator" }); containerEl.createEl("h3", { text: I18n.t("settings.actions") }); if (!this.editEnabled) { const quickAdd = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.quickAdd")).setDesc("").addText((text2) => { text2.inputEl.style.minWidth = "100%"; text2.setPlaceholder(I18n.t("settings.quickAddPlaceholder")); text2.onChange(async (value) => { const quickAddAction = value.split(SEPARATOR).map((part) => part.trim()).reduce((acc, part) => { const foundMatchKey = Object.keys( sharingActionsMapping ).find((key) => { return part.startsWith( sharingActionsMapping[key] ); }); if (foundMatchKey) { acc[foundMatchKey] = part.substring( sharingActionsMapping[foundMatchKey].length, part.length ); } return acc; }, {}); if (quickAddAction.name) { await this.addNewAction(quickAddAction); text2.setValue(""); this.display(); } }); }); quickAdd.descEl.innerHTML = I18n.t("settings.quickAddDesc"); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.addNewManually")).addButton( (button) => button.setIcon("plus").onClick(async () => { this.editEnabled = true; this.editExistingAction = void 0; this.display(); }) ); } else { new import_obsidian.Setting(containerEl).setName(I18n.t("settings.actionName")).addText((text2) => { (editingAction == null ? void 0 : editingAction.name) && text2.setValue(editingAction.name); text2.inputEl.style.minWidth = "100%"; text2.setPlaceholder( I18n.t("settings.actionNamePlaceholder") ); text2.onChange(async (value) => { editingAction.name = value; }); }); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.systemPrompt")).setDesc(I18n.t("settings.systemPromptDesc")).addTextArea((text2) => { (editingAction == null ? void 0 : editingAction.system) && text2.setValue(editingAction.system); text2.inputEl.style.minWidth = "100%"; text2.inputEl.style.minHeight = "6em"; text2.inputEl.style.resize = "vertical"; text2.setPlaceholder( I18n.t("settings.systemPromptPlaceholder") ); text2.onChange(async (value) => { editingAction.system = value; }); }); const promptSetting = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.prompt")).setDesc("").addTextArea((text2) => { (editingAction == null ? void 0 : editingAction.prompt) && text2.setValue(editingAction.prompt); text2.inputEl.style.minWidth = "100%"; text2.inputEl.style.minHeight = "6em"; text2.inputEl.style.resize = "vertical"; text2.setPlaceholder(""); text2.onChange(async (value) => { editingAction.prompt = value; }); }); promptSetting.descEl.innerHTML = I18n.t("settings.promptDesc"); new import_obsidian.Setting(containerEl).setName(I18n.t("settings.replaceSelected")).setDesc(I18n.t("settings.replaceSelectedDesc")).addToggle((component) => { (editingAction == null ? void 0 : editingAction.replace) && component.setValue(editingAction.replace); component.onChange(async (value) => { editingAction.replace = value; }); }); const actionButtonsRow = new import_obsidian.Setting(containerEl).setName(""); if (this.editExistingAction) { actionButtonsRow.addButton((button) => { button.buttonEl.style.marginRight = "2em"; button.setButtonText(I18n.t("settings.remove")).onClick(async () => { if (!button.buttonEl.hasClass("mod-warning")) { button.setClass("mod-warning"); return; } this.plugin.settings.actions = this.plugin.settings.actions.filter( (innerAction) => innerAction !== editingAction ); await this.plugin.saveSettings(); this.editExistingAction = void 0; this.editEnabled = false; this.display(); }); }); } actionButtonsRow.addButton((button) => { button.setButtonText(I18n.t("settings.close")).onClick(async () => { this.editEnabled = false; this.editExistingAction = void 0; this.display(); }); }).addButton( (button) => button.setCta().setButtonText(I18n.t("settings.save")).onClick(async () => { if (!editingAction.name) { new import_obsidian.Notice( I18n.t("notices.actionNameRequired") ); return; } if (!this.editExistingAction) { if (this.plugin.settings.actions.find( (action) => action.name === editingAction.name )) { new import_obsidian.Notice( I18n.t("notices.actionNameExists", { name: editingAction.name }) ); return; } await this.addNewAction(editingAction); } else { if (this.plugin.settings.actions.filter( (action) => action.name === editingAction.name ).length > 1) { new import_obsidian.Notice( I18n.t("notices.actionNameExists", { name: editingAction.name }) ); return; } const index2 = this.plugin.settings.actions.findIndex( (innerAction) => innerAction === editingAction ); this.plugin.settings.actions[index2] = editingAction; } await this.plugin.saveSettings(); this.editEnabled = false; this.editExistingAction = void 0; this.display(); }) ); } containerEl.createEl("h4", { text: I18n.t("settings.actionsList") }); const actionsContainer = containerEl.createDiv( "local-gpt-actions-container" ); this.plugin.settings.actions.forEach((action, actionIndex) => { const sharingString = [ action.name && `${sharingActionsMapping.name}${action.name}`, action.system && `${sharingActionsMapping.system}${action.system}`, action.prompt && `${sharingActionsMapping.prompt}${action.prompt}`, action.replace && `${sharingActionsMapping.replace}${action.replace}` ].filter(Boolean).join(` ${SEPARATOR} `); if (!this.changingOrder) { const actionRow = new import_obsidian.Setting(actionsContainer).setName(action.name).setDesc("").addButton( (button) => button.setIcon("copy").onClick(async () => { navigator.clipboard.writeText(sharingString); new import_obsidian.Notice(I18n.t("notices.copied")); }) ).addButton( (button) => button.setButtonText("Edit").onClick(async () => { this.editEnabled = true; this.editExistingAction = this.plugin.settings.actions.find( (innerAction) => innerAction.name == action.name ); this.display(); }) ); const systemTitle = escapeTitle(action.system); const promptTitle = escapeTitle(action.prompt); actionRow.descEl.innerHTML = [ action.system && `
${sharingActionsMapping.system}${action.system}
`, action.prompt && `
${sharingActionsMapping.prompt}${action.prompt}
` ].filter(Boolean).join("
\n"); } else { const actionRow = new import_obsidian.Setting(actionsContainer).setName(action.name).setDesc(""); actionRow.settingEl.addClass("local-gpt-action-row"); const handle = actionRow.settingEl.createDiv( "local-gpt-drag-handle" ); (0, import_obsidian.setIcon)(handle, "grip-vertical"); actionRow.settingEl.prepend(handle); } }); if (this.changingOrder) { const getScrollableParent = (el) => { let node = el.parentElement; while (node) { const style = getComputedStyle(node); const overflowY = style.overflowY; if (node.scrollHeight > node.clientHeight && (overflowY === "auto" || overflowY === "scroll")) { return node; } node = node.parentElement; } return document.scrollingElement || document.documentElement; }; let autoScrollFrame = null; let autoScrollDelta = 0; let scrollEl2 = null; const stepScroll = () => { if (!scrollEl2) return; if (autoScrollDelta !== 0) { scrollEl2.scrollTop += autoScrollDelta; autoScrollFrame = requestAnimationFrame(stepScroll); } else { autoScrollFrame = null; } }; const handleEdgeScroll = (evt) => { var _a2, _b, _c, _d; if (!scrollEl2) return; const clientY = (_d = (_c = evt == null ? void 0 : evt.clientY) != null ? _c : (_b = (_a2 = evt == null ? void 0 : evt.touches) == null ? void 0 : _a2[0]) == null ? void 0 : _b.clientY) != null ? _d : 0; const rect = scrollEl2.getBoundingClientRect(); const threshold = 48; const maxStep = 18; if (clientY < rect.top + threshold) { const dist = rect.top + threshold - clientY; autoScrollDelta = -Math.min(maxStep, Math.ceil(dist / 4)); } else if (clientY > rect.bottom - threshold) { const dist = clientY - (rect.bottom - threshold); autoScrollDelta = Math.min(maxStep, Math.ceil(dist / 4)); } else { autoScrollDelta = 0; } if (autoScrollDelta !== 0 && autoScrollFrame === null) { autoScrollFrame = requestAnimationFrame(stepScroll); } }; const addEdgeScrollListeners = () => { if (!scrollEl2) return; scrollEl2.addEventListener("dragover", handleEdgeScroll); scrollEl2.addEventListener("pointermove", handleEdgeScroll, { passive: true }); scrollEl2.addEventListener("touchmove", handleEdgeScroll, { passive: true }); }; const removeEdgeScrollListeners = () => { if (!scrollEl2) return; scrollEl2.removeEventListener("dragover", handleEdgeScroll); scrollEl2.removeEventListener( "pointermove", handleEdgeScroll ); scrollEl2.removeEventListener( "touchmove", handleEdgeScroll ); }; sortable_esm_default.create(actionsContainer, { animation: 150, // Allow dragging by the whole item (not just the handle) draggable: ".setting-item", // We provide manual edge autoscroll for reliability in Obsidian's settings modal ghostClass: "local-gpt-sortable-ghost", chosenClass: "local-gpt-sortable-chosen", dragClass: "local-gpt-sortable-drag", onStart: (evt) => { scrollEl2 = getScrollableParent(actionsContainer); addEdgeScrollListeners(); }, onEnd: async (evt) => { removeEdgeScrollListeners(); if (autoScrollFrame !== null) { cancelAnimationFrame(autoScrollFrame); autoScrollFrame = null; } autoScrollDelta = 0; scrollEl2 = null; const droppedEl = evt == null ? void 0 : evt.item; if (droppedEl) { droppedEl.classList.add("local-gpt-drop-animate"); droppedEl.addEventListener( "animationend", () => droppedEl.classList.remove( "local-gpt-drop-animate" ), { once: true } ); const prevEl = droppedEl.previousElementSibling; const nextEl2 = droppedEl.nextElementSibling; if (prevEl && prevEl.classList.contains("setting-item")) { prevEl.classList.add( "local-gpt-drop-neighbor-prev" ); prevEl.addEventListener( "animationend", () => prevEl.classList.remove( "local-gpt-drop-neighbor-prev" ), { once: true } ); } if (nextEl2 && nextEl2.classList.contains("setting-item")) { nextEl2.classList.add( "local-gpt-drop-neighbor-next" ); nextEl2.addEventListener( "animationend", () => nextEl2.classList.remove( "local-gpt-drop-neighbor-next" ), { once: true } ); } } if (evt.oldIndex !== void 0 && evt.newIndex !== void 0 && evt.oldIndex !== evt.newIndex) { const [moved2] = this.plugin.settings.actions.splice( evt.oldIndex, 1 ); this.plugin.settings.actions.splice( evt.newIndex, 0, moved2 ); await this.plugin.saveSettings(); } } }); } if (this.plugin.settings.actions.length) { new import_obsidian.Setting(containerEl).setName("").addButton((button) => { this.changingOrder && button.setCta(); button.setButtonText( this.changingOrder ? I18n.t("settings.done") : I18n.t("settings.changeOrder") ).onClick(async () => { this.changingOrder = !this.changingOrder; this.display(); }); }); } new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.advancedSettings")).setDesc(I18n.t("settings.advancedSettingsDesc")).setClass("local-gpt-advanced-toggle").addToggle( (toggle) => toggle.setValue(this.isAdvancedMode).onChange((value) => { this.isAdvancedMode = value; this.display(); }) ); if (this.isAdvancedMode) { const enhancedSection = containerEl.createDiv( "local-gpt-advanced-group" ); enhancedSection.createEl("h4", { text: I18n.t("settings.enhancedActions") }); new import_obsidian.Setting(enhancedSection).setName(I18n.t("settings.enhancedActionsLabel")).setDesc(I18n.t("settings.enhancedActionsDesc")).setClass("ai-providers-select").addDropdown((dropdown) => { dropdown.addOptions({ local: I18n.t("settings.contextLimitLocal"), cloud: I18n.t("settings.contextLimitCloud"), advanced: I18n.t("settings.contextLimitAdvanced"), max: I18n.t("settings.contextLimitMax") }).setValue( String( this.plugin.settings.defaults.contextLimit || "local" ) ).onChange(async (value) => { this.plugin.settings.defaults.contextLimit = value; await this.plugin.saveSettings(); }); }); const dangerSection = containerEl.createDiv( "local-gpt-advanced-group" ); dangerSection.createEl("h4", { text: I18n.t("settings.dangerZone") }); new import_obsidian.Setting(dangerSection).setName(I18n.t("settings.resetActions")).setDesc(I18n.t("settings.resetActionsDesc")).addButton( (button) => button.setClass("mod-warning").setButtonText(I18n.t("settings.reset")).onClick(async () => { if (!this.isConfirmingReset) { this.isConfirmingReset = true; button.setButtonText( I18n.t("settings.confirmReset") ); return; } button.setDisabled(true); button.buttonEl.setAttribute("disabled", "true"); button.buttonEl.classList.remove("mod-warning"); this.plugin.settings.actions = DEFAULT_SETTINGS.actions; await this.plugin.saveSettings(); this.isConfirmingReset = false; this.display(); }) ); } } async addNewAction(editingAction) { const alreadyExistingActionIndex = this.plugin.settings.actions.findIndex( (action) => action.name === editingAction.name ); if (alreadyExistingActionIndex >= 0) { this.plugin.settings.actions[alreadyExistingActionIndex] = editingAction; new import_obsidian.Notice( I18n.t("notices.actionRewritten", { name: editingAction.name }) ); } else { this.plugin.settings.actions = [ editingAction, ...this.plugin.settings.actions ]; new import_obsidian.Notice( I18n.t("notices.actionAdded", { name: editingAction.name }) ); } await this.plugin.saveSettings(); } }; // src/spinnerPlugin.ts var import_state = require("@codemirror/state"); var import_view = require("@codemirror/view"); var _LoaderWidget = class extends import_view.WidgetType { toDOM(view) { return _LoaderWidget.element.cloneNode(true); } }; var LoaderWidget = _LoaderWidget; LoaderWidget.element = document.createElement("span"); (() => { _LoaderWidget.element.addClasses(["local-gpt-loading", "local-gpt-dots"]); })(); var ThinkingWidget = class extends import_view.WidgetType { static createDOMStructure() { const container = document.createElement("div"); container.addClass("local-gpt-thinking-container"); container.appendChild(document.createElement("br")); const textElement = document.createElement("span"); textElement.addClass("local-gpt-thinking"); textElement.textContent = "Thinking"; textElement.setAttribute("data-text", "Thinking"); container.appendChild(textElement); return container; } toDOM(view) { return ThinkingWidget.createDOMStructure(); } }; var ContentWidget = class extends import_view.WidgetType { constructor(text2) { super(); this.text = text2; this.dom = null; } eq(other) { return other.text === this.text; } updateText(newText) { if (this.dom && this.text !== newText) { const addedText = newText.slice(this.text.length); this.dom.textContent = newText.slice(0, -addedText.length); let lastSpan = this.dom.querySelector("span:last-child"); if (!lastSpan) { lastSpan = document.createElement("span"); this.dom.appendChild(lastSpan); } lastSpan.textContent = addedText; this.text = newText; } } toDOM(view) { if (!this.dom) { this.dom = document.createElement("div"); this.dom.addClass("local-gpt-content"); this.updateText(this.text); } return this.dom; } }; var SpinnerPlugin = class { constructor(editorView) { this.editorView = editorView; this.positions = /* @__PURE__ */ new Map(); this.decorations = import_view.Decoration.none; } /** * Process text with potential tags and update UI accordingly * * @param text Raw text that may include tags * @param processFunc Optional function to process the display text * @param position Optional position to update specific spinner * @returns void */ processText(text2, processFunc, position) { const result = this.processThinkingTags(text2); this.showThinking(result.isThinking, position); if (result.displayText.trim()) { const displayText = processFunc ? processFunc(result.displayText) : result.displayText; this.updateContent(displayText, position); } } /** * Process text with potential tags * * @param text Raw text that may contain tags * @returns Object with parsed thinking state and display text */ processThinkingTags(text2) { if (!text2.startsWith("")) { return { isThinking: false, displayText: text2 }; } const thinkingMatch = text2.match( /^([\s\S]*?)(<\/think>\s*([\s\S]*))?$/ ); if (!thinkingMatch) { return { isThinking: true, displayText: "" // No display text while in thinking mode }; } if (thinkingMatch[2]) { const afterThinkTag = thinkingMatch[3] || ""; return { isThinking: false, displayText: afterThinkTag }; } return { isThinking: true, displayText: "" // No display text while in thinking mode }; } show(position) { const isEndOfLine = this.isPositionAtEndOfLine( this.editorView.state, position ); this.positions.set(position, { isEndOfLine, widget: new LoaderWidget(), isThinking: false }); this.updateDecorations(); return () => this.hide(position); } hide(position) { this.positions.delete(position); this.updateDecorations(); } showThinking(enabled, position) { let updated = false; const updatePosition = (data) => { if (enabled && !data.isThinking) { data.widget = new ThinkingWidget(); data.isThinking = true; updated = true; } else if (!enabled && data.isThinking) { data.widget = new LoaderWidget(); data.isThinking = false; updated = true; } }; if (position !== void 0) { const data = this.positions.get(position); if (data) updatePosition(data); } else { this.positions.forEach(updatePosition); } if (updated) { this.updateDecorations(); } } updateContent(text2, position) { let updated = false; const updatePosition = (data) => { if (data.isThinking) return; if (data.widget instanceof LoaderWidget) { data.widget = new ContentWidget(text2); updated = true; } else if (data.widget instanceof ContentWidget) { data.widget.updateText(text2); updated = true; } }; if (position !== void 0) { const data = this.positions.get(position); if (data) updatePosition(data); } else { this.positions.forEach(updatePosition); } if (updated) { this.updateDecorations(); } } update(update2) { if (update2.docChanged || update2.viewportChanged) { this.updateDecorations(); } } updateDecorations() { const builder = new import_state.RangeSetBuilder(); this.positions.forEach((data, position) => { builder.add( position, position, import_view.Decoration.widget({ widget: data.widget, side: data.isEndOfLine ? 1 : -1 }) ); }); this.decorations = builder.finish(); this.editorView.requestMeasure(); } isPositionAtEndOfLine(state, position) { return position === state.doc.lineAt(position).to; } }; var spinnerPlugin = import_view.ViewPlugin.fromClass(SpinnerPlugin, { decorations: (v) => v.decorations }); // src/ui/actionPalettePlugin.ts var import_state2 = require("@codemirror/state"); var import_view2 = require("@codemirror/view"); // node_modules/svelte/src/runtime/internal/utils.js function noop() { } function run(fn) { return fn(); } function blank_object() { return /* @__PURE__ */ Object.create(null); } function run_all(fns) { fns.forEach(run); } function is_function(thing) { return typeof thing === "function"; } function safe_not_equal(a, b) { return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; } function is_empty(obj) { return Object.keys(obj).length === 0; } // node_modules/svelte/src/runtime/internal/globals.js var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : ( // @ts-ignore Node typings have this global ); // node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js var ResizeObserverSingleton = class { /** @param {ResizeObserverOptions} options */ constructor(options) { /** * @private * @readonly * @type {WeakMap} */ __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0); /** * @private * @type {ResizeObserver} */ __publicField(this, "_observer"); /** @type {ResizeObserverOptions} */ __publicField(this, "options"); this.options = options; } /** * @param {Element} element * @param {import('./private.js').Listener} listener * @returns {() => void} */ observe(element2, listener) { this._listeners.set(element2, listener); this._getObserver().observe(element2, this.options); return () => { this._listeners.delete(element2); this._observer.unobserve(element2); }; } /** * @private */ _getObserver() { var _a2; return (_a2 = this._observer) != null ? _a2 : this._observer = new ResizeObserver((entries) => { var _a3; for (const entry of entries) { ResizeObserverSingleton.entries.set(entry.target, entry); (_a3 = this._listeners.get(entry.target)) == null ? void 0 : _a3(entry); } }); } }; ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0; // node_modules/svelte/src/runtime/internal/dom.js var is_hydrating = false; function start_hydrating() { is_hydrating = true; } function end_hydrating() { is_hydrating = false; } function append(target, node) { target.appendChild(node); } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } function detach(node) { if (node.parentNode) { node.parentNode.removeChild(node); } } function destroy_each(iterations, detaching) { for (let i = 0; i < iterations.length; i += 1) { if (iterations[i]) iterations[i].d(detaching); } } function element(name) { return document.createElement(name); } function text(data) { return document.createTextNode(data); } function space() { return text(" "); } function empty() { return text(""); } function listen(node, event, handler, options) { node.addEventListener(event, handler, options); return () => node.removeEventListener(event, handler, options); } function attr(node, attribute, value) { if (value == null) node.removeAttribute(attribute); else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); } function children(element2) { return Array.from(element2.childNodes); } function set_data(text2, data) { data = "" + data; if (text2.data === data) return; text2.data = /** @type {string} */ data; } function set_style(node, key, value, important) { if (value == null) { node.style.removeProperty(key); } else { node.style.setProperty(key, value, important ? "important" : ""); } } function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { return new CustomEvent(type, { detail, bubbles, cancelable }); } function get_custom_elements_slots(element2) { const result = {}; element2.childNodes.forEach( /** @param {Element} node */ (node) => { result[node.slot || "default"] = true; } ); return result; } // node_modules/svelte/src/runtime/internal/lifecycle.js var current_component; function set_current_component(component) { current_component = component; } function get_current_component() { if (!current_component) throw new Error("Function called outside component initialization"); return current_component; } function onMount(fn) { get_current_component().$$.on_mount.push(fn); } function createEventDispatcher() { const component = get_current_component(); return (type, detail, { cancelable = false } = {}) => { const callbacks = component.$$.callbacks[type]; if (callbacks) { const event = custom_event( /** @type {string} */ type, detail, { cancelable } ); callbacks.slice().forEach((fn) => { fn.call(component, event); }); return !event.defaultPrevented; } return true; }; } // node_modules/svelte/src/runtime/internal/scheduler.js var dirty_components = []; var binding_callbacks = []; var render_callbacks = []; var flush_callbacks = []; var resolved_promise = /* @__PURE__ */ Promise.resolve(); var update_scheduled = false; function schedule_update() { if (!update_scheduled) { update_scheduled = true; resolved_promise.then(flush); } } function tick() { schedule_update(); return resolved_promise; } function add_render_callback(fn) { render_callbacks.push(fn); } var seen_callbacks = /* @__PURE__ */ new Set(); var flushidx = 0; function flush() { if (flushidx !== 0) { return; } const saved_component = current_component; do { try { while (flushidx < dirty_components.length) { const component = dirty_components[flushidx]; flushidx++; set_current_component(component); update(component.$$); } } catch (e) { dirty_components.length = 0; flushidx = 0; throw e; } set_current_component(null); dirty_components.length = 0; flushidx = 0; while (binding_callbacks.length) binding_callbacks.pop()(); for (let i = 0; i < render_callbacks.length; i += 1) { const callback = render_callbacks[i]; if (!seen_callbacks.has(callback)) { seen_callbacks.add(callback); callback(); } } render_callbacks.length = 0; } while (dirty_components.length); while (flush_callbacks.length) { flush_callbacks.pop()(); } update_scheduled = false; seen_callbacks.clear(); set_current_component(saved_component); } function update($$) { if ($$.fragment !== null) { $$.update(); run_all($$.before_update); const dirty = $$.dirty; $$.dirty = [-1]; $$.fragment && $$.fragment.p($$.ctx, dirty); $$.after_update.forEach(add_render_callback); } } function flush_render_callbacks(fns) { const filtered = []; const targets = []; render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); targets.forEach((c) => c()); render_callbacks = filtered; } // node_modules/svelte/src/runtime/internal/transitions.js var outroing = /* @__PURE__ */ new Set(); function transition_in(block, local) { if (block && block.i) { outroing.delete(block); block.i(local); } } // node_modules/svelte/src/runtime/internal/each.js function ensure_array_like(array_like_or_iterator) { return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); } // node_modules/svelte/src/shared/boolean_attributes.js var _boolean_attributes = ( /** @type {const} */ [ "allowfullscreen", "allowpaymentrequest", "async", "autofocus", "autoplay", "checked", "controls", "default", "defer", "disabled", "formnovalidate", "hidden", "inert", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "selected" ] ); var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]); // node_modules/svelte/src/runtime/internal/Component.js function mount_component(component, target, anchor) { const { fragment, after_update } = component.$$; fragment && fragment.m(target, anchor); add_render_callback(() => { const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); if (component.$$.on_destroy) { component.$$.on_destroy.push(...new_on_destroy); } else { run_all(new_on_destroy); } component.$$.on_mount = []; }); after_update.forEach(add_render_callback); } function destroy_component(component, detaching) { const $$ = component.$$; if ($$.fragment !== null) { flush_render_callbacks($$.after_update); run_all($$.on_destroy); $$.fragment && $$.fragment.d(detaching); $$.on_destroy = $$.fragment = null; $$.ctx = []; } } function make_dirty(component, i) { if (component.$$.dirty[0] === -1) { dirty_components.push(component); schedule_update(); component.$$.dirty.fill(0); } component.$$.dirty[i / 31 | 0] |= 1 << i % 31; } function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) { const parent_component = current_component; set_current_component(component); const $$ = component.$$ = { fragment: null, ctx: [], // state props, update: noop, not_equal, bound: blank_object(), // lifecycle on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else callbacks: blank_object(), dirty, skip_bound: false, root: options.target || parent_component.$$.root }; append_styles && append_styles($$.root); let ready = false; $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => { const value = rest.length ? rest[0] : ret; if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); if (ready) make_dirty(component, i); } return ret; }) : []; $$.update(); ready = true; run_all($$.before_update); $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false; if (options.target) { if (options.hydrate) { start_hydrating(); const nodes = children(options.target); $$.fragment && $$.fragment.l(nodes); nodes.forEach(detach); } else { $$.fragment && $$.fragment.c(); } if (options.intro) transition_in(component.$$.fragment); mount_component(component, options.target, options.anchor); end_hydrating(); flush(); } set_current_component(parent_component); } var SvelteElement; if (typeof HTMLElement === "function") { SvelteElement = class extends HTMLElement { constructor($$componentCtor, $$slots, use_shadow_dom) { super(); /** The Svelte component constructor */ __publicField(this, "$$ctor"); /** Slots */ __publicField(this, "$$s"); /** The Svelte component instance */ __publicField(this, "$$c"); /** Whether or not the custom element is connected */ __publicField(this, "$$cn", false); /** Component props data */ __publicField(this, "$$d", {}); /** `true` if currently in the process of reflecting component props back to attributes */ __publicField(this, "$$r", false); /** @type {Record} Props definition (name, reflected, type etc) */ __publicField(this, "$$p_d", {}); /** @type {Record} Event listeners */ __publicField(this, "$$l", {}); /** @type {Map} Event listener unsubscribe functions */ __publicField(this, "$$l_u", /* @__PURE__ */ new Map()); this.$$ctor = $$componentCtor; this.$$s = $$slots; if (use_shadow_dom) { this.attachShadow({ mode: "open" }); } } addEventListener(type, listener, options) { this.$$l[type] = this.$$l[type] || []; this.$$l[type].push(listener); if (this.$$c) { const unsub = this.$$c.$on(type, listener); this.$$l_u.set(listener, unsub); } super.addEventListener(type, listener, options); } removeEventListener(type, listener, options) { super.removeEventListener(type, listener, options); if (this.$$c) { const unsub = this.$$l_u.get(listener); if (unsub) { unsub(); this.$$l_u.delete(listener); } } if (this.$$l[type]) { const idx = this.$$l[type].indexOf(listener); if (idx >= 0) { this.$$l[type].splice(idx, 1); } } } async connectedCallback() { this.$$cn = true; if (!this.$$c) { let create_slot = function(name) { return () => { let node; const obj = { c: function create() { node = element("slot"); if (name !== "default") { attr(node, "name", name); } }, /** * @param {HTMLElement} target * @param {HTMLElement} [anchor] */ m: function mount2(target, anchor) { insert(target, node, anchor); }, d: function destroy2(detaching) { if (detaching) { detach(node); } } }; return obj; }; }; await Promise.resolve(); if (!this.$$cn || this.$$c) { return; } const $$slots = {}; const existing_slots = get_custom_elements_slots(this); for (const name of this.$$s) { if (name in existing_slots) { $$slots[name] = [create_slot(name)]; } } for (const attribute of this.attributes) { const name = this.$$g_p(attribute.name); if (!(name in this.$$d)) { this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); } } for (const key in this.$$p_d) { if (!(key in this.$$d) && this[key] !== void 0) { this.$$d[key] = this[key]; delete this[key]; } } this.$$c = new this.$$ctor({ target: this.shadowRoot || this, props: { ...this.$$d, $$slots, $$scope: { ctx: [] } } }); const reflect_attributes = () => { this.$$r = true; for (const key in this.$$p_d) { this.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]]; if (this.$$p_d[key].reflect) { const attribute_value = get_custom_element_value( key, this.$$d[key], this.$$p_d, "toAttribute" ); if (attribute_value == null) { this.removeAttribute(this.$$p_d[key].attribute || key); } else { this.setAttribute(this.$$p_d[key].attribute || key, attribute_value); } } } this.$$r = false; }; this.$$c.$$.after_update.push(reflect_attributes); reflect_attributes(); for (const type in this.$$l) { for (const listener of this.$$l[type]) { const unsub = this.$$c.$on(type, listener); this.$$l_u.set(listener, unsub); } } this.$$l = {}; } } // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte // and setting attributes through setAttribute etc, this is helpful attributeChangedCallback(attr2, _oldValue, newValue) { var _a2; if (this.$$r) return; attr2 = this.$$g_p(attr2); this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp"); (_a2 = this.$$c) == null ? void 0 : _a2.$set({ [attr2]: this.$$d[attr2] }); } disconnectedCallback() { this.$$cn = false; Promise.resolve().then(() => { if (!this.$$cn && this.$$c) { this.$$c.$destroy(); this.$$c = void 0; } }); } $$g_p(attribute_name) { return Object.keys(this.$$p_d).find( (key) => this.$$p_d[key].attribute === attribute_name || !this.$$p_d[key].attribute && key.toLowerCase() === attribute_name ) || attribute_name; } }; } function get_custom_element_value(prop, value, props_definition, transform) { var _a2; const type = (_a2 = props_definition[prop]) == null ? void 0 : _a2.type; value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; if (!transform || !props_definition[prop]) { return value; } else if (transform === "toAttribute") { switch (type) { case "Object": case "Array": return value == null ? null : JSON.stringify(value); case "Boolean": return value ? "" : null; case "Number": return value == null ? null : value; default: return value; } } else { switch (type) { case "Object": case "Array": return value && JSON.parse(value); case "Boolean": return value; case "Number": return value != null ? +value : value; default: return value; } } } var SvelteComponent = class { constructor() { /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$"); /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$set"); } /** @returns {void} */ $destroy() { destroy_component(this, 1); this.$destroy = noop; } /** * @template {Extract} K * @param {K} type * @param {((e: Events[K]) => void) | null | undefined} callback * @returns {() => void} */ $on(type, callback) { if (!is_function(callback)) { return noop; } const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); callbacks.push(callback); return () => { const index2 = callbacks.indexOf(callback); if (index2 !== -1) callbacks.splice(index2, 1); }; } /** * @param {Partial} props * @returns {void} */ $set(props) { if (this.$$set && !is_empty(props)) { this.$$.skip_bound = true; this.$$set(props); this.$$.skip_bound = false; } } }; // node_modules/svelte/src/shared/version.js var PUBLIC_VERSION = "4"; // node_modules/svelte/src/runtime/internal/disclose-version/index.js if (typeof window !== "undefined") (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); // node_modules/tslib/tslib.es6.js function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } // src/ui/actionPaletteHistory.ts var PROMPT_HISTORY_LIMIT = 50; var HISTORY_STORAGE_KEY = "local-gpt-action-palette-history"; var promptHistory = loadHistoryFromStorage(); function loadHistoryFromStorage() { if (typeof localStorage === "undefined") return []; try { const raw = localStorage.getItem(HISTORY_STORAGE_KEY); if (!raw) return []; const parsed = JSON.parse(raw); if (!Array.isArray(parsed)) return []; return parsed.filter((item) => typeof item === "string").slice(-PROMPT_HISTORY_LIMIT); } catch (error) { console.error("Failed to read Action Palette history:", error); return []; } } function persistHistory() { if (typeof localStorage === "undefined") return; try { localStorage.setItem( HISTORY_STORAGE_KEY, JSON.stringify(promptHistory.slice(-PROMPT_HISTORY_LIMIT)) ); } catch (error) { console.error("Failed to save Action Palette history:", error); } } function addToPromptHistory(entry) { var _a2; const normalized = entry.trim(); if (!normalized) return; const lastNormalized = (_a2 = promptHistory[promptHistory.length - 1]) == null ? void 0 : _a2.trim(); if (lastNormalized === normalized) return; promptHistory.push(entry); if (promptHistory.length > PROMPT_HISTORY_LIMIT) { promptHistory.shift(); } persistHistory(); } function getPromptHistoryEntry(index2) { return promptHistory[index2]; } function getPromptHistoryLength() { return promptHistory.length; } // src/ui/ActionPalette.svelte function get_each_context(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function get_each_context_1(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function get_each_context_2(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function get_each_context_3(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function get_each_context_4(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function get_each_context_5(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[119] = list[i]; child_ctx[121] = i; return child_ctx; } function create_if_block_1(ctx) { let div0; let t0; let div1; let t1; let div2; let t2; let div3; let t3; let div4; let t4; let div5; let each_value_5 = ensure_array_like( /*fileItems*/ ctx[11] ); let each_blocks_5 = []; for (let i = 0; i < each_value_5.length; i += 1) { each_blocks_5[i] = create_each_block_5(get_each_context_5(ctx, each_value_5, i)); } let each_value_4 = ensure_array_like( /*commandItems*/ ctx[12] ); let each_blocks_4 = []; for (let i = 0; i < each_value_4.length; i += 1) { each_blocks_4[i] = create_each_block_4(get_each_context_4(ctx, each_value_4, i)); } let each_value_3 = ensure_array_like( /*providerItems*/ ctx[13] ); let each_blocks_3 = []; for (let i = 0; i < each_value_3.length; i += 1) { each_blocks_3[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i)); } let each_value_2 = ensure_array_like( /*modelItems*/ ctx[14] ); let each_blocks_2 = []; for (let i = 0; i < each_value_2.length; i += 1) { each_blocks_2[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); } let each_value_1 = ensure_array_like( /*creativityItems*/ ctx[15] ); let each_blocks_1 = []; for (let i = 0; i < each_value_1.length; i += 1) { each_blocks_1[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); } let each_value = ensure_array_like( /*systemItems*/ ctx[16] ); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); } return { c() { div0 = element("div"); for (let i = 0; i < each_blocks_5.length; i += 1) { each_blocks_5[i].c(); } t0 = space(); div1 = element("div"); for (let i = 0; i < each_blocks_4.length; i += 1) { each_blocks_4[i].c(); } t1 = space(); div2 = element("div"); for (let i = 0; i < each_blocks_3.length; i += 1) { each_blocks_3[i].c(); } t2 = space(); div3 = element("div"); for (let i = 0; i < each_blocks_2.length; i += 1) { each_blocks_2[i].c(); } t3 = space(); div4 = element("div"); for (let i = 0; i < each_blocks_1.length; i += 1) { each_blocks_1[i].c(); } t4 = space(); div5 = element("div"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } attr(div0, "class", "local-gpt-dropdown"); set_style( div0, "display", /*activeDropdown*/ ctx[2] === "file" ? "block" : "none" ); attr(div1, "class", "local-gpt-dropdown"); set_style( div1, "display", /*activeDropdown*/ ctx[2] === "command" ? "block" : "none" ); attr(div2, "class", "local-gpt-dropdown"); set_style( div2, "display", /*activeDropdown*/ ctx[2] === "provider" ? "block" : "none" ); attr(div3, "class", "local-gpt-dropdown"); set_style( div3, "display", /*activeDropdown*/ ctx[2] === "model" ? "block" : "none" ); attr(div4, "class", "local-gpt-dropdown"); set_style( div4, "display", /*activeDropdown*/ ctx[2] === "creativity" ? "block" : "none" ); attr(div5, "class", "local-gpt-dropdown"); set_style( div5, "display", /*activeDropdown*/ ctx[2] === "system" ? "block" : "none" ); }, m(target, anchor) { insert(target, div0, anchor); for (let i = 0; i < each_blocks_5.length; i += 1) { if (each_blocks_5[i]) { each_blocks_5[i].m(div0, null); } } ctx[36](div0); insert(target, t0, anchor); insert(target, div1, anchor); for (let i = 0; i < each_blocks_4.length; i += 1) { if (each_blocks_4[i]) { each_blocks_4[i].m(div1, null); } } ctx[39](div1); insert(target, t1, anchor); insert(target, div2, anchor); for (let i = 0; i < each_blocks_3.length; i += 1) { if (each_blocks_3[i]) { each_blocks_3[i].m(div2, null); } } ctx[42](div2); insert(target, t2, anchor); insert(target, div3, anchor); for (let i = 0; i < each_blocks_2.length; i += 1) { if (each_blocks_2[i]) { each_blocks_2[i].m(div3, null); } } ctx[45](div3); insert(target, t3, anchor); insert(target, div4, anchor); for (let i = 0; i < each_blocks_1.length; i += 1) { if (each_blocks_1[i]) { each_blocks_1[i].m(div4, null); } } ctx[48](div4); insert(target, t4, anchor); insert(target, div5, anchor); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(div5, null); } } ctx[51](div5); }, p(ctx2, dirty) { if (dirty[0] & /*selectedIndex, handleSelection, fileItems, activeDropdown*/ 2230276) { each_value_5 = ensure_array_like( /*fileItems*/ ctx2[11] ); let i; for (i = 0; i < each_value_5.length; i += 1) { const child_ctx = get_each_context_5(ctx2, each_value_5, i); if (each_blocks_5[i]) { each_blocks_5[i].p(child_ctx, dirty); } else { each_blocks_5[i] = create_each_block_5(child_ctx); each_blocks_5[i].c(); each_blocks_5[i].m(div0, null); } } for (; i < each_blocks_5.length; i += 1) { each_blocks_5[i].d(1); } each_blocks_5.length = each_value_5.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div0, "display", /*activeDropdown*/ ctx2[2] === "file" ? "block" : "none" ); } if (dirty[0] & /*selectedIndex, handleSelection, commandItems, activeDropdown*/ 2232324) { each_value_4 = ensure_array_like( /*commandItems*/ ctx2[12] ); let i; for (i = 0; i < each_value_4.length; i += 1) { const child_ctx = get_each_context_4(ctx2, each_value_4, i); if (each_blocks_4[i]) { each_blocks_4[i].p(child_ctx, dirty); } else { each_blocks_4[i] = create_each_block_4(child_ctx); each_blocks_4[i].c(); each_blocks_4[i].m(div1, null); } } for (; i < each_blocks_4.length; i += 1) { each_blocks_4[i].d(1); } each_blocks_4.length = each_value_4.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div1, "display", /*activeDropdown*/ ctx2[2] === "command" ? "block" : "none" ); } if (dirty[0] & /*selectedIndex, handleSelection, providerItems, activeDropdown*/ 2236420) { each_value_3 = ensure_array_like( /*providerItems*/ ctx2[13] ); let i; for (i = 0; i < each_value_3.length; i += 1) { const child_ctx = get_each_context_3(ctx2, each_value_3, i); if (each_blocks_3[i]) { each_blocks_3[i].p(child_ctx, dirty); } else { each_blocks_3[i] = create_each_block_3(child_ctx); each_blocks_3[i].c(); each_blocks_3[i].m(div2, null); } } for (; i < each_blocks_3.length; i += 1) { each_blocks_3[i].d(1); } each_blocks_3.length = each_value_3.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div2, "display", /*activeDropdown*/ ctx2[2] === "provider" ? "block" : "none" ); } if (dirty[0] & /*selectedIndex, handleSelection, modelItems, activeDropdown*/ 2244612) { each_value_2 = ensure_array_like( /*modelItems*/ ctx2[14] ); let i; for (i = 0; i < each_value_2.length; i += 1) { const child_ctx = get_each_context_2(ctx2, each_value_2, i); if (each_blocks_2[i]) { each_blocks_2[i].p(child_ctx, dirty); } else { each_blocks_2[i] = create_each_block_2(child_ctx); each_blocks_2[i].c(); each_blocks_2[i].m(div3, null); } } for (; i < each_blocks_2.length; i += 1) { each_blocks_2[i].d(1); } each_blocks_2.length = each_value_2.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div3, "display", /*activeDropdown*/ ctx2[2] === "model" ? "block" : "none" ); } if (dirty[0] & /*selectedIndex, handleSelection, creativityItems, activeDropdown*/ 2260996) { each_value_1 = ensure_array_like( /*creativityItems*/ ctx2[15] ); let i; for (i = 0; i < each_value_1.length; i += 1) { const child_ctx = get_each_context_1(ctx2, each_value_1, i); if (each_blocks_1[i]) { each_blocks_1[i].p(child_ctx, dirty); } else { each_blocks_1[i] = create_each_block_1(child_ctx); each_blocks_1[i].c(); each_blocks_1[i].m(div4, null); } } for (; i < each_blocks_1.length; i += 1) { each_blocks_1[i].d(1); } each_blocks_1.length = each_value_1.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div4, "display", /*activeDropdown*/ ctx2[2] === "creativity" ? "block" : "none" ); } if (dirty[0] & /*selectedIndex, handleSelection, systemItems, activeDropdown*/ 2293764) { each_value = ensure_array_like( /*systemItems*/ ctx2[16] ); let i; for (i = 0; i < each_value.length; i += 1) { const child_ctx = get_each_context(ctx2, each_value, i); if (each_blocks[i]) { each_blocks[i].p(child_ctx, dirty); } else { each_blocks[i] = create_each_block(child_ctx); each_blocks[i].c(); each_blocks[i].m(div5, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].d(1); } each_blocks.length = each_value.length; } if (dirty[0] & /*activeDropdown*/ 4) { set_style( div5, "display", /*activeDropdown*/ ctx2[2] === "system" ? "block" : "none" ); } }, d(detaching) { if (detaching) { detach(div0); detach(t0); detach(div1); detach(t1); detach(div2); detach(t2); detach(div3); detach(t3); detach(div4); detach(t4); detach(div5); } destroy_each(each_blocks_5, detaching); ctx[36](null); destroy_each(each_blocks_4, detaching); ctx[39](null); destroy_each(each_blocks_3, detaching); ctx[42](null); destroy_each(each_blocks_2, detaching); ctx[45](null); destroy_each(each_blocks_1, detaching); ctx[48](null); destroy_each(each_blocks, detaching); ctx[51](null); } }; } function create_if_block_8(ctx) { let div; let span0; let t0_value = ( /*item*/ ctx[119].basename + "" ); let t0; let t1; let t2_value = ( /*item*/ ctx[119].extension + "" ); let t2; let t3; let span1; let t4_value = ( /*item*/ ctx[119].path + "" ); let t4; let t5; let div_class_value; let div_aria_selected_value; let mounted; let dispose; function click_handler() { return ( /*click_handler*/ ctx[34]( /*item*/ ctx[119] ) ); } function keydown_handler(...args) { return ( /*keydown_handler*/ ctx[35]( /*item*/ ctx[119], ...args ) ); } return { c() { div = element("div"); span0 = element("span"); t0 = text(t0_value); t1 = text("."); t2 = text(t2_value); t3 = space(); span1 = element("span"); t4 = text(t4_value); t5 = space(); attr(span0, "class", "local-gpt-file-name"); attr(span1, "class", "local-gpt-file-path"); attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div, "role", "option"); attr(div, "tabindex", "0"); attr(div, "aria-selected", div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div, anchor); append(div, span0); append(span0, t0); append(span0, t1); append(span0, t2); append(div, t3); append(div, span1); append(span1, t4); append(div, t5); if (!mounted) { dispose = [ listen(div, "click", click_handler), listen(div, "keydown", keydown_handler) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*fileItems*/ 2048 && t0_value !== (t0_value = /*item*/ ctx[119].basename + "")) set_data(t0, t0_value); if (dirty[0] & /*fileItems*/ 2048 && t2_value !== (t2_value = /*item*/ ctx[119].extension + "")) set_data(t2, t2_value); if (dirty[0] & /*fileItems*/ 2048 && t4_value !== (t4_value = /*item*/ ctx[119].path + "")) set_data(t4, t4_value); if (dirty[0] & /*selectedIndex*/ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div, "class", div_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div, "aria-selected", div_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_each_block_5(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "file" && create_if_block_8(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "file" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_8(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_7(ctx) { let div; let span0; let t0; let t1_value = ( /*item*/ ctx[119].name + "" ); let t1; let t2; let span1; let t3_value = ( /*item*/ ctx[119].description + "" ); let t3; let t4; let div_class_value; let div_aria_selected_value; let mounted; let dispose; function click_handler_1() { return ( /*click_handler_1*/ ctx[37]( /*item*/ ctx[119] ) ); } function keydown_handler_1(...args) { return ( /*keydown_handler_1*/ ctx[38]( /*item*/ ctx[119], ...args ) ); } return { c() { div = element("div"); span0 = element("span"); t0 = text("/"); t1 = text(t1_value); t2 = space(); span1 = element("span"); t3 = text(t3_value); t4 = space(); attr(span0, "class", "local-gpt-command-name"); attr(span1, "class", "local-gpt-command-description"); attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div, "role", "option"); attr(div, "tabindex", "0"); attr(div, "aria-selected", div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div, anchor); append(div, span0); append(span0, t0); append(span0, t1); append(div, t2); append(div, span1); append(span1, t3); append(div, t4); if (!mounted) { dispose = [ listen(div, "click", click_handler_1), listen(div, "keydown", keydown_handler_1) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*commandItems*/ 4096 && t1_value !== (t1_value = /*item*/ ctx[119].name + "")) set_data(t1, t1_value); if (dirty[0] & /*commandItems*/ 4096 && t3_value !== (t3_value = /*item*/ ctx[119].description + "")) set_data(t3, t3_value); if (dirty[0] & /*selectedIndex*/ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div, "class", div_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div, "aria-selected", div_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_each_block_4(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "command" && create_if_block_7(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "command" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_7(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_5(ctx) { let div1; let div0; let span0; let t0_value = ( /*item*/ ctx[119].providerName + "" ); let t0; let t1; let t2; let span1; let t3_value = ( /*item*/ ctx[119].name + "" ); let t3; let t4; let div1_class_value; let div1_aria_selected_value; let mounted; let dispose; let if_block = ( /*item*/ ctx[119].providerUrl && create_if_block_6(ctx) ); function click_handler_2() { return ( /*click_handler_2*/ ctx[40]( /*item*/ ctx[119] ) ); } function keydown_handler_2(...args) { return ( /*keydown_handler_2*/ ctx[41]( /*item*/ ctx[119], ...args ) ); } return { c() { div1 = element("div"); div0 = element("div"); span0 = element("span"); t0 = text(t0_value); t1 = space(); if (if_block) if_block.c(); t2 = space(); span1 = element("span"); t3 = text(t3_value); t4 = space(); attr(span0, "class", "local-gpt-provider-name"); attr(div0, "class", "local-gpt-provider-header"); attr(span1, "class", "local-gpt-provider-model"); attr(div1, "class", div1_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div1, "role", "option"); attr(div1, "tabindex", "0"); attr(div1, "aria-selected", div1_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); append(div0, span0); append(span0, t0); append(div0, t1); if (if_block) if_block.m(div0, null); append(div1, t2); append(div1, span1); append(span1, t3); append(div1, t4); if (!mounted) { dispose = [ listen(div1, "click", click_handler_2), listen(div1, "keydown", keydown_handler_2) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*providerItems*/ 8192 && t0_value !== (t0_value = /*item*/ ctx[119].providerName + "")) set_data(t0, t0_value); if ( /*item*/ ctx[119].providerUrl ) { if (if_block) { if_block.p(ctx, dirty); } else { if_block = create_if_block_6(ctx); if_block.c(); if_block.m(div0, null); } } else if (if_block) { if_block.d(1); if_block = null; } if (dirty[0] & /*providerItems*/ 8192 && t3_value !== (t3_value = /*item*/ ctx[119].name + "")) set_data(t3, t3_value); if (dirty[0] & /*selectedIndex*/ 131072 && div1_class_value !== (div1_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div1, "class", div1_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div1_aria_selected_value !== (div1_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div1, "aria-selected", div1_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div1); } if (if_block) if_block.d(); mounted = false; run_all(dispose); } }; } function create_if_block_6(ctx) { let span; let t_value = ( /*item*/ ctx[119].providerUrl + "" ); let t; return { c() { span = element("span"); t = text(t_value); attr(span, "class", "local-gpt-provider-url"); }, m(target, anchor) { insert(target, span, anchor); append(span, t); }, p(ctx2, dirty) { if (dirty[0] & /*providerItems*/ 8192 && t_value !== (t_value = /*item*/ ctx2[119].providerUrl + "")) set_data(t, t_value); }, d(detaching) { if (detaching) { detach(span); } } }; } function create_each_block_3(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "provider" && create_if_block_5(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "provider" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_5(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_4(ctx) { let div; let span; let t0_value = ( /*item*/ ctx[119].name + "" ); let t0; let t1; let div_class_value; let div_aria_selected_value; let mounted; let dispose; function click_handler_3() { return ( /*click_handler_3*/ ctx[43]( /*item*/ ctx[119] ) ); } function keydown_handler_3(...args) { return ( /*keydown_handler_3*/ ctx[44]( /*item*/ ctx[119], ...args ) ); } return { c() { div = element("div"); span = element("span"); t0 = text(t0_value); t1 = space(); attr(span, "class", "local-gpt-model-name"); attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div, "role", "option"); attr(div, "tabindex", "0"); attr(div, "aria-selected", div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div, anchor); append(div, span); append(span, t0); append(div, t1); if (!mounted) { dispose = [ listen(div, "click", click_handler_3), listen(div, "keydown", keydown_handler_3) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*modelItems*/ 16384 && t0_value !== (t0_value = /*item*/ ctx[119].name + "")) set_data(t0, t0_value); if (dirty[0] & /*selectedIndex*/ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div, "class", div_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div, "aria-selected", div_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_each_block_2(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "model" && create_if_block_4(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "model" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_4(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_3(ctx) { let div; let span; let t0_value = ( /*item*/ ctx[119].name + "" ); let t0; let t1; let div_class_value; let div_aria_selected_value; let mounted; let dispose; function click_handler_4() { return ( /*click_handler_4*/ ctx[46]( /*item*/ ctx[119] ) ); } function keydown_handler_4(...args) { return ( /*keydown_handler_4*/ ctx[47]( /*item*/ ctx[119], ...args ) ); } return { c() { div = element("div"); span = element("span"); t0 = text(t0_value); t1 = space(); attr(span, "class", "local-gpt-creativity-name"); attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div, "role", "option"); attr(div, "tabindex", "0"); attr(div, "aria-selected", div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div, anchor); append(div, span); append(span, t0); append(div, t1); if (!mounted) { dispose = [ listen(div, "click", click_handler_4), listen(div, "keydown", keydown_handler_4) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*creativityItems*/ 32768 && t0_value !== (t0_value = /*item*/ ctx[119].name + "")) set_data(t0, t0_value); if (dirty[0] & /*selectedIndex*/ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div, "class", div_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div, "aria-selected", div_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_each_block_1(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "creativity" && create_if_block_3(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "creativity" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_3(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block_2(ctx) { let div; let span0; let t0_value = ( /*item*/ ctx[119].name + "" ); let t0; let t1; let span1; let t2_value = formatSystemPreview( /*item*/ ctx[119].system ) + ""; let t2; let t3; let div_class_value; let div_aria_selected_value; let mounted; let dispose; function click_handler_5() { return ( /*click_handler_5*/ ctx[49]( /*item*/ ctx[119] ) ); } function keydown_handler_5(...args) { return ( /*keydown_handler_5*/ ctx[50]( /*item*/ ctx[119], ...args ) ); } return { c() { div = element("div"); span0 = element("span"); t0 = text(t0_value); t1 = space(); span1 = element("span"); t2 = text(t2_value); t3 = space(); attr(span0, "class", "local-gpt-system-name"); attr(span1, "class", "local-gpt-system-detail"); attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : "")); attr(div, "role", "option"); attr(div, "tabindex", "0"); attr(div, "aria-selected", div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17]); }, m(target, anchor) { insert(target, div, anchor); append(div, span0); append(span0, t0); append(div, t1); append(div, span1); append(span1, t2); append(div, t3); if (!mounted) { dispose = [ listen(div, "click", click_handler_5), listen(div, "keydown", keydown_handler_5) ]; mounted = true; } }, p(new_ctx, dirty) { ctx = new_ctx; if (dirty[0] & /*systemItems*/ 65536 && t0_value !== (t0_value = /*item*/ ctx[119].name + "")) set_data(t0, t0_value); if (dirty[0] & /*systemItems*/ 65536 && t2_value !== (t2_value = formatSystemPreview( /*item*/ ctx[119].system ) + "")) set_data(t2, t2_value); if (dirty[0] & /*selectedIndex*/ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/ (ctx[121] === /*selectedIndex*/ ctx[17] ? "local-gpt-selected" : ""))) { attr(div, "class", div_class_value); } if (dirty[0] & /*selectedIndex*/ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/ ctx[121] === /*selectedIndex*/ ctx[17])) { attr(div, "aria-selected", div_aria_selected_value); } }, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_each_block(ctx) { let if_block_anchor; let if_block = ( /*activeDropdown*/ ctx[2] === "system" && create_if_block_2(ctx) ); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if ( /*activeDropdown*/ ctx2[2] === "system" ) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_2(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block(ctx) { let div1; let div0; let t; let div0_class_value; return { c() { div1 = element("div"); div0 = element("div"); t = text( /*providerLabel*/ ctx[0] ); attr(div0, "class", div0_class_value = /*badgeHighlight*/ ctx[18] ? "local-gpt-provider-badge-label local-gpt-badge-highlight" : "local-gpt-provider-badge-label"); attr(div1, "class", "local-gpt-provider-badge"); attr(div1, "aria-hidden", "true"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); append(div0, t); }, p(ctx2, dirty) { if (dirty[0] & /*providerLabel*/ 1) set_data( t, /*providerLabel*/ ctx2[0] ); if (dirty[0] & /*badgeHighlight*/ 262144 && div0_class_value !== (div0_class_value = /*badgeHighlight*/ ctx2[18] ? "local-gpt-provider-badge-label local-gpt-badge-highlight" : "local-gpt-provider-badge-label")) { attr(div0, "class", div0_class_value); } }, d(detaching) { if (detaching) { detach(div1); } } }; } function create_fragment(ctx) { let div1; let div0; let t0; let t1; let mounted; let dispose; let if_block0 = ( /*activeDropdown*/ ctx[2] !== "none" && /*filteredItems*/ ctx[3].length > 0 && create_if_block_1(ctx) ); let if_block1 = ( /*providerLabel*/ ctx[0] && create_if_block(ctx) ); return { c() { div1 = element("div"); div0 = element("div"); t0 = space(); if (if_block0) if_block0.c(); t1 = space(); if (if_block1) if_block1.c(); attr(div0, "class", "local-gpt-action-palette"); attr(div0, "contenteditable", "true"); attr(div0, "role", "textbox"); attr(div0, "tabindex", "0"); attr( div0, "aria-label", /*placeholder*/ ctx[1] ); attr( div0, "data-placeholder", /*placeholder*/ ctx[1] ); attr(div0, "spellcheck", "false"); attr(div1, "class", "local-gpt-action-palette-shell"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); ctx[33](div0); append(div1, t0); if (if_block0) if_block0.m(div1, null); append(div1, t1); if (if_block1) if_block1.m(div1, null); if (!mounted) { dispose = [ listen( div0, "keydown", /*handleKeydown*/ ctx[19] ), listen( div0, "input", /*handleInput*/ ctx[20] ), listen( div0, "keyup", /*handleKeyup*/ ctx[23] ), listen( div0, "click", /*handleContentClick*/ ctx[22] ) ]; mounted = true; } }, p(ctx2, dirty) { if (dirty[0] & /*placeholder*/ 2) { attr( div0, "aria-label", /*placeholder*/ ctx2[1] ); } if (dirty[0] & /*placeholder*/ 2) { attr( div0, "data-placeholder", /*placeholder*/ ctx2[1] ); } if ( /*activeDropdown*/ ctx2[2] !== "none" && /*filteredItems*/ ctx2[3].length > 0 ) { if (if_block0) { if_block0.p(ctx2, dirty); } else { if_block0 = create_if_block_1(ctx2); if_block0.c(); if_block0.m(div1, t1); } } else if (if_block0) { if_block0.d(1); if_block0 = null; } if ( /*providerLabel*/ ctx2[0] ) { if (if_block1) { if_block1.p(ctx2, dirty); } else { if_block1 = create_if_block(ctx2); if_block1.c(); if_block1.m(div1, null); } } else if (if_block1) { if_block1.d(1); if_block1 = null; } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div1); } ctx[33](null); if (if_block0) if_block0.d(); if (if_block1) if_block1.d(); mounted = false; run_all(dispose); } }; } var MAX_DROPDOWN_RESULTS = 15; var FILE_MENTION_REGEX = /@([^@]+?\.[a-zA-Z0-9]+)(?=\s|$|@)/g; var MENTION_PREFIX = "@"; var SPACE_AFTER_MENTION = " "; var COMMAND_REGEX = /\/([^\/\s]+)(?=\s|$|\/)/g; var COMMAND_PREFIX = "/"; var SPACE_AFTER_COMMAND = " "; var SYSTEM_PREVIEW_LENGTH = 80; function findMatchingFile(fileName, availableFiles) { const normalizedFileName = fileName.toLowerCase(); return availableFiles.find((file) => { const fullFileName = `${file.basename}.${file.extension}`; return fullFileName.toLowerCase() === normalizedFileName; }); } function escapeHtmlContent(text2) { const temporaryElement = document.createElement("div"); temporaryElement.textContent = text2; return temporaryElement.innerHTML; } function isCharacterWhitespace(character) { return /\s/.test(character); } function scrollSelectedIntoView(container, index2) { if (!container || index2 < 0) return; const selectedItem = container.children[index2]; if (!selectedItem) return; const dropdownRect = container.getBoundingClientRect(); const itemRect = selectedItem.getBoundingClientRect(); const isItemVisible = itemRect.top >= dropdownRect.top && itemRect.bottom <= dropdownRect.bottom; if (!isItemVisible) { selectedItem.scrollIntoView({ block: "nearest", behavior: "smooth" }); } } function formatSystemPreview(text2) { const singleLine = text2.replace(/\r?\n/g, " "); if (singleLine.length <= SYSTEM_PREVIEW_LENGTH) return singleLine; return `${singleLine.slice(0, SYSTEM_PREVIEW_LENGTH - 1)}\u2026`; } function fuzzyMatch(target, query) { if (!query) return true; let ti = 0; const t = target.toLowerCase(); for (const qc of query) { ti = t.indexOf(qc, ti); if (ti === -1) return false; ti++; } return true; } function createFileRemovalPattern(file) { const fullFileName = `${file.basename}.${file.extension}`; const escapedFileName = fullFileName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); return new RegExp(`${MENTION_PREFIX}${escapedFileName}\\s?`, "g"); } function instance($$self, $$props, $$invalidate) { let { placeholder = I18n.t("commands.actionPalette.placeholder") } = $$props; let { value = "" } = $$props; let { providerLabel = "" } = $$props; let { providerId = void 0 } = $$props; let { getFiles = void 0 } = $$props; let { getProviders = void 0 } = $$props; let { onProviderChange = void 0 } = $$props; let { getModels = void 0 } = $$props; let { onModelChange = void 0 } = $$props; let { onCreativityChange = void 0 } = $$props; let { getSystemPrompts = void 0 } = $$props; const dispatch = createEventDispatcher(); let contentElement = null; let dropdownElement = null; let commandDropdownElement = null; let providerDropdownElement = null; let modelDropdownElement = null; let creativityDropdownElement = null; let systemDropdownElement = null; let activeDropdown = "none"; let filteredItems = []; let fileItems = []; let commandItems = []; let providerItems = []; let modelItems = []; let creativityItems = []; let systemItems = []; let allProviders = []; let allModels = []; let allCreativities = []; let allSystemPrompts = []; function updateFilteredDropdownItems(matches2) { $$invalidate(3, filteredItems = matches2); if (matches2.length === 0) { $$invalidate(17, selectedIndex = -1); return; } if (selectedIndex < 0 || selectedIndex >= matches2.length) { $$invalidate(17, selectedIndex = 0); } } const dropdownControllers = { provider: { kind: "provider", show: () => showProviderDropdown(), refresh: () => applyProviderFilter() }, model: { kind: "model", show: () => showModelDropdown(), refresh: () => applyModelFilter() }, creativity: { kind: "creativity", show: () => showCreativityDropdown(), refresh: () => applyCreativityFilter() }, system: { kind: "system", show: () => showSystemDropdown(), refresh: () => applySystemFilter() } }; let selectedIndex = -1; let badgeHighlight = false; let selectedSystemPromptValue = void 0; let historyIndex = getPromptHistoryLength(); let draftBeforeHistory = value; let selectedFiles = []; let textContent = ""; let cursorPosition = 0; let mentionStartIndex = -1; let commandStartIndex = -1; let textTokens = []; let providerName = providerLabel.split(" \xB7 ")[0] || ""; let modelName = (providerLabel.split(" \xB7 ")[1] || "").trim(); let creativityBadge = (providerLabel.split(" \xB7 ")[2] || "").trim(); let systemPromptBadge = ""; function getCreativityOptions() { return [ { id: "", name: I18n.t("settings.creativityNone") }, { id: "low", name: I18n.t("settings.creativityLow") }, { id: "medium", name: I18n.t("settings.creativityMedium") }, { id: "high", name: I18n.t("settings.creativityHigh") } ]; } function extractMentionsFromText(text2) { if (!getFiles) { return { mentions: [], newSelectedFiles: [] }; } const availableFiles = getFiles(); const mentions = []; const newSelectedFiles = []; const mentionMatches = Array.from(text2.matchAll(FILE_MENTION_REGEX)); for (const match of mentionMatches) { const fileName = (match[1] || "").trim(); const matchedFile = findMatchingFile(fileName, availableFiles); if (matchedFile && !selectedFiles.includes(matchedFile.path)) { newSelectedFiles.push(matchedFile.path); } mentions.push(match[0]); } return { mentions, newSelectedFiles }; } function getAvailableCommands() { return [ { name: "provider", description: I18n.t("commands.actionPalette.changeProvider") }, { name: "model", description: I18n.t("commands.actionPalette.changeModel") }, { name: "creativity", description: I18n.t("commands.actionPalette.changeCreativity") }, { name: "system", description: I18n.t("commands.actionPalette.changeSystemPrompt") } ]; } function fetchAvailableProviders() { return __awaiter(this, void 0, void 0, function* () { if (!getProviders) return []; try { return yield getProviders(); } catch (error) { console.error("Error fetching providers:", error); return []; } }); } function fetchAvailableModels() { return __awaiter(this, void 0, void 0, function* () { if (!getModels || !providerId) return []; try { return yield getModels(providerId); } catch (error) { console.error("Error fetching models:", error); return []; } }); } function parseTextToTokens(text2) { var _a2; const tokens = []; if (getFiles) { const availableFiles = getFiles(); const { newSelectedFiles } = extractMentionsFromText(text2); if (newSelectedFiles.length > 0) { selectedFiles = [...selectedFiles, ...newSelectedFiles]; } } const mentionMatches = getFiles ? Array.from(text2.matchAll(FILE_MENTION_REGEX)) : []; const commandMatches = Array.from(text2.matchAll(COMMAND_REGEX)); const allMatches = [ ...mentionMatches.map((match) => ({ type: "file", match })), ...commandMatches.map((match) => ({ type: "command", match })) ].sort((a, b) => { var _a3, _b; return ((_a3 = a.match.index) !== null && _a3 !== void 0 ? _a3 : 0) - ((_b = b.match.index) !== null && _b !== void 0 ? _b : 0); }); let lastIndex = 0; for (const { type, match } of allMatches) { const matchStart = (_a2 = match.index) !== null && _a2 !== void 0 ? _a2 : 0; const matchEnd = matchStart + match[0].length; if (matchStart > lastIndex) { tokens.push({ type: "text", content: text2.substring(lastIndex, matchStart), start: lastIndex, end: matchStart }); } if (type === "file" && getFiles) { const fileName = (match[1] || "").trim(); const availableFiles = getFiles(); const matchedFile = findMatchingFile(fileName, availableFiles); if (matchedFile) { tokens.push({ type: "file", content: match[0], start: matchStart, end: matchEnd, filePath: matchedFile.path }); } else { tokens.push({ type: "text", content: match[0], start: matchStart, end: matchEnd }); } } else if (type === "command") { const commandName = (match[1] || "").trim(); const availableCommands = getAvailableCommands(); const matchedCommand = availableCommands.find((cmd) => cmd.name === commandName); if (matchedCommand) { tokens.push({ type: "command", content: match[0], start: matchStart, end: matchEnd, commandName: matchedCommand.name }); } else { tokens.push({ type: "text", content: match[0], start: matchStart, end: matchEnd }); } } lastIndex = matchEnd; } if (lastIndex < text2.length) { tokens.push({ type: "text", content: text2.substring(lastIndex), start: lastIndex, end: text2.length }); } return tokens; } function getCurrentCursorPosition() { var _a2; if (!contentElement) return 0; const selection = window.getSelection(); if (!selection || selection.rangeCount === 0) return 0; const range = selection.getRangeAt(0); let position = 0; const walker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT, null); let textNode; while (textNode = walker.nextNode()) { if (textNode === range.startContainer) { return position + range.startOffset; } position += ((_a2 = textNode.textContent) === null || _a2 === void 0 ? void 0 : _a2.length) || 0; } return position; } function setCursorPosition(position) { var _a2; if (!contentElement) return; const selection = window.getSelection(); const range = document.createRange(); let currentPosition = 0; const walker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT, null); let textNode; while (textNode = walker.nextNode()) { const nodeLength = ((_a2 = textNode.textContent) === null || _a2 === void 0 ? void 0 : _a2.length) || 0; if (currentPosition + nodeLength >= position) { const offset = position - currentPosition; range.setStart(textNode, offset); range.setEnd(textNode, offset); selection === null || selection === void 0 ? void 0 : selection.removeAllRanges(); selection === null || selection === void 0 ? void 0 : selection.addRange(range); return; } currentPosition += nodeLength; } } function renderTokensAsHtml() { return textTokens.map((token) => { if (token.type === "file") { return `${escapeHtmlContent(token.content)}`; } if (token.type === "command") { return `${escapeHtmlContent(token.content)}`; } return escapeHtmlContent(token.content); }).join(""); } function updateContentDisplay() { if (!contentElement) return; const currentCursor = getCurrentCursorPosition(); $$invalidate(4, contentElement.innerHTML = renderTokensAsHtml(), contentElement); tick().then(() => { setCursorPosition(currentCursor); }); } function setProviderBadgeLabel(pName, mName) { providerName = pName; modelName = mName; const base = [providerName, modelName].filter(Boolean).join(" \xB7 "); const extras = [creativityBadge, systemPromptBadge].filter(Boolean).join(" \xB7 "); $$invalidate(0, providerLabel = extras ? `${base} \xB7 ${extras}` : base); } function highlightBadgeTemporarily() { $$invalidate(18, badgeHighlight = true); setTimeout( () => { $$invalidate(18, badgeHighlight = false); }, 900 ); } function applyHistoryEntry(text2) { textContent = text2; cursorPosition = textContent.length; selectedFiles = []; textTokens = parseTextToTokens(textContent); hideDropdown(); updateContentDisplay(); tick().then(() => { setCursorPosition(textContent.length); }); } onMount(() => { queueMicrotask(() => { contentElement === null || contentElement === void 0 ? void 0 : contentElement.focus(); if (value) { textContent = value; textTokens = parseTextToTokens(textContent); updateContentDisplay(); } }); }); function handleDropdownNavigation(event) { if (activeDropdown === "none" || filteredItems.length === 0) return false; function moveSelection(delta) { $$invalidate(17, selectedIndex = Math.min(Math.max(selectedIndex + delta, -1), filteredItems.length - 1)); scrollSelectedIntoView(getDropdownElementForActiveType(), selectedIndex); } switch (event.key) { case "ArrowDown": event.preventDefault(); moveSelection(1); return true; case "ArrowUp": event.preventDefault(); moveSelection(-1); return true; case "Enter": if (event.shiftKey) return false; case "Tab": event.preventDefault(); if (selectedIndex >= 0 && filteredItems[selectedIndex]) { handleSelection(filteredItems[selectedIndex]); } return true; case "Escape": event.preventDefault(); hideDropdown(); return true; default: return false; } } function getDropdownElementForActiveType() { switch (activeDropdown) { case "file": return dropdownElement; case "command": return commandDropdownElement; case "provider": return providerDropdownElement; case "model": return modelDropdownElement; case "creativity": return creativityDropdownElement; case "system": return systemDropdownElement; default: return null; } } function handleGeneralNavigation(event) { switch (event.key) { case "Enter": if (event.shiftKey) return; event.preventDefault(); submitAction(); break; case "Escape": event.preventDefault(); dispatch("cancel"); break; } } function handleKeydown(event) { if (handleDropdownNavigation(event)) { return; } if (handleHistoryNavigation(event)) { return; } handleGeneralNavigation(event); } function handleHistoryNavigation(event) { const isHistoryKey = event.key === "ArrowUp" || event.key === "ArrowDown"; if (!isHistoryKey || activeDropdown !== "none") { return false; } const currentPosition = getCurrentCursorPosition(); cursorPosition = currentPosition; if (event.key === "ArrowUp" && !isCursorOnFirstLine(currentPosition)) { return false; } if (event.key === "ArrowDown" && !isCursorOnLastLine(currentPosition)) { return false; } const historyLength = getPromptHistoryLength(); if (historyLength === 0) return false; if (historyIndex === historyLength) { draftBeforeHistory = textContent; } if (event.key === "ArrowUp") { if (historyIndex > 0) { historyIndex -= 1; } } else if (event.key === "ArrowDown") { if (historyIndex < historyLength) { historyIndex += 1; } } const entry = historyIndex >= 0 && historyIndex < historyLength ? getPromptHistoryEntry(historyIndex) : draftBeforeHistory; event.preventDefault(); applyHistoryEntry(entry || ""); return true; } function isCursorOnFirstLine(position) { const index2 = Math.max(position - 1, 0); return textContent.lastIndexOf("\n", index2) === -1; } function isCursorOnLastLine(position) { return textContent.indexOf("\n", position) === -1; } function handleInput(event) { const target = event.target; const newTextContent = target.textContent || ""; textContent = newTextContent; cursorPosition = getCurrentCursorPosition(); historyIndex = getPromptHistoryLength(); draftBeforeHistory = textContent; textTokens = parseTextToTokens(textContent); checkForMentionTrigger(); checkForCommandTrigger(); if (activeDropdown === "provider") { applyProviderFilter(); } if (activeDropdown === "model") { applyModelFilter(); } const newHtmlContent = renderTokensAsHtml(); if (target.innerHTML !== newHtmlContent) { updateContentDisplay(); } } function isCompleteMention(mentionText) { if (!getFiles) return false; return selectedFiles.some((filePath) => { var _a2; const file = (_a2 = getFiles()) === null || _a2 === void 0 ? void 0 : _a2.find((f) => f.path === filePath); if (!file) return false; const fullFileName = `${file.basename}.${file.extension}`; return mentionText === `${MENTION_PREFIX}${fullFileName}`; }); } function isCompleteCommand(commandText) { const availableCommands = getAvailableCommands(); return availableCommands.some((cmd) => commandText === `${COMMAND_PREFIX}${cmd.name}`); } function getCommandQuery(commandName) { const beforeCursor = textContent.substring(0, cursorPosition); const token = `${COMMAND_PREFIX}${commandName}`; const foundIndex = beforeCursor.lastIndexOf(token); if (foundIndex === -1) return ""; const charBefore = foundIndex > 0 ? beforeCursor[foundIndex - 1] : " "; if (foundIndex > 0 && !isCharacterWhitespace(charBefore)) return ""; const afterNameIndex = foundIndex + token.length; const afterName = textContent.substring(afterNameIndex); const hasSpace = afterName.startsWith(SPACE_AFTER_COMMAND); const queryStart = hasSpace ? afterNameIndex + SPACE_AFTER_COMMAND.length : afterNameIndex; return textContent.substring(queryStart, cursorPosition).trim().toLowerCase(); } function filterAvailableCommands(query) { const availableCommands = getAvailableCommands(); const normalizedQuery = query.toLowerCase(); return availableCommands.filter((command) => { return command.name.toLowerCase().includes(normalizedQuery) || command.description.toLowerCase().includes(normalizedQuery); }).slice(0, MAX_DROPDOWN_RESULTS); } function filterAvailableFiles(query) { if (!getFiles) return []; const availableFiles = getFiles(); const normalizedQuery = query.toLowerCase(); return availableFiles.filter((file) => { const fullFileName = `${file.basename}.${file.extension}`; const isQueryMatch = file.basename.toLowerCase().includes(normalizedQuery) || fullFileName.toLowerCase().includes(normalizedQuery); const isNotAlreadySelected = !selectedFiles.includes(file.path); return isQueryMatch && isNotAlreadySelected; }).slice(0, MAX_DROPDOWN_RESULTS); } function checkForMentionTrigger() { if (!getFiles) return; const beforeCursor = textContent.substring(0, cursorPosition); const mentionIndex = beforeCursor.lastIndexOf(MENTION_PREFIX); if (mentionIndex === -1) { hideDropdown(); return; } const characterBeforeMention = mentionIndex > 0 ? beforeCursor[mentionIndex - 1] : " "; if (mentionIndex > 0 && !isCharacterWhitespace(characterBeforeMention)) { hideDropdown(); return; } const textAfterMention = beforeCursor.substring(mentionIndex + 1); const possibleMention = MENTION_PREFIX + textAfterMention; if (isCompleteMention(possibleMention)) { hideDropdown(); return; } mentionStartIndex = mentionIndex; $$invalidate(3, filteredItems = filterAvailableFiles(textAfterMention)); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "file"); $$invalidate(17, selectedIndex = 0); } else { hideDropdown(); } } function hideDropdown() { $$invalidate(2, activeDropdown = "none"); $$invalidate(3, filteredItems = []); $$invalidate(17, selectedIndex = -1); mentionStartIndex = -1; commandStartIndex = -1; allProviders = []; allModels = []; allCreativities = []; allSystemPrompts = []; } function insertFileAtCursor(file) { if (mentionStartIndex === -1) return; if (!selectedFiles.includes(file.path)) { selectedFiles = [...selectedFiles, file.path]; } const fullFileName = `${file.basename}.${file.extension}`; const beforeMention = textContent.substring(0, mentionStartIndex); const afterCursor = textContent.substring(cursorPosition); const newText = beforeMention + MENTION_PREFIX + fullFileName + SPACE_AFTER_MENTION + afterCursor; textContent = newText; textTokens = parseTextToTokens(textContent); hideDropdown(); if (contentElement) { updateContentDisplay(); tick().then(() => { const newCursorPosition = beforeMention.length + fullFileName.length + 2; setCursorPosition(newCursorPosition); }); } } function checkForCommandTrigger() { const beforeCursor = textContent.substring(0, cursorPosition); const commandIndex = beforeCursor.lastIndexOf(COMMAND_PREFIX); if (commandIndex === -1) { if (activeDropdown !== "file") { hideDropdown(); } return; } const characterBeforeCommand = commandIndex > 0 ? beforeCursor[commandIndex - 1] : " "; if (commandIndex > 0 && !isCharacterWhitespace(characterBeforeCommand)) { if (activeDropdown !== "file") { hideDropdown(); } return; } const textAfterCommand = beforeCursor.substring(commandIndex + 1); const firstTokenMatch = textAfterCommand.match(/([^\s\/]+)/); const typedName = firstTokenMatch ? firstTokenMatch[1] : ""; const commandName = typedName.toLowerCase(); commandStartIndex = commandIndex; const dropdownController = dropdownControllers[commandName]; if (dropdownController) { if (activeDropdown !== dropdownController.kind) { void dropdownController.show(); } else { dropdownController.refresh(); } return; } if (["provider", "model", "creativity", "system"].includes(activeDropdown)) { hideDropdown(); } $$invalidate(3, filteredItems = filterAvailableCommands(textAfterCommand)); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "command"); $$invalidate(17, selectedIndex = 0); } else { hideDropdown(); } } function insertCommandAtCursor(command) { if (commandStartIndex === -1) return; const dropdownController = dropdownControllers[command.name]; if (dropdownController) { insertCommand(command.name); void dropdownController.show(); return; } insertCommand(command.name); const commandLength = COMMAND_PREFIX.length + command.name.length + SPACE_AFTER_COMMAND.length; removeCommandFromText(commandStartIndex, commandLength); } function insertCommand(commandName) { if (commandStartIndex === -1) return; const beforeCommand = textContent.substring(0, commandStartIndex); const afterCursor = textContent.substring(cursorPosition); const newText = beforeCommand + COMMAND_PREFIX + commandName + SPACE_AFTER_COMMAND + afterCursor; textContent = newText; textTokens = parseTextToTokens(textContent); hideDropdown(); if (contentElement) { updateContentDisplay(); tick().then(() => { const newCursorPosition = beforeCommand.length + commandName.length + 2; setCursorPosition(newCursorPosition); }); } } const selectionHandlers = { none: () => void 0, file: (item) => insertFileAtCursor(item), command: (item) => insertCommandAtCursor(item), provider: (item) => selectProvider(item), model: (item) => selectModel(item), creativity: (item) => selectCreativity(item), system: (item) => selectSystemPrompt(item) }; function handleSelection(item) { var _a2; void ((_a2 = selectionHandlers[activeDropdown]) === null || _a2 === void 0 ? void 0 : _a2.call(selectionHandlers, item)); } function selectProvider(provider) { return __awaiter(this, void 0, void 0, function* () { try { if (onProviderChange) { yield onProviderChange(provider.id); } setProviderBadgeLabel(provider.providerName, provider.name); $$invalidate(24, providerId = provider.id); providerName = provider.providerName; highlightBadgeTemporarily(); removeCommandAndQuery("provider"); hideDropdown(); } catch (error) { console.error("Error selecting provider:", error); hideDropdown(); } }); } function selectModel(model) { return __awaiter(this, void 0, void 0, function* () { try { if (onModelChange) { yield onModelChange(model.name); } setProviderBadgeLabel(providerName, model.name); highlightBadgeTemporarily(); removeCommandAndQuery("model"); hideDropdown(); } catch (error) { console.error("Error selecting model:", error); hideDropdown(); } }); } function applyCreativityFilter() { if (!allCreativities || allCreativities.length === 0) return; const q = getCommandQuery("creativity"); const matches2 = allCreativities.filter((c) => fuzzyMatch(c.name, q)).slice(0, MAX_DROPDOWN_RESULTS); updateFilteredDropdownItems(matches2); if (q) { const norm = (s) => s.toLowerCase(); const exact = matches2.find((c) => norm(c.name) === norm(q)); if (exact) { void selectCreativity(exact); } } } function showCreativityDropdown() { return __awaiter(this, void 0, void 0, function* () { try { allCreativities = getCreativityOptions(); applyCreativityFilter(); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "creativity"); $$invalidate(17, selectedIndex = 0); } } catch (error) { console.error("Error showing creativity dropdown:", error); } }); } function selectCreativity(option2) { return __awaiter(this, void 0, void 0, function* () { try { if (onCreativityChange) { yield onCreativityChange(option2.id); } creativityBadge = option2.name; setProviderBadgeLabel(providerName, modelName); highlightBadgeTemporarily(); removeCommandAndQuery("creativity"); hideDropdown(); } catch (error) { console.error("Error selecting creativity:", error); hideDropdown(); } }); } function applySystemFilter() { if (!allSystemPrompts || allSystemPrompts.length === 0) return; const q = getCommandQuery("system"); const normalizedQuery = q.toLowerCase(); const matches2 = allSystemPrompts.filter((s) => normalizedQuery ? s.name.toLowerCase().includes(normalizedQuery) : true).sort((a, b) => a.name.localeCompare(b.name)).slice(0, MAX_DROPDOWN_RESULTS); updateFilteredDropdownItems(matches2); if (q) { const norm = (s) => s.toLowerCase(); const exact = matches2.find((s) => norm(s.name) === norm(q)); if (exact) { void selectSystemPrompt(exact); } } } function showSystemDropdown() { return __awaiter(this, void 0, void 0, function* () { if (!getSystemPrompts) return; try { allSystemPrompts = getSystemPrompts(); applySystemFilter(); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "system"); $$invalidate(17, selectedIndex = 0); } } catch (error) { console.error("Error showing system dropdown:", error); } }); } function selectSystemPrompt(option2) { return __awaiter(this, void 0, void 0, function* () { try { selectedSystemPromptValue = option2.system; systemPromptBadge = option2.name; setProviderBadgeLabel(providerName, modelName); highlightBadgeTemporarily(); removeCommandAndQuery("system"); hideDropdown(); } catch (error) { console.error("Error selecting system prompt:", error); hideDropdown(); } }); } function applyProviderFilter() { if (!allProviders || allProviders.length === 0) return; const q = getCommandQuery("provider"); const matches2 = allProviders.filter((p) => fuzzyMatch(p.name, q) || fuzzyMatch(p.providerName, q)).slice(0, MAX_DROPDOWN_RESULTS); updateFilteredDropdownItems(matches2); if (q && matches2.length === 1 && matches2[0].name.toLowerCase() === q) { void selectProvider(matches2[0]); } } function removeCommandAndQuery(commandName) { const token = `${COMMAND_PREFIX}${commandName}`; const foundIndex = textContent.lastIndexOf(token); if (foundIndex === -1) return; const charBefore = foundIndex > 0 ? textContent[foundIndex - 1] : " "; if (foundIndex > 0 && !isCharacterWhitespace(charBefore)) return; let removalStart = foundIndex; let idx = foundIndex + token.length; if (textContent[idx] === SPACE_AFTER_COMMAND) { idx += SPACE_AFTER_COMMAND.length; } while (idx < textContent.length) { const ch = textContent[idx]; if (isCharacterWhitespace(ch) || ch === "/" || ch === "@") break; idx++; } const removalEnd = idx; const before = textContent.substring(0, removalStart); const after = textContent.substring(removalEnd); textContent = before + after; textTokens = parseTextToTokens(textContent); if (contentElement) { updateContentDisplay(); tick().then(() => { setCursorPosition(before.length); }); } } function showProviderDropdown() { return __awaiter(this, void 0, void 0, function* () { if (!getProviders) return; try { const providers = yield fetchAvailableProviders(); allProviders = providers; applyProviderFilter(); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "provider"); $$invalidate(17, selectedIndex = 0); } else { console.warn("No providers available"); } } catch (error) { console.error("Error showing provider dropdown:", error); } }); } function applyModelFilter() { if (!allModels || allModels.length === 0) return; const q = getCommandQuery("model"); const matches2 = allModels.filter((m) => fuzzyMatch(m.name, q)).slice(0, MAX_DROPDOWN_RESULTS); updateFilteredDropdownItems(matches2); if (q && matches2.length === 1 && matches2[0].name.toLowerCase() === q) { void selectModel(matches2[0]); } } function showModelDropdown() { return __awaiter(this, void 0, void 0, function* () { if (!getModels || !providerId) return; try { const models = yield fetchAvailableModels(); allModels = models; applyModelFilter(); if (filteredItems.length > 0) { $$invalidate(2, activeDropdown = "model"); $$invalidate(17, selectedIndex = 0); } else { console.warn("No models available"); } } catch (error) { console.error("Error showing model dropdown:", error); } }); } function handleContentClick(event) { const target = event.target; if (target.classList.contains("file-mention")) { const filePath = target.dataset.path; if (filePath) { removeFileReference(filePath); } } } function removeCommandFromText(commandStartIndex2, commandLength) { if (commandStartIndex2 === -1) return; const beforeCommand = textContent.substring(0, commandStartIndex2); const afterCommand = textContent.substring(commandStartIndex2 + commandLength); textContent = beforeCommand + afterCommand; textTokens = parseTextToTokens(textContent); if (contentElement) { updateContentDisplay(); tick().then(() => { setCursorPosition(beforeCommand.length); }); } } function removeFileReference(filePath) { var _a2; selectedFiles = selectedFiles.filter((path) => path !== filePath); const file = (_a2 = getFiles === null || getFiles === void 0 ? void 0 : getFiles()) === null || _a2 === void 0 ? void 0 : _a2.find((f) => f.path === filePath); if (file) { const removalPattern = createFileRemovalPattern(file); textContent = textContent.replace(removalPattern, ""); textTokens = parseTextToTokens(textContent); updateContentDisplay(); } } function submitAction() { addToPromptHistory(textContent); historyIndex = getPromptHistoryLength(); draftBeforeHistory = textContent; dispatch("submit", { text: textContent, selectedFiles, systemPrompt: selectedSystemPromptValue }); } function handleKeyup(event) { if (event.key === "Backspace" || event.key === "Delete") { const currentlyMentionedFiles = textTokens.filter((token) => token.type === "file" && token.filePath).map((token) => token.filePath); const filesToRemove = selectedFiles.filter((filePath) => !currentlyMentionedFiles.includes(filePath)); if (filesToRemove.length > 0) { selectedFiles = selectedFiles.filter((path) => currentlyMentionedFiles.includes(path)); } } } function div0_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { contentElement = $$value; $$invalidate(4, contentElement); }); } const click_handler = (item) => handleSelection(item); const keydown_handler = (item, event) => event.key === "Enter" && handleSelection(item); function div0_binding_1($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { dropdownElement = $$value; $$invalidate(5, dropdownElement); }); } const click_handler_1 = (item) => handleSelection(item); const keydown_handler_1 = (item, event) => event.key === "Enter" && handleSelection(item); function div1_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { commandDropdownElement = $$value; $$invalidate(6, commandDropdownElement); }); } const click_handler_2 = (item) => handleSelection(item); const keydown_handler_2 = (item, event) => event.key === "Enter" && handleSelection(item); function div2_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { providerDropdownElement = $$value; $$invalidate(7, providerDropdownElement); }); } const click_handler_3 = (item) => handleSelection(item); const keydown_handler_3 = (item, event) => event.key === "Enter" && handleSelection(item); function div3_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { modelDropdownElement = $$value; $$invalidate(8, modelDropdownElement); }); } const click_handler_4 = (item) => handleSelection(item); const keydown_handler_4 = (item, event) => event.key === "Enter" && handleSelection(item); function div4_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { creativityDropdownElement = $$value; $$invalidate(9, creativityDropdownElement); }); } const click_handler_5 = (item) => handleSelection(item); const keydown_handler_5 = (item, event) => event.key === "Enter" && handleSelection(item); function div5_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { systemDropdownElement = $$value; $$invalidate(10, systemDropdownElement); }); } $$self.$$set = ($$props2) => { if ("placeholder" in $$props2) $$invalidate(1, placeholder = $$props2.placeholder); if ("value" in $$props2) $$invalidate(25, value = $$props2.value); if ("providerLabel" in $$props2) $$invalidate(0, providerLabel = $$props2.providerLabel); if ("providerId" in $$props2) $$invalidate(24, providerId = $$props2.providerId); if ("getFiles" in $$props2) $$invalidate(26, getFiles = $$props2.getFiles); if ("getProviders" in $$props2) $$invalidate(27, getProviders = $$props2.getProviders); if ("onProviderChange" in $$props2) $$invalidate(28, onProviderChange = $$props2.onProviderChange); if ("getModels" in $$props2) $$invalidate(29, getModels = $$props2.getModels); if ("onModelChange" in $$props2) $$invalidate(30, onModelChange = $$props2.onModelChange); if ("onCreativityChange" in $$props2) $$invalidate(31, onCreativityChange = $$props2.onCreativityChange); if ("getSystemPrompts" in $$props2) $$invalidate(32, getSystemPrompts = $$props2.getSystemPrompts); }; $$self.$$.update = () => { if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(11, fileItems = activeDropdown === "file" ? filteredItems : []); } if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(12, commandItems = activeDropdown === "command" ? filteredItems : []); } if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(13, providerItems = activeDropdown === "provider" ? filteredItems : []); } if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(14, modelItems = activeDropdown === "model" ? filteredItems : []); } if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(15, creativityItems = activeDropdown === "creativity" ? filteredItems : []); } if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/ 12) { $: $$invalidate(16, systemItems = activeDropdown === "system" ? filteredItems : []); } }; return [ providerLabel, placeholder, activeDropdown, filteredItems, contentElement, dropdownElement, commandDropdownElement, providerDropdownElement, modelDropdownElement, creativityDropdownElement, systemDropdownElement, fileItems, commandItems, providerItems, modelItems, creativityItems, systemItems, selectedIndex, badgeHighlight, handleKeydown, handleInput, handleSelection, handleContentClick, handleKeyup, providerId, value, getFiles, getProviders, onProviderChange, getModels, onModelChange, onCreativityChange, getSystemPrompts, div0_binding, click_handler, keydown_handler, div0_binding_1, click_handler_1, keydown_handler_1, div1_binding, click_handler_2, keydown_handler_2, div2_binding, click_handler_3, keydown_handler_3, div3_binding, click_handler_4, keydown_handler_4, div4_binding, click_handler_5, keydown_handler_5, div5_binding ]; } var ActionPalette = class extends SvelteComponent { constructor(options) { super(); init( this, options, instance, create_fragment, safe_not_equal, { placeholder: 1, value: 25, providerLabel: 0, providerId: 24, getFiles: 26, getProviders: 27, onProviderChange: 28, getModels: 29, onModelChange: 30, onCreativityChange: 31, getSystemPrompts: 32 }, null, [-1, -1, -1, -1, -1] ); } }; var ActionPalette_default = ActionPalette; // src/ui/actionPalettePlugin.ts var SvelteActionPaletteWidget = class extends import_view2.WidgetType { constructor(options) { super(); this.options = options; this.container = null; this.app = null; } toDOM(view) { this.container = document.createElement("div"); this.container.addClass("local-gpt-action-palette-container"); const mountTarget = document.createElement("div"); this.container.appendChild(mountTarget); this.app = new ActionPalette_default({ target: mountTarget, props: { placeholder: this.options.placeholder || I18n.t("commands.actionPalette.placeholder"), providerLabel: this.options.modelLabel || "", providerId: this.options.providerId, getFiles: this.options.getFiles, getProviders: this.options.getProviders, onProviderChange: this.options.onProviderChange, getModels: this.options.getModels, onModelChange: this.options.onModelChange, onCreativityChange: this.options.onCreativityChange, getSystemPrompts: this.options.getSystemPrompts } }); this.app.$on( "submit", (e) => { var _a2, _b; (_b = (_a2 = this.options).onSubmit) == null ? void 0 : _b.call( _a2, e.detail.text, e.detail.selectedFiles, e.detail.systemPrompt ); } ); this.app.$on("cancel", () => { var _a2, _b; (_b = (_a2 = this.options).onCancel) == null ? void 0 : _b.call(_a2); }); return this.container; } destroy(dom) { var _a2; (_a2 = this.app) == null ? void 0 : _a2.$destroy(); this.app = null; this.container = null; } }; var ShowActionPaletteEffect = import_state2.StateEffect.define(); var HideActionPaletteEffect = import_state2.StateEffect.define(); function captureSelectionSnapshot(view) { const rangesAll = view.state.selection.ranges.map((r) => ({ from: r.from, to: r.to })); const nonEmpty = rangesAll.filter((r) => r.from !== r.to); return { fakeSelections: nonEmpty.length ? nonEmpty : null, previousSelectionRanges: rangesAll.length ? rangesAll : null, previousCursor: view.state.selection.main.head }; } function mapRanges(ranges, changes) { return ranges ? ranges.map((r) => ({ from: changes.mapPos(r.from), to: changes.mapPos(r.to) })) : null; } function buildDecorations(pos, options, fakeSelections) { const builder = new import_state2.RangeSetBuilder(); const widget = new SvelteActionPaletteWidget(options); builder.add(pos, pos, import_view2.Decoration.widget({ widget, side: -1, block: true })); if (fakeSelections) { for (const r of fakeSelections) { builder.add( r.from, r.to, import_view2.Decoration.mark({ class: "local-gpt-fake-selection" }) ); } } return builder.finish(); } var actionPaletteStateField = import_state2.StateField.define({ create() { return { deco: import_view2.Decoration.none, pos: null, fakeSelections: null, previousSelectionRanges: null, previousCursor: null }; }, update(value, tr) { let { deco, pos, fakeSelections, previousSelectionRanges, previousCursor } = value; if (tr.docChanged) { deco = deco.map(tr.changes); if (pos !== null) pos = tr.changes.mapPos(pos); fakeSelections = mapRanges(fakeSelections, tr.changes); previousSelectionRanges = mapRanges( previousSelectionRanges, tr.changes ); if (previousCursor !== null) previousCursor = tr.changes.mapPos(previousCursor); } for (const e of tr.effects) { if (e.is(ShowActionPaletteEffect)) { pos = e.value.pos; fakeSelections = e.value.fakeSelections; previousSelectionRanges = e.value.previousSelectionRanges; previousCursor = e.value.previousCursor; deco = buildDecorations(pos, e.value.options, fakeSelections); } else if (e.is(HideActionPaletteEffect)) { pos = null; fakeSelections = null; previousSelectionRanges = null; previousCursor = null; deco = import_view2.Decoration.none; } } return { deco, pos, fakeSelections, previousSelectionRanges, previousCursor }; }, provide: (f) => import_view2.EditorView.decorations.from(f, (v) => v.deco) }); var actionPalettePlugin = [actionPaletteStateField]; function showActionPalette(view, pos, options) { const { fakeSelections, previousSelectionRanges, previousCursor } = captureSelectionSnapshot(view); view.dispatch({ effects: ShowActionPaletteEffect.of({ pos, options, fakeSelections, previousSelectionRanges, previousCursor }) }); } function hideActionPalette(view) { const state = view.state.field(actionPaletteStateField, false); if (state) { if (state.previousSelectionRanges && state.previousSelectionRanges.length) { const selection = import_state2.EditorSelection.create( state.previousSelectionRanges.map( (r) => import_state2.EditorSelection.range(r.from, r.to) ) ); view.dispatch({ selection }); view.focus(); } else if (state.previousCursor !== null) { view.dispatch({ selection: { anchor: state.previousCursor } }); view.focus(); } } view.dispatch({ effects: HideActionPaletteEffect.of(null) }); } // src/rag.ts var import_obsidian2 = require("obsidian"); // node_modules/pdfjs-dist/build/pdf.mjs var __webpack_require__ = {}; (() => { __webpack_require__.d = (exports, definition) => { for (var key in definition) { if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } }; })(); (() => { __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); })(); var __webpack_exports__ = globalThis.pdfjsLib = {}; __webpack_require__.d(__webpack_exports__, { AbortException: () => ( /* reexport */ AbortException ), AnnotationEditorLayer: () => ( /* reexport */ AnnotationEditorLayer ), AnnotationEditorParamsType: () => ( /* reexport */ AnnotationEditorParamsType ), AnnotationEditorType: () => ( /* reexport */ AnnotationEditorType ), AnnotationEditorUIManager: () => ( /* reexport */ AnnotationEditorUIManager ), AnnotationLayer: () => ( /* reexport */ AnnotationLayer ), AnnotationMode: () => ( /* reexport */ AnnotationMode ), CMapCompressionType: () => ( /* reexport */ CMapCompressionType ), ColorPicker: () => ( /* reexport */ ColorPicker ), DOMSVGFactory: () => ( /* reexport */ DOMSVGFactory ), DrawLayer: () => ( /* reexport */ DrawLayer ), FeatureTest: () => ( /* reexport */ util_FeatureTest ), GlobalWorkerOptions: () => ( /* reexport */ GlobalWorkerOptions ), ImageKind: () => ( /* reexport */ util_ImageKind ), InvalidPDFException: () => ( /* reexport */ InvalidPDFException ), MissingPDFException: () => ( /* reexport */ MissingPDFException ), OPS: () => ( /* reexport */ OPS ), PDFDataRangeTransport: () => ( /* reexport */ PDFDataRangeTransport ), PDFDateString: () => ( /* reexport */ PDFDateString ), PDFWorker: () => ( /* reexport */ PDFWorker ), PasswordResponses: () => ( /* reexport */ PasswordResponses ), PermissionFlag: () => ( /* reexport */ PermissionFlag ), PixelsPerInch: () => ( /* reexport */ PixelsPerInch ), RenderingCancelledException: () => ( /* reexport */ RenderingCancelledException ), TextLayer: () => ( /* reexport */ TextLayer ), UnexpectedResponseException: () => ( /* reexport */ UnexpectedResponseException ), Util: () => ( /* reexport */ Util ), VerbosityLevel: () => ( /* reexport */ VerbosityLevel ), XfaLayer: () => ( /* reexport */ XfaLayer ), build: () => ( /* reexport */ build ), createValidAbsoluteUrl: () => ( /* reexport */ createValidAbsoluteUrl ), fetchData: () => ( /* reexport */ fetchData ), getDocument: () => ( /* reexport */ getDocument ), getFilenameFromUrl: () => ( /* reexport */ getFilenameFromUrl ), getPdfFilenameFromUrl: () => ( /* reexport */ getPdfFilenameFromUrl ), getXfaPageViewport: () => ( /* reexport */ getXfaPageViewport ), isDataScheme: () => ( /* reexport */ isDataScheme ), isPdfFile: () => ( /* reexport */ isPdfFile ), noContextMenu: () => ( /* reexport */ noContextMenu ), normalizeUnicode: () => ( /* reexport */ normalizeUnicode ), setLayerDimensions: () => ( /* reexport */ setLayerDimensions ), shadow: () => ( /* reexport */ shadow ), version: () => ( /* reexport */ version2 ) }); var isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; var FONT_IDENTITY_MATRIX = [1e-3, 0, 0, 1e-3, 0, 0]; var MAX_IMAGE_SIZE_TO_CACHE = 1e7; var LINE_FACTOR = 1.35; var LINE_DESCENT_FACTOR = 0.35; var BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; var RenderingIntentFlag = { ANY: 1, DISPLAY: 2, PRINT: 4, SAVE: 8, ANNOTATIONS_FORMS: 16, ANNOTATIONS_STORAGE: 32, ANNOTATIONS_DISABLE: 64, IS_EDITING: 128, OPLIST: 256 }; var AnnotationMode = { DISABLE: 0, ENABLE: 1, ENABLE_FORMS: 2, ENABLE_STORAGE: 3 }; var AnnotationEditorPrefix = "pdfjs_internal_editor_"; var AnnotationEditorType = { DISABLE: -1, NONE: 0, FREETEXT: 3, HIGHLIGHT: 9, STAMP: 13, INK: 15 }; var AnnotationEditorParamsType = { RESIZE: 1, CREATE: 2, FREETEXT_SIZE: 11, FREETEXT_COLOR: 12, FREETEXT_OPACITY: 13, INK_COLOR: 21, INK_THICKNESS: 22, INK_OPACITY: 23, HIGHLIGHT_COLOR: 31, HIGHLIGHT_DEFAULT_COLOR: 32, HIGHLIGHT_THICKNESS: 33, HIGHLIGHT_FREE: 34, HIGHLIGHT_SHOW_ALL: 35 }; var PermissionFlag = { PRINT: 4, MODIFY_CONTENTS: 8, COPY: 16, MODIFY_ANNOTATIONS: 32, FILL_INTERACTIVE_FORMS: 256, COPY_FOR_ACCESSIBILITY: 512, ASSEMBLE: 1024, PRINT_HIGH_QUALITY: 2048 }; var TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; var util_ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; var AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; var CMapCompressionType = { NONE: 0, BINARY: 1 }; var OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotation: 80, endAnnotation: 81, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91, setStrokeTransparent: 92, setFillTransparent: 93 }; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; var verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function _isValidProtocol(url) { switch (url == null ? void 0 : url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl = null, options = null) { if (!url) { return null; } try { if (options && typeof url === "string") { if (options.addDefaultProtocol && url.startsWith("www.")) { const dots = url.match(/\./g); if ((dots == null ? void 0 : dots.length) >= 2) { url = `http://${url}`; } } if (options.tryConvertEncoding) { try { url = stringToUTF8String(url); } catch (e) { } } } const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (e) { } return null; } function shadow(obj, prop, value, nonSerializable = false) { Object.defineProperty(obj, prop, { value, enumerable: !nonSerializable, configurable: true, writable: false }); return value; } var BaseException = function BaseExceptionClosure() { function BaseException2(message, name) { this.message = message; this.name = name; } BaseException2.prototype = new Error(); BaseException2.constructor = BaseException2; return BaseException2; }(); var PasswordException = class extends BaseException { constructor(msg, code) { super(msg, "PasswordException"); this.code = code; } }; var UnknownErrorException = class extends BaseException { constructor(msg, details) { super(msg, "UnknownErrorException"); this.details = details; } }; var InvalidPDFException = class extends BaseException { constructor(msg) { super(msg, "InvalidPDFException"); } }; var MissingPDFException = class extends BaseException { constructor(msg) { super(msg, "MissingPDFException"); } }; var UnexpectedResponseException = class extends BaseException { constructor(msg, status) { super(msg, "UnexpectedResponseException"); this.status = status; } }; var FormatError = class extends BaseException { constructor(msg) { super(msg, "FormatError"); } }; var AbortException = class extends BaseException { constructor(msg) { super(msg, "AbortException"); } }; function bytesToString(bytes) { if (typeof bytes !== "object" || (bytes == null ? void 0 : bytes.length) === void 0) { unreachable("Invalid argument for bytesToString"); } const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } const strBuf = []; for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { if (typeof str !== "string") { unreachable("Invalid argument for stringToBytes"); } const length = str.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 255; } return bytes; } function string32(value) { return String.fromCharCode(value >> 24 & 255, value >> 16 & 255, value >> 8 & 255, value & 255); } function objectFromMap(map) { const obj = /* @__PURE__ */ Object.create(null); for (const [key, value] of map) { obj[key] = value; } return obj; } function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } var util_FeatureTest = class { static get isLittleEndian() { return shadow(this, "isLittleEndian", isLittleEndian()); } static get isEvalSupported() { return shadow(this, "isEvalSupported", isEvalSupported()); } static get isOffscreenCanvasSupported() { return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); } static get platform() { if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.platform) === "string") { return shadow(this, "platform", { isMac: navigator.platform.includes("Mac") }); } return shadow(this, "platform", { isMac: false }); } static get isCSSRoundSupported() { var _a2, _b; return shadow(this, "isCSSRoundSupported", (_b = (_a2 = globalThis.CSS) == null ? void 0 : _a2.supports) == null ? void 0 : _b.call(_a2, "width: round(1.5px, 1px)")); } }; var hexNumbers = Array.from(Array(256).keys(), (n) => n.toString(16).padStart(2, "0")); var _getExtremumOnCurve, getExtremumOnCurve_fn, _getExtremum, getExtremum_fn; var Util = class { static makeHexColor(r, g, b) { return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; } static scaleMinMax(transform, minMax) { let temp; if (transform[0]) { if (transform[0] < 0) { temp = minMax[0]; minMax[0] = minMax[2]; minMax[2] = temp; } minMax[0] *= transform[0]; minMax[2] *= transform[0]; if (transform[3] < 0) { temp = minMax[1]; minMax[1] = minMax[3]; minMax[3] = temp; } minMax[1] *= transform[3]; minMax[3] *= transform[3]; } else { temp = minMax[0]; minMax[0] = minMax[1]; minMax[1] = temp; temp = minMax[2]; minMax[2] = minMax[3]; minMax[3] = temp; if (transform[1] < 0) { temp = minMax[1]; minMax[1] = minMax[3]; minMax[3] = temp; } minMax[1] *= transform[1]; minMax[3] *= transform[1]; if (transform[2] < 0) { temp = minMax[0]; minMax[0] = minMax[2]; minMax[2] = temp; } minMax[0] *= transform[2]; minMax[2] *= transform[2]; } minMax[0] += transform[4]; minMax[1] += transform[5]; minMax[2] += transform[4]; minMax[3] += transform[5]; } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } static getAxialAlignedBoundingBox(r, m) { const p1 = this.applyTransform(r, m); const p2 = this.applyTransform(r.slice(2, 4), m); const p3 = this.applyTransform([r[0], r[3]], m); const p4 = this.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; const b = m[0] * transpose[1] + m[1] * transpose[3]; const c = m[2] * transpose[0] + m[3] * transpose[2]; const d = m[2] * transpose[1] + m[3] * transpose[3]; const first = (a + d) / 2; const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; const sx = first + second || 1; const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } static normalizeRect(rect) { const r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } static intersect(rect1, rect2) { const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); if (xLow > xHigh) { return null; } const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); if (yLow > yHigh) { return null; } return [xLow, yLow, xHigh, yHigh]; } static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) { if (minMax) { minMax[0] = Math.min(minMax[0], x0, x3); minMax[1] = Math.min(minMax[1], y0, y3); minMax[2] = Math.max(minMax[2], x0, x3); minMax[3] = Math.max(minMax[3], y0, y3); } else { minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)]; } __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax); return minMax; } }; _getExtremumOnCurve = new WeakSet(); getExtremumOnCurve_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) { if (t <= 0 || t >= 1) { return; } const mt = 1 - t; const tt = t * t; const ttt = tt * t; const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3; const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3; minMax[0] = Math.min(minMax[0], x); minMax[1] = Math.min(minMax[1], y); minMax[2] = Math.max(minMax[2], x); minMax[3] = Math.max(minMax[3], y); }; _getExtremum = new WeakSet(); getExtremum_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) { if (Math.abs(a) < 1e-12) { if (Math.abs(b) >= 1e-12) { __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax); } return; } const delta = b ** 2 - 4 * c * a; if (delta < 0) { return; } const sqrtDelta = Math.sqrt(delta); const a2 = 2 * a; __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); }; __privateAdd(Util, _getExtremumOnCurve); __privateAdd(Util, _getExtremum); function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } var NormalizeRegex = null; var NormalizationMap = null; function normalizeUnicode(str) { if (!NormalizeRegex) { 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; NormalizationMap = /* @__PURE__ */ new Map([["\uFB05", "\u017Ft"]]); } return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2)); } function getUuid() { if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.randomUUID) === "function") { return crypto.randomUUID(); } const buf = new Uint8Array(32); if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.getRandomValues) === "function") { crypto.getRandomValues(buf); } else { for (let i = 0; i < 32; i++) { buf[i] = Math.floor(Math.random() * 255); } } return bytesToString(buf); } var AnnotationPrefix = "pdfjs_internal_id_"; var FontRenderOps = { BEZIER_CURVE_TO: 0, MOVE_TO: 1, LINE_TO: 2, QUADRATIC_CURVE_TO: 3, RESTORE: 4, SAVE: 5, SCALE: 6, TRANSFORM: 7, TRANSLATE: 8 }; var BaseFilterFactory = class { addFilter(maps) { return "none"; } addHCMFilter(fgColor, bgColor) { return "none"; } addAlphaFilter(map) { return "none"; } addLuminosityFilter(map) { return "none"; } addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { return "none"; } destroy(keepHCM = false) { } }; var _enableHWA; var BaseCanvasFactory = class { constructor({ enableHWA = false } = {}) { __privateAdd(this, _enableHWA, false); __privateSet(this, _enableHWA, enableHWA); } create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } const canvas = this._createCanvas(width, height); return { canvas, context: canvas.getContext("2d", { willReadFrequently: !__privateGet(this, _enableHWA) }) }; } reset(canvasAndContext, width, height) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; } destroy(canvasAndContext) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; } _createCanvas(width, height) { unreachable("Abstract method `_createCanvas` called."); } }; _enableHWA = new WeakMap(); var BaseCMapReaderFactory = class { constructor({ baseUrl = null, isCompressed = true }) { this.baseUrl = baseUrl; this.isCompressed = isCompressed; } async fetch({ name }) { if (!this.baseUrl) { throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided."); } if (!name) { throw new Error("CMap name must be specified."); } const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE; return this._fetchData(url, compressionType).catch((reason) => { throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); }); } _fetchData(url, compressionType) { unreachable("Abstract method `_fetchData` called."); } }; var BaseStandardFontDataFactory = class { constructor({ baseUrl = null }) { this.baseUrl = baseUrl; } async fetch({ filename }) { if (!this.baseUrl) { throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided."); } if (!filename) { throw new Error("Font filename must be specified."); } const url = `${this.baseUrl}${filename}`; return this._fetchData(url).catch((reason) => { throw new Error(`Unable to load font data at: ${url}`); }); } _fetchData(url) { unreachable("Abstract method `_fetchData` called."); } }; var BaseSVGFactory = class { create(width, height, skipDimensions = false) { if (width <= 0 || height <= 0) { throw new Error("Invalid SVG dimensions"); } const svg = this._createSVG("svg:svg"); svg.setAttribute("version", "1.1"); if (!skipDimensions) { svg.setAttribute("width", `${width}px`); svg.setAttribute("height", `${height}px`); } svg.setAttribute("preserveAspectRatio", "none"); svg.setAttribute("viewBox", `0 0 ${width} ${height}`); return svg; } createElement(type) { if (typeof type !== "string") { throw new Error("Invalid SVG element type"); } return this._createSVG(type); } _createSVG(type) { unreachable("Abstract method `_createSVG` called."); } }; var SVG_NS = "http://www.w3.org/2000/svg"; var _PixelsPerInch = class { }; var PixelsPerInch = _PixelsPerInch; __publicField(PixelsPerInch, "CSS", 96); __publicField(PixelsPerInch, "PDF", 72); __publicField(PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF); var _baseUrl, __cache, __defs, _docId, _document, __hcmCache, _id, _cache, cache_get, _hcmCache, hcmCache_get, _defs, defs_get, _createTables, createTables_fn, _createUrl, createUrl_fn, _addLuminosityConversion, addLuminosityConversion_fn, _addGrayConversion, addGrayConversion_fn, _createFilter, createFilter_fn, _appendFeFunc, appendFeFunc_fn, _addTransferMapConversion, addTransferMapConversion_fn, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn, _getRGB, getRGB_fn; var DOMFilterFactory = class extends BaseFilterFactory { constructor({ docId, ownerDocument = globalThis.document } = {}) { super(); __privateAdd(this, _cache); __privateAdd(this, _hcmCache); __privateAdd(this, _defs); __privateAdd(this, _createTables); __privateAdd(this, _createUrl); __privateAdd(this, _addLuminosityConversion); __privateAdd(this, _addGrayConversion); __privateAdd(this, _createFilter); __privateAdd(this, _appendFeFunc); __privateAdd(this, _addTransferMapConversion); __privateAdd(this, _addTransferMapAlphaConversion); __privateAdd(this, _getRGB); __privateAdd(this, _baseUrl, void 0); __privateAdd(this, __cache, void 0); __privateAdd(this, __defs, void 0); __privateAdd(this, _docId, void 0); __privateAdd(this, _document, void 0); __privateAdd(this, __hcmCache, void 0); __privateAdd(this, _id, 0); __privateSet(this, _docId, docId); __privateSet(this, _document, ownerDocument); } addFilter(maps) { if (!maps) { return "none"; } let value = __privateGet(this, _cache, cache_get).get(maps); if (value) { return value; } const [tableR, tableG, tableB] = __privateMethod(this, _createTables, createTables_fn).call(this, maps); const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(maps, value); return value; } const id = `g_${__privateGet(this, _docId)}_transfer_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(maps, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, tableR, tableG, tableB, filter); return url; } addHCMFilter(fgColor, bgColor) { var _a2; const key = `${fgColor}-${bgColor}`; const filterName = "base"; let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); if ((info2 == null ? void 0 : info2.key) === key) { return info2.url; } if (info2) { (_a2 = info2.filter) == null ? void 0 : _a2.remove(); info2.key = key; info2.url = "none"; info2.filter = null; } else { info2 = { key, url: "none", filter: null }; __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); } if (!fgColor || !bgColor) { return info2.url; } const fgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, fgColor); fgColor = Util.makeHexColor(...fgRGB); const bgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, bgColor); bgColor = Util.makeHexColor(...bgRGB); __privateGet(this, _defs, defs_get).style.color = ""; if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { return info2.url; } const map = new Array(256); for (let i = 0; i <= 255; i++) { const x = i / 255; map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; } const table = map.join(","); const id = `g_${__privateGet(this, _docId)}_hcm_filter`; const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, table, table, table, filter); __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); const getSteps = (c, n) => { const start = fgRGB[c] / 255; const end = bgRGB[c] / 255; const arr = new Array(n + 1); for (let i = 0; i <= n; i++) { arr[i] = start + i / n * (end - start); } return arr.join(","); }; __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); return info2.url; } addAlphaFilter(map) { let value = __privateGet(this, _cache, cache_get).get(map); if (value) { return value; } const [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); const key = `alpha_${tableA}`; value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(map, value); return value; } const id = `g_${__privateGet(this, _docId)}_alpha_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(map, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); return url; } addLuminosityFilter(map) { let value = __privateGet(this, _cache, cache_get).get(map || "luminosity"); if (value) { return value; } let tableA, key; if (map) { [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); key = `luminosity_${tableA}`; } else { key = "luminosity"; } value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(map, value); return value; } const id = `g_${__privateGet(this, _docId)}_luminosity_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(map, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addLuminosityConversion, addLuminosityConversion_fn).call(this, filter); if (map) { __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); } return url; } addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { var _a2; const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); if ((info2 == null ? void 0 : info2.key) === key) { return info2.url; } if (info2) { (_a2 = info2.filter) == null ? void 0 : _a2.remove(); info2.key = key; info2.url = "none"; info2.filter = null; } else { info2 = { key, url: "none", filter: null }; __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); } if (!fgColor || !bgColor) { return info2.url; } const [fgRGB, bgRGB] = [fgColor, bgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); if (bgGray < fgGray) { [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; } __privateGet(this, _defs, defs_get).style.color = ""; const getSteps = (fg, bg, n) => { const arr = new Array(256); const step = (bgGray - fgGray) / n; const newStart = fg / 255; const newStep = (bg - fg) / (255 * n); let prev = 0; for (let i = 0; i <= n; i++) { const k = Math.round(fgGray + i * step); const value = newStart + i * newStep; for (let j = prev; j <= k; j++) { arr[j] = value; } prev = k + 1; } for (let i = prev; i < 256; i++) { arr[i] = arr[prev - 1]; } return arr.join(","); }; const id = `g_${__privateGet(this, _docId)}_hcm_${filterName}_filter`; const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); return info2.url; } destroy(keepHCM = false) { if (keepHCM && __privateGet(this, _hcmCache, hcmCache_get).size !== 0) { return; } if (__privateGet(this, __defs)) { __privateGet(this, __defs).parentNode.parentNode.remove(); __privateSet(this, __defs, null); } if (__privateGet(this, __cache)) { __privateGet(this, __cache).clear(); __privateSet(this, __cache, null); } __privateSet(this, _id, 0); } }; _baseUrl = new WeakMap(); __cache = new WeakMap(); __defs = new WeakMap(); _docId = new WeakMap(); _document = new WeakMap(); __hcmCache = new WeakMap(); _id = new WeakMap(); _cache = new WeakSet(); cache_get = function() { return __privateGet(this, __cache) || __privateSet(this, __cache, /* @__PURE__ */ new Map()); }; _hcmCache = new WeakSet(); hcmCache_get = function() { return __privateGet(this, __hcmCache) || __privateSet(this, __hcmCache, /* @__PURE__ */ new Map()); }; _defs = new WeakSet(); defs_get = function() { if (!__privateGet(this, __defs)) { const div = __privateGet(this, _document).createElement("div"); const { style } = div; style.visibility = "hidden"; style.contain = "strict"; style.width = style.height = 0; style.position = "absolute"; style.top = style.left = 0; style.zIndex = -1; const svg = __privateGet(this, _document).createElementNS(SVG_NS, "svg"); svg.setAttribute("width", 0); svg.setAttribute("height", 0); __privateSet(this, __defs, __privateGet(this, _document).createElementNS(SVG_NS, "defs")); div.append(svg); svg.append(__privateGet(this, __defs)); __privateGet(this, _document).body.append(div); } return __privateGet(this, __defs); }; _createTables = new WeakSet(); createTables_fn = function(maps) { if (maps.length === 1) { const mapR2 = maps[0]; const buffer = new Array(256); for (let i = 0; i < 256; i++) { buffer[i] = mapR2[i] / 255; } const table = buffer.join(","); return [table, table, table]; } const [mapR, mapG, mapB] = maps; const bufferR = new Array(256); const bufferG = new Array(256); const bufferB = new Array(256); for (let i = 0; i < 256; i++) { bufferR[i] = mapR[i] / 255; bufferG[i] = mapG[i] / 255; bufferB[i] = mapB[i] / 255; } return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; }; _createUrl = new WeakSet(); createUrl_fn = function(id) { if (__privateGet(this, _baseUrl) === void 0) { __privateSet(this, _baseUrl, ""); const url = __privateGet(this, _document).URL; if (url !== __privateGet(this, _document).baseURI) { if (isDataScheme(url)) { warn('#createUrl: ignore "data:"-URL for performance reasons.'); } else { __privateSet(this, _baseUrl, url.split("#", 1)[0]); } } } return `url(${__privateGet(this, _baseUrl)}#${id})`; }; _addLuminosityConversion = new WeakSet(); addLuminosityConversion_fn = function(filter) { const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); feColorMatrix.setAttribute("type", "matrix"); feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"); filter.append(feColorMatrix); }; _addGrayConversion = new WeakSet(); addGrayConversion_fn = function(filter) { const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); feColorMatrix.setAttribute("type", "matrix"); 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"); filter.append(feColorMatrix); }; _createFilter = new WeakSet(); createFilter_fn = function(id) { const filter = __privateGet(this, _document).createElementNS(SVG_NS, "filter"); filter.setAttribute("color-interpolation-filters", "sRGB"); filter.setAttribute("id", id); __privateGet(this, _defs, defs_get).append(filter); return filter; }; _appendFeFunc = new WeakSet(); appendFeFunc_fn = function(feComponentTransfer, func, table) { const feFunc = __privateGet(this, _document).createElementNS(SVG_NS, func); feFunc.setAttribute("type", "discrete"); feFunc.setAttribute("tableValues", table); feComponentTransfer.append(feFunc); }; _addTransferMapConversion = new WeakSet(); addTransferMapConversion_fn = function(rTable, gTable, bTable, filter) { const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); filter.append(feComponentTransfer); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncR", rTable); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncG", gTable); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncB", bTable); }; _addTransferMapAlphaConversion = new WeakSet(); addTransferMapAlphaConversion_fn = function(aTable, filter) { const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); filter.append(feComponentTransfer); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncA", aTable); }; _getRGB = new WeakSet(); getRGB_fn = function(color) { __privateGet(this, _defs, defs_get).style.color = color; return getRGB(getComputedStyle(__privateGet(this, _defs, defs_get)).getPropertyValue("color")); }; var DOMCanvasFactory = class extends BaseCanvasFactory { constructor({ ownerDocument = globalThis.document, enableHWA = false } = {}) { super({ enableHWA }); this._document = ownerDocument; } _createCanvas(width, height) { const canvas = this._document.createElement("canvas"); canvas.width = width; canvas.height = height; return canvas; } }; async function fetchData(url, type = "text") { if (isValidFetchUrl(url, document.baseURI)) { const response = await fetch(url); if (!response.ok) { throw new Error(response.statusText); } switch (type) { case "arraybuffer": return response.arrayBuffer(); case "blob": return response.blob(); case "json": return response.json(); } return response.text(); } return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.open("GET", url, true); request.responseType = type; request.onreadystatechange = () => { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { switch (type) { case "arraybuffer": case "blob": case "json": resolve(request.response); return; } resolve(request.responseText); return; } reject(new Error(request.statusText)); }; request.send(null); }); } var DOMCMapReaderFactory = class extends BaseCMapReaderFactory { _fetchData(url, compressionType) { return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then((data) => ({ cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data), compressionType })); } }; var DOMStandardFontDataFactory = class extends BaseStandardFontDataFactory { _fetchData(url) { return fetchData(url, "arraybuffer").then((data) => new Uint8Array(data)); } }; var DOMSVGFactory = class extends BaseSVGFactory { _createSVG(type) { return document.createElementNS(SVG_NS, type); } }; var PageViewport = class { constructor({ viewBox, scale, rotation, offsetX = 0, offsetY = 0, dontFlip = false }) { this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; const centerX = (viewBox[2] + viewBox[0]) / 2; const centerY = (viewBox[3] + viewBox[1]) / 2; let rotateA, rotateB, rotateC, rotateD; rotation %= 360; if (rotation < 0) { rotation += 360; } switch (rotation) { case 180: rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; break; case 90: rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; break; case 270: rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; break; case 0: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; default: throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } let offsetCanvasX, offsetCanvasY; let width, height; if (rotateA === 0) { offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; width = (viewBox[3] - viewBox[1]) * scale; height = (viewBox[2] - viewBox[0]) * scale; } else { offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; width = (viewBox[2] - viewBox[0]) * scale; height = (viewBox[3] - viewBox[1]) * scale; } this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; this.width = width; this.height = height; } get rawDims() { const { viewBox } = this; return shadow(this, "rawDims", { pageWidth: viewBox[2] - viewBox[0], pageHeight: viewBox[3] - viewBox[1], pageX: viewBox[0], pageY: viewBox[1] }); } clone({ scale = this.scale, rotation = this.rotation, offsetX = this.offsetX, offsetY = this.offsetY, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.viewBox.slice(), scale, rotation, offsetX, offsetY, dontFlip }); } convertToViewportPoint(x, y) { return Util.applyTransform([x, y], this.transform); } convertToViewportRectangle(rect) { const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform); const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform); return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } convertToPdfPoint(x, y) { return Util.applyInverseTransform([x, y], this.transform); } }; var RenderingCancelledException = class extends BaseException { constructor(msg, extraDelay = 0) { super(msg, "RenderingCancelledException"); this.extraDelay = extraDelay; } }; function isDataScheme(url) { const ii = url.length; let i = 0; while (i < ii && url[i].trim() === "") { i++; } return url.substring(i, i + 5).toLowerCase() === "data:"; } function isPdfFile(filename) { return typeof filename === "string" && /\.pdf$/i.test(filename); } function getFilenameFromUrl(url) { [url] = url.split(/[#?]/, 1); return url.substring(url.lastIndexOf("/") + 1); } function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { if (typeof url !== "string") { return defaultFilename; } if (isDataScheme(url)) { warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); return defaultFilename; } const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; const splitURI = reURI.exec(url); let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); if (suggestedFilename) { suggestedFilename = suggestedFilename[0]; if (suggestedFilename.includes("%")) { try { suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; } catch (e) { } } } return suggestedFilename || defaultFilename; } var StatTimer = class { constructor() { __publicField(this, "started", /* @__PURE__ */ Object.create(null)); __publicField(this, "times", []); } time(name) { if (name in this.started) { warn(`Timer is already running for ${name}`); } this.started[name] = Date.now(); } timeEnd(name) { if (!(name in this.started)) { warn(`Timer has not been started for ${name}`); } this.times.push({ name, start: this.started[name], end: Date.now() }); delete this.started[name]; } toString() { const outBuf = []; let longest = 0; for (const { name } of this.times) { longest = Math.max(name.length, longest); } for (const { name, start, end } of this.times) { outBuf.push(`${name.padEnd(longest)} ${end - start}ms `); } return outBuf.join(""); } }; function isValidFetchUrl(url, baseUrl) { try { const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url); return protocol === "http:" || protocol === "https:"; } catch (e) { return false; } } function noContextMenu(e) { e.preventDefault(); } var pdfDateStringRegex; var PDFDateString = class { static toDateObject(input) { if (!input || typeof input !== "string") { return null; } pdfDateStringRegex || (pdfDateStringRegex = new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?")); const matches2 = pdfDateStringRegex.exec(input); if (!matches2) { return null; } const year = parseInt(matches2[1], 10); let month = parseInt(matches2[2], 10); month = month >= 1 && month <= 12 ? month - 1 : 0; let day = parseInt(matches2[3], 10); day = day >= 1 && day <= 31 ? day : 1; let hour = parseInt(matches2[4], 10); hour = hour >= 0 && hour <= 23 ? hour : 0; let minute = parseInt(matches2[5], 10); minute = minute >= 0 && minute <= 59 ? minute : 0; let second = parseInt(matches2[6], 10); second = second >= 0 && second <= 59 ? second : 0; const universalTimeRelation = matches2[7] || "Z"; let offsetHour = parseInt(matches2[8], 10); offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; let offsetMinute = parseInt(matches2[9], 10) || 0; offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; if (universalTimeRelation === "-") { hour += offsetHour; minute += offsetMinute; } else if (universalTimeRelation === "+") { hour -= offsetHour; minute -= offsetMinute; } return new Date(Date.UTC(year, month, day, hour, minute, second)); } }; function getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) { const { width, height } = xfaPage.attributes.style; const viewBox = [0, 0, parseInt(width), parseInt(height)]; return new PageViewport({ viewBox, scale, rotation }); } function getRGB(color) { if (color.startsWith("#")) { const colorRGB = parseInt(color.slice(1), 16); return [(colorRGB & 16711680) >> 16, (colorRGB & 65280) >> 8, colorRGB & 255]; } if (color.startsWith("rgb(")) { return color.slice(4, -1).split(",").map((x) => parseInt(x)); } if (color.startsWith("rgba(")) { return color.slice(5, -1).split(",").map((x) => parseInt(x)).slice(0, 3); } warn(`Not a valid color format: "${color}"`); return [0, 0, 0]; } function getColorValues(colors) { const span = document.createElement("span"); span.style.visibility = "hidden"; document.body.append(span); for (const name of colors.keys()) { span.style.color = name; const computedColor = window.getComputedStyle(span).color; colors.set(name, getRGB(computedColor)); } span.remove(); } function getCurrentTransform(ctx) { const { a, b, c, d, e, f } = ctx.getTransform(); return [a, b, c, d, e, f]; } function getCurrentTransformInverse(ctx) { const { a, b, c, d, e, f } = ctx.getTransform().invertSelf(); return [a, b, c, d, e, f]; } function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { if (viewport instanceof PageViewport) { const { pageWidth, pageHeight } = viewport.rawDims; const { style } = div; const useRound = util_FeatureTest.isCSSRoundSupported; const w = `var(--scale-factor) * ${pageWidth}px`, h = `var(--scale-factor) * ${pageHeight}px`; const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; if (!mustFlip || viewport.rotation % 180 === 0) { style.width = widthStr; style.height = heightStr; } else { style.width = heightStr; style.height = widthStr; } } if (mustRotate) { div.setAttribute("data-main-rotation", viewport.rotation); } } var _toolbar, _colorPicker, _editor, _buttons, _altText, _l10nRemove, _pointerDown, pointerDown_fn, _focusIn, focusIn_fn, _focusOut, focusOut_fn, _addListenersToElement, addListenersToElement_fn, _addDeleteButton, addDeleteButton_fn, _divider, divider_get; var _EditorToolbar = class { constructor(editor) { __privateAdd(this, _focusIn); __privateAdd(this, _focusOut); __privateAdd(this, _addListenersToElement); __privateAdd(this, _addDeleteButton); __privateAdd(this, _divider); __privateAdd(this, _toolbar, null); __privateAdd(this, _colorPicker, null); __privateAdd(this, _editor, void 0); __privateAdd(this, _buttons, null); __privateAdd(this, _altText, null); __privateSet(this, _editor, editor); __privateGet(_EditorToolbar, _l10nRemove) || __privateSet(_EditorToolbar, _l10nRemove, Object.freeze({ freetext: "pdfjs-editor-remove-freetext-button", highlight: "pdfjs-editor-remove-highlight-button", ink: "pdfjs-editor-remove-ink-button", stamp: "pdfjs-editor-remove-stamp-button" })); } render() { const editToolbar = __privateSet(this, _toolbar, document.createElement("div")); editToolbar.className = "editToolbar"; editToolbar.setAttribute("role", "toolbar"); const signal = __privateGet(this, _editor)._uiManager._signal; editToolbar.addEventListener("contextmenu", noContextMenu, { signal }); editToolbar.addEventListener("pointerdown", __privateMethod(_EditorToolbar, _pointerDown, pointerDown_fn), { signal }); const buttons = __privateSet(this, _buttons, document.createElement("div")); buttons.className = "buttons"; editToolbar.append(buttons); const position = __privateGet(this, _editor).toolbarPosition; if (position) { const { style } = editToolbar; const x = __privateGet(this, _editor)._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; style.insetInlineEnd = `${100 * x}%`; style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; } __privateMethod(this, _addDeleteButton, addDeleteButton_fn).call(this); return editToolbar; } hide() { var _a2; __privateGet(this, _toolbar).classList.add("hidden"); (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.hideDropdown(); } show() { var _a2; __privateGet(this, _toolbar).classList.remove("hidden"); (_a2 = __privateGet(this, _altText)) == null ? void 0 : _a2.shown(); } async addAltText(altText) { const button = await altText.render(); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); __privateSet(this, _altText, altText); } addColorPicker(colorPicker) { __privateSet(this, _colorPicker, colorPicker); const button = colorPicker.renderButton(); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); } remove() { var _a2; __privateGet(this, _toolbar).remove(); (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.destroy(); __privateSet(this, _colorPicker, null); } }; var EditorToolbar = _EditorToolbar; _toolbar = new WeakMap(); _colorPicker = new WeakMap(); _editor = new WeakMap(); _buttons = new WeakMap(); _altText = new WeakMap(); _l10nRemove = new WeakMap(); _pointerDown = new WeakSet(); pointerDown_fn = function(e) { e.stopPropagation(); }; _focusIn = new WeakSet(); focusIn_fn = function(e) { __privateGet(this, _editor)._focusEventsAllowed = false; e.preventDefault(); e.stopPropagation(); }; _focusOut = new WeakSet(); focusOut_fn = function(e) { __privateGet(this, _editor)._focusEventsAllowed = true; e.preventDefault(); e.stopPropagation(); }; _addListenersToElement = new WeakSet(); addListenersToElement_fn = function(element2) { const signal = __privateGet(this, _editor)._uiManager._signal; element2.addEventListener("focusin", __privateMethod(this, _focusIn, focusIn_fn).bind(this), { capture: true, signal }); element2.addEventListener("focusout", __privateMethod(this, _focusOut, focusOut_fn).bind(this), { capture: true, signal }); element2.addEventListener("contextmenu", noContextMenu, { signal }); }; _addDeleteButton = new WeakSet(); addDeleteButton_fn = function() { const { editorType, _uiManager: _uiManager4 } = __privateGet(this, _editor); const button = document.createElement("button"); button.className = "delete"; button.tabIndex = 0; button.setAttribute("data-l10n-id", __privateGet(_EditorToolbar, _l10nRemove)[editorType]); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); button.addEventListener("click", (e) => { _uiManager4.delete(); }, { signal: _uiManager4._signal }); __privateGet(this, _buttons).append(button); }; _divider = new WeakSet(); divider_get = function() { const divider = document.createElement("div"); divider.className = "divider"; return divider; }; __privateAdd(EditorToolbar, _pointerDown); __privateAdd(EditorToolbar, _l10nRemove, null); var _buttons2, _toolbar2, _uiManager, _render, render_fn, _getLastPoint, getLastPoint_fn, _addHighlightButton, addHighlightButton_fn; var HighlightToolbar = class { constructor(uiManager) { __privateAdd(this, _render); __privateAdd(this, _getLastPoint); __privateAdd(this, _addHighlightButton); __privateAdd(this, _buttons2, null); __privateAdd(this, _toolbar2, null); __privateAdd(this, _uiManager, void 0); __privateSet(this, _uiManager, uiManager); } show(parent, boxes, isLTR) { const [x, y] = __privateMethod(this, _getLastPoint, getLastPoint_fn).call(this, boxes, isLTR); const { style } = __privateGet(this, _toolbar2) || __privateSet(this, _toolbar2, __privateMethod(this, _render, render_fn).call(this)); parent.append(__privateGet(this, _toolbar2)); style.insetInlineEnd = `${100 * x}%`; style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; } hide() { __privateGet(this, _toolbar2).remove(); } }; _buttons2 = new WeakMap(); _toolbar2 = new WeakMap(); _uiManager = new WeakMap(); _render = new WeakSet(); render_fn = function() { const editToolbar = __privateSet(this, _toolbar2, document.createElement("div")); editToolbar.className = "editToolbar"; editToolbar.setAttribute("role", "toolbar"); editToolbar.addEventListener("contextmenu", noContextMenu, { signal: __privateGet(this, _uiManager)._signal }); const buttons = __privateSet(this, _buttons2, document.createElement("div")); buttons.className = "buttons"; editToolbar.append(buttons); __privateMethod(this, _addHighlightButton, addHighlightButton_fn).call(this); return editToolbar; }; _getLastPoint = new WeakSet(); getLastPoint_fn = function(boxes, isLTR) { let lastY = 0; let lastX = 0; for (const box of boxes) { const y = box.y + box.height; if (y < lastY) { continue; } const x = box.x + (isLTR ? box.width : 0); if (y > lastY) { lastX = x; lastY = y; continue; } if (isLTR) { if (x > lastX) { lastX = x; } } else if (x < lastX) { lastX = x; } } return [isLTR ? 1 - lastX : lastX, lastY]; }; _addHighlightButton = new WeakSet(); addHighlightButton_fn = function() { const button = document.createElement("button"); button.className = "highlightButton"; button.tabIndex = 0; button.setAttribute("data-l10n-id", `pdfjs-highlight-floating-button1`); const span = document.createElement("span"); button.append(span); span.className = "visuallyHidden"; span.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label"); const signal = __privateGet(this, _uiManager)._signal; button.addEventListener("contextmenu", noContextMenu, { signal }); button.addEventListener("click", () => { __privateGet(this, _uiManager).highlightSelection("floating_button"); }, { signal }); __privateGet(this, _buttons2).append(button); }; function bindEvents(obj, element2, names) { for (const name of names) { element2.addEventListener(name, obj[name].bind(obj)); } } function opacityToHex(opacity) { return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); } var _id2; var IdManager = class { constructor() { __privateAdd(this, _id2, 0); } get id() { return `${AnnotationEditorPrefix}${__privateWrapper(this, _id2)._++}`; } }; _id2 = new WeakMap(); var _baseId, _id3, _cache2, _get, get_fn; var _ImageManager = class { constructor() { __privateAdd(this, _get); __privateAdd(this, _baseId, getUuid()); __privateAdd(this, _id3, 0); __privateAdd(this, _cache2, null); } static get _isSVGFittingCanvas() { const svg = `data:image/svg+xml;charset=UTF-8,`; const canvas = new OffscreenCanvas(1, 3); const ctx = canvas.getContext("2d", { willReadFrequently: true }); const image = new Image(); image.src = svg; const promise = image.decode().then(() => { ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; }); return shadow(this, "_isSVGFittingCanvas", promise); } async getFromFile(file) { const { lastModified, name, size, type } = file; return __privateMethod(this, _get, get_fn).call(this, `${lastModified}_${name}_${size}_${type}`, file); } async getFromUrl(url) { return __privateMethod(this, _get, get_fn).call(this, url, url); } async getFromId(id) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); const data = __privateGet(this, _cache2).get(id); if (!data) { return null; } if (data.bitmap) { data.refCounter += 1; return data; } if (data.file) { return this.getFromFile(data.file); } return this.getFromUrl(data.url); } getSvgUrl(id) { const data = __privateGet(this, _cache2).get(id); if (!(data == null ? void 0 : data.isSvg)) { return null; } return data.svgUrl; } deleteId(id) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); const data = __privateGet(this, _cache2).get(id); if (!data) { return; } data.refCounter -= 1; if (data.refCounter !== 0) { return; } data.bitmap = null; } isValidId(id) { return id.startsWith(`image_${__privateGet(this, _baseId)}_`); } }; var ImageManager = _ImageManager; _baseId = new WeakMap(); _id3 = new WeakMap(); _cache2 = new WeakMap(); _get = new WeakSet(); get_fn = async function(key, rawData) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); let data = __privateGet(this, _cache2).get(key); if (data === null) { return null; } if (data == null ? void 0 : data.bitmap) { data.refCounter += 1; return data; } try { data || (data = { bitmap: null, id: `image_${__privateGet(this, _baseId)}_${__privateWrapper(this, _id3)._++}`, refCounter: 0, isSvg: false }); let image; if (typeof rawData === "string") { data.url = rawData; image = await fetchData(rawData, "blob"); } else { image = data.file = rawData; } if (image.type === "image/svg+xml") { const mustRemoveAspectRatioPromise = _ImageManager._isSVGFittingCanvas; const fileReader = new FileReader(); const imageElement = new Image(); const imagePromise = new Promise((resolve, reject) => { imageElement.onload = () => { data.bitmap = imageElement; data.isSvg = true; resolve(); }; fileReader.onload = async () => { const url = data.svgUrl = fileReader.result; imageElement.src = await mustRemoveAspectRatioPromise ? `${url}#svgView(preserveAspectRatio(none))` : url; }; imageElement.onerror = fileReader.onerror = reject; }); fileReader.readAsDataURL(image); await imagePromise; } else { data.bitmap = await createImageBitmap(image); } data.refCounter = 1; } catch (e) { console.error(e); data = null; } __privateGet(this, _cache2).set(key, data); if (data) { __privateGet(this, _cache2).set(data.id, data); } return data; }; var _commands, _locked, _maxSize, _position; var CommandManager = class { constructor(maxSize = 128) { __privateAdd(this, _commands, []); __privateAdd(this, _locked, false); __privateAdd(this, _maxSize, void 0); __privateAdd(this, _position, -1); __privateSet(this, _maxSize, maxSize); } add({ cmd, undo, post, mustExec, type = NaN, overwriteIfSameType = false, keepUndo = false }) { if (mustExec) { cmd(); } if (__privateGet(this, _locked)) { return; } const save2 = { cmd, undo, post, type }; if (__privateGet(this, _position) === -1) { if (__privateGet(this, _commands).length > 0) { __privateGet(this, _commands).length = 0; } __privateSet(this, _position, 0); __privateGet(this, _commands).push(save2); return; } if (overwriteIfSameType && __privateGet(this, _commands)[__privateGet(this, _position)].type === type) { if (keepUndo) { save2.undo = __privateGet(this, _commands)[__privateGet(this, _position)].undo; } __privateGet(this, _commands)[__privateGet(this, _position)] = save2; return; } const next = __privateGet(this, _position) + 1; if (next === __privateGet(this, _maxSize)) { __privateGet(this, _commands).splice(0, 1); } else { __privateSet(this, _position, next); if (next < __privateGet(this, _commands).length) { __privateGet(this, _commands).splice(next); } } __privateGet(this, _commands).push(save2); } undo() { if (__privateGet(this, _position) === -1) { return; } __privateSet(this, _locked, true); const { undo, post } = __privateGet(this, _commands)[__privateGet(this, _position)]; undo(); post == null ? void 0 : post(); __privateSet(this, _locked, false); __privateSet(this, _position, __privateGet(this, _position) - 1); } redo() { if (__privateGet(this, _position) < __privateGet(this, _commands).length - 1) { __privateSet(this, _position, __privateGet(this, _position) + 1); __privateSet(this, _locked, true); const { cmd, post } = __privateGet(this, _commands)[__privateGet(this, _position)]; cmd(); post == null ? void 0 : post(); __privateSet(this, _locked, false); } } hasSomethingToUndo() { return __privateGet(this, _position) !== -1; } hasSomethingToRedo() { return __privateGet(this, _position) < __privateGet(this, _commands).length - 1; } destroy() { __privateSet(this, _commands, null); } }; _commands = new WeakMap(); _locked = new WeakMap(); _maxSize = new WeakMap(); _position = new WeakMap(); var _serialize, serialize_fn; var KeyboardManager = class { constructor(callbacks) { __privateAdd(this, _serialize); this.buffer = []; this.callbacks = /* @__PURE__ */ new Map(); this.allKeys = /* @__PURE__ */ new Set(); const { isMac } = util_FeatureTest.platform; for (const [keys, callback, options = {}] of callbacks) { for (const key of keys) { const isMacKey = key.startsWith("mac+"); if (isMac && isMacKey) { this.callbacks.set(key.slice(4), { callback, options }); this.allKeys.add(key.split("+").at(-1)); } else if (!isMac && !isMacKey) { this.callbacks.set(key, { callback, options }); this.allKeys.add(key.split("+").at(-1)); } } } } exec(self, event) { if (!this.allKeys.has(event.key)) { return; } const info2 = this.callbacks.get(__privateMethod(this, _serialize, serialize_fn).call(this, event)); if (!info2) { return; } const { callback, options: { bubbles = false, args = [], checker = null } } = info2; if (checker && !checker(self, event)) { return; } callback.bind(self, ...args, event)(); if (!bubbles) { event.stopPropagation(); event.preventDefault(); } } }; _serialize = new WeakSet(); serialize_fn = function(event) { if (event.altKey) { this.buffer.push("alt"); } if (event.ctrlKey) { this.buffer.push("ctrl"); } if (event.metaKey) { this.buffer.push("meta"); } if (event.shiftKey) { this.buffer.push("shift"); } this.buffer.push(event.key); const str = this.buffer.join("+"); this.buffer.length = 0; return str; }; var _ColorManager = class { get _colors() { const colors = /* @__PURE__ */ new Map([["CanvasText", null], ["Canvas", null]]); getColorValues(colors); return shadow(this, "_colors", colors); } convert(color) { const rgb = getRGB(color); if (!window.matchMedia("(forced-colors: active)").matches) { return rgb; } for (const [name, RGB] of this._colors) { if (RGB.every((x, i) => x === rgb[i])) { return _ColorManager._colorsMapping.get(name); } } return rgb; } getHexCode(name) { const rgb = this._colors.get(name); if (!rgb) { return name; } return Util.makeHexColor(...rgb); } }; var ColorManager = _ColorManager; __publicField(ColorManager, "_colorsMapping", /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]])); var _abortController, _activeEditor, _allEditors, _allLayers, _altTextManager, _annotationStorage, _changedExistingAnnotations, _commandManager, _copyPasteAC, _currentPageIndex, _deletedAnnotationsElementIds, _draggingEditors, _editorTypes, _editorsToRescale, _enableHighlightFloatingButton, _enableUpdatedAddImage, _enableNewAltTextWhenAddingImage, _filterFactory, _focusMainContainerTimeoutId, _focusManagerAC, _highlightColors, _highlightWhenShiftUp, _highlightToolbar, _idManager, _isEnabled, _isWaiting, _keyboardManagerAC, _lastActiveElement, _mainHighlightColorPicker, _mlManager, _mode, _selectedEditors, _selectedTextNode, _pageColors, _showAllStates, _previousStates, _translation, _translationTimeoutId, _container, _viewer, _getAnchorElementForSelection, getAnchorElementForSelection_fn, _getLayerForTextLayer, getLayerForTextLayer_fn, _displayHighlightToolbar, displayHighlightToolbar_fn, _selectionChange, selectionChange_fn, _onSelectEnd, onSelectEnd_fn, _addSelectionListener, addSelectionListener_fn, _addFocusManager, addFocusManager_fn, _removeFocusManager, removeFocusManager_fn, _addKeyboardManager, addKeyboardManager_fn, _removeKeyboardManager, removeKeyboardManager_fn, _addCopyPasteListeners, addCopyPasteListeners_fn, _removeCopyPasteListeners, removeCopyPasteListeners_fn, _addDragAndDropListeners, addDragAndDropListeners_fn, _dispatchUpdateStates, dispatchUpdateStates_fn, _dispatchUpdateUI, dispatchUpdateUI_fn, _enableAll, enableAll_fn, _disableAll, disableAll_fn, _addEditorToLayer, addEditorToLayer_fn, _lastSelectedEditor, lastSelectedEditor_get, _isEmpty, isEmpty_fn, _selectEditors, selectEditors_fn; var _AnnotationEditorUIManager = class { constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager) { __privateAdd(this, _getAnchorElementForSelection); __privateAdd(this, _getLayerForTextLayer); __privateAdd(this, _displayHighlightToolbar); __privateAdd(this, _selectionChange); __privateAdd(this, _onSelectEnd); __privateAdd(this, _addSelectionListener); __privateAdd(this, _addFocusManager); __privateAdd(this, _removeFocusManager); __privateAdd(this, _addKeyboardManager); __privateAdd(this, _removeKeyboardManager); __privateAdd(this, _addCopyPasteListeners); __privateAdd(this, _removeCopyPasteListeners); __privateAdd(this, _addDragAndDropListeners); __privateAdd(this, _dispatchUpdateStates); __privateAdd(this, _dispatchUpdateUI); __privateAdd(this, _enableAll); __privateAdd(this, _disableAll); __privateAdd(this, _addEditorToLayer); __privateAdd(this, _lastSelectedEditor); __privateAdd(this, _isEmpty); __privateAdd(this, _selectEditors); __privateAdd(this, _abortController, new AbortController()); __privateAdd(this, _activeEditor, null); __privateAdd(this, _allEditors, /* @__PURE__ */ new Map()); __privateAdd(this, _allLayers, /* @__PURE__ */ new Map()); __privateAdd(this, _altTextManager, null); __privateAdd(this, _annotationStorage, null); __privateAdd(this, _changedExistingAnnotations, null); __privateAdd(this, _commandManager, new CommandManager()); __privateAdd(this, _copyPasteAC, null); __privateAdd(this, _currentPageIndex, 0); __privateAdd(this, _deletedAnnotationsElementIds, /* @__PURE__ */ new Set()); __privateAdd(this, _draggingEditors, null); __privateAdd(this, _editorTypes, null); __privateAdd(this, _editorsToRescale, /* @__PURE__ */ new Set()); __privateAdd(this, _enableHighlightFloatingButton, false); __privateAdd(this, _enableUpdatedAddImage, false); __privateAdd(this, _enableNewAltTextWhenAddingImage, false); __privateAdd(this, _filterFactory, null); __privateAdd(this, _focusMainContainerTimeoutId, null); __privateAdd(this, _focusManagerAC, null); __privateAdd(this, _highlightColors, null); __privateAdd(this, _highlightWhenShiftUp, false); __privateAdd(this, _highlightToolbar, null); __privateAdd(this, _idManager, new IdManager()); __privateAdd(this, _isEnabled, false); __privateAdd(this, _isWaiting, false); __privateAdd(this, _keyboardManagerAC, null); __privateAdd(this, _lastActiveElement, null); __privateAdd(this, _mainHighlightColorPicker, null); __privateAdd(this, _mlManager, null); __privateAdd(this, _mode, AnnotationEditorType.NONE); __privateAdd(this, _selectedEditors, /* @__PURE__ */ new Set()); __privateAdd(this, _selectedTextNode, null); __privateAdd(this, _pageColors, null); __privateAdd(this, _showAllStates, null); __privateAdd(this, _previousStates, { isEditing: false, isEmpty: true, hasSomethingToUndo: false, hasSomethingToRedo: false, hasSelectedEditor: false, hasSelectedText: false }); __privateAdd(this, _translation, [0, 0]); __privateAdd(this, _translationTimeoutId, null); __privateAdd(this, _container, null); __privateAdd(this, _viewer, null); const signal = this._signal = __privateGet(this, _abortController).signal; __privateSet(this, _container, container); __privateSet(this, _viewer, viewer); __privateSet(this, _altTextManager, altTextManager); this._eventBus = eventBus; eventBus._on("editingaction", this.onEditingAction.bind(this), { signal }); eventBus._on("pagechanging", this.onPageChanging.bind(this), { signal }); eventBus._on("scalechanging", this.onScaleChanging.bind(this), { signal }); eventBus._on("rotationchanging", this.onRotationChanging.bind(this), { signal }); eventBus._on("setpreference", this.onSetPreference.bind(this), { signal }); eventBus._on("switchannotationeditorparams", (evt) => this.updateParams(evt.type, evt.value), { signal }); __privateMethod(this, _addSelectionListener, addSelectionListener_fn).call(this); __privateMethod(this, _addDragAndDropListeners, addDragAndDropListeners_fn).call(this); __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); __privateSet(this, _annotationStorage, pdfDocument.annotationStorage); __privateSet(this, _filterFactory, pdfDocument.filterFactory); __privateSet(this, _pageColors, pageColors); __privateSet(this, _highlightColors, highlightColors || null); __privateSet(this, _enableHighlightFloatingButton, enableHighlightFloatingButton); __privateSet(this, _enableUpdatedAddImage, enableUpdatedAddImage); __privateSet(this, _enableNewAltTextWhenAddingImage, enableNewAltTextWhenAddingImage); __privateSet(this, _mlManager, mlManager || null); this.viewParameters = { realScale: PixelsPerInch.PDF_TO_CSS_UNITS, rotation: 0 }; this.isShiftKeyDown = false; } static get _keyboardManager() { const proto = _AnnotationEditorUIManager.prototype; const arrowChecker = (self) => __privateGet(self, _container).contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); const textInputChecker = (_self, { target: el }) => { if (el instanceof HTMLInputElement) { const { type } = el; return type !== "text" && type !== "number"; } return true; }; const small = this.TRANSLATE_SMALL; const big = this.TRANSLATE_BIG; return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { checker: textInputChecker }], [["ctrl+z", "mac+meta+z"], proto.undo, { checker: textInputChecker }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { checker: textInputChecker }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { checker: textInputChecker }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { checker: (self, { target: el }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(el) && !self.isEnterHandled }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { checker: (self, { target: el }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(document.activeElement) }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { args: [-small, 0], checker: arrowChecker }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { args: [-big, 0], checker: arrowChecker }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { args: [small, 0], checker: arrowChecker }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { args: [big, 0], checker: arrowChecker }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { args: [0, -small], checker: arrowChecker }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { args: [0, -big], checker: arrowChecker }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { args: [0, small], checker: arrowChecker }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { args: [0, big], checker: arrowChecker }]])); } destroy() { var _a2, _b, _c; (_a2 = __privateGet(this, _abortController)) == null ? void 0 : _a2.abort(); __privateSet(this, _abortController, null); this._signal = null; for (const layer of __privateGet(this, _allLayers).values()) { layer.destroy(); } __privateGet(this, _allLayers).clear(); __privateGet(this, _allEditors).clear(); __privateGet(this, _editorsToRescale).clear(); __privateSet(this, _activeEditor, null); __privateGet(this, _selectedEditors).clear(); __privateGet(this, _commandManager).destroy(); (_b = __privateGet(this, _altTextManager)) == null ? void 0 : _b.destroy(); (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); __privateSet(this, _highlightToolbar, null); if (__privateGet(this, _focusMainContainerTimeoutId)) { clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); __privateSet(this, _focusMainContainerTimeoutId, null); } if (__privateGet(this, _translationTimeoutId)) { clearTimeout(__privateGet(this, _translationTimeoutId)); __privateSet(this, _translationTimeoutId, null); } } combinedSignal(ac) { return AbortSignal.any([this._signal, ac.signal]); } get mlManager() { return __privateGet(this, _mlManager); } get useNewAltTextFlow() { return __privateGet(this, _enableUpdatedAddImage); } get useNewAltTextWhenAddingImage() { return __privateGet(this, _enableNewAltTextWhenAddingImage); } get hcmFilter() { return shadow(this, "hcmFilter", __privateGet(this, _pageColors) ? __privateGet(this, _filterFactory).addHCMFilter(__privateGet(this, _pageColors).foreground, __privateGet(this, _pageColors).background) : "none"); } get direction() { return shadow(this, "direction", getComputedStyle(__privateGet(this, _container)).direction); } get highlightColors() { return shadow(this, "highlightColors", __privateGet(this, _highlightColors) ? new Map(__privateGet(this, _highlightColors).split(",").map((pair) => pair.split("=").map((x) => x.trim()))) : null); } get highlightColorNames() { return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, (e) => e.reverse())) : null); } setMainHighlightColorPicker(colorPicker) { __privateSet(this, _mainHighlightColorPicker, colorPicker); } editAltText(editor, firstTime = false) { var _a2; (_a2 = __privateGet(this, _altTextManager)) == null ? void 0 : _a2.editAltText(this, editor, firstTime); } switchToMode(mode, callback) { this._eventBus.on("annotationeditormodechanged", callback, { once: true, signal: this._signal }); this._eventBus.dispatch("showannotationeditorui", { source: this, mode }); } setPreference(name, value) { this._eventBus.dispatch("setpreference", { source: this, name, value }); } onSetPreference({ name, value }) { switch (name) { case "enableNewAltTextWhenAddingImage": __privateSet(this, _enableNewAltTextWhenAddingImage, value); break; } } onPageChanging({ pageNumber }) { __privateSet(this, _currentPageIndex, pageNumber - 1); } focusMainContainer() { __privateGet(this, _container).focus(); } findParent(x, y) { for (const layer of __privateGet(this, _allLayers).values()) { const { x: layerX, y: layerY, width, height } = layer.div.getBoundingClientRect(); if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { return layer; } } return null; } disableUserSelect(value = false) { __privateGet(this, _viewer).classList.toggle("noUserSelect", value); } addShouldRescale(editor) { __privateGet(this, _editorsToRescale).add(editor); } removeShouldRescale(editor) { __privateGet(this, _editorsToRescale).delete(editor); } onScaleChanging({ scale }) { this.commitOrRemove(); this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; for (const editor of __privateGet(this, _editorsToRescale)) { editor.onScaleChanging(); } } onRotationChanging({ pagesRotation }) { this.commitOrRemove(); this.viewParameters.rotation = pagesRotation; } highlightSelection(methodOfCreation = "") { const selection = document.getSelection(); if (!selection || selection.isCollapsed) { return; } const { anchorNode, anchorOffset, focusNode, focusOffset } = selection; const text2 = selection.toString(); const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); const boxes = this.getSelectionBoxes(textLayer); if (!boxes) { return; } selection.empty(); const layer = __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer); const isNoneMode = __privateGet(this, _mode) === AnnotationEditorType.NONE; const callback = () => { layer == null ? void 0 : layer.createAndAddNewEditor({ x: 0, y: 0 }, false, { methodOfCreation, boxes, anchorNode, anchorOffset, focusNode, focusOffset, text: text2 }); if (isNoneMode) { this.showAllEditors("highlight", true, true); } }; if (isNoneMode) { this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback); return; } callback(); } addToAnnotationStorage(editor) { if (!editor.isEmpty() && __privateGet(this, _annotationStorage) && !__privateGet(this, _annotationStorage).has(editor.id)) { __privateGet(this, _annotationStorage).setValue(editor.id, editor); } } blur() { this.isShiftKeyDown = false; if (__privateGet(this, _highlightWhenShiftUp)) { __privateSet(this, _highlightWhenShiftUp, false); __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } if (!this.hasSelection) { return; } const { activeElement } = document; for (const editor of __privateGet(this, _selectedEditors)) { if (editor.div.contains(activeElement)) { __privateSet(this, _lastActiveElement, [editor, activeElement]); editor._focusEventsAllowed = false; break; } } } focus() { if (!__privateGet(this, _lastActiveElement)) { return; } const [lastEditor, lastActiveElement] = __privateGet(this, _lastActiveElement); __privateSet(this, _lastActiveElement, null); lastActiveElement.addEventListener("focusin", () => { lastEditor._focusEventsAllowed = true; }, { once: true, signal: this._signal }); lastActiveElement.focus(); } addEditListeners() { __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); } removeEditListeners() { __privateMethod(this, _removeKeyboardManager, removeKeyboardManager_fn).call(this); __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); } dragOver(event) { for (const { type } of event.dataTransfer.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(type)) { event.dataTransfer.dropEffect = "copy"; event.preventDefault(); return; } } } } drop(event) { for (const item of event.dataTransfer.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(item.type)) { editorType.paste(item, this.currentLayer); event.preventDefault(); return; } } } } copy(event) { var _a2; event.preventDefault(); (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); if (!this.hasSelection) { return; } const editors = []; for (const editor of __privateGet(this, _selectedEditors)) { const serialized = editor.serialize(true); if (serialized) { editors.push(serialized); } } if (editors.length === 0) { return; } event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); } cut(event) { this.copy(event); this.delete(); } paste(event) { event.preventDefault(); const { clipboardData } = event; for (const item of clipboardData.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(item.type)) { editorType.paste(item, this.currentLayer); return; } } } let data = clipboardData.getData("application/pdfjs"); if (!data) { return; } try { data = JSON.parse(data); } catch (ex) { warn(`paste: "${ex.message}".`); return; } if (!Array.isArray(data)) { return; } this.unselectAll(); const layer = this.currentLayer; try { const newEditors = []; for (const editor of data) { const deserializedEditor = layer.deserialize(editor); if (!deserializedEditor) { return; } newEditors.push(deserializedEditor); } const cmd = () => { for (const editor of newEditors) { __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); } __privateMethod(this, _selectEditors, selectEditors_fn).call(this, newEditors); }; const undo = () => { for (const editor of newEditors) { editor.remove(); } }; this.addCommands({ cmd, undo, mustExec: true }); } catch (ex) { warn(`paste: "${ex.message}".`); } } keydown(event) { if (!this.isShiftKeyDown && event.key === "Shift") { this.isShiftKeyDown = true; } if (__privateGet(this, _mode) !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { _AnnotationEditorUIManager._keyboardManager.exec(this, event); } } keyup(event) { if (this.isShiftKeyDown && event.key === "Shift") { this.isShiftKeyDown = false; if (__privateGet(this, _highlightWhenShiftUp)) { __privateSet(this, _highlightWhenShiftUp, false); __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } } } onEditingAction({ name }) { switch (name) { case "undo": case "redo": case "delete": case "selectAll": this[name](); break; case "highlightSelection": this.highlightSelection("context_menu"); break; } } setEditingState(isEditing) { if (isEditing) { __privateMethod(this, _addFocusManager, addFocusManager_fn).call(this); __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { isEditing: __privateGet(this, _mode) !== AnnotationEditorType.NONE, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this), hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), hasSelectedEditor: false }); } else { __privateMethod(this, _removeFocusManager, removeFocusManager_fn).call(this); __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { isEditing: false }); this.disableUserSelect(false); } } registerEditorTypes(types) { if (__privateGet(this, _editorTypes)) { return; } __privateSet(this, _editorTypes, types); for (const editorType of __privateGet(this, _editorTypes)) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editorType.defaultPropertiesToUpdate); } } getId() { return __privateGet(this, _idManager).id; } get currentLayer() { return __privateGet(this, _allLayers).get(__privateGet(this, _currentPageIndex)); } getLayer(pageIndex) { return __privateGet(this, _allLayers).get(pageIndex); } get currentPageIndex() { return __privateGet(this, _currentPageIndex); } addLayer(layer) { __privateGet(this, _allLayers).set(layer.pageIndex, layer); if (__privateGet(this, _isEnabled)) { layer.enable(); } else { layer.disable(); } } removeLayer(layer) { __privateGet(this, _allLayers).delete(layer.pageIndex); } updateMode(mode, editId = null, isFromKeyboard = false) { if (__privateGet(this, _mode) === mode) { return; } __privateSet(this, _mode, mode); if (mode === AnnotationEditorType.NONE) { this.setEditingState(false); __privateMethod(this, _disableAll, disableAll_fn).call(this); return; } this.setEditingState(true); __privateMethod(this, _enableAll, enableAll_fn).call(this); this.unselectAll(); for (const layer of __privateGet(this, _allLayers).values()) { layer.updateMode(mode); } if (!editId && isFromKeyboard) { this.addNewEditorFromKeyboard(); return; } if (!editId) { return; } for (const editor of __privateGet(this, _allEditors).values()) { if (editor.annotationElementId === editId) { this.setSelected(editor); editor.enterInEditMode(); break; } } } addNewEditorFromKeyboard() { if (this.currentLayer.canCreateNewEmptyEditor()) { this.currentLayer.addNewEditor(); } } updateToolbar(mode) { if (mode === __privateGet(this, _mode)) { return; } this._eventBus.dispatch("switchannotationeditormode", { source: this, mode }); } updateParams(type, value) { var _a2; if (!__privateGet(this, _editorTypes)) { return; } switch (type) { case AnnotationEditorParamsType.CREATE: this.currentLayer.addNewEditor(); return; case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: (_a2 = __privateGet(this, _mainHighlightColorPicker)) == null ? void 0 : _a2.updateColor(value); break; case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: this._eventBus.dispatch("reporttelemetry", { source: this, details: { type: "editing", data: { type: "highlight", action: "toggle_visibility" } } }); (__privateGet(this, _showAllStates) || __privateSet(this, _showAllStates, /* @__PURE__ */ new Map())).set(type, value); this.showAllEditors("highlight", value); break; } for (const editor of __privateGet(this, _selectedEditors)) { editor.updateParams(type, value); } for (const editorType of __privateGet(this, _editorTypes)) { editorType.updateDefaultParams(type, value); } } showAllEditors(type, visible, updateButton = false) { var _a2, _b; for (const editor of __privateGet(this, _allEditors).values()) { if (editor.editorType === type) { editor.show(visible); } } const state = (_b = (_a2 = __privateGet(this, _showAllStates)) == null ? void 0 : _a2.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL)) != null ? _b : true; if (state !== visible) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); } } enableWaiting(mustWait = false) { if (__privateGet(this, _isWaiting) === mustWait) { return; } __privateSet(this, _isWaiting, mustWait); for (const layer of __privateGet(this, _allLayers).values()) { if (mustWait) { layer.disableClick(); } else { layer.enableClick(); } layer.div.classList.toggle("waiting", mustWait); } } getEditors(pageIndex) { const editors = []; for (const editor of __privateGet(this, _allEditors).values()) { if (editor.pageIndex === pageIndex) { editors.push(editor); } } return editors; } getEditor(id) { return __privateGet(this, _allEditors).get(id); } addEditor(editor) { __privateGet(this, _allEditors).set(editor.id, editor); } removeEditor(editor) { var _a2; if (editor.div.contains(document.activeElement)) { if (__privateGet(this, _focusMainContainerTimeoutId)) { clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); } __privateSet(this, _focusMainContainerTimeoutId, setTimeout(() => { this.focusMainContainer(); __privateSet(this, _focusMainContainerTimeoutId, null); }, 0)); } __privateGet(this, _allEditors).delete(editor.id); this.unselect(editor); if (!editor.annotationElementId || !__privateGet(this, _deletedAnnotationsElementIds).has(editor.annotationElementId)) { (_a2 = __privateGet(this, _annotationStorage)) == null ? void 0 : _a2.remove(editor.id); } } addDeletedAnnotationElement(editor) { __privateGet(this, _deletedAnnotationsElementIds).add(editor.annotationElementId); this.addChangedExistingAnnotation(editor); editor.deleted = true; } isDeletedAnnotationElement(annotationElementId) { return __privateGet(this, _deletedAnnotationsElementIds).has(annotationElementId); } removeDeletedAnnotationElement(editor) { __privateGet(this, _deletedAnnotationsElementIds).delete(editor.annotationElementId); this.removeChangedExistingAnnotation(editor); editor.deleted = false; } setActiveEditor(editor) { if (__privateGet(this, _activeEditor) === editor) { return; } __privateSet(this, _activeEditor, editor); if (editor) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); } } updateUI(editor) { if (__privateGet(this, _lastSelectedEditor, lastSelectedEditor_get) === editor) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); } } toggleSelected(editor) { if (__privateGet(this, _selectedEditors).has(editor)) { __privateGet(this, _selectedEditors).delete(editor); editor.unselect(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); return; } __privateGet(this, _selectedEditors).add(editor); editor.select(); __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: true }); } setSelected(editor) { for (const ed of __privateGet(this, _selectedEditors)) { if (ed !== editor) { ed.unselect(); } } __privateGet(this, _selectedEditors).clear(); __privateGet(this, _selectedEditors).add(editor); editor.select(); __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: true }); } isSelected(editor) { return __privateGet(this, _selectedEditors).has(editor); } get firstSelectedEditor() { return __privateGet(this, _selectedEditors).values().next().value; } unselect(editor) { editor.unselect(); __privateGet(this, _selectedEditors).delete(editor); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); } get hasSelection() { return __privateGet(this, _selectedEditors).size !== 0; } get isEnterHandled() { return __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.isEnterHandled; } undo() { __privateGet(this, _commandManager).undo(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), hasSomethingToRedo: true, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } redo() { __privateGet(this, _commandManager).redo(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: true, hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } addCommands(params) { __privateGet(this, _commandManager).add(params); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: true, hasSomethingToRedo: false, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } delete() { this.commitOrRemove(); if (!this.hasSelection) { return; } const editors = [...__privateGet(this, _selectedEditors)]; const cmd = () => { for (const editor of editors) { editor.remove(); } }; const undo = () => { for (const editor of editors) { __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); } }; this.addCommands({ cmd, undo, mustExec: true }); } commitOrRemove() { var _a2; (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); } hasSomethingToControl() { return __privateGet(this, _activeEditor) || this.hasSelection; } selectAll() { for (const editor of __privateGet(this, _selectedEditors)) { editor.commit(); } __privateMethod(this, _selectEditors, selectEditors_fn).call(this, __privateGet(this, _allEditors).values()); } unselectAll() { if (__privateGet(this, _activeEditor)) { __privateGet(this, _activeEditor).commitOrRemove(); if (__privateGet(this, _mode) !== AnnotationEditorType.NONE) { return; } } if (!this.hasSelection) { return; } for (const editor of __privateGet(this, _selectedEditors)) { editor.unselect(); } __privateGet(this, _selectedEditors).clear(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: false }); } translateSelectedEditors(x, y, noCommit = false) { if (!noCommit) { this.commitOrRemove(); } if (!this.hasSelection) { return; } __privateGet(this, _translation)[0] += x; __privateGet(this, _translation)[1] += y; const [totalX, totalY] = __privateGet(this, _translation); const editors = [...__privateGet(this, _selectedEditors)]; const TIME_TO_WAIT = 1e3; if (__privateGet(this, _translationTimeoutId)) { clearTimeout(__privateGet(this, _translationTimeoutId)); } __privateSet(this, _translationTimeoutId, setTimeout(() => { __privateSet(this, _translationTimeoutId, null); __privateGet(this, _translation)[0] = __privateGet(this, _translation)[1] = 0; this.addCommands({ cmd: () => { for (const editor of editors) { if (__privateGet(this, _allEditors).has(editor.id)) { editor.translateInPage(totalX, totalY); } } }, undo: () => { for (const editor of editors) { if (__privateGet(this, _allEditors).has(editor.id)) { editor.translateInPage(-totalX, -totalY); } } }, mustExec: false }); }, TIME_TO_WAIT)); for (const editor of editors) { editor.translateInPage(x, y); } } setUpDragSession() { if (!this.hasSelection) { return; } this.disableUserSelect(true); __privateSet(this, _draggingEditors, /* @__PURE__ */ new Map()); for (const editor of __privateGet(this, _selectedEditors)) { __privateGet(this, _draggingEditors).set(editor, { savedX: editor.x, savedY: editor.y, savedPageIndex: editor.pageIndex, newX: 0, newY: 0, newPageIndex: -1 }); } } endDragSession() { if (!__privateGet(this, _draggingEditors)) { return false; } this.disableUserSelect(false); const map = __privateGet(this, _draggingEditors); __privateSet(this, _draggingEditors, null); let mustBeAddedInUndoStack = false; for (const [{ x, y, pageIndex }, value] of map) { value.newX = x; value.newY = y; value.newPageIndex = pageIndex; mustBeAddedInUndoStack || (mustBeAddedInUndoStack = x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex); } if (!mustBeAddedInUndoStack) { return false; } const move = (editor, x, y, pageIndex) => { if (__privateGet(this, _allEditors).has(editor.id)) { const parent = __privateGet(this, _allLayers).get(pageIndex); if (parent) { editor._setParentAndPosition(parent, x, y); } else { editor.pageIndex = pageIndex; editor.x = x; editor.y = y; } } }; this.addCommands({ cmd: () => { for (const [editor, { newX, newY, newPageIndex }] of map) { move(editor, newX, newY, newPageIndex); } }, undo: () => { for (const [editor, { savedX, savedY, savedPageIndex }] of map) { move(editor, savedX, savedY, savedPageIndex); } }, mustExec: true }); return true; } dragSelectedEditors(tx, ty) { if (!__privateGet(this, _draggingEditors)) { return; } for (const editor of __privateGet(this, _draggingEditors).keys()) { editor.drag(tx, ty); } } rebuild(editor) { if (editor.parent === null) { const parent = this.getLayer(editor.pageIndex); if (parent) { parent.changeParent(editor); parent.addOrRebuild(editor); } else { this.addEditor(editor); this.addToAnnotationStorage(editor); editor.rebuild(); } } else { editor.parent.addOrRebuild(editor); } } get isEditorHandlingKeyboard() { var _a2; return ((_a2 = this.getActive()) == null ? void 0 : _a2.shouldGetKeyboardEvents()) || __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); } isActive(editor) { return __privateGet(this, _activeEditor) === editor; } getActive() { return __privateGet(this, _activeEditor); } getMode() { return __privateGet(this, _mode); } get imageManager() { return shadow(this, "imageManager", new ImageManager()); } getSelectionBoxes(textLayer) { if (!textLayer) { return null; } const selection = document.getSelection(); for (let i = 0, ii = selection.rangeCount; i < ii; i++) { if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) { return null; } } const { x: layerX, y: layerY, width: parentWidth, height: parentHeight } = textLayer.getBoundingClientRect(); let rotator; switch (textLayer.getAttribute("data-main-rotation")) { case "90": rotator = (x, y, w, h) => ({ x: (y - layerY) / parentHeight, y: 1 - (x + w - layerX) / parentWidth, width: h / parentHeight, height: w / parentWidth }); break; case "180": rotator = (x, y, w, h) => ({ x: 1 - (x + w - layerX) / parentWidth, y: 1 - (y + h - layerY) / parentHeight, width: w / parentWidth, height: h / parentHeight }); break; case "270": rotator = (x, y, w, h) => ({ x: 1 - (y + h - layerY) / parentHeight, y: (x - layerX) / parentWidth, width: h / parentHeight, height: w / parentWidth }); break; default: rotator = (x, y, w, h) => ({ x: (x - layerX) / parentWidth, y: (y - layerY) / parentHeight, width: w / parentWidth, height: h / parentHeight }); break; } const boxes = []; for (let i = 0, ii = selection.rangeCount; i < ii; i++) { const range = selection.getRangeAt(i); if (range.collapsed) { continue; } for (const { x, y, width, height } of range.getClientRects()) { if (width === 0 || height === 0) { continue; } boxes.push(rotator(x, y, width, height)); } } return boxes.length === 0 ? null : boxes; } addChangedExistingAnnotation({ annotationElementId, id }) { (__privateGet(this, _changedExistingAnnotations) || __privateSet(this, _changedExistingAnnotations, /* @__PURE__ */ new Map())).set(annotationElementId, id); } removeChangedExistingAnnotation({ annotationElementId }) { var _a2; (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.delete(annotationElementId); } renderAnnotationElement(annotation) { var _a2; const editorId = (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.get(annotation.data.id); if (!editorId) { return; } const editor = __privateGet(this, _annotationStorage).getRawValue(editorId); if (!editor) { return; } if (__privateGet(this, _mode) === AnnotationEditorType.NONE && !editor.hasBeenModified) { return; } editor.renderAnnotationElement(annotation); } }; var AnnotationEditorUIManager = _AnnotationEditorUIManager; _abortController = new WeakMap(); _activeEditor = new WeakMap(); _allEditors = new WeakMap(); _allLayers = new WeakMap(); _altTextManager = new WeakMap(); _annotationStorage = new WeakMap(); _changedExistingAnnotations = new WeakMap(); _commandManager = new WeakMap(); _copyPasteAC = new WeakMap(); _currentPageIndex = new WeakMap(); _deletedAnnotationsElementIds = new WeakMap(); _draggingEditors = new WeakMap(); _editorTypes = new WeakMap(); _editorsToRescale = new WeakMap(); _enableHighlightFloatingButton = new WeakMap(); _enableUpdatedAddImage = new WeakMap(); _enableNewAltTextWhenAddingImage = new WeakMap(); _filterFactory = new WeakMap(); _focusMainContainerTimeoutId = new WeakMap(); _focusManagerAC = new WeakMap(); _highlightColors = new WeakMap(); _highlightWhenShiftUp = new WeakMap(); _highlightToolbar = new WeakMap(); _idManager = new WeakMap(); _isEnabled = new WeakMap(); _isWaiting = new WeakMap(); _keyboardManagerAC = new WeakMap(); _lastActiveElement = new WeakMap(); _mainHighlightColorPicker = new WeakMap(); _mlManager = new WeakMap(); _mode = new WeakMap(); _selectedEditors = new WeakMap(); _selectedTextNode = new WeakMap(); _pageColors = new WeakMap(); _showAllStates = new WeakMap(); _previousStates = new WeakMap(); _translation = new WeakMap(); _translationTimeoutId = new WeakMap(); _container = new WeakMap(); _viewer = new WeakMap(); _getAnchorElementForSelection = new WeakSet(); getAnchorElementForSelection_fn = function({ anchorNode }) { return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; }; _getLayerForTextLayer = new WeakSet(); getLayerForTextLayer_fn = function(textLayer) { const { currentLayer } = this; if (currentLayer.hasTextLayer(textLayer)) { return currentLayer; } for (const layer of __privateGet(this, _allLayers).values()) { if (layer.hasTextLayer(textLayer)) { return layer; } } return null; }; _displayHighlightToolbar = new WeakSet(); displayHighlightToolbar_fn = function() { const selection = document.getSelection(); if (!selection || selection.isCollapsed) { return; } const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); const boxes = this.getSelectionBoxes(textLayer); if (!boxes) { return; } __privateGet(this, _highlightToolbar) || __privateSet(this, _highlightToolbar, new HighlightToolbar(this)); __privateGet(this, _highlightToolbar).show(textLayer, boxes, this.direction === "ltr"); }; _selectionChange = new WeakSet(); selectionChange_fn = function() { var _a2, _b, _c; const selection = document.getSelection(); if (!selection || selection.isCollapsed) { if (__privateGet(this, _selectedTextNode)) { (_a2 = __privateGet(this, _highlightToolbar)) == null ? void 0 : _a2.hide(); __privateSet(this, _selectedTextNode, null); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: false }); } return; } const { anchorNode } = selection; if (anchorNode === __privateGet(this, _selectedTextNode)) { return; } const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); if (!textLayer) { if (__privateGet(this, _selectedTextNode)) { (_b = __privateGet(this, _highlightToolbar)) == null ? void 0 : _b.hide(); __privateSet(this, _selectedTextNode, null); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: false }); } return; } (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); __privateSet(this, _selectedTextNode, anchorNode); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: true }); if (__privateGet(this, _mode) !== AnnotationEditorType.HIGHLIGHT && __privateGet(this, _mode) !== AnnotationEditorType.NONE) { return; } if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { this.showAllEditors("highlight", true, true); } __privateSet(this, _highlightWhenShiftUp, this.isShiftKeyDown); if (!this.isShiftKeyDown) { const activeLayer = __privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT ? __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer) : null; activeLayer == null ? void 0 : activeLayer.toggleDrawing(); const ac = new AbortController(); const signal = this.combinedSignal(ac); const pointerup = (e) => { if (e.type === "pointerup" && e.button !== 0) { return; } ac.abort(); activeLayer == null ? void 0 : activeLayer.toggleDrawing(true); if (e.type === "pointerup") { __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } }; window.addEventListener("pointerup", pointerup, { signal }); window.addEventListener("blur", pointerup, { signal }); } }; _onSelectEnd = new WeakSet(); onSelectEnd_fn = function(methodOfCreation = "") { if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { this.highlightSelection(methodOfCreation); } else if (__privateGet(this, _enableHighlightFloatingButton)) { __privateMethod(this, _displayHighlightToolbar, displayHighlightToolbar_fn).call(this); } }; _addSelectionListener = new WeakSet(); addSelectionListener_fn = function() { document.addEventListener("selectionchange", __privateMethod(this, _selectionChange, selectionChange_fn).bind(this), { signal: this._signal }); }; _addFocusManager = new WeakSet(); addFocusManager_fn = function() { if (__privateGet(this, _focusManagerAC)) { return; } __privateSet(this, _focusManagerAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _focusManagerAC)); window.addEventListener("focus", this.focus.bind(this), { signal }); window.addEventListener("blur", this.blur.bind(this), { signal }); }; _removeFocusManager = new WeakSet(); removeFocusManager_fn = function() { var _a2; (_a2 = __privateGet(this, _focusManagerAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _focusManagerAC, null); }; _addKeyboardManager = new WeakSet(); addKeyboardManager_fn = function() { if (__privateGet(this, _keyboardManagerAC)) { return; } __privateSet(this, _keyboardManagerAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _keyboardManagerAC)); window.addEventListener("keydown", this.keydown.bind(this), { signal }); window.addEventListener("keyup", this.keyup.bind(this), { signal }); }; _removeKeyboardManager = new WeakSet(); removeKeyboardManager_fn = function() { var _a2; (_a2 = __privateGet(this, _keyboardManagerAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _keyboardManagerAC, null); }; _addCopyPasteListeners = new WeakSet(); addCopyPasteListeners_fn = function() { if (__privateGet(this, _copyPasteAC)) { return; } __privateSet(this, _copyPasteAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _copyPasteAC)); document.addEventListener("copy", this.copy.bind(this), { signal }); document.addEventListener("cut", this.cut.bind(this), { signal }); document.addEventListener("paste", this.paste.bind(this), { signal }); }; _removeCopyPasteListeners = new WeakSet(); removeCopyPasteListeners_fn = function() { var _a2; (_a2 = __privateGet(this, _copyPasteAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _copyPasteAC, null); }; _addDragAndDropListeners = new WeakSet(); addDragAndDropListeners_fn = function() { const signal = this._signal; document.addEventListener("dragover", this.dragOver.bind(this), { signal }); document.addEventListener("drop", this.drop.bind(this), { signal }); }; _dispatchUpdateStates = new WeakSet(); dispatchUpdateStates_fn = function(details) { const hasChanged = Object.entries(details).some(([key, value]) => __privateGet(this, _previousStates)[key] !== value); if (hasChanged) { this._eventBus.dispatch("annotationeditorstateschanged", { source: this, details: Object.assign(__privateGet(this, _previousStates), details) }); if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); } } }; _dispatchUpdateUI = new WeakSet(); dispatchUpdateUI_fn = function(details) { this._eventBus.dispatch("annotationeditorparamschanged", { source: this, details }); }; _enableAll = new WeakSet(); enableAll_fn = function() { if (!__privateGet(this, _isEnabled)) { __privateSet(this, _isEnabled, true); for (const layer of __privateGet(this, _allLayers).values()) { layer.enable(); } for (const editor of __privateGet(this, _allEditors).values()) { editor.enable(); } } }; _disableAll = new WeakSet(); disableAll_fn = function() { this.unselectAll(); if (__privateGet(this, _isEnabled)) { __privateSet(this, _isEnabled, false); for (const layer of __privateGet(this, _allLayers).values()) { layer.disable(); } for (const editor of __privateGet(this, _allEditors).values()) { editor.disable(); } } }; _addEditorToLayer = new WeakSet(); addEditorToLayer_fn = function(editor) { const layer = __privateGet(this, _allLayers).get(editor.pageIndex); if (layer) { layer.addOrRebuild(editor); } else { this.addEditor(editor); this.addToAnnotationStorage(editor); } }; _lastSelectedEditor = new WeakSet(); lastSelectedEditor_get = function() { let ed = null; for (ed of __privateGet(this, _selectedEditors)) { } return ed; }; _isEmpty = new WeakSet(); isEmpty_fn = function() { if (__privateGet(this, _allEditors).size === 0) { return true; } if (__privateGet(this, _allEditors).size === 1) { for (const editor of __privateGet(this, _allEditors).values()) { return editor.isEmpty(); } } return false; }; _selectEditors = new WeakSet(); selectEditors_fn = function(editors) { for (const editor of __privateGet(this, _selectedEditors)) { editor.unselect(); } __privateGet(this, _selectedEditors).clear(); for (const editor of editors) { if (editor.isEmpty()) { continue; } __privateGet(this, _selectedEditors).add(editor); editor.select(); } __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); }; __publicField(AnnotationEditorUIManager, "TRANSLATE_SMALL", 1); __publicField(AnnotationEditorUIManager, "TRANSLATE_BIG", 10); var _altText2, _altTextDecorative, _altTextButton, _altTextTooltip, _altTextTooltipTimeout, _altTextWasFromKeyBoard, _badge, _editor2, _guessedText, _textWithDisclaimer, _useNewAltTextFlow, _label, label_get, _setState, setState_fn; var _AltText = class { constructor(editor) { __privateAdd(this, _label); __privateAdd(this, _setState); __privateAdd(this, _altText2, null); __privateAdd(this, _altTextDecorative, false); __privateAdd(this, _altTextButton, null); __privateAdd(this, _altTextTooltip, null); __privateAdd(this, _altTextTooltipTimeout, null); __privateAdd(this, _altTextWasFromKeyBoard, false); __privateAdd(this, _badge, null); __privateAdd(this, _editor2, null); __privateAdd(this, _guessedText, null); __privateAdd(this, _textWithDisclaimer, null); __privateAdd(this, _useNewAltTextFlow, false); __privateSet(this, _editor2, editor); __privateSet(this, _useNewAltTextFlow, editor._uiManager.useNewAltTextFlow); } static initialize(l10nPromise) { _AltText._l10nPromise || (_AltText._l10nPromise = l10nPromise); } async render() { const altText = __privateSet(this, _altTextButton, document.createElement("button")); altText.className = "altText"; let msg; if (__privateGet(this, _useNewAltTextFlow)) { altText.classList.add("new"); msg = await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-missing-button-label"); } else { msg = await _AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label"); } altText.textContent = msg; altText.setAttribute("aria-label", msg); altText.tabIndex = "0"; const signal = __privateGet(this, _editor2)._uiManager._signal; altText.addEventListener("contextmenu", noContextMenu, { signal }); altText.addEventListener("pointerdown", (event) => event.stopPropagation(), { signal }); const onClick = (event) => { event.preventDefault(); __privateGet(this, _editor2)._uiManager.editAltText(__privateGet(this, _editor2)); if (__privateGet(this, _useNewAltTextFlow)) { __privateGet(this, _editor2)._reportTelemetry({ action: "pdfjs.image.alt_text.image_status_label_clicked", data: { label: __privateGet(this, _label, label_get) } }); } }; altText.addEventListener("click", onClick, { capture: true, signal }); altText.addEventListener("keydown", (event) => { if (event.target === altText && event.key === "Enter") { __privateSet(this, _altTextWasFromKeyBoard, true); onClick(event); } }, { signal }); await __privateMethod(this, _setState, setState_fn).call(this); return altText; } finish() { if (!__privateGet(this, _altTextButton)) { return; } __privateGet(this, _altTextButton).focus({ focusVisible: __privateGet(this, _altTextWasFromKeyBoard) }); __privateSet(this, _altTextWasFromKeyBoard, false); } isEmpty() { if (__privateGet(this, _useNewAltTextFlow)) { return __privateGet(this, _altText2) === null; } return !__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative); } hasData() { if (__privateGet(this, _useNewAltTextFlow)) { return __privateGet(this, _altText2) !== null || !!__privateGet(this, _guessedText); } return this.isEmpty(); } get guessedText() { return __privateGet(this, _guessedText); } async setGuessedText(guessedText) { if (__privateGet(this, _altText2) !== null) { return; } __privateSet(this, _guessedText, guessedText); __privateSet(this, _textWithDisclaimer, await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer")({ generatedAltText: guessedText })); __privateMethod(this, _setState, setState_fn).call(this); } toggleAltTextBadge(visibility = false) { var _a2; if (!__privateGet(this, _useNewAltTextFlow) || __privateGet(this, _altText2)) { (_a2 = __privateGet(this, _badge)) == null ? void 0 : _a2.remove(); __privateSet(this, _badge, null); return; } if (!__privateGet(this, _badge)) { const badge = __privateSet(this, _badge, document.createElement("div")); badge.className = "noAltTextBadge"; __privateGet(this, _editor2).div.append(badge); } __privateGet(this, _badge).classList.toggle("hidden", !visibility); } serialize(isForCopying) { let altText = __privateGet(this, _altText2); if (!isForCopying && __privateGet(this, _guessedText) === altText) { altText = __privateGet(this, _textWithDisclaimer); } return { altText, decorative: __privateGet(this, _altTextDecorative), guessedText: __privateGet(this, _guessedText), textWithDisclaimer: __privateGet(this, _textWithDisclaimer) }; } get data() { return { altText: __privateGet(this, _altText2), decorative: __privateGet(this, _altTextDecorative) }; } set data({ altText, decorative, guessedText, textWithDisclaimer, cancel = false }) { if (guessedText) { __privateSet(this, _guessedText, guessedText); __privateSet(this, _textWithDisclaimer, textWithDisclaimer); } if (__privateGet(this, _altText2) === altText && __privateGet(this, _altTextDecorative) === decorative) { return; } if (!cancel) { __privateSet(this, _altText2, altText); __privateSet(this, _altTextDecorative, decorative); } __privateMethod(this, _setState, setState_fn).call(this); } toggle(enabled = false) { if (!__privateGet(this, _altTextButton)) { return; } if (!enabled && __privateGet(this, _altTextTooltipTimeout)) { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); } __privateGet(this, _altTextButton).disabled = !enabled; } shown() { __privateGet(this, _editor2)._reportTelemetry({ action: "pdfjs.image.alt_text.image_status_label_displayed", data: { label: __privateGet(this, _label, label_get) } }); } destroy() { var _a2, _b; (_a2 = __privateGet(this, _altTextButton)) == null ? void 0 : _a2.remove(); __privateSet(this, _altTextButton, null); __privateSet(this, _altTextTooltip, null); (_b = __privateGet(this, _badge)) == null ? void 0 : _b.remove(); __privateSet(this, _badge, null); } }; var AltText = _AltText; _altText2 = new WeakMap(); _altTextDecorative = new WeakMap(); _altTextButton = new WeakMap(); _altTextTooltip = new WeakMap(); _altTextTooltipTimeout = new WeakMap(); _altTextWasFromKeyBoard = new WeakMap(); _badge = new WeakMap(); _editor2 = new WeakMap(); _guessedText = new WeakMap(); _textWithDisclaimer = new WeakMap(); _useNewAltTextFlow = new WeakMap(); _label = new WeakSet(); label_get = function() { return __privateGet(this, _altText2) && "added" || __privateGet(this, _altText2) === null && this.guessedText && "review" || "missing"; }; _setState = new WeakSet(); setState_fn = async function() { var _a2, _b; const button = __privateGet(this, _altTextButton); if (!button) { return; } if (__privateGet(this, _useNewAltTextFlow)) { const label = __privateGet(this, _label, label_get); const type = label === "review" ? "to-review" : label; button.classList.toggle("done", !!__privateGet(this, _altText2)); _AltText._l10nPromise.get(`pdfjs-editor-new-alt-text-${type}-button-label`).then((msg) => { button.setAttribute("aria-label", msg); for (const child of button.childNodes) { if (child.nodeType === Node.TEXT_NODE) { child.textContent = msg; break; } } }); if (!__privateGet(this, _altText2)) { (_a2 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a2.remove(); return; } } else { if (!__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative)) { button.classList.remove("done"); (_b = __privateGet(this, _altTextTooltip)) == null ? void 0 : _b.remove(); return; } button.classList.add("done"); _AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then((msg) => { button.setAttribute("aria-label", msg); }); } let tooltip = __privateGet(this, _altTextTooltip); if (!tooltip) { __privateSet(this, _altTextTooltip, tooltip = document.createElement("span")); tooltip.className = "tooltip"; tooltip.setAttribute("role", "tooltip"); const id = tooltip.id = `alt-text-tooltip-${__privateGet(this, _editor2).id}`; button.setAttribute("aria-describedby", id); const DELAY_TO_SHOW_TOOLTIP = 100; const signal = __privateGet(this, _editor2)._uiManager._signal; signal.addEventListener("abort", () => { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); }, { once: true }); button.addEventListener("mouseenter", () => { __privateSet(this, _altTextTooltipTimeout, setTimeout(() => { __privateSet(this, _altTextTooltipTimeout, null); __privateGet(this, _altTextTooltip).classList.add("show"); __privateGet(this, _editor2)._reportTelemetry({ action: "alt_text_tooltip" }); }, DELAY_TO_SHOW_TOOLTIP)); }, { signal }); button.addEventListener("mouseleave", () => { var _a3; if (__privateGet(this, _altTextTooltipTimeout)) { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); } (_a3 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a3.classList.remove("show"); }, { signal }); } tooltip.innerText = __privateGet(this, _altTextDecorative) ? await _AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : __privateGet(this, _altText2); if (!tooltip.parentNode) { button.append(tooltip); } const element2 = __privateGet(this, _editor2).getImageForAltText(); element2 == null ? void 0 : element2.setAttribute("aria-describedby", tooltip.id); }; __publicField(AltText, "_l10nPromise", null); var _accessibilityData, _allResizerDivs, _altText3, _disabled, _keepAspectRatio, _resizersDiv, _savedDimensions, _focusAC, _focusedResizerName, _hasBeenClicked, _initialPosition, _isEditing, _isInEditMode, _isResizerEnabledForKeyboard, _moveInDOMTimeout, _prevDragX, _prevDragY, _telemetryTimeouts, _isDraggable, _zIndex, _translate, translate_fn, _rotatePoint, rotatePoint_fn, _getRotationMatrix, getRotationMatrix_fn, _createResizers, createResizers_fn, _resizerPointerdown, resizerPointerdown_fn, _addResizeToUndoStack, addResizeToUndoStack_fn, _resizerPointermove, resizerPointermove_fn, _selectOnPointerEvent, selectOnPointerEvent_fn, _setUpDragSession, setUpDragSession_fn, _addFocusListeners, addFocusListeners_fn, _resizerKeydown, resizerKeydown_fn, _resizerBlur, resizerBlur_fn, _resizerFocus, resizerFocus_fn, _setResizerTabIndex, setResizerTabIndex_fn, _stopResizing, stopResizing_fn; var _AnnotationEditor = class { constructor(parameters) { __privateAdd(this, _translate); __privateAdd(this, _getRotationMatrix); __privateAdd(this, _createResizers); __privateAdd(this, _resizerPointerdown); __privateAdd(this, _addResizeToUndoStack); __privateAdd(this, _resizerPointermove); __privateAdd(this, _selectOnPointerEvent); __privateAdd(this, _setUpDragSession); __privateAdd(this, _addFocusListeners); __privateAdd(this, _resizerKeydown); __privateAdd(this, _resizerBlur); __privateAdd(this, _resizerFocus); __privateAdd(this, _setResizerTabIndex); __privateAdd(this, _stopResizing); __privateAdd(this, _accessibilityData, null); __privateAdd(this, _allResizerDivs, null); __privateAdd(this, _altText3, null); __privateAdd(this, _disabled, false); __privateAdd(this, _keepAspectRatio, false); __privateAdd(this, _resizersDiv, null); __privateAdd(this, _savedDimensions, null); __privateAdd(this, _focusAC, null); __privateAdd(this, _focusedResizerName, ""); __privateAdd(this, _hasBeenClicked, false); __privateAdd(this, _initialPosition, null); __privateAdd(this, _isEditing, false); __privateAdd(this, _isInEditMode, false); __privateAdd(this, _isResizerEnabledForKeyboard, false); __privateAdd(this, _moveInDOMTimeout, null); __privateAdd(this, _prevDragX, 0); __privateAdd(this, _prevDragY, 0); __privateAdd(this, _telemetryTimeouts, null); __publicField(this, "_editToolbar", null); __publicField(this, "_initialOptions", /* @__PURE__ */ Object.create(null)); __publicField(this, "_isVisible", true); __publicField(this, "_uiManager", null); __publicField(this, "_focusEventsAllowed", true); __privateAdd(this, _isDraggable, false); __privateAdd(this, _zIndex, _AnnotationEditor._zIndex++); this.parent = parameters.parent; this.id = parameters.id; this.width = this.height = null; this.pageIndex = parameters.parent.pageIndex; this.name = parameters.name; this.div = null; this._uiManager = parameters.uiManager; this.annotationElementId = null; this._willKeepAspectRatio = false; this._initialOptions.isCentered = parameters.isCentered; this._structTreeParentId = null; const { rotation, rawDims: { pageWidth, pageHeight, pageX, pageY } } = this.parent.viewport; this.rotation = rotation; this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; this.pageDimensions = [pageWidth, pageHeight]; this.pageTranslation = [pageX, pageY]; const [width, height] = this.parentDimensions; this.x = parameters.x / width; this.y = parameters.y / height; this.isAttachedToDOM = false; this.deleted = false; } static get _resizerKeyboardManager() { const resize = _AnnotationEditor.prototype._resizeWithKeyboard; const small = AnnotationEditorUIManager.TRANSLATE_SMALL; const big = AnnotationEditorUIManager.TRANSLATE_BIG; return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { args: [-small, 0] }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { args: [-big, 0] }], [["ArrowRight", "mac+ArrowRight"], resize, { args: [small, 0] }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { args: [big, 0] }], [["ArrowUp", "mac+ArrowUp"], resize, { args: [0, -small] }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { args: [0, -big] }], [["ArrowDown", "mac+ArrowDown"], resize, { args: [0, small] }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { args: [0, big] }], [["Escape", "mac+Escape"], _AnnotationEditor.prototype._stopResizingWithKeyboard]])); } get editorType() { return Object.getPrototypeOf(this).constructor._type; } static get _defaultLineColor() { return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); } static deleteAnnotationElement(editor) { const fakeEditor = new FakeEditor({ id: editor.parent.getNextId(), parent: editor.parent, uiManager: editor._uiManager }); fakeEditor.annotationElementId = editor.annotationElementId; fakeEditor.deleted = true; fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); } static initialize(l10n, _uiManager4, options) { _AnnotationEditor._l10nResizer || (_AnnotationEditor._l10nResizer = Object.freeze({ topLeft: "pdfjs-editor-resizer-top-left", topMiddle: "pdfjs-editor-resizer-top-middle", topRight: "pdfjs-editor-resizer-top-right", middleRight: "pdfjs-editor-resizer-middle-right", bottomRight: "pdfjs-editor-resizer-bottom-right", bottomMiddle: "pdfjs-editor-resizer-bottom-middle", bottomLeft: "pdfjs-editor-resizer-bottom-left", middleLeft: "pdfjs-editor-resizer-middle-left" })); _AnnotationEditor._l10nPromise || (_AnnotationEditor._l10nPromise = new Map([...["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-new-alt-text-added-button-label", "pdfjs-editor-new-alt-text-missing-button-label", "pdfjs-editor-new-alt-text-to-review-button-label"].map((str) => [str, l10n.get(str)]), ...["pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer"].map((str) => [str, l10n.get.bind(l10n, str)])])); if (options == null ? void 0 : options.strings) { for (const str of options.strings) { _AnnotationEditor._l10nPromise.set(str, l10n.get(str)); } } if (_AnnotationEditor._borderLineWidth !== -1) { return; } const style = getComputedStyle(document.documentElement); _AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; } static updateDefaultParams(_type2, _value) { } static get defaultPropertiesToUpdate() { return []; } static isHandlingMimeForPasting(mime) { return false; } static paste(item, parent) { unreachable("Not implemented"); } get propertiesToUpdate() { return []; } get _isDraggable() { return __privateGet(this, _isDraggable); } set _isDraggable(value) { var _a2; __privateSet(this, _isDraggable, value); (_a2 = this.div) == null ? void 0 : _a2.classList.toggle("draggable", value); } get isEnterHandled() { return true; } center() { const [pageWidth, pageHeight] = this.pageDimensions; switch (this.parentRotation) { case 90: this.x -= this.height * pageHeight / (pageWidth * 2); this.y += this.width * pageWidth / (pageHeight * 2); break; case 180: this.x += this.width / 2; this.y += this.height / 2; break; case 270: this.x += this.height * pageHeight / (pageWidth * 2); this.y -= this.width * pageWidth / (pageHeight * 2); break; default: this.x -= this.width / 2; this.y -= this.height / 2; break; } this.fixAndSetPosition(); } addCommands(params) { this._uiManager.addCommands(params); } get currentLayer() { return this._uiManager.currentLayer; } setInBackground() { this.div.style.zIndex = 0; } setInForeground() { this.div.style.zIndex = __privateGet(this, _zIndex); } setParent(parent) { if (parent !== null) { this.pageIndex = parent.pageIndex; this.pageDimensions = parent.pageDimensions; } else { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); } this.parent = parent; } focusin(event) { if (!this._focusEventsAllowed) { return; } if (!__privateGet(this, _hasBeenClicked)) { this.parent.setSelected(this); } else { __privateSet(this, _hasBeenClicked, false); } } focusout(event) { var _a2; if (!this._focusEventsAllowed) { return; } if (!this.isAttachedToDOM) { return; } const target = event.relatedTarget; if (target == null ? void 0 : target.closest(`#${this.id}`)) { return; } event.preventDefault(); if (!((_a2 = this.parent) == null ? void 0 : _a2.isMultipleSelection)) { this.commitOrRemove(); } } commitOrRemove() { if (this.isEmpty()) { this.remove(); } else { this.commit(); } } commit() { this.addToAnnotationStorage(); } addToAnnotationStorage() { this._uiManager.addToAnnotationStorage(this); } setAt(x, y, tx, ty) { const [width, height] = this.parentDimensions; [tx, ty] = this.screenToPageTranslation(tx, ty); this.x = (x + tx) / width; this.y = (y + ty) / height; this.fixAndSetPosition(); } translate(x, y) { __privateMethod(this, _translate, translate_fn).call(this, this.parentDimensions, x, y); } translateInPage(x, y) { __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); __privateMethod(this, _translate, translate_fn).call(this, this.pageDimensions, x, y); this.div.scrollIntoView({ block: "nearest" }); } drag(tx, ty) { __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); const [parentWidth, parentHeight] = this.parentDimensions; this.x += tx / parentWidth; this.y += ty / parentHeight; if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { const { x: x2, y: y2 } = this.div.getBoundingClientRect(); if (this.parent.findNewParent(this, x2, y2)) { this.x -= Math.floor(this.x); this.y -= Math.floor(this.y); } } let { x, y } = this; const [bx, by] = this.getBaseTranslation(); x += bx; y += by; this.div.style.left = `${(100 * x).toFixed(2)}%`; this.div.style.top = `${(100 * y).toFixed(2)}%`; this.div.scrollIntoView({ block: "nearest" }); } get _hasBeenMoved() { return !!__privateGet(this, _initialPosition) && (__privateGet(this, _initialPosition)[0] !== this.x || __privateGet(this, _initialPosition)[1] !== this.y); } getBaseTranslation() { const [parentWidth, parentHeight] = this.parentDimensions; const { _borderLineWidth } = _AnnotationEditor; const x = _borderLineWidth / parentWidth; const y = _borderLineWidth / parentHeight; switch (this.rotation) { case 90: return [-x, y]; case 180: return [x, y]; case 270: return [x, -y]; default: return [-x, -y]; } } get _mustFixPosition() { return true; } fixAndSetPosition(rotation = this.rotation) { const [pageWidth, pageHeight] = this.pageDimensions; let { x, y, width, height } = this; width *= pageWidth; height *= pageHeight; x *= pageWidth; y *= pageHeight; if (this._mustFixPosition) { switch (rotation) { case 0: x = Math.max(0, Math.min(pageWidth - width, x)); y = Math.max(0, Math.min(pageHeight - height, y)); break; case 90: x = Math.max(0, Math.min(pageWidth - height, x)); y = Math.min(pageHeight, Math.max(width, y)); break; case 180: x = Math.min(pageWidth, Math.max(width, x)); y = Math.min(pageHeight, Math.max(height, y)); break; case 270: x = Math.min(pageWidth, Math.max(height, x)); y = Math.max(0, Math.min(pageHeight - width, y)); break; } } this.x = x /= pageWidth; this.y = y /= pageHeight; const [bx, by] = this.getBaseTranslation(); x += bx; y += by; const { style } = this.div; style.left = `${(100 * x).toFixed(2)}%`; style.top = `${(100 * y).toFixed(2)}%`; this.moveInDOM(); } screenToPageTranslation(x, y) { var _a2; return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, this.parentRotation); } pageTranslationToScreen(x, y) { var _a2; return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, 360 - this.parentRotation); } get parentScale() { return this._uiManager.viewParameters.realScale; } get parentRotation() { return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; } get parentDimensions() { const { parentScale, pageDimensions: [pageWidth, pageHeight] } = this; const scaledWidth = pageWidth * parentScale; const scaledHeight = pageHeight * parentScale; return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; } setDims(width, height) { const [parentWidth, parentHeight] = this.parentDimensions; this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; if (!__privateGet(this, _keepAspectRatio)) { this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; } } fixDims() { const { style } = this.div; const { height, width } = style; const widthPercent = width.endsWith("%"); const heightPercent = !__privateGet(this, _keepAspectRatio) && height.endsWith("%"); if (widthPercent && heightPercent) { return; } const [parentWidth, parentHeight] = this.parentDimensions; if (!widthPercent) { style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; } if (!__privateGet(this, _keepAspectRatio) && !heightPercent) { style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; } } getInitialTranslation() { return [0, 0]; } altTextFinish() { var _a2; (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.finish(); } async addEditToolbar() { if (this._editToolbar || __privateGet(this, _isInEditMode)) { return this._editToolbar; } this._editToolbar = new EditorToolbar(this); this.div.append(this._editToolbar.render()); if (__privateGet(this, _altText3)) { await this._editToolbar.addAltText(__privateGet(this, _altText3)); } return this._editToolbar; } removeEditToolbar() { var _a2; if (!this._editToolbar) { return; } this._editToolbar.remove(); this._editToolbar = null; (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.destroy(); } getClientDimensions() { return this.div.getBoundingClientRect(); } async addAltTextButton() { if (__privateGet(this, _altText3)) { return; } AltText.initialize(_AnnotationEditor._l10nPromise); __privateSet(this, _altText3, new AltText(this)); if (__privateGet(this, _accessibilityData)) { __privateGet(this, _altText3).data = __privateGet(this, _accessibilityData); __privateSet(this, _accessibilityData, null); } await this.addEditToolbar(); } get altTextData() { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.data; } set altTextData(data) { if (!__privateGet(this, _altText3)) { return; } __privateGet(this, _altText3).data = data; } get guessedAltText() { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.guessedText; } async setGuessedAltText(text2) { var _a2; await ((_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.setGuessedText(text2)); } serializeAltText(isForCopying) { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.serialize(isForCopying); } hasAltText() { return !!__privateGet(this, _altText3) && !__privateGet(this, _altText3).isEmpty(); } hasAltTextData() { var _a2, _b; return (_b = (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.hasData()) != null ? _b : false; } render() { this.div = document.createElement("div"); this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); this.div.className = this.name; this.div.setAttribute("id", this.id); this.div.tabIndex = __privateGet(this, _disabled) ? -1 : 0; if (!this._isVisible) { this.div.classList.add("hidden"); } this.setInForeground(); __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); const [parentWidth, parentHeight] = this.parentDimensions; if (this.parentRotation % 180 !== 0) { this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; } const [tx, ty] = this.getInitialTranslation(); this.translate(tx, ty); bindEvents(this, this.div, ["pointerdown"]); return this.div; } pointerdown(event) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { event.preventDefault(); return; } __privateSet(this, _hasBeenClicked, true); if (this._isDraggable) { __privateMethod(this, _setUpDragSession, setUpDragSession_fn).call(this, event); return; } __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); } moveInDOM() { if (__privateGet(this, _moveInDOMTimeout)) { clearTimeout(__privateGet(this, _moveInDOMTimeout)); } __privateSet(this, _moveInDOMTimeout, setTimeout(() => { var _a2; __privateSet(this, _moveInDOMTimeout, null); (_a2 = this.parent) == null ? void 0 : _a2.moveEditorInDOM(this); }, 0)); } _setParentAndPosition(parent, x, y) { parent.changeParent(this); this.x = x; this.y = y; this.fixAndSetPosition(); } getRect(tx, ty, rotation = this.rotation) { const scale = this.parentScale; const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; const shiftX = tx / scale; const shiftY = ty / scale; const x = this.x * pageWidth; const y = this.y * pageHeight; const width = this.width * pageWidth; const height = this.height * pageHeight; switch (rotation) { case 0: return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; case 90: return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; case 180: return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; case 270: return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; default: throw new Error("Invalid rotation"); } } getRectInCurrentCoords(rect, pageHeight) { const [x1, y1, x2, y2] = rect; const width = x2 - x1; const height = y2 - y1; switch (this.rotation) { case 0: return [x1, pageHeight - y2, width, height]; case 90: return [x1, pageHeight - y1, height, width]; case 180: return [x2, pageHeight - y1, width, height]; case 270: return [x2, pageHeight - y2, height, width]; default: throw new Error("Invalid rotation"); } } onceAdded() { } isEmpty() { return false; } enableEditMode() { __privateSet(this, _isInEditMode, true); } disableEditMode() { __privateSet(this, _isInEditMode, false); } isInEditMode() { return __privateGet(this, _isInEditMode); } shouldGetKeyboardEvents() { return __privateGet(this, _isResizerEnabledForKeyboard); } needsToBeRebuilt() { return this.div && !this.isAttachedToDOM; } rebuild() { __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); } rotate(_angle) { } serialize(isForCopying = false, context = null) { unreachable("An editor must be serializable"); } static deserialize(data, parent, uiManager) { const editor = new this.prototype.constructor({ parent, id: parent.getNextId(), uiManager }); editor.rotation = data.rotation; __privateSet(editor, _accessibilityData, data.accessibilityData); const [pageWidth, pageHeight] = editor.pageDimensions; const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); editor.x = x / pageWidth; editor.y = y / pageHeight; editor.width = width / pageWidth; editor.height = height / pageHeight; return editor; } get hasBeenModified() { return !!this.annotationElementId && (this.deleted || this.serialize() !== null); } remove() { var _a2; (_a2 = __privateGet(this, _focusAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _focusAC, null); if (!this.isEmpty()) { this.commit(); } if (this.parent) { this.parent.remove(this); } else { this._uiManager.removeEditor(this); } if (__privateGet(this, _moveInDOMTimeout)) { clearTimeout(__privateGet(this, _moveInDOMTimeout)); __privateSet(this, _moveInDOMTimeout, null); } __privateMethod(this, _stopResizing, stopResizing_fn).call(this); this.removeEditToolbar(); if (__privateGet(this, _telemetryTimeouts)) { for (const timeout of __privateGet(this, _telemetryTimeouts).values()) { clearTimeout(timeout); } __privateSet(this, _telemetryTimeouts, null); } this.parent = null; } get isResizable() { return false; } makeResizable() { if (this.isResizable) { __privateMethod(this, _createResizers, createResizers_fn).call(this); __privateGet(this, _resizersDiv).classList.remove("hidden"); bindEvents(this, this.div, ["keydown"]); } } get toolbarPosition() { return null; } keydown(event) { if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { return; } this._uiManager.setSelected(this); __privateSet(this, _savedDimensions, { savedX: this.x, savedY: this.y, savedWidth: this.width, savedHeight: this.height }); const children2 = __privateGet(this, _resizersDiv).children; if (!__privateGet(this, _allResizerDivs)) { __privateSet(this, _allResizerDivs, Array.from(children2)); const boundResizerKeydown = __privateMethod(this, _resizerKeydown, resizerKeydown_fn).bind(this); const boundResizerBlur = __privateMethod(this, _resizerBlur, resizerBlur_fn).bind(this); const signal = this._uiManager._signal; for (const div of __privateGet(this, _allResizerDivs)) { const name = div.getAttribute("data-resizer-name"); div.setAttribute("role", "spinbutton"); div.addEventListener("keydown", boundResizerKeydown, { signal }); div.addEventListener("blur", boundResizerBlur, { signal }); div.addEventListener("focus", __privateMethod(this, _resizerFocus, resizerFocus_fn).bind(this, name), { signal }); div.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); } } const first = __privateGet(this, _allResizerDivs)[0]; let firstPosition = 0; for (const div of children2) { if (div === first) { break; } firstPosition++; } const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (__privateGet(this, _allResizerDivs).length / 4); if (nextFirstPosition !== firstPosition) { if (nextFirstPosition < firstPosition) { for (let i2 = 0; i2 < firstPosition - nextFirstPosition; i2++) { __privateGet(this, _resizersDiv).append(__privateGet(this, _resizersDiv).firstChild); } } else if (nextFirstPosition > firstPosition) { for (let i2 = 0; i2 < nextFirstPosition - firstPosition; i2++) { __privateGet(this, _resizersDiv).firstChild.before(__privateGet(this, _resizersDiv).lastChild); } } let i = 0; for (const child of children2) { const div = __privateGet(this, _allResizerDivs)[i++]; const name = div.getAttribute("data-resizer-name"); child.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); } } __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, 0); __privateSet(this, _isResizerEnabledForKeyboard, true); __privateGet(this, _resizersDiv).firstChild.focus({ focusVisible: true }); event.preventDefault(); event.stopImmediatePropagation(); } _resizeWithKeyboard(x, y) { if (!__privateGet(this, _isResizerEnabledForKeyboard)) { return; } __privateMethod(this, _resizerPointermove, resizerPointermove_fn).call(this, __privateGet(this, _focusedResizerName), { movementX: x, movementY: y }); } _stopResizingWithKeyboard() { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); this.div.focus(); } select() { var _a2, _b, _c; this.makeResizable(); (_a2 = this.div) == null ? void 0 : _a2.classList.add("selectedEditor"); if (!this._editToolbar) { this.addEditToolbar().then(() => { var _a3, _b2; if ((_a3 = this.div) == null ? void 0 : _a3.classList.contains("selectedEditor")) { (_b2 = this._editToolbar) == null ? void 0 : _b2.show(); } }); return; } (_b = this._editToolbar) == null ? void 0 : _b.show(); (_c = __privateGet(this, _altText3)) == null ? void 0 : _c.toggleAltTextBadge(false); } unselect() { var _a2, _b, _c, _d, _e; (_a2 = __privateGet(this, _resizersDiv)) == null ? void 0 : _a2.classList.add("hidden"); (_b = this.div) == null ? void 0 : _b.classList.remove("selectedEditor"); if ((_c = this.div) == null ? void 0 : _c.contains(document.activeElement)) { this._uiManager.currentLayer.div.focus({ preventScroll: true }); } (_d = this._editToolbar) == null ? void 0 : _d.hide(); (_e = __privateGet(this, _altText3)) == null ? void 0 : _e.toggleAltTextBadge(true); } updateParams(type, value) { } disableEditing() { } enableEditing() { } enterInEditMode() { } getImageForAltText() { return null; } get contentDiv() { return this.div; } get isEditing() { return __privateGet(this, _isEditing); } set isEditing(value) { __privateSet(this, _isEditing, value); if (!this.parent) { return; } if (value) { this.parent.setSelected(this); this.parent.setActiveEditor(this); } else { this.parent.setActiveEditor(null); } } setAspectRatio(width, height) { __privateSet(this, _keepAspectRatio, true); const aspectRatio = width / height; const { style } = this.div; style.aspectRatio = aspectRatio; style.height = "auto"; } static get MIN_SIZE() { return 16; } static canCreateNewEmptyEditor() { return true; } get telemetryInitialData() { return { action: "added" }; } get telemetryFinalData() { return null; } _reportTelemetry(data, mustWait = false) { if (mustWait) { __privateGet(this, _telemetryTimeouts) || __privateSet(this, _telemetryTimeouts, /* @__PURE__ */ new Map()); const { action } = data; let timeout = __privateGet(this, _telemetryTimeouts).get(action); if (timeout) { clearTimeout(timeout); } timeout = setTimeout(() => { this._reportTelemetry(data); __privateGet(this, _telemetryTimeouts).delete(action); if (__privateGet(this, _telemetryTimeouts).size === 0) { __privateSet(this, _telemetryTimeouts, null); } }, _AnnotationEditor._telemetryTimeout); __privateGet(this, _telemetryTimeouts).set(action, timeout); return; } data.type || (data.type = this.editorType); this._uiManager._eventBus.dispatch("reporttelemetry", { source: this, details: { type: "editing", data } }); } show(visible = this._isVisible) { this.div.classList.toggle("hidden", !visible); this._isVisible = visible; } enable() { if (this.div) { this.div.tabIndex = 0; } __privateSet(this, _disabled, false); } disable() { if (this.div) { this.div.tabIndex = -1; } __privateSet(this, _disabled, true); } renderAnnotationElement(annotation) { let content = annotation.container.querySelector(".annotationContent"); if (!content) { content = document.createElement("div"); content.classList.add("annotationContent", this.editorType); annotation.container.prepend(content); } else if (content.nodeName === "CANVAS") { const canvas = content; content = document.createElement("div"); content.classList.add("annotationContent", this.editorType); canvas.before(content); } return content; } resetAnnotationElement(annotation) { const { firstChild } = annotation.container; if (firstChild.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) { firstChild.remove(); } } }; var AnnotationEditor = _AnnotationEditor; _accessibilityData = new WeakMap(); _allResizerDivs = new WeakMap(); _altText3 = new WeakMap(); _disabled = new WeakMap(); _keepAspectRatio = new WeakMap(); _resizersDiv = new WeakMap(); _savedDimensions = new WeakMap(); _focusAC = new WeakMap(); _focusedResizerName = new WeakMap(); _hasBeenClicked = new WeakMap(); _initialPosition = new WeakMap(); _isEditing = new WeakMap(); _isInEditMode = new WeakMap(); _isResizerEnabledForKeyboard = new WeakMap(); _moveInDOMTimeout = new WeakMap(); _prevDragX = new WeakMap(); _prevDragY = new WeakMap(); _telemetryTimeouts = new WeakMap(); _isDraggable = new WeakMap(); _zIndex = new WeakMap(); _translate = new WeakSet(); translate_fn = function([width, height], x, y) { [x, y] = this.screenToPageTranslation(x, y); this.x += x / width; this.y += y / height; this.fixAndSetPosition(); }; _rotatePoint = new WeakSet(); rotatePoint_fn = function(x, y, angle) { switch (angle) { case 90: return [y, -x]; case 180: return [-x, -y]; case 270: return [-y, x]; default: return [x, y]; } }; _getRotationMatrix = new WeakSet(); getRotationMatrix_fn = function(rotation) { switch (rotation) { case 90: { const [pageWidth, pageHeight] = this.pageDimensions; return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; } case 180: return [-1, 0, 0, -1]; case 270: { const [pageWidth, pageHeight] = this.pageDimensions; return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; } default: return [1, 0, 0, 1]; } }; _createResizers = new WeakSet(); createResizers_fn = function() { if (__privateGet(this, _resizersDiv)) { return; } __privateSet(this, _resizersDiv, document.createElement("div")); __privateGet(this, _resizersDiv).classList.add("resizers"); const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; const signal = this._uiManager._signal; for (const name of classes) { const div = document.createElement("div"); __privateGet(this, _resizersDiv).append(div); div.classList.add("resizer", name); div.setAttribute("data-resizer-name", name); div.addEventListener("pointerdown", __privateMethod(this, _resizerPointerdown, resizerPointerdown_fn).bind(this, name), { signal }); div.addEventListener("contextmenu", noContextMenu, { signal }); div.tabIndex = -1; } this.div.prepend(__privateGet(this, _resizersDiv)); }; _resizerPointerdown = new WeakSet(); resizerPointerdown_fn = function(name, event) { var _a2; event.preventDefault(); const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.toggle(false); const savedDraggable = this._isDraggable; this._isDraggable = false; const ac = new AbortController(); const signal = this._uiManager.combinedSignal(ac); this.parent.togglePointerEvents(false); window.addEventListener("pointermove", __privateMethod(this, _resizerPointermove, resizerPointermove_fn).bind(this, name), { passive: true, capture: true, signal }); window.addEventListener("contextmenu", noContextMenu, { signal }); const savedX = this.x; const savedY = this.y; const savedWidth = this.width; const savedHeight = this.height; const savedParentCursor = this.parent.div.style.cursor; const savedCursor = this.div.style.cursor; this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; const pointerUpCallback = () => { var _a3; ac.abort(); this.parent.togglePointerEvents(true); (_a3 = __privateGet(this, _altText3)) == null ? void 0 : _a3.toggle(true); this._isDraggable = savedDraggable; this.parent.div.style.cursor = savedParentCursor; this.div.style.cursor = savedCursor; __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); }; window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("blur", pointerUpCallback, { signal }); }; _addResizeToUndoStack = new WeakSet(); addResizeToUndoStack_fn = function(savedX, savedY, savedWidth, savedHeight) { const newX = this.x; const newY = this.y; const newWidth = this.width; const newHeight = this.height; if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { return; } this.addCommands({ cmd: () => { this.width = newWidth; this.height = newHeight; this.x = newX; this.y = newY; const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(parentWidth * newWidth, parentHeight * newHeight); this.fixAndSetPosition(); }, undo: () => { this.width = savedWidth; this.height = savedHeight; this.x = savedX; this.y = savedY; const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); this.fixAndSetPosition(); }, mustExec: true }); }; _resizerPointermove = new WeakSet(); resizerPointermove_fn = function(name, event) { const [parentWidth, parentHeight] = this.parentDimensions; const savedX = this.x; const savedY = this.y; const savedWidth = this.width; const savedHeight = this.height; const minWidth = _AnnotationEditor.MIN_SIZE / parentWidth; const minHeight = _AnnotationEditor.MIN_SIZE / parentHeight; const round = (x) => Math.round(x * 1e4) / 1e4; const rotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, this.rotation); const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; const invRotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, 360 - this.rotation); const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; let getPoint; let getOpposite; let isDiagonal = false; let isHorizontal = false; switch (name) { case "topLeft": isDiagonal = true; getPoint = (w, h) => [0, 0]; getOpposite = (w, h) => [w, h]; break; case "topMiddle": getPoint = (w, h) => [w / 2, 0]; getOpposite = (w, h) => [w / 2, h]; break; case "topRight": isDiagonal = true; getPoint = (w, h) => [w, 0]; getOpposite = (w, h) => [0, h]; break; case "middleRight": isHorizontal = true; getPoint = (w, h) => [w, h / 2]; getOpposite = (w, h) => [0, h / 2]; break; case "bottomRight": isDiagonal = true; getPoint = (w, h) => [w, h]; getOpposite = (w, h) => [0, 0]; break; case "bottomMiddle": getPoint = (w, h) => [w / 2, h]; getOpposite = (w, h) => [w / 2, 0]; break; case "bottomLeft": isDiagonal = true; getPoint = (w, h) => [0, h]; getOpposite = (w, h) => [w, 0]; break; case "middleLeft": isHorizontal = true; getPoint = (w, h) => [0, h / 2]; getOpposite = (w, h) => [w, h / 2]; break; } const point = getPoint(savedWidth, savedHeight); const oppositePoint = getOpposite(savedWidth, savedHeight); let transfOppositePoint = transf(...oppositePoint); const oppositeX = round(savedX + transfOppositePoint[0]); const oppositeY = round(savedY + transfOppositePoint[1]); let ratioX = 1; let ratioY = 1; let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); if (isDiagonal) { const oldDiag = Math.hypot(savedWidth, savedHeight); 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); } else if (isHorizontal) { ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; } else { ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; } const newWidth = round(savedWidth * ratioX); const newHeight = round(savedHeight * ratioY); transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); const newX = oppositeX - transfOppositePoint[0]; const newY = oppositeY - transfOppositePoint[1]; this.width = newWidth; this.height = newHeight; this.x = newX; this.y = newY; this.setDims(parentWidth * newWidth, parentHeight * newHeight); this.fixAndSetPosition(); }; _selectOnPointerEvent = new WeakSet(); selectOnPointerEvent_fn = function(event) { const { isMac } = util_FeatureTest.platform; if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { this.parent.toggleSelected(this); } else { this.parent.setSelected(this); } }; _setUpDragSession = new WeakSet(); setUpDragSession_fn = function(event) { const isSelected = this._uiManager.isSelected(this); this._uiManager.setUpDragSession(); const ac = new AbortController(); const signal = this._uiManager.combinedSignal(ac); if (isSelected) { this.div.classList.add("moving"); __privateSet(this, _prevDragX, event.clientX); __privateSet(this, _prevDragY, event.clientY); const pointerMoveCallback = (e) => { const { clientX: x, clientY: y } = e; const [tx, ty] = this.screenToPageTranslation(x - __privateGet(this, _prevDragX), y - __privateGet(this, _prevDragY)); __privateSet(this, _prevDragX, x); __privateSet(this, _prevDragY, y); this._uiManager.dragSelectedEditors(tx, ty); }; window.addEventListener("pointermove", pointerMoveCallback, { passive: true, capture: true, signal }); } const pointerUpCallback = () => { ac.abort(); if (isSelected) { this.div.classList.remove("moving"); } __privateSet(this, _hasBeenClicked, false); if (!this._uiManager.endDragSession()) { __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); } }; window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("blur", pointerUpCallback, { signal }); }; _addFocusListeners = new WeakSet(); addFocusListeners_fn = function() { if (__privateGet(this, _focusAC) || !this.div) { return; } __privateSet(this, _focusAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _focusAC)); this.div.addEventListener("focusin", this.focusin.bind(this), { signal }); this.div.addEventListener("focusout", this.focusout.bind(this), { signal }); }; _resizerKeydown = new WeakSet(); resizerKeydown_fn = function(event) { _AnnotationEditor._resizerKeyboardManager.exec(this, event); }; _resizerBlur = new WeakSet(); resizerBlur_fn = function(event) { var _a2; if (__privateGet(this, _isResizerEnabledForKeyboard) && ((_a2 = event.relatedTarget) == null ? void 0 : _a2.parentNode) !== __privateGet(this, _resizersDiv)) { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); } }; _resizerFocus = new WeakSet(); resizerFocus_fn = function(name) { __privateSet(this, _focusedResizerName, __privateGet(this, _isResizerEnabledForKeyboard) ? name : ""); }; _setResizerTabIndex = new WeakSet(); setResizerTabIndex_fn = function(value) { if (!__privateGet(this, _allResizerDivs)) { return; } for (const div of __privateGet(this, _allResizerDivs)) { div.tabIndex = value; } }; _stopResizing = new WeakSet(); stopResizing_fn = function() { __privateSet(this, _isResizerEnabledForKeyboard, false); __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, -1); if (__privateGet(this, _savedDimensions)) { const { savedX, savedY, savedWidth, savedHeight } = __privateGet(this, _savedDimensions); __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); __privateSet(this, _savedDimensions, null); } }; __privateAdd(AnnotationEditor, _rotatePoint); __publicField(AnnotationEditor, "_l10nPromise", null); __publicField(AnnotationEditor, "_l10nResizer", null); __publicField(AnnotationEditor, "_borderLineWidth", -1); __publicField(AnnotationEditor, "_colorManager", new ColorManager()); __publicField(AnnotationEditor, "_zIndex", 1); __publicField(AnnotationEditor, "_telemetryTimeout", 1e3); var FakeEditor = class extends AnnotationEditor { constructor(params) { super(params); this.annotationElementId = params.annotationElementId; this.deleted = true; } serialize() { return { id: this.annotationElementId, deleted: true, pageIndex: this.pageIndex }; } }; var SEED = 3285377520; var MASK_HIGH = 4294901760; var MASK_LOW = 65535; var MurmurHash3_64 = class { constructor(seed) { this.h1 = seed ? seed & 4294967295 : SEED; this.h2 = seed ? seed & 4294967295 : SEED; } update(input) { let data, length; if (typeof input === "string") { data = new Uint8Array(input.length * 2); length = 0; for (let i = 0, ii = input.length; i < ii; i++) { const code = input.charCodeAt(i); if (code <= 255) { data[length++] = code; } else { data[length++] = code >>> 8; data[length++] = code & 255; } } } else if (ArrayBuffer.isView(input)) { data = input.slice(); length = data.byteLength; } else { throw new Error("Invalid data format, must be a string or TypedArray."); } const blockCounts = length >> 2; const tailLength = length - blockCounts * 4; const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); let k1 = 0, k2 = 0; let h1 = this.h1, h2 = this.h2; const C1 = 3432918353, C2 = 461845907; const C1_LOW = C1 & MASK_LOW, C2_LOW = C2 & MASK_LOW; for (let i = 0; i < blockCounts; i++) { if (i & 1) { k1 = dataUint32[i]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; h1 ^= k1; h1 = h1 << 13 | h1 >>> 19; h1 = h1 * 5 + 3864292196; } else { k2 = dataUint32[i]; k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; k2 = k2 << 15 | k2 >>> 17; k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; h2 ^= k2; h2 = h2 << 13 | h2 >>> 19; h2 = h2 * 5 + 3864292196; } } k1 = 0; switch (tailLength) { case 3: k1 ^= data[blockCounts * 4 + 2] << 16; case 2: k1 ^= data[blockCounts * 4 + 1] << 8; case 1: k1 ^= data[blockCounts * 4]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; if (blockCounts & 1) { h1 ^= k1; } else { h2 ^= k1; } } this.h1 = h1; this.h2 = h2; } hexdigest() { let h1 = this.h1, h2 = this.h2; h1 ^= h2 >>> 1; h1 = h1 * 3981806797 & MASK_HIGH | h1 * 36045 & MASK_LOW; h2 = h2 * 4283543511 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 2950163797 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; h1 = h1 * 444984403 & MASK_HIGH | h1 * 60499 & MASK_LOW; h2 = h2 * 3301882366 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 3120437893 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); } }; var SerializableEmpty = Object.freeze({ map: null, hash: "", transfer: void 0 }); var _modified, _modifiedIds, _storage, _setModified, setModified_fn; var AnnotationStorage = class { constructor() { __privateAdd(this, _setModified); __privateAdd(this, _modified, false); __privateAdd(this, _modifiedIds, null); __privateAdd(this, _storage, /* @__PURE__ */ new Map()); this.onSetModified = null; this.onResetModified = null; this.onAnnotationEditor = null; } getValue(key, defaultValue) { const value = __privateGet(this, _storage).get(key); if (value === void 0) { return defaultValue; } return Object.assign(defaultValue, value); } getRawValue(key) { return __privateGet(this, _storage).get(key); } remove(key) { __privateGet(this, _storage).delete(key); if (__privateGet(this, _storage).size === 0) { this.resetModified(); } if (typeof this.onAnnotationEditor === "function") { for (const value of __privateGet(this, _storage).values()) { if (value instanceof AnnotationEditor) { return; } } this.onAnnotationEditor(null); } } setValue(key, value) { const obj = __privateGet(this, _storage).get(key); let modified = false; if (obj !== void 0) { for (const [entry, val] of Object.entries(value)) { if (obj[entry] !== val) { modified = true; obj[entry] = val; } } } else { modified = true; __privateGet(this, _storage).set(key, value); } if (modified) { __privateMethod(this, _setModified, setModified_fn).call(this); } if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") { this.onAnnotationEditor(value.constructor._type); } } has(key) { return __privateGet(this, _storage).has(key); } getAll() { return __privateGet(this, _storage).size > 0 ? objectFromMap(__privateGet(this, _storage)) : null; } setAll(obj) { for (const [key, val] of Object.entries(obj)) { this.setValue(key, val); } } get size() { return __privateGet(this, _storage).size; } resetModified() { if (__privateGet(this, _modified)) { __privateSet(this, _modified, false); if (typeof this.onResetModified === "function") { this.onResetModified(); } } } get print() { return new PrintAnnotationStorage(this); } get serializable() { if (__privateGet(this, _storage).size === 0) { return SerializableEmpty; } const map = /* @__PURE__ */ new Map(), hash = new MurmurHash3_64(), transfer = []; const context = /* @__PURE__ */ Object.create(null); let hasBitmap = false; for (const [key, val] of __privateGet(this, _storage)) { const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val; if (serialized) { map.set(key, serialized); hash.update(`${key}:${JSON.stringify(serialized)}`); hasBitmap || (hasBitmap = !!serialized.bitmap); } } if (hasBitmap) { for (const value of map.values()) { if (value.bitmap) { transfer.push(value.bitmap); } } } return map.size > 0 ? { map, hash: hash.hexdigest(), transfer } : SerializableEmpty; } get editorStats() { var _a2; let stats = null; const typeToEditor = /* @__PURE__ */ new Map(); for (const value of __privateGet(this, _storage).values()) { if (!(value instanceof AnnotationEditor)) { continue; } const editorStats = value.telemetryFinalData; if (!editorStats) { continue; } const { type } = editorStats; if (!typeToEditor.has(type)) { typeToEditor.set(type, Object.getPrototypeOf(value).constructor); } stats || (stats = /* @__PURE__ */ Object.create(null)); const map = stats[type] || (stats[type] = /* @__PURE__ */ new Map()); for (const [key, val] of Object.entries(editorStats)) { if (key === "type") { continue; } let counters = map.get(key); if (!counters) { counters = /* @__PURE__ */ new Map(); map.set(key, counters); } const count = (_a2 = counters.get(val)) != null ? _a2 : 0; counters.set(val, count + 1); } } for (const [type, editor] of typeToEditor) { stats[type] = editor.computeTelemetryFinalData(stats[type]); } return stats; } resetModifiedIds() { __privateSet(this, _modifiedIds, null); } get modifiedIds() { if (__privateGet(this, _modifiedIds)) { return __privateGet(this, _modifiedIds); } const ids = []; for (const value of __privateGet(this, _storage).values()) { if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) { continue; } ids.push(value.annotationElementId); } return __privateSet(this, _modifiedIds, { ids: new Set(ids), hash: ids.join(",") }); } }; _modified = new WeakMap(); _modifiedIds = new WeakMap(); _storage = new WeakMap(); _setModified = new WeakSet(); setModified_fn = function() { if (!__privateGet(this, _modified)) { __privateSet(this, _modified, true); if (typeof this.onSetModified === "function") { this.onSetModified(); } } }; var _serializable; var PrintAnnotationStorage = class extends AnnotationStorage { constructor(parent) { super(); __privateAdd(this, _serializable, void 0); const { map, hash, transfer } = parent.serializable; const clone2 = structuredClone(map, transfer ? { transfer } : null); __privateSet(this, _serializable, { map: clone2, hash, transfer }); } get print() { unreachable("Should not call PrintAnnotationStorage.print"); } get serializable() { return __privateGet(this, _serializable); } get modifiedIds() { return shadow(this, "modifiedIds", { ids: /* @__PURE__ */ new Set(), hash: "" }); } }; _serializable = new WeakMap(); var _systemFonts; var FontLoader = class { constructor({ ownerDocument = globalThis.document, styleElement = null }) { __privateAdd(this, _systemFonts, /* @__PURE__ */ new Set()); this._document = ownerDocument; this.nativeFontFaces = /* @__PURE__ */ new Set(); this.styleElement = null; this.loadingRequests = []; this.loadTestFontId = 0; } addNativeFontFace(nativeFontFace) { this.nativeFontFaces.add(nativeFontFace); this._document.fonts.add(nativeFontFace); } removeNativeFontFace(nativeFontFace) { this.nativeFontFaces.delete(nativeFontFace); this._document.fonts.delete(nativeFontFace); } insertRule(rule) { if (!this.styleElement) { this.styleElement = this._document.createElement("style"); this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); } const styleSheet = this.styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } clear() { for (const nativeFontFace of this.nativeFontFaces) { this._document.fonts.delete(nativeFontFace); } this.nativeFontFaces.clear(); __privateGet(this, _systemFonts).clear(); if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } async loadSystemFont({ systemFontInfo: info2, _inspectFont }) { if (!info2 || __privateGet(this, _systemFonts).has(info2.loadedName)) { return; } assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); if (this.isFontLoadingAPISupported) { const { loadedName, src, style } = info2; const fontFace = new FontFace(loadedName, src, style); this.addNativeFontFace(fontFace); try { await fontFace.load(); __privateGet(this, _systemFonts).add(loadedName); _inspectFont == null ? void 0 : _inspectFont(info2); } catch (e) { warn(`Cannot load system font: ${info2.baseFontName}, installing it could help to improve PDF rendering.`); this.removeNativeFontFace(fontFace); } return; } unreachable("Not implemented: loadSystemFont without the Font Loading API."); } async bind(font) { if (font.attached || font.missingFile && !font.systemFontInfo) { return; } font.attached = true; if (font.systemFontInfo) { await this.loadSystemFont(font); return; } if (this.isFontLoadingAPISupported) { const nativeFontFace = font.createNativeFontFace(); if (nativeFontFace) { this.addNativeFontFace(nativeFontFace); try { await nativeFontFace.loaded; } catch (ex) { warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); font.disableFontFace = true; throw ex; } } return; } const rule = font.createFontFaceRule(); if (rule) { this.insertRule(rule); if (this.isSyncFontLoadingSupported) { return; } await new Promise((resolve) => { const request = this._queueLoadingCallback(resolve); this._prepareFontLoadEvent(font, request); }); } } get isFontLoadingAPISupported() { var _a2; const hasFonts = !!((_a2 = this._document) == null ? void 0 : _a2.fonts); return shadow(this, "isFontLoadingAPISupported", hasFonts); } get isSyncFontLoadingSupported() { let supported = false; if (isNodeJS) { supported = true; } else if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.userAgent) === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { supported = true; } return shadow(this, "isSyncFontLoadingSupported", supported); } _queueLoadingCallback(callback) { function completeRequest() { assert(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (loadingRequests.length > 0 && loadingRequests[0].done) { const otherRequest = loadingRequests.shift(); setTimeout(otherRequest.callback, 0); } } const { loadingRequests } = this; const request = { done: false, complete: completeRequest, callback }; loadingRequests.push(request); return request; } get _loadTestFont() { const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); return shadow(this, "_loadTestFont", testFont); } _prepareFontLoadEvent(font, request) { function int32(data2, offset) { return data2.charCodeAt(offset) << 24 | data2.charCodeAt(offset + 1) << 16 | data2.charCodeAt(offset + 2) << 8 | data2.charCodeAt(offset + 3) & 255; } function spliceString(s, offset, remove, insert2) { const chunk1 = s.substring(0, offset); const chunk2 = s.substring(offset + remove); return chunk1 + insert2 + chunk2; } let i, ii; const canvas = this._document.createElement("canvas"); canvas.width = 1; canvas.height = 1; const ctx = canvas.getContext("2d"); let called = 0; function isFontReady(name, callback) { if (++called > 30) { warn("Load test font never loaded."); callback(); return; } ctx.font = "30px " + name; ctx.fillText(".", 0, 20); const imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; let data = this._loadTestFont; const COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); const CFF_CHECKSUM_OFFSET = 16; const XXXX_VALUE = 1482184792; let checksum = int32(data, CFF_CHECKSUM_OFFSET); for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; } if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); const url = `url(data:font/opentype;base64,${btoa(data)});`; const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; this.insertRule(rule); const div = this._document.createElement("div"); div.style.visibility = "hidden"; div.style.width = div.style.height = "10px"; div.style.position = "absolute"; div.style.top = div.style.left = "0px"; for (const name of [font.loadedName, loadTestFontId]) { const span = this._document.createElement("span"); span.textContent = "Hi"; span.style.fontFamily = name; div.append(span); } this._document.body.append(div); isFontReady(loadTestFontId, () => { div.remove(); request.complete(); }); } }; _systemFonts = new WeakMap(); var FontFaceObject = class { constructor(translatedData, { disableFontFace = false, inspectFont = null }) { this.compiledGlyphs = /* @__PURE__ */ Object.create(null); for (const i in translatedData) { this[i] = translatedData[i]; } this.disableFontFace = disableFontFace === true; this._inspectFont = inspectFont; } createNativeFontFace() { var _a2; if (!this.data || this.disableFontFace) { return null; } let nativeFontFace; if (!this.cssFontInfo) { nativeFontFace = new FontFace(this.loadedName, this.data, {}); } else { const css2 = { weight: this.cssFontInfo.fontWeight }; if (this.cssFontInfo.italicAngle) { css2.style = `oblique ${this.cssFontInfo.italicAngle}deg`; } nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css2); } (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this); return nativeFontFace; } createFontFaceRule() { var _a2; if (!this.data || this.disableFontFace) { return null; } const data = bytesToString(this.data); const url = `url(data:${this.mimetype};base64,${btoa(data)});`; let rule; if (!this.cssFontInfo) { rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; } else { let css2 = `font-weight: ${this.cssFontInfo.fontWeight};`; if (this.cssFontInfo.italicAngle) { css2 += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; } rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css2}src:${url}}`; } (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this, url); return rule; } getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== void 0) { return this.compiledGlyphs[character]; } let cmds; try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { warn(`getPathGenerator - ignoring character: "${ex}".`); } if (!Array.isArray(cmds) || cmds.length === 0) { return this.compiledGlyphs[character] = function(c, size) { }; } const commands = []; for (let i = 0, ii = cmds.length; i < ii; ) { switch (cmds[i++]) { case FontRenderOps.BEZIER_CURVE_TO: { const [a, b, c, d, e, f] = cmds.slice(i, i + 6); commands.push((ctx) => ctx.bezierCurveTo(a, b, c, d, e, f)); i += 6; } break; case FontRenderOps.MOVE_TO: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.moveTo(a, b)); i += 2; } break; case FontRenderOps.LINE_TO: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.lineTo(a, b)); i += 2; } break; case FontRenderOps.QUADRATIC_CURVE_TO: { const [a, b, c, d] = cmds.slice(i, i + 4); commands.push((ctx) => ctx.quadraticCurveTo(a, b, c, d)); i += 4; } break; case FontRenderOps.RESTORE: commands.push((ctx) => ctx.restore()); break; case FontRenderOps.SAVE: commands.push((ctx) => ctx.save()); break; case FontRenderOps.SCALE: assert(commands.length === 2, "Scale command is only valid at the third position."); break; case FontRenderOps.TRANSFORM: { const [a, b, c, d, e, f] = cmds.slice(i, i + 6); commands.push((ctx) => ctx.transform(a, b, c, d, e, f)); i += 6; } break; case FontRenderOps.TRANSLATE: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.translate(a, b)); i += 2; } break; } } return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) { commands[0](ctx); commands[1](ctx); ctx.scale(size, -size); for (let i = 2, ii = commands.length; i < ii; i++) { commands[i](ctx); } }; } }; if (isNodeJS) { packageCapability = Promise.withResolvers(); packageMap = null; const loadPackages = async () => { const fs = await import( /*webpackIgnore: true*/ "fs" ), http = await import( /*webpackIgnore: true*/ "http" ), https = await import( /*webpackIgnore: true*/ "https" ), url = await import( /*webpackIgnore: true*/ "url" ); let canvas, path2d; return new Map(Object.entries({ fs, http, https, url, canvas, path2d })); }; loadPackages().then((map) => { packageMap = map; packageCapability.resolve(); }, (reason) => { warn(`loadPackages: ${reason}`); packageMap = /* @__PURE__ */ new Map(); packageCapability.resolve(); }); } var packageCapability; var packageMap; var NodePackages = class { static get promise() { return packageCapability.promise; } static get(name) { return packageMap == null ? void 0 : packageMap.get(name); } }; var node_utils_fetchData = function(url) { const fs = NodePackages.get("fs"); return fs.promises.readFile(url).then((data) => new Uint8Array(data)); }; var NodeFilterFactory = class extends BaseFilterFactory { }; var NodeCanvasFactory = class extends BaseCanvasFactory { _createCanvas(width, height) { const canvas = NodePackages.get("canvas"); return canvas.createCanvas(width, height); } }; var NodeCMapReaderFactory = class extends BaseCMapReaderFactory { _fetchData(url, compressionType) { return node_utils_fetchData(url).then((data) => ({ cMapData: data, compressionType })); } }; var NodeStandardFontDataFactory = class extends BaseStandardFontDataFactory { _fetchData(url) { return node_utils_fetchData(url); } }; var PathType = { FILL: "Fill", STROKE: "Stroke", SHADING: "Shading" }; function applyBoundingBox(ctx, bbox) { if (!bbox) { return; } const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } var BaseShadingPattern = class { getPattern() { unreachable("Abstract method `getPattern` called."); } }; var RadialAxialShadingPattern = class extends BaseShadingPattern { constructor(IR) { super(); this._type = IR[1]; this._bbox = IR[2]; this._colorStops = IR[3]; this._p0 = IR[4]; this._p1 = IR[5]; this._r0 = IR[6]; this._r1 = IR[7]; this.matrix = null; } _createGradient(ctx) { let grad; if (this._type === "axial") { grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); } else if (this._type === "radial") { grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); } for (const colorStop of this._colorStops) { grad.addColorStop(colorStop[0], colorStop[1]); } return grad; } getPattern(ctx, owner, inverse, pathType) { let pattern; if (pathType === PathType.STROKE || pathType === PathType.FILL) { const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0]; const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); const tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.beginPath(); tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); tmpCtx.transform(...owner.baseTransform); if (this.matrix) { tmpCtx.transform(...this.matrix); } applyBoundingBox(tmpCtx, this._bbox); tmpCtx.fillStyle = this._createGradient(tmpCtx); tmpCtx.fill(); pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); const domMatrix = new DOMMatrix(inverse); pattern.setTransform(domMatrix); } else { applyBoundingBox(ctx, this._bbox); pattern = this._createGradient(ctx); } return pattern; } }; function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { const coords = context.coords, colors = context.colors; const bytes = data.data, rowSize = data.width * 4; let tmp; if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; } if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } const x1 = (coords[p1] + context.offsetX) * context.scaleX; const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; const x2 = (coords[p2] + context.offsetX) * context.scaleX; const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; const x3 = (coords[p3] + context.offsetX) * context.scaleX; const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } const c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; const c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; const c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; const minY = Math.round(y1), maxY = Math.round(y3); let xa, car, cag, cab; let xb, cbr, cbg, cbb; for (let y = minY; y <= maxY; y++) { if (y < y2) { const k2 = y < y1 ? 0 : (y1 - y) / (y1 - y2); xa = x1 - (x1 - x2) * k2; car = c1r - (c1r - c2r) * k2; cag = c1g - (c1g - c2g) * k2; cab = c1b - (c1b - c2b) * k2; } else { let k2; if (y > y3) { k2 = 1; } else if (y2 === y3) { k2 = 0; } else { k2 = (y2 - y) / (y2 - y3); } xa = x2 - (x2 - x3) * k2; car = c2r - (c2r - c3r) * k2; cag = c2g - (c2g - c3g) * k2; cab = c2b - (c2b - c3b) * k2; } let k; if (y < y1) { k = 0; } else if (y > y3) { k = 1; } else { k = (y1 - y) / (y1 - y3); } xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; const x1_ = Math.round(Math.min(xa, xb)); const x2_ = Math.round(Math.max(xa, xb)); let j = rowSize * y + x1_ * 4; for (let x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); if (k < 0) { k = 0; } else if (k > 1) { k = 1; } bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; bytes[j++] = 255; } } } function drawFigure(data, figure, context) { const ps = figure.coords; const cs = figure.colors; let i, ii; switch (figure.type) { case "lattice": const verticesPerRow = figure.verticesPerRow; const rows = Math.floor(ps.length / verticesPerRow) - 1; const cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { let q = i * verticesPerRow; for (let j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } break; case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } break; default: throw new Error("illegal figure"); } } var MeshShadingPattern = class extends BaseShadingPattern { constructor(IR) { super(); this._coords = IR[2]; this._colors = IR[3]; this._figures = IR[4]; this._bounds = IR[5]; this._bbox = IR[7]; this._background = IR[8]; this.matrix = null; } _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { const EXPECTED_SCALE = 1.1; const MAX_PATTERN_SIZE = 3e3; const BORDER_SIZE = 2; const offsetX = Math.floor(this._bounds[0]); const offsetY = Math.floor(this._bounds[1]); const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const scaleX = boundsWidth / width; const scaleY = boundsHeight / height; const context = { coords: this._coords, colors: this._colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; const paddedWidth = width + BORDER_SIZE * 2; const paddedHeight = height + BORDER_SIZE * 2; const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); const tmpCtx = tmpCanvas.context; const data = tmpCtx.createImageData(width, height); if (backgroundColor) { const bytes = data.data; for (let i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; bytes[i + 2] = backgroundColor[2]; bytes[i + 3] = 255; } } for (const figure of this._figures) { drawFigure(data, figure, context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); const canvas = tmpCanvas.canvas; return { canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX, scaleY }; } getPattern(ctx, owner, inverse, pathType) { applyBoundingBox(ctx, this._bbox); let scale; if (pathType === PathType.SHADING) { scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx)); } else { scale = Util.singularValueDecompose2dScale(owner.baseTransform); if (this.matrix) { const matrixScale = Util.singularValueDecompose2dScale(this.matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); if (pathType !== PathType.SHADING) { ctx.setTransform(...owner.baseTransform); if (this.matrix) { ctx.transform(...this.matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } }; var DummyShadingPattern = class extends BaseShadingPattern { getPattern() { return "hotpink"; } }; function getShadingPattern(IR) { switch (IR[0]) { case "RadialAxial": return new RadialAxialShadingPattern(IR); case "Mesh": return new MeshShadingPattern(IR); case "Dummy": return new DummyShadingPattern(); } throw new Error(`Unknown IR type: ${IR[0]}`); } var PaintType = { COLORED: 1, UNCOLORED: 2 }; var _TilingPattern = class { constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; this.paintType = IR[7]; this.tilingType = IR[8]; this.color = color; this.ctx = ctx; this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; } createPatternCanvas(owner) { const operatorList = this.operatorList; const bbox = this.bbox; const xstep = this.xstep; const ystep = this.ystep; const paintType = this.paintType; const tilingType = this.tilingType; const color = this.color; const canvasGraphicsFactory = this.canvasGraphicsFactory; info("TilingType: " + tilingType); const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; const matrixScale = Util.singularValueDecompose2dScale(this.matrix); const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform); const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); const tmpCtx = tmpCanvas.context; const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color); let adjustedX0 = x0; let adjustedY0 = y0; let adjustedX1 = x1; let adjustedY1 = y1; if (x0 < 0) { adjustedX0 = 0; adjustedX1 += Math.abs(x0); } if (y0 < 0) { adjustedY0 = 0; adjustedY1 += Math.abs(y0); } tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); tmpCtx.save(); this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); graphics.baseTransform = getCurrentTransform(graphics.ctx); graphics.executeOperatorList(operatorList); graphics.endDrawing(); return { canvas: tmpCanvas.canvas, scaleX: dimx.scale, scaleY: dimy.scale, offsetX: adjustedX0, offsetY: adjustedY0 }; } getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); const maxSize = Math.max(_TilingPattern.MAX_PATTERN_SIZE, realOutputSize); let size = Math.ceil(step * scale); if (size >= maxSize) { size = maxSize; } else { scale = size / step; } return { scale, size }; } clipBbox(graphics, x0, y0, x1, y1) { const bboxWidth = x1 - x0; const bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]); graphics.clip(); graphics.endPath(); } setFillAndStrokeStyleToContext(graphics, paintType, color) { const context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: const ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: const cssColor = Util.makeHexColor(color[0], color[1], color[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: throw new FormatError(`Unsupported paint type: ${paintType}`); } } getPattern(ctx, owner, inverse, pathType) { let matrix2 = inverse; if (pathType !== PathType.SHADING) { matrix2 = Util.transform(matrix2, owner.baseTransform); if (this.matrix) { matrix2 = Util.transform(matrix2, this.matrix); } } const temporaryPatternCanvas = this.createPatternCanvas(owner); let domMatrix = new DOMMatrix(matrix2); domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); pattern.setTransform(domMatrix); return pattern; } }; var TilingPattern = _TilingPattern; __publicField(TilingPattern, "MAX_PATTERN_SIZE", 3e3); function convertBlackAndWhiteToRGBA({ src, srcPos = 0, dest, width, height, nonBlackColor = 4294967295, inverseDecode = false }) { const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; const widthInSource = width >> 3; const widthRemainder = width & 7; const srcLength = src.length; dest = new Uint32Array(dest.buffer); let destPos = 0; for (let i = 0; i < height; i++) { for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { const elem2 = srcPos < srcLength ? src[srcPos] : 255; dest[destPos++] = elem2 & 128 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 64 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 32 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 16 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 8 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 4 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 2 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 1 ? oneMapping : zeroMapping; } if (widthRemainder === 0) { continue; } const elem = srcPos < srcLength ? src[srcPos++] : 255; for (let j = 0; j < widthRemainder; j++) { dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; } } return { srcPos, destPos }; } var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; var EXECUTION_TIME = 15; var EXECUTION_STEPS = 10; var MAX_SIZE_TO_COMPILE = 1e3; var FULL_CHUNK_HEIGHT = 16; function mirrorContextOperations(ctx, destCtx) { if (ctx._removeMirroring) { throw new Error("Context is already forwarding operations."); } ctx.__originalSave = ctx.save; ctx.__originalRestore = ctx.restore; ctx.__originalRotate = ctx.rotate; ctx.__originalScale = ctx.scale; ctx.__originalTranslate = ctx.translate; ctx.__originalTransform = ctx.transform; ctx.__originalSetTransform = ctx.setTransform; ctx.__originalResetTransform = ctx.resetTransform; ctx.__originalClip = ctx.clip; ctx.__originalMoveTo = ctx.moveTo; ctx.__originalLineTo = ctx.lineTo; ctx.__originalBezierCurveTo = ctx.bezierCurveTo; ctx.__originalRect = ctx.rect; ctx.__originalClosePath = ctx.closePath; ctx.__originalBeginPath = ctx.beginPath; ctx._removeMirroring = () => { ctx.save = ctx.__originalSave; ctx.restore = ctx.__originalRestore; ctx.rotate = ctx.__originalRotate; ctx.scale = ctx.__originalScale; ctx.translate = ctx.__originalTranslate; ctx.transform = ctx.__originalTransform; ctx.setTransform = ctx.__originalSetTransform; ctx.resetTransform = ctx.__originalResetTransform; ctx.clip = ctx.__originalClip; ctx.moveTo = ctx.__originalMoveTo; ctx.lineTo = ctx.__originalLineTo; ctx.bezierCurveTo = ctx.__originalBezierCurveTo; ctx.rect = ctx.__originalRect; ctx.closePath = ctx.__originalClosePath; ctx.beginPath = ctx.__originalBeginPath; delete ctx._removeMirroring; }; ctx.save = function ctxSave() { destCtx.save(); this.__originalSave(); }; ctx.restore = function ctxRestore() { destCtx.restore(); this.__originalRestore(); }; ctx.translate = function ctxTranslate(x, y) { destCtx.translate(x, y); this.__originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { destCtx.scale(x, y); this.__originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { destCtx.transform(a, b, c, d, e, f); this.__originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { destCtx.setTransform(a, b, c, d, e, f); this.__originalSetTransform(a, b, c, d, e, f); }; ctx.resetTransform = function ctxResetTransform() { destCtx.resetTransform(); this.__originalResetTransform(); }; ctx.rotate = function ctxRotate(angle) { destCtx.rotate(angle); this.__originalRotate(angle); }; ctx.clip = function ctxRotate(rule) { destCtx.clip(rule); this.__originalClip(rule); }; ctx.moveTo = function(x, y) { destCtx.moveTo(x, y); this.__originalMoveTo(x, y); }; ctx.lineTo = function(x, y) { destCtx.lineTo(x, y); this.__originalLineTo(x, y); }; ctx.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) { destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); }; ctx.rect = function(x, y, width, height) { destCtx.rect(x, y, width, height); this.__originalRect(x, y, width, height); }; ctx.closePath = function() { destCtx.closePath(); this.__originalClosePath(); }; ctx.beginPath = function() { destCtx.beginPath(); this.__originalBeginPath(); }; } var CachedCanvases = class { constructor(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = /* @__PURE__ */ Object.create(null); } getCanvas(id, width, height) { let canvasEntry; if (this.cache[id] !== void 0) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } return canvasEntry; } delete(id) { delete this.cache[id]; } clear() { for (const id in this.cache) { const canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } }; function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { const [a, b, c, d, tx, ty] = getCurrentTransform(ctx); if (b === 0 && c === 0) { const tlX = destX * a + tx; const rTlX = Math.round(tlX); const tlY = destY * d + ty; const rTlY = Math.round(tlY); const brX = (destX + destW) * a + tx; const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; const brY = (destY + destH) * d + ty; const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); ctx.setTransform(a, b, c, d, tx, ty); return [rWidth, rHeight]; } if (a === 0 && d === 0) { const tlX = destY * c + tx; const rTlX = Math.round(tlX); const tlY = destX * b + ty; const rTlY = Math.round(tlY); const brX = (destY + destH) * c + tx; const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; const brY = (destX + destW) * b + ty; const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); ctx.setTransform(a, b, c, d, tx, ty); return [rHeight, rWidth]; } ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); const scaleX = Math.hypot(a, b); const scaleY = Math.hypot(c, d); return [scaleX * destW, scaleY * destH]; } function compileType3Glyph(imgData) { const { width, height } = imgData; if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { return null; } const POINT_TO_PROCESS_LIMIT = 1e3; const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); const width1 = width + 1; let points = new Uint8Array(width1 * (height + 1)); let i, j, j0; const lineSize = width + 7 & ~7; let data = new Uint8Array(lineSize * height), pos = 0; for (const elem of imgData.data) { let mask = 128; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } let count = 0; pos = 0; if (data[pos] !== 0) { points[0] = 1; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } pos++; } if (data[pos] !== 0) { points[j] = 2; ++count; } for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); for (j = 1; j < width; j++) { sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); if (POINT_TYPES[sum]) { points[j0 + j] = POINT_TYPES[sum]; ++count; } pos++; } if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } } pos = lineSize * (height - 1); j0 = i * width1; if (data[pos] !== 0) { points[j0] = 8; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } pos++; } if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); const path = new Path2D(); for (i = 0; count && i <= height; i++) { let p = i * width1; const end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } path.moveTo(p % width1, i); const p0 = p; let type = points[p]; do { const step = steps[type]; do { p += step; } while (!points[p]); const pp = points[p]; if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; } else { type = pp & 51 * type >> 4; points[p] &= type >> 2 | type << 2; } path.lineTo(p % width1, p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); --i; } data = null; points = null; const drawOutline = function(c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.fill(path); c.beginPath(); c.restore(); }; return drawOutline; } var CanvasExtraState = class { constructor(width, height) { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; this.textMatrix = IDENTITY_MATRIX; this.textMatrixScale = 1; this.fontMatrix = FONT_IDENTITY_MATRIX; this.leading = 0; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRenderingMode = TextRenderingMode.FILL; this.textRise = 0; this.fillColor = "#000000"; this.strokeColor = "#000000"; this.patternFill = false; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; this.transferMaps = "none"; this.startNewPathAndClipBox([0, 0, width, height]); } clone() { const clone2 = Object.create(this); clone2.clipBox = this.clipBox.slice(); return clone2; } setCurrentPoint(x, y) { this.x = x; this.y = y; } updatePathMinMax(transform, x, y) { [x, y] = Util.applyTransform([x, y], transform); this.minX = Math.min(this.minX, x); this.minY = Math.min(this.minY, y); this.maxX = Math.max(this.maxX, x); this.maxY = Math.max(this.maxY, y); } updateRectMinMax(transform, rect) { const p1 = Util.applyTransform(rect, transform); const p2 = Util.applyTransform(rect.slice(2), transform); const p3 = Util.applyTransform([rect[0], rect[3]], transform); const p4 = Util.applyTransform([rect[2], rect[1]], transform); this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); } updateScalingPathMinMax(transform, minMax) { Util.scaleMinMax(transform, minMax); this.minX = Math.min(this.minX, minMax[0]); this.minY = Math.min(this.minY, minMax[1]); this.maxX = Math.max(this.maxX, minMax[2]); this.maxY = Math.max(this.maxY, minMax[3]); } updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax); if (minMax) { return; } this.updateRectMinMax(transform, box); } getPathBoundingBox(pathType = PathType.FILL, transform = null) { const box = [this.minX, this.minY, this.maxX, this.maxY]; if (pathType === PathType.STROKE) { if (!transform) { unreachable("Stroke bounding box must include transform."); } const scale = Util.singularValueDecompose2dScale(transform); const xStrokePad = scale[0] * this.lineWidth / 2; const yStrokePad = scale[1] * this.lineWidth / 2; box[0] -= xStrokePad; box[1] -= yStrokePad; box[2] += xStrokePad; box[3] += yStrokePad; } return box; } updateClipFromPath() { const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox()); this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); } isEmptyClip() { return this.minX === Infinity; } startNewPathAndClipBox(box) { this.clipBox = box; this.minX = Infinity; this.minY = Infinity; this.maxX = 0; this.maxY = 0; } getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); } }; function putBinaryImageData(ctx, imgData) { if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0, destPos; const src = imgData.data; const dest = chunkImgData.data; let i, j, thisChunkHeight, elemsInThisChunk; if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) { const srcLength = src.byteLength; const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); const dest32DataLength = dest32.length; const fullSrcDiff = width + 7 >> 3; const white = 4294967295; const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { const srcDiff = srcLength - srcPos; let k = 0; const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; const kEndUnrolled = kEnd & ~7; let mask = 0; let srcByte = 0; for (; k < kEndUnrolled; k += 8) { srcByte = src[srcPos++]; dest32[destPos++] = srcByte & 128 ? white : black; dest32[destPos++] = srcByte & 64 ? white : black; dest32[destPos++] = srcByte & 32 ? white : black; dest32[destPos++] = srcByte & 16 ? white : black; dest32[destPos++] = srcByte & 8 ? white : black; dest32[destPos++] = srcByte & 4 ? white : black; dest32[destPos++] = srcByte & 2 ? white : black; dest32[destPos++] = srcByte & 1 ? white : black; } for (; k < kEnd; k++) { if (mask === 0) { srcByte = src[srcPos++]; mask = 128; } dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } while (destPos < dest32DataLength) { dest32[destPos++] = 0; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else if (imgData.kind === util_ImageKind.RGBA_32BPP) { j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === util_ImageKind.RGB_24BPP) { thisChunkHeight = FULL_CHUNK_HEIGHT; elemsInThisChunk = width * thisChunkHeight; for (i = 0; i < totalChunks; i++) { if (i >= fullChunks) { thisChunkHeight = partialChunkHeight; elemsInThisChunk = width * thisChunkHeight; } destPos = 0; for (j = elemsInThisChunk; j--; ) { dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = 255; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error(`bad image kind: ${imgData.kind}`); } } function putBinaryImageMask(ctx, imgData) { if (imgData.bitmap) { ctx.drawImage(imgData.bitmap, 0, 0); return; } const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0; const src = imgData.data; const dest = chunkImgData.data; for (let i = 0; i < totalChunks; i++) { const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; ({ srcPos } = convertBlackAndWhiteToRGBA({ src, srcPos, dest, width, height: thisChunkHeight, nonBlackColor: 0 })); ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } function copyCtxState(sourceCtx, destCtx) { const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; for (const property of properties) { if (sourceCtx[property] !== void 0) { destCtx[property] = sourceCtx[property]; } } if (sourceCtx.setLineDash !== void 0) { destCtx.setLineDash(sourceCtx.getLineDash()); destCtx.lineDashOffset = sourceCtx.lineDashOffset; } } function resetCtxToDefault(ctx) { ctx.strokeStyle = ctx.fillStyle = "#000000"; ctx.fillRule = "nonzero"; ctx.globalAlpha = 1; ctx.lineWidth = 1; ctx.lineCap = "butt"; ctx.lineJoin = "miter"; ctx.miterLimit = 10; ctx.globalCompositeOperation = "source-over"; ctx.font = "10px sans-serif"; if (ctx.setLineDash !== void 0) { ctx.setLineDash([]); ctx.lineDashOffset = 0; } if (!isNodeJS) { const { filter } = ctx; if (filter !== "none" && filter !== "") { ctx.filter = "none"; } } } function getImageSmoothingEnabled(transform, interpolate) { if (interpolate) { return true; } const scale = Util.singularValueDecompose2dScale(transform); scale[0] = Math.fround(scale[0]); scale[1] = Math.fround(scale[1]); const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS); return scale[0] <= actualScale && scale[1] <= actualScale; } var LINE_CAP_STYLES = ["butt", "round", "square"]; var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; var NORMAL_CLIP = {}; var EO_CLIP = {}; var _restoreInitialState, restoreInitialState_fn, _drawFilter, drawFilter_fn; var _CanvasGraphics = class { constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { optionalContentConfig, markedContentStack = null }, annotationCanvasMap, pageColors) { __privateAdd(this, _restoreInitialState); __privateAdd(this, _drawFilter); this.ctx = canvasCtx; this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.filterFactory = filterFactory; this.groupStack = []; this.processingType3 = null; this.baseTransform = null; this.baseTransformStack = []; this.groupLevel = 0; this.smaskStack = []; this.smaskCounter = 0; this.tempSMask = null; this.suspendedCtx = null; this.contentVisible = true; this.markedContentStack = markedContentStack || []; this.optionalContentConfig = optionalContentConfig; this.cachedCanvases = new CachedCanvases(this.canvasFactory); this.cachedPatterns = /* @__PURE__ */ new Map(); this.annotationCanvasMap = annotationCanvasMap; this.viewportScale = 1; this.outputScaleX = 1; this.outputScaleY = 1; this.pageColors = pageColors; this._cachedScaleForStroking = [-1, 0]; this._cachedGetSinglePixelWidth = null; this._cachedBitmapsMap = /* @__PURE__ */ new Map(); } getObject(data, fallback = null) { if (typeof data === "string") { return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); } return fallback; } beginDrawing({ transform, viewport, transparency = false, background = null }) { const width = this.ctx.canvas.width; const height = this.ctx.canvas.height; const savedFillStyle = this.ctx.fillStyle; this.ctx.fillStyle = background || "#ffffff"; this.ctx.fillRect(0, 0, width, height); this.ctx.fillStyle = savedFillStyle; if (transparency) { const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); this.compositeCtx = this.ctx; this.transparentCanvas = transparentCanvas.canvas; this.ctx = transparentCanvas.context; this.ctx.save(); this.ctx.transform(...getCurrentTransform(this.compositeCtx)); } this.ctx.save(); resetCtxToDefault(this.ctx); if (transform) { this.ctx.transform(...transform); this.outputScaleX = transform[0]; this.outputScaleY = transform[0]; } this.ctx.transform(...viewport.transform); this.viewportScale = viewport.scale; this.baseTransform = getCurrentTransform(this.ctx); } executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { const argsArray = operatorList.argsArray; const fnArray = operatorList.fnArray; let i = executionStartIdx || 0; const argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; let steps = 0; const commonObjs = this.commonObjs; const objs = this.objs; let fnId; while (true) { if (stepper !== void 0 && i === stepper.nextBreakPoint) { stepper.breakIt(i, continueCallback); return i; } fnId = fnArray[i]; if (fnId !== OPS.dependency) { this[fnId].apply(this, argsArray[i]); } else { for (const depObjId of argsArray[i]) { const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; if (!objsPool.has(depObjId)) { objsPool.get(depObjId, continueCallback); return i; } } } i++; if (i === argsArrayLen) { return i; } if (chunkOperations && ++steps > EXECUTION_STEPS) { if (Date.now() > endTime) { continueCallback(); return i; } steps = 0; } } } endDrawing() { __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); this.cachedCanvases.clear(); this.cachedPatterns.clear(); for (const cache of this._cachedBitmapsMap.values()) { for (const canvas of cache.values()) { if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { canvas.width = canvas.height = 0; } } cache.clear(); } this._cachedBitmapsMap.clear(); __privateMethod(this, _drawFilter, drawFilter_fn).call(this); } _scaleImage(img, inverseTransform) { const width = img.width; const height = img.height; let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); let paintWidth = width, paintHeight = height; let tmpCanvasId = "prescale1"; let tmpCanvas, tmpCtx; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { let newWidth = paintWidth, newHeight = paintHeight; if (widthScale > 2 && paintWidth > 1) { newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); widthScale /= paintWidth / newWidth; } if (heightScale > 2 && paintHeight > 1) { newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; heightScale /= paintHeight / newHeight; } tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, newWidth, newHeight); tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); img = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; } return { img, paintWidth, paintHeight }; } _createMaskCanvas(img) { const ctx = this.ctx; const { width, height } = img; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; const currentTransform = getCurrentTransform(ctx); let cache, cacheKey, scaled, maskCanvas; if ((img.bitmap || img.data) && img.count > 1) { const mainKey = img.bitmap || img.data.buffer; cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); cache = this._cachedBitmapsMap.get(mainKey); if (!cache) { cache = /* @__PURE__ */ new Map(); this._cachedBitmapsMap.set(mainKey, cache); } const cachedImage = cache.get(cacheKey); if (cachedImage && !isPatternFill) { const offsetX2 = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); const offsetY2 = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); return { canvas: cachedImage, offsetX: offsetX2, offsetY: offsetY2 }; } scaled = cachedImage; } if (!scaled) { maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); putBinaryImageMask(maskCanvas.context, img); } let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); const drawnWidth = Math.round(maxX - minX) || 1; const drawnHeight = Math.round(maxY - minY) || 1; const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); const fillCtx = fillCanvas.context; const offsetX = minX; const offsetY = minY; fillCtx.translate(-offsetX, -offsetY); fillCtx.transform(...maskToCanvas); if (!scaled) { scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx)); scaled = scaled.img; if (cache && isPatternFill) { cache.set(cacheKey, scaled); } } fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate); drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); fillCtx.globalCompositeOperation = "source-in"; const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; fillCtx.fillRect(0, 0, width, height); if (cache && !isPatternFill) { this.cachedCanvases.delete("fillCanvas"); cache.set(cacheKey, fillCanvas.canvas); } return { canvas: fillCanvas.canvas, offsetX: Math.round(offsetX), offsetY: Math.round(offsetY) }; } setLineWidth(width) { if (width !== this.current.lineWidth) { this._cachedScaleForStroking[0] = -1; } this.current.lineWidth = width; this.ctx.lineWidth = width; } setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; } setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; } setMiterLimit(limit) { this.ctx.miterLimit = limit; } setDash(dashArray, dashPhase) { const ctx = this.ctx; if (ctx.setLineDash !== void 0) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } } setRenderingIntent(intent) { } setFlatness(flatness) { } setGState(states) { for (const [key, value] of states) { switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value[0], value[1]); break; case "CA": this.current.strokeAlpha = value; break; case "ca": this.current.fillAlpha = value; this.ctx.globalAlpha = value; break; case "BM": this.ctx.globalCompositeOperation = value; break; case "SMask": this.current.activeSMask = value ? this.tempSMask : null; this.tempSMask = null; this.checkSMaskState(); break; case "TR": this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); break; } } } get inSMaskMode() { return !!this.suspendedCtx; } checkSMaskState() { const inSMaskMode = this.inSMaskMode; if (this.current.activeSMask && !inSMaskMode) { this.beginSMaskMode(); } else if (!this.current.activeSMask && inSMaskMode) { this.endSMaskMode(); } } beginSMaskMode() { if (this.inSMaskMode) { throw new Error("beginSMaskMode called while already in smask mode"); } const drawnWidth = this.ctx.canvas.width; const drawnHeight = this.ctx.canvas.height; const cacheId = "smaskGroupAt" + this.groupLevel; const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); this.suspendedCtx = this.ctx; this.ctx = scratchCanvas.context; const ctx = this.ctx; ctx.setTransform(...getCurrentTransform(this.suspendedCtx)); copyCtxState(this.suspendedCtx, ctx); mirrorContextOperations(ctx, this.suspendedCtx); this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); } endSMaskMode() { if (!this.inSMaskMode) { throw new Error("endSMaskMode called while not in smask mode"); } this.ctx._removeMirroring(); copyCtxState(this.ctx, this.suspendedCtx); this.ctx = this.suspendedCtx; this.suspendedCtx = null; } compose(dirtyBox) { if (!this.current.activeSMask) { return; } if (!dirtyBox) { dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; } else { dirtyBox[0] = Math.floor(dirtyBox[0]); dirtyBox[1] = Math.floor(dirtyBox[1]); dirtyBox[2] = Math.ceil(dirtyBox[2]); dirtyBox[3] = Math.ceil(dirtyBox[3]); } const smask = this.current.activeSMask; const suspendedCtx = this.suspendedCtx; this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); this.ctx.restore(); } composeSMask(ctx, smask, layerCtx, layerBox) { const layerOffsetX = layerBox[0]; const layerOffsetY = layerBox[1]; const layerWidth = layerBox[2] - layerOffsetX; const layerHeight = layerBox[3] - layerOffsetY; if (layerWidth === 0 || layerHeight === 0) { return; } this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); ctx.save(); ctx.globalAlpha = 1; ctx.globalCompositeOperation = "source-over"; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(layerCtx.canvas, 0, 0); ctx.restore(); } genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { let maskCanvas = maskCtx.canvas; let maskX = layerOffsetX - maskOffsetX; let maskY = layerOffsetY - maskOffsetY; if (backdrop) { if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) { const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height); const ctx = canvas.context; ctx.drawImage(maskCanvas, -maskX, -maskY); if (backdrop.some((c) => c !== 0)) { ctx.globalCompositeOperation = "destination-atop"; ctx.fillStyle = Util.makeHexColor(...backdrop); ctx.fillRect(0, 0, width, height); ctx.globalCompositeOperation = "source-over"; } maskCanvas = canvas.canvas; maskX = maskY = 0; } else if (backdrop.some((c) => c !== 0)) { maskCtx.save(); maskCtx.globalAlpha = 1; maskCtx.setTransform(1, 0, 0, 1, 0, 0); const clip2 = new Path2D(); clip2.rect(maskX, maskY, width, height); maskCtx.clip(clip2); maskCtx.globalCompositeOperation = "destination-atop"; maskCtx.fillStyle = Util.makeHexColor(...backdrop); maskCtx.fillRect(maskX, maskY, width, height); maskCtx.restore(); } } layerCtx.save(); layerCtx.globalAlpha = 1; layerCtx.setTransform(1, 0, 0, 1, 0, 0); if (subtype === "Alpha" && transferMap) { layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap); } else if (subtype === "Luminosity") { layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap); } const clip = new Path2D(); clip.rect(layerOffsetX, layerOffsetY, width, height); layerCtx.clip(clip); layerCtx.globalCompositeOperation = "destination-in"; layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height); layerCtx.restore(); } save() { if (this.inSMaskMode) { copyCtxState(this.ctx, this.suspendedCtx); this.suspendedCtx.save(); } else { this.ctx.save(); } const old = this.current; this.stateStack.push(old); this.current = old.clone(); } restore() { if (this.stateStack.length === 0 && this.inSMaskMode) { this.endSMaskMode(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); if (this.inSMaskMode) { this.suspendedCtx.restore(); copyCtxState(this.suspendedCtx, this.ctx); } else { this.ctx.restore(); } this.checkSMaskState(); this.pendingClip = null; this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; } } transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; } constructPath(ops, args, minMax) { const ctx = this.ctx; const current = this.current; let x = current.x, y = current.y; let startX, startY; const currentTransform = getCurrentTransform(ctx); const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case OPS.rectangle: x = args[j++]; y = args[j++]; const width = args[j++]; const height = args[j++]; const xw = x + width; const yh = y + height; ctx.moveTo(x, y); if (width === 0 || height === 0) { ctx.lineTo(xw, yh); } else { ctx.lineTo(xw, y); ctx.lineTo(xw, yh); ctx.lineTo(x, yh); } if (!isScalingMatrix) { current.updateRectMinMax(currentTransform, [x, y, xw, yh]); } ctx.closePath(); break; case OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); if (!isScalingMatrix) { current.updatePathMinMax(currentTransform, x, y); } break; case OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); if (!isScalingMatrix) { current.updatePathMinMax(currentTransform, x, y); } break; case OPS.curveTo: startX = x; startY = y; x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); j += 6; break; case OPS.curveTo2: startX = x; startY = y; ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); x = args[j + 2]; y = args[j + 3]; j += 4; break; case OPS.curveTo3: startX = x; startY = y; x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); j += 4; break; case OPS.closePath: ctx.closePath(); break; } } if (isScalingMatrix) { current.updateScalingPathMinMax(currentTransform, minMaxForBezier); } current.setCurrentPoint(x, y); } closePath() { this.ctx.closePath(); } stroke(consumePath = true) { const ctx = this.ctx; const strokeColor = this.current.strokeColor; ctx.globalAlpha = this.current.strokeAlpha; if (this.contentVisible) { if (typeof strokeColor === "object" && (strokeColor == null ? void 0 : strokeColor.getPattern)) { ctx.save(); ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE); this.rescaleAndStroke(false); ctx.restore(); } else { this.rescaleAndStroke(true); } } if (consumePath) { this.consumePath(this.current.getClippedPathBoundingBox()); } ctx.globalAlpha = this.current.fillAlpha; } closeStroke() { this.closePath(); this.stroke(); } fill(consumePath = true) { const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; let needRestore = false; if (isPatternFill) { ctx.save(); ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); needRestore = true; } const intersect = this.current.getClippedPathBoundingBox(); if (this.contentVisible && intersect !== null) { if (this.pendingEOFill) { ctx.fill("evenodd"); this.pendingEOFill = false; } else { ctx.fill(); } } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(intersect); } } eoFill() { this.pendingEOFill = true; this.fill(); } fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); } eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); } closeFillStroke() { this.closePath(); this.fillStroke(); } closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); } endPath() { this.consumePath(); } clip() { this.pendingClip = NORMAL_CLIP; } eoClip() { this.pendingClip = EO_CLIP; } beginText() { this.current.textMatrix = IDENTITY_MATRIX; this.current.textMatrixScale = 1; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } endText() { const paths = this.pendingTextPaths; const ctx = this.ctx; if (paths === void 0) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (const path of paths) { ctx.setTransform(...path.transform); ctx.translate(path.x, path.y); path.addToPath(ctx, path.fontSize); } ctx.restore(); ctx.clip(); ctx.beginPath(); delete this.pendingTextPaths; } setCharSpacing(spacing) { this.current.charSpacing = spacing; } setWordSpacing(spacing) { this.current.wordSpacing = spacing; } setHScale(scale) { this.current.textHScale = scale / 100; } setLeading(leading) { this.current.leading = -leading; } setFont(fontRefName, size) { var _a2; const fontObj = this.commonObjs.get(fontRefName); const current = this.current; if (!fontObj) { throw new Error(`Can't find font for ${fontRefName}`); } current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX; if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { warn("Invalid font matrix for font " + fontRefName); } if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } this.current.font = fontObj; this.current.fontSize = size; if (fontObj.isType3Font) { return; } const name = fontObj.loadedName || "sans-serif"; const typeface = ((_a2 = fontObj.systemFontInfo) == null ? void 0 : _a2.css) || `"${name}", ${fontObj.fallbackName}`; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } const italic = fontObj.italic ? "italic" : "normal"; let browserFontSize = size; if (size < MIN_FONT_SIZE) { browserFontSize = MIN_FONT_SIZE; } else if (size > MAX_FONT_SIZE) { browserFontSize = MAX_FONT_SIZE; } this.current.fontSizeScale = size / browserFontSize; this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; } setTextRenderingMode(mode) { this.current.textRenderingMode = mode; } setTextRise(rise) { this.current.textRise = rise; } moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; } setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.hypot(a, b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } nextLine() { this.moveText(0, this.current.leading); } paintChar(character, x, y, patternTransform) { const ctx = this.ctx; const current = this.current; const font = current.font; const textRenderingMode = current.textRenderingMode; const fontSize = current.fontSize / current.fontSizeScale; const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); const patternFill = current.patternFill && !font.missingFile; let addToPath; if (font.disableFontFace || isAddToPathSet || patternFill) { addToPath = font.getPathGenerator(this.commonObjs, character); } if (font.disableFontFace || patternFill) { ctx.save(); ctx.translate(x, y); ctx.beginPath(); addToPath(ctx, fontSize); if (patternTransform) { ctx.setTransform(...patternTransform); } if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.fill(); } if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.stroke(); } ctx.restore(); } else { if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.fillText(character, x, y); } if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.strokeText(character, x, y); } } if (isAddToPathSet) { const paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: getCurrentTransform(ctx), x, y, fontSize, addToPath }); } } get isFontSubpixelAAEnabled() { const { context: ctx } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); ctx.scale(1.5, 1); ctx.fillText("I", 0, 10); const data = ctx.getImageData(0, 0, 10, 10).data; let enabled = false; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0 && data[i] < 255) { enabled = true; break; } } return shadow(this, "isFontSubpixelAAEnabled", enabled); } showText(glyphs) { const current = this.current; const font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } const fontSize = current.fontSize; if (fontSize === 0) { return void 0; } const ctx = this.ctx; const fontSizeScale = current.fontSizeScale; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const fontDirection = current.fontDirection; const textHScale = current.textHScale * fontDirection; const glyphsLength = glyphs.length; const vertical = font.vertical; const spacingDir = vertical ? 1 : -1; const defaultVMetrics = font.defaultVMetrics; const widthAdvanceScale = fontSize * current.fontMatrix[0]; const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); ctx.transform(...current.textMatrix); ctx.translate(current.x, current.y + current.textRise); if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } let patternTransform; if (current.patternFill) { ctx.save(); const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); patternTransform = getCurrentTransform(ctx); ctx.restore(); ctx.fillStyle = pattern; } let lineWidth = current.lineWidth; const scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { lineWidth = this.getSinglePixelWidth(); } } else { lineWidth /= scale; } if (fontSizeScale !== 1) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; if (font.isInvalidPDFjsFont) { const chars = []; let width = 0; for (const glyph of glyphs) { chars.push(glyph.unicode); width += glyph.width; } ctx.fillText(chars.join(""), 0, 0); current.x += width * widthAdvanceScale * textHScale; ctx.restore(); this.compose(); return void 0; } let x = 0, i; for (i = 0; i < glyphsLength; ++i) { const glyph = glyphs[i]; if (typeof glyph === "number") { x += spacingDir * glyph * fontSize / 1e3; continue; } let restoreNeeded = false; const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const character = glyph.fontChar; const accent = glyph.accent; let scaledX, scaledY; let width = glyph.width; if (vertical) { const vmetric = glyph.vmetric || defaultVMetrics; const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; const vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (font.remeasure && width > 0) { const measuredWidth = ctx.measureText(character).width * 1e3 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { const characterScaleX = width / measuredWidth; restoreNeeded = true; ctx.save(); ctx.scale(characterScaleX, 1); scaledX /= characterScaleX; } else if (width !== measuredWidth) { scaledX += (width - measuredWidth) / 2e3 * fontSize / fontSizeScale; } } if (this.contentVisible && (glyph.isInFont || font.missingFile)) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform); if (accent) { const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); } } } const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } ctx.restore(); this.compose(); return void 0; } showType3Text(glyphs) { const ctx = this.ctx; const current = this.current; const font = current.font; const fontSize = current.fontSize; const fontDirection = current.fontDirection; const spacingDir = font.vertical ? 1 : -1; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const textHScale = current.textHScale * fontDirection; const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; const glyphsLength = glyphs.length; const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; let i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; } this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform(...current.textMatrix); ctx.translate(current.x, current.y); ctx.scale(textHScale, fontDirection); for (i = 0; i < glyphsLength; ++i) { glyph = glyphs[i]; if (typeof glyph === "number") { spacingLength = spacingDir * glyph * fontSize / 1e3; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; } const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { warn(`Type3 character "${glyph.operatorListId}" is not available.`); continue; } if (this.contentVisible) { this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform(...fontMatrix); this.executeOperatorList(operatorList); this.restore(); } const transformed = Util.applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; } ctx.restore(); this.processingType3 = null; } setCharWidth(xWidth, yWidth) { } setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.ctx.clip(); this.endPath(); } getColorN_Pattern(IR) { let pattern; if (IR[0] === "TilingPattern") { const color = IR[1]; const baseTransform = this.baseTransform || getCurrentTransform(this.ctx); const canvasGraphicsFactory = { createCanvasGraphics: (ctx) => new _CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { optionalContentConfig: this.optionalContentConfig, markedContentStack: this.markedContentStack }) }; pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = this._getPattern(IR[1], IR[2]); } return pattern; } setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); } setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; } setStrokeRGBColor(r, g, b) { this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(r, g, b); } setStrokeTransparent() { this.ctx.strokeStyle = this.current.strokeColor = "transparent"; } setFillRGBColor(r, g, b) { this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b); this.current.patternFill = false; } setFillTransparent() { this.ctx.fillStyle = this.current.fillColor = "transparent"; this.current.patternFill = false; } _getPattern(objId, matrix2 = null) { let pattern; if (this.cachedPatterns.has(objId)) { pattern = this.cachedPatterns.get(objId); } else { pattern = getShadingPattern(this.getObject(objId)); this.cachedPatterns.set(objId, pattern); } if (matrix2) { pattern.matrix = matrix2; } return pattern; } shadingFill(objId) { if (!this.contentVisible) { return; } const ctx = this.ctx; this.save(); const pattern = this._getPattern(objId); ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING); const inv = getCurrentTransformInverse(ctx); if (inv) { const { width, height } = ctx.canvas; const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); } else { this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); } this.compose(this.current.getClippedPathBoundingBox()); this.restore(); } beginInlineImage() { unreachable("Should not call beginInlineImage"); } beginImageData() { unreachable("Should not call beginImageData"); } paintFormXObjectBegin(matrix2, bbox) { if (!this.contentVisible) { return; } this.save(); this.baseTransformStack.push(this.baseTransform); if (matrix2) { this.transform(...matrix2); } this.baseTransform = getCurrentTransform(this.ctx); if (bbox) { const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox); this.clip(); this.endPath(); } } paintFormXObjectEnd() { if (!this.contentVisible) { return; } this.restore(); this.baseTransform = this.baseTransformStack.pop(); } beginGroup(group) { if (!this.contentVisible) { return; } this.save(); if (this.inSMaskMode) { this.endSMaskMode(); this.current.activeSMask = null; } const currentCtx = this.ctx; if (!group.isolated) { info("TODO: Support non-isolated groups."); } if (group.knockout) { warn("Knockout groups not supported."); } const currentTransform = getCurrentTransform(currentCtx); if (group.matrix) { currentCtx.transform(...group.matrix); } if (!group.bbox) { throw new Error("Bounding box is required."); } let bounds = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx)); const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; const offsetX = Math.floor(bounds[0]); const offsetY = Math.floor(bounds[1]); const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); let cacheId = "groupAt" + this.groupLevel; if (group.smask) { cacheId += "_smask_" + this.smaskCounter++ % 2; } const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); const groupCtx = scratchCanvas.context; groupCtx.translate(-offsetX, -offsetY); groupCtx.transform(...currentTransform); if (group.smask) { this.smaskStack.push({ canvas: scratchCanvas.canvas, context: groupCtx, offsetX, offsetY, subtype: group.smask.subtype, backdrop: group.smask.backdrop, transferMap: group.smask.transferMap || null, startTransformInverse: null }); } else { currentCtx.setTransform(1, 0, 0, 1, 0, 0); currentCtx.translate(offsetX, offsetY); currentCtx.save(); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; } endGroup(group) { if (!this.contentVisible) { return; } this.groupLevel--; const groupCtx = this.ctx; const ctx = this.groupStack.pop(); this.ctx = ctx; this.ctx.imageSmoothingEnabled = false; if (group.smask) { this.tempSMask = this.smaskStack.pop(); this.restore(); } else { this.ctx.restore(); const currentMtx = getCurrentTransform(this.ctx); this.restore(); this.ctx.save(); this.ctx.setTransform(...currentMtx); const dirtyBox = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); this.ctx.drawImage(groupCtx.canvas, 0, 0); this.ctx.restore(); this.compose(dirtyBox); } } beginAnnotation(id, rect, transform, matrix2, hasOwnCanvas) { __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); resetCtxToDefault(this.ctx); this.ctx.save(); this.save(); if (this.baseTransform) { this.ctx.setTransform(...this.baseTransform); } if (rect) { const width = rect[2] - rect[0]; const height = rect[3] - rect[1]; if (hasOwnCanvas && this.annotationCanvasMap) { transform = transform.slice(); transform[4] -= rect[0]; transform[5] -= rect[1]; rect = rect.slice(); rect[0] = rect[1] = 0; rect[2] = width; rect[3] = height; const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx)); const { viewportScale } = this; const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); const { canvas, context } = this.annotationCanvas; this.annotationCanvasMap.set(id, canvas); this.annotationCanvas.savedCtx = this.ctx; this.ctx = context; this.ctx.save(); this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); resetCtxToDefault(this.ctx); } else { resetCtxToDefault(this.ctx); this.ctx.rect(rect[0], rect[1], width, height); this.ctx.clip(); this.endPath(); } } this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.transform(...transform); this.transform(...matrix2); } endAnnotation() { if (this.annotationCanvas) { this.ctx.restore(); __privateMethod(this, _drawFilter, drawFilter_fn).call(this); this.ctx = this.annotationCanvas.savedCtx; delete this.annotationCanvas.savedCtx; delete this.annotationCanvas; } } paintImageMaskXObject(img) { if (!this.contentVisible) { return; } const count = img.count; img = this.getObject(img.data, img); img.count = count; const ctx = this.ctx; const glyph = this.processingType3; if (glyph) { if (glyph.compiled === void 0) { glyph.compiled = compileType3Glyph(img); } if (glyph.compiled) { glyph.compiled(ctx); return; } } const mask = this._createMaskCanvas(img); const maskCanvas = mask.canvas; ctx.save(); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); ctx.restore(); this.compose(); } paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { if (!this.contentVisible) { return; } img = this.getObject(img.data, img); const ctx = this.ctx; ctx.save(); const currentTransform = getCurrentTransform(ctx); ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); const mask = this._createMaskCanvas(img); ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); for (let i = 0, ii = positions.length; i < ii; i += 2) { const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); const [x, y] = Util.applyTransform([0, 0], trans); ctx.drawImage(mask.canvas, x, y); } ctx.restore(); this.compose(); } paintImageMaskXObjectGroup(images) { if (!this.contentVisible) { return; } const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; for (const image of images) { const { data, width, height, transform } = image; const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); const maskCtx = maskCanvas.context; maskCtx.save(); const img = this.getObject(data, image); putBinaryImageMask(maskCtx, img); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); ctx.save(); ctx.transform(...transform); ctx.scale(1, -1); drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } this.compose(); } paintImageXObject(objId) { if (!this.contentVisible) { return; } const imgData = this.getObject(objId); if (!imgData) { warn("Dependent image isn't ready yet"); return; } this.paintInlineImageXObject(imgData); } paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { if (!this.contentVisible) { return; } const imgData = this.getObject(objId); if (!imgData) { warn("Dependent image isn't ready yet"); return; } const width = imgData.width; const height = imgData.height; const map = []; for (let i = 0, ii = positions.length; i < ii; i += 2) { map.push({ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], x: 0, y: 0, w: width, h: height }); } this.paintInlineImageXObjectGroup(imgData, map); } applyTransferMapsToCanvas(ctx) { if (this.current.transferMaps !== "none") { ctx.filter = this.current.transferMaps; ctx.drawImage(ctx.canvas, 0, 0); ctx.filter = "none"; } return ctx.canvas; } applyTransferMapsToBitmap(imgData) { if (this.current.transferMaps === "none") { return imgData.bitmap; } const { bitmap, width, height } = imgData; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); const tmpCtx = tmpCanvas.context; tmpCtx.filter = this.current.transferMaps; tmpCtx.drawImage(bitmap, 0, 0); tmpCtx.filter = "none"; return tmpCanvas.canvas; } paintInlineImageXObject(imgData) { if (!this.contentVisible) { return; } const width = imgData.width; const height = imgData.height; const ctx = this.ctx; this.save(); if (!isNodeJS) { const { filter } = ctx; if (filter !== "none" && filter !== "") { ctx.filter = "none"; } } ctx.scale(1 / width, -1 / height); let imgToPaint; if (imgData.bitmap) { imgToPaint = this.applyTransferMapsToBitmap(imgData); } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx)); ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate); drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); this.compose(); this.restore(); } paintInlineImageXObjectGroup(imgData, map) { if (!this.contentVisible) { return; } const ctx = this.ctx; let imgToPaint; if (imgData.bitmap) { imgToPaint = imgData.bitmap; } else { const w = imgData.width; const h = imgData.height; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } for (const entry of map) { ctx.save(); ctx.transform(...entry.transform); ctx.scale(1, -1); drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); ctx.restore(); } this.compose(); } paintSolidColorImageMask() { if (!this.contentVisible) { return; } this.ctx.fillRect(0, 0, 1, 1); this.compose(); } markPoint(tag) { } markPointProps(tag, properties) { } beginMarkedContent(tag) { this.markedContentStack.push({ visible: true }); } beginMarkedContentProps(tag, properties) { if (tag === "OC") { this.markedContentStack.push({ visible: this.optionalContentConfig.isVisible(properties) }); } else { this.markedContentStack.push({ visible: true }); } this.contentVisible = this.isContentVisible(); } endMarkedContent() { this.markedContentStack.pop(); this.contentVisible = this.isContentVisible(); } beginCompat() { } endCompat() { } consumePath(clipBox) { const isEmpty = this.current.isEmptyClip(); if (this.pendingClip) { this.current.updateClipFromPath(); } if (!this.pendingClip) { this.compose(clipBox); } const ctx = this.ctx; if (this.pendingClip) { if (!isEmpty) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } } this.pendingClip = null; } this.current.startNewPathAndClipBox(this.current.clipBox); ctx.beginPath(); } getSinglePixelWidth() { if (!this._cachedGetSinglePixelWidth) { const m = getCurrentTransform(this.ctx); if (m[1] === 0 && m[2] === 0) { this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); } else { const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); const normX = Math.hypot(m[0], m[2]); const normY = Math.hypot(m[1], m[3]); this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; } } return this._cachedGetSinglePixelWidth; } getScaleForStroking() { if (this._cachedScaleForStroking[0] === -1) { const { lineWidth } = this.current; const { a, b, c, d } = this.ctx.getTransform(); let scaleX, scaleY; if (b === 0 && c === 0) { const normX = Math.abs(a); const normY = Math.abs(d); if (normX === normY) { if (lineWidth === 0) { scaleX = scaleY = 1 / normX; } else { const scaledLineWidth = normX * lineWidth; scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; } } else if (lineWidth === 0) { scaleX = 1 / normX; scaleY = 1 / normY; } else { const scaledXLineWidth = normX * lineWidth; const scaledYLineWidth = normY * lineWidth; scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; } } else { const absDet = Math.abs(a * d - b * c); const normX = Math.hypot(a, b); const normY = Math.hypot(c, d); if (lineWidth === 0) { scaleX = normY / absDet; scaleY = normX / absDet; } else { const baseArea = lineWidth * absDet; scaleX = normY > baseArea ? normY / baseArea : 1; scaleY = normX > baseArea ? normX / baseArea : 1; } } this._cachedScaleForStroking[0] = scaleX; this._cachedScaleForStroking[1] = scaleY; } return this._cachedScaleForStroking; } rescaleAndStroke(saveRestore) { const { ctx } = this; const { lineWidth } = this.current; const [scaleX, scaleY] = this.getScaleForStroking(); ctx.lineWidth = lineWidth || 1; if (scaleX === 1 && scaleY === 1) { ctx.stroke(); return; } const dashes = ctx.getLineDash(); if (saveRestore) { ctx.save(); } ctx.scale(scaleX, scaleY); if (dashes.length > 0) { const scale = Math.max(scaleX, scaleY); ctx.setLineDash(dashes.map((x) => x / scale)); ctx.lineDashOffset /= scale; } ctx.stroke(); if (saveRestore) { ctx.restore(); } } isContentVisible() { for (let i = this.markedContentStack.length - 1; i >= 0; i--) { if (!this.markedContentStack[i].visible) { return false; } } return true; } }; var CanvasGraphics = _CanvasGraphics; _restoreInitialState = new WeakSet(); restoreInitialState_fn = function() { while (this.stateStack.length || this.inSMaskMode) { this.restore(); } this.current.activeSMask = null; this.ctx.restore(); if (this.transparentCanvas) { this.ctx = this.compositeCtx; this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); this.transparentCanvas = null; } }; _drawFilter = new WeakSet(); drawFilter_fn = function() { if (this.pageColors) { const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); if (hcmFilterId !== "none") { const savedFilter = this.ctx.filter; this.ctx.filter = hcmFilterId; this.ctx.drawImage(this.ctx.canvas, 0, 0); this.ctx.filter = savedFilter; } } }; for (const op in OPS) { if (CanvasGraphics.prototype[op] !== void 0) { CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; } } var _port, _src; var GlobalWorkerOptions = class { static get workerPort() { return __privateGet(this, _port); } static set workerPort(val) { if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { throw new Error("Invalid `workerPort` type."); } __privateSet(this, _port, val); } static get workerSrc() { return __privateGet(this, _src); } static set workerSrc(val) { if (typeof val !== "string") { throw new Error("Invalid `workerSrc` type."); } __privateSet(this, _src, val); } }; _port = new WeakMap(); _src = new WeakMap(); __privateAdd(GlobalWorkerOptions, _port, null); __privateAdd(GlobalWorkerOptions, _src, ""); var CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; var StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); } switch (reason.name) { case "AbortException": return new AbortException(reason.message); case "MissingPDFException": return new MissingPDFException(reason.message); case "PasswordException": return new PasswordException(reason.message, reason.code); case "UnexpectedResponseException": return new UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new UnknownErrorException(reason.message, reason.details); default: return new UnknownErrorException(reason.message, reason.toString()); } } var _createStreamSink, createStreamSink_fn, _processStreamMessage, processStreamMessage_fn, _deleteStreamController, deleteStreamController_fn; var MessageHandler = class { constructor(sourceName, targetName, comObj) { __privateAdd(this, _createStreamSink); __privateAdd(this, _processStreamMessage); __privateAdd(this, _deleteStreamController); this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.streamSinks = /* @__PURE__ */ Object.create(null); this.streamControllers = /* @__PURE__ */ Object.create(null); this.callbackCapabilities = /* @__PURE__ */ Object.create(null); this.actionHandler = /* @__PURE__ */ Object.create(null); this._onComObjOnMessage = (event) => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { __privateMethod(this, _processStreamMessage, processStreamMessage_fn).call(this, data); return; } if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } delete this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } const action = this.actionHandler[data.action]; if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; new Promise(function(resolve) { resolve(action(data.data)); }).then(function(result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function(reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { __privateMethod(this, _createStreamSink, createStreamSink_fn).call(this, data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } on(actionName, handler) { const ah = this.actionHandler; if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } ah[actionName] = handler; } send(actionName, data, transfers) { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; const capability = Promise.withResolvers(); this.callbackCapabilities[callbackId] = capability; try { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId, data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } sendWithStream(actionName, data, queueingStrategy, transfers) { const streamId = this.streamId++, sourceName = this.sourceName, targetName = this.targetName, comObj = this.comObj; return new ReadableStream({ start: (controller) => { const startCapability = Promise.withResolvers(); this.streamControllers[streamId] = { controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; comObj.postMessage({ sourceName, targetName, action: actionName, streamId, data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: (controller) => { const pullCapability = Promise.withResolvers(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: (reason) => { assert(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = Promise.withResolvers(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL, streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } }; _createStreamSink = new WeakSet(); createStreamSink_fn = function(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const self = this, action = this.actionHandler[data.action]; const streamSink = { enqueue(chunk, size = 1, transfers) { if (this.isCancelled) { return; } const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = Promise.withResolvers(); this.ready = this.sinkCapability.promise; } comObj.postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, streamId, chunk }, transfers); }, close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CLOSE, streamId }); delete self.streamSinks[streamId]; }, error(reason) { assert(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.ERROR, streamId, reason: wrapReason(reason) }); }, sinkCapability: Promise.withResolvers(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function(resolve) { resolve(action(data.data, streamSink)); }).then(function() { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, success: true }); }, function(reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, reason: wrapReason(reason) }); }); }; _processStreamMessage = new WeakSet(); processStreamMessage_fn = function(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const streamController = this.streamControllers[streamId], streamSink = this.streamSinks[streamId]; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { streamController.startCall.resolve(); } else { streamController.startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { streamController.pullCall.resolve(); } else { streamController.pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!streamSink) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); break; } if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { streamSink.sinkCapability.resolve(); } streamSink.desiredSize = data.desiredSize; new Promise(function(resolve) { var _a2; resolve((_a2 = streamSink.onPull) == null ? void 0 : _a2.call(streamSink)); }).then(function() { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); }, function(reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: assert(streamController, "enqueue should have stream controller"); if (streamController.isClosed) { break; } streamController.controller.enqueue(data.chunk); break; case StreamKind.CLOSE: assert(streamController, "close should have stream controller"); if (streamController.isClosed) { break; } streamController.isClosed = true; streamController.controller.close(); __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.ERROR: assert(streamController, "error should have stream controller"); streamController.controller.error(wrapReason(data.reason)); __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { streamController.cancelCall.resolve(); } else { streamController.cancelCall.reject(wrapReason(data.reason)); } __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.CANCEL: if (!streamSink) { break; } new Promise(function(resolve) { var _a2; resolve((_a2 = streamSink.onCancel) == null ? void 0 : _a2.call(streamSink, wrapReason(data.reason))); }).then(function() { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, success: true }); }, function(reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, reason: wrapReason(reason) }); }); streamSink.sinkCapability.reject(wrapReason(data.reason)); streamSink.isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } }; _deleteStreamController = new WeakSet(); deleteStreamController_fn = async function(streamController, streamId) { var _a2, _b, _c; await Promise.allSettled([(_a2 = streamController.startCall) == null ? void 0 : _a2.promise, (_b = streamController.pullCall) == null ? void 0 : _b.promise, (_c = streamController.cancelCall) == null ? void 0 : _c.promise]); delete this.streamControllers[streamId]; }; var _metadataMap, _data; var Metadata = class { constructor({ parsedData, rawData }) { __privateAdd(this, _metadataMap, void 0); __privateAdd(this, _data, void 0); __privateSet(this, _metadataMap, parsedData); __privateSet(this, _data, rawData); } getRaw() { return __privateGet(this, _data); } get(name) { var _a2; return (_a2 = __privateGet(this, _metadataMap).get(name)) != null ? _a2 : null; } getAll() { return objectFromMap(__privateGet(this, _metadataMap)); } has(name) { return __privateGet(this, _metadataMap).has(name); } }; _metadataMap = new WeakMap(); _data = new WeakMap(); var INTERNAL = Symbol("INTERNAL"); var _isDisplay, _isPrint, _userSet, _visible; var OptionalContentGroup = class { constructor(renderingIntent, { name, intent, usage }) { __privateAdd(this, _isDisplay, false); __privateAdd(this, _isPrint, false); __privateAdd(this, _userSet, false); __privateAdd(this, _visible, true); __privateSet(this, _isDisplay, !!(renderingIntent & RenderingIntentFlag.DISPLAY)); __privateSet(this, _isPrint, !!(renderingIntent & RenderingIntentFlag.PRINT)); this.name = name; this.intent = intent; this.usage = usage; } get visible() { if (__privateGet(this, _userSet)) { return __privateGet(this, _visible); } if (!__privateGet(this, _visible)) { return false; } const { print, view } = this.usage; if (__privateGet(this, _isDisplay)) { return (view == null ? void 0 : view.viewState) !== "OFF"; } else if (__privateGet(this, _isPrint)) { return (print == null ? void 0 : print.printState) !== "OFF"; } return true; } _setVisible(internal, visible, userSet = false) { if (internal !== INTERNAL) { unreachable("Internal method `_setVisible` called."); } __privateSet(this, _userSet, userSet); __privateSet(this, _visible, visible); } }; _isDisplay = new WeakMap(); _isPrint = new WeakMap(); _userSet = new WeakMap(); _visible = new WeakMap(); var _cachedGetHash, _groups, _initialHash, _order, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn; var OptionalContentConfig = class { constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { __privateAdd(this, _evaluateVisibilityExpression); __privateAdd(this, _cachedGetHash, null); __privateAdd(this, _groups, /* @__PURE__ */ new Map()); __privateAdd(this, _initialHash, null); __privateAdd(this, _order, null); this.renderingIntent = renderingIntent; this.name = null; this.creator = null; if (data === null) { return; } this.name = data.name; this.creator = data.creator; __privateSet(this, _order, data.order); for (const group of data.groups) { __privateGet(this, _groups).set(group.id, new OptionalContentGroup(renderingIntent, group)); } if (data.baseState === "OFF") { for (const group of __privateGet(this, _groups).values()) { group._setVisible(INTERNAL, false); } } for (const on2 of data.on) { __privateGet(this, _groups).get(on2)._setVisible(INTERNAL, true); } for (const off2 of data.off) { __privateGet(this, _groups).get(off2)._setVisible(INTERNAL, false); } __privateSet(this, _initialHash, this.getHash()); } isVisible(group) { if (__privateGet(this, _groups).size === 0) { return true; } if (!group) { info("Optional content group not defined."); return true; } if (group.type === "OCG") { if (!__privateGet(this, _groups).has(group.id)) { warn(`Optional content group not found: ${group.id}`); return true; } return __privateGet(this, _groups).get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { return __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, group.expression); } if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (__privateGet(this, _groups).get(id).visible) { return true; } } return false; } else if (group.policy === "AllOn") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (!__privateGet(this, _groups).get(id).visible) { return false; } } return true; } else if (group.policy === "AnyOff") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (!__privateGet(this, _groups).get(id).visible) { return true; } } return false; } else if (group.policy === "AllOff") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (__privateGet(this, _groups).get(id).visible) { return false; } } return true; } warn(`Unknown optional content policy ${group.policy}.`); return true; } warn(`Unknown group type ${group.type}.`); return true; } setVisibility(id, visible = true) { const group = __privateGet(this, _groups).get(id); if (!group) { warn(`Optional content group not found: ${id}`); return; } group._setVisible(INTERNAL, !!visible, true); __privateSet(this, _cachedGetHash, null); } setOCGState({ state, preserveRB }) { let operator; for (const elem of state) { switch (elem) { case "ON": case "OFF": case "Toggle": operator = elem; continue; } const group = __privateGet(this, _groups).get(elem); if (!group) { continue; } switch (operator) { case "ON": group._setVisible(INTERNAL, true); break; case "OFF": group._setVisible(INTERNAL, false); break; case "Toggle": group._setVisible(INTERNAL, !group.visible); break; } } __privateSet(this, _cachedGetHash, null); } get hasInitialVisibility() { return __privateGet(this, _initialHash) === null || this.getHash() === __privateGet(this, _initialHash); } getOrder() { if (!__privateGet(this, _groups).size) { return null; } if (__privateGet(this, _order)) { return __privateGet(this, _order).slice(); } return [...__privateGet(this, _groups).keys()]; } getGroups() { return __privateGet(this, _groups).size > 0 ? objectFromMap(__privateGet(this, _groups)) : null; } getGroup(id) { return __privateGet(this, _groups).get(id) || null; } getHash() { if (__privateGet(this, _cachedGetHash) !== null) { return __privateGet(this, _cachedGetHash); } const hash = new MurmurHash3_64(); for (const [id, group] of __privateGet(this, _groups)) { hash.update(`${id}:${group.visible}`); } return __privateSet(this, _cachedGetHash, hash.hexdigest()); } }; _cachedGetHash = new WeakMap(); _groups = new WeakMap(); _initialHash = new WeakMap(); _order = new WeakMap(); _evaluateVisibilityExpression = new WeakSet(); evaluateVisibilityExpression_fn = function(array) { const length = array.length; if (length < 2) { return true; } const operator = array[0]; for (let i = 1; i < length; i++) { const element2 = array[i]; let state; if (Array.isArray(element2)) { state = __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, element2); } else if (__privateGet(this, _groups).has(element2)) { state = __privateGet(this, _groups).get(element2).visible; } else { warn(`Optional content group not found: ${element2}`); return true; } switch (operator) { case "And": if (!state) { return false; } break; case "Or": if (state) { return true; } break; case "Not": return !state; default: return true; } } return operator === "And"; }; var PDFDataTransportStream = class { constructor(pdfDataRangeTransport, { disableRange = false, disableStream = false }) { assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); const { length, initialData, progressiveDone, contentDispositionFilename } = pdfDataRangeTransport; this._queuedChunks = []; this._progressiveDone = progressiveDone; this._contentDispositionFilename = contentDispositionFilename; if ((initialData == null ? void 0 : initialData.length) > 0) { const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } this._pdfDataRangeTransport = pdfDataRangeTransport; this._isStreamingSupported = !disableStream; this._isRangeSupported = !disableRange; this._contentLength = length; this._fullRequestReader = null; this._rangeReaders = []; pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); pdfDataRangeTransport.addProgressiveReadListener((chunk) => { this._onReceiveData({ chunk }); }); pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); pdfDataRangeTransport.transportReady(); } _onReceiveData({ begin, chunk }) { const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; if (begin === void 0) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { const found = this._rangeReaders.some(function(rangeReader) { if (rangeReader._begin !== begin) { return false; } rangeReader._enqueue(buffer); return true; }); assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } _onProgress(evt) { var _a2, _b, _c, _d; if (evt.total === void 0) { (_b = (_a2 = this._rangeReaders[0]) == null ? void 0 : _a2.onProgress) == null ? void 0 : _b.call(_a2, { loaded: evt.loaded }); } else { (_d = (_c = this._fullRequestReader) == null ? void 0 : _c.onProgress) == null ? void 0 : _d.call(_c, { loaded: evt.loaded, total: evt.total }); } } _onProgressiveDone() { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.progressiveDone(); this._progressiveDone = true; } _removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } } getFullReader() { assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeReaders.slice(0)) { reader.cancel(reason); } this._pdfDataRangeTransport.abort(); } }; var PDFDataTransportStreamReader = class { constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { this._stream = stream; this._done = progressiveDone || false; this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null; this._queuedChunks = queuedChunks || []; this._loaded = 0; for (const chunk of this._queuedChunks) { this._loaded += chunk.byteLength; } this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunks.push(chunk); } this._loaded += chunk.byteLength; } get headersReady() { return this._headersReady; } get filename() { return this._filename; } get isRangeSupported() { return this._stream._isRangeSupported; } get isStreamingSupported() { return this._stream._isStreamingSupported; } get contentLength() { return this._stream._contentLength; } async read() { if (this._queuedChunks.length > 0) { const chunk = this._queuedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } progressiveDone() { if (this._done) { return; } this._done = true; } }; var PDFDataTransportStreamRangeReader = class { constructor(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { const requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } this._done = true; this._stream._removeRangeReader(this); } get isStreamingSupported() { return false; } async read() { if (this._queuedChunk) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; this._stream._removeRangeReader(this); } }; function getFilenameFromContentDispositionHeader(contentDisposition) { let needsEncodingFixup = true; let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { const filename = rfc2047decode(tmp); return fixupEncoding(filename); } tmp = toParamRegExp("filename", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = rfc2047decode(filename); return fixupEncoding(filename); } function toParamRegExp(attributePattern, flags) { return new RegExp("(?:^|;)\\s*" + attributePattern + '\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)', flags); } function textdecode(encoding, value) { if (encoding) { if (!/^[\x00-\xFF]+$/.test(value)) { return value; } try { const decoder = new TextDecoder(encoding, { fatal: true }); const buffer = stringToBytes(value); value = decoder.decode(buffer); needsEncodingFixup = false; } catch (e) { } } return value; } function fixupEncoding(value) { if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { value = textdecode("utf-8", value); if (needsEncodingFixup) { value = textdecode("iso-8859-1", value); } } return value; } function rfc2231getparam(contentDispositionStr) { const matches2 = []; let match; const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); while ((match = iter.exec(contentDispositionStr)) !== null) { let [, n, quot, part] = match; n = parseInt(n, 10); if (n in matches2) { if (n === 0) { break; } continue; } matches2[n] = [quot, part]; } const parts = []; for (let n = 0; n < matches2.length; ++n) { if (!(n in matches2)) { break; } let [quot, part] = matches2[n]; part = rfc2616unquote(part); if (quot) { part = unescape(part); if (n === 0) { part = rfc5987decode(part); } } parts.push(part); } return parts.join(""); } function rfc2616unquote(value) { if (value.startsWith('"')) { const parts = value.slice(1).split('\\"'); for (let i = 0; i < parts.length; ++i) { const quotindex = parts[i].indexOf('"'); if (quotindex !== -1) { parts[i] = parts[i].slice(0, quotindex); parts.length = i + 1; } parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); } value = parts.join('"'); } return value; } function rfc5987decode(extvalue) { const encodingend = extvalue.indexOf("'"); if (encodingend === -1) { return extvalue; } const encoding = extvalue.slice(0, encodingend); const langvalue = extvalue.slice(encodingend + 1); const value = langvalue.replace(/^[^']*'/, ""); return textdecode(encoding, value); } function rfc2047decode(value) { if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { return value; } return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function(matches2, charset, encoding, text2) { if (encoding === "q" || encoding === "Q") { text2 = text2.replaceAll("_", " "); text2 = text2.replaceAll(/=([0-9a-fA-F]{2})/g, function(match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text2); } try { text2 = atob(text2); } catch (e) { } return textdecode(charset, text2); }); } return ""; } function validateRangeRequestCapabilities({ getResponseHeader, isHttp, rangeChunkSize, disableRange }) { const returnValues = { allowRangeRequests: false, suggestedLength: void 0 }; const length = parseInt(getResponseHeader("Content-Length"), 10); if (!Number.isInteger(length)) { return returnValues; } returnValues.suggestedLength = length; if (length <= 2 * rangeChunkSize) { return returnValues; } if (disableRange || !isHttp) { return returnValues; } if (getResponseHeader("Accept-Ranges") !== "bytes") { return returnValues; } const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; if (contentEncoding !== "identity") { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { const contentDisposition = getResponseHeader("Content-Disposition"); if (contentDisposition) { let filename = getFilenameFromContentDispositionHeader(contentDisposition); if (filename.includes("%")) { try { filename = decodeURIComponent(filename); } catch (e) { } } if (isPdfFile(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && url.startsWith("file:")) { return new MissingPDFException('Missing PDF "' + url + '".'); } return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); } function validateResponseStatus(status) { return status === 200 || status === 206; } function createFetchOptions(headers, withCredentials, abortController) { return { method: "GET", headers, signal: abortController.signal, mode: "cors", credentials: withCredentials ? "include" : "same-origin", redirect: "follow" }; } function createHeaders(httpHeaders) { const headers = new Headers(); for (const property in httpHeaders) { const value = httpHeaders[property]; if (value === void 0) { continue; } headers.append(property, value); } return headers; } function getArrayBuffer(val) { if (val instanceof Uint8Array) { return val.buffer; } if (val instanceof ArrayBuffer) { return val; } warn(`getArrayBuffer - unexpected data format: ${val}`); return new Uint8Array(val).buffer; } var PDFFetchStream = class { constructor(source) { this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } getFullReader() { assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var PDFFetchStreamReader = class { constructor(stream) { this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; const source = stream.source; this._withCredentials = source.withCredentials || false; this._contentLength = source.length; this._headersCapability = Promise.withResolvers(); this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._abortController = new AbortController(); this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._headers = createHeaders(this._stream.httpHeaders); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { if (!validateResponseStatus(response.status)) { throw createResponseStatusError(response.status, url); } this._reader = response.body.getReader(); this._headersCapability.resolve(); const getResponseHeader = (name) => response.headers.get(name); const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: this._stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); if (!this._isStreamingSupported && this._isRangeSupported) { this.cancel(new AbortException("Streaming is disabled.")); } }).catch(this._headersCapability.reject); this.onProgress = null; } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._headersCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded, total: this._contentLength }); return { value: getArrayBuffer(value), done: false }; } cancel(reason) { var _a2; (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); this._abortController.abort(); } }; var PDFFetchStreamRangeReader = class { constructor(stream, begin, end) { this._stream = stream; this._reader = null; this._loaded = 0; const source = stream.source; this._withCredentials = source.withCredentials || false; this._readCapability = Promise.withResolvers(); this._isStreamingSupported = !source.disableStream; this._abortController = new AbortController(); this._headers = createHeaders(this._stream.httpHeaders); this._headers.append("Range", `bytes=${begin}-${end - 1}`); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { if (!validateResponseStatus(response.status)) { throw createResponseStatusError(response.status, url); } this._readCapability.resolve(); this._reader = response.body.getReader(); }).catch(this._readCapability.reject); this.onProgress = null; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded }); return { value: getArrayBuffer(value), done: false }; } cancel(reason) { var _a2; (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); this._abortController.abort(); } }; var OK_RESPONSE = 200; var PARTIAL_CONTENT_RESPONSE = 206; function network_getArrayBuffer(xhr) { const data = xhr.response; if (typeof data !== "string") { return data; } return stringToBytes(data).buffer; } var NetworkManager = class { constructor(url, args = {}) { this.url = url; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || /* @__PURE__ */ Object.create(null); this.withCredentials = args.withCredentials || false; this.currXhrId = 0; this.pendingRequests = /* @__PURE__ */ Object.create(null); } requestRange(begin, end, listeners) { const args = { begin, end }; for (const prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); } requestFull(listeners) { return this.request(listeners); } request(args) { const xhr = new XMLHttpRequest(); const xhrId = this.currXhrId++; const pendingRequest = this.pendingRequests[xhrId] = { xhr }; xhr.open("GET", this.url); xhr.withCredentials = this.withCredentials; for (const property in this.httpHeaders) { const value = this.httpHeaders[property]; if (value === void 0) { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && "begin" in args && "end" in args) { xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; } else { pendingRequest.expectedStatus = OK_RESPONSE; } xhr.responseType = "arraybuffer"; if (args.onError) { xhr.onerror = function(evt) { args.onError(xhr.status); }; } xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); xhr.onprogress = this.onProgress.bind(this, xhrId); pendingRequest.onHeadersReceived = args.onHeadersReceived; pendingRequest.onDone = args.onDone; pendingRequest.onError = args.onError; pendingRequest.onProgress = args.onProgress; xhr.send(null); return xhrId; } onProgress(xhrId, evt) { var _a2; const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } (_a2 = pendingRequest.onProgress) == null ? void 0 : _a2.call(pendingRequest, evt); } onStateChange(xhrId, evt) { var _a2, _b, _c; const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } const xhr = pendingRequest.xhr; if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { pendingRequest.onHeadersReceived(); delete pendingRequest.onHeadersReceived; } if (xhr.readyState !== 4) { return; } if (!(xhrId in this.pendingRequests)) { return; } delete this.pendingRequests[xhrId]; if (xhr.status === 0 && this.isHttp) { (_a2 = pendingRequest.onError) == null ? void 0 : _a2.call(pendingRequest, xhr.status); return; } const xhrStatus = xhr.status || OK_RESPONSE; const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { (_b = pendingRequest.onError) == null ? void 0 : _b.call(pendingRequest, xhr.status); return; } const chunk = network_getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { const rangeHeader = xhr.getResponseHeader("Content-Range"); const matches2 = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); pendingRequest.onDone({ begin: parseInt(matches2[1], 10), chunk }); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk }); } else { (_c = pendingRequest.onError) == null ? void 0 : _c.call(pendingRequest, xhr.status); } } getRequestXhr(xhrId) { return this.pendingRequests[xhrId].xhr; } isPendingRequest(xhrId) { return xhrId in this.pendingRequests; } abortRequest(xhrId) { const xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } }; var PDFNetworkStream = class { constructor(source) { this._source = source; this._manager = new NetworkManager(source.url, { httpHeaders: source.httpHeaders, withCredentials: source.withCredentials }); this._rangeChunkSize = source.rangeChunkSize; this._fullRequestReader = null; this._rangeRequestReaders = []; } _onRangeRequestReaderClosed(reader) { const i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } } getFullReader() { assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var PDFNetworkStreamFullRequestReader = class { constructor(manager, source) { this._manager = manager; const args = { onHeadersReceived: this._onHeadersReceived.bind(this), onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = source.url; this._fullRequestId = manager.requestFull(args); this._headersReceivedCapability = Promise.withResolvers(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = false; this._isRangeSupported = false; this._cachedChunks = []; this._requests = []; this._done = false; this._storedError = void 0; this._filename = null; this.onProgress = null; } _onHeadersReceived() { const fullRequestXhrId = this._fullRequestId; const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); const getResponseHeader = (name) => fullRequestXhr.getResponseHeader(name); const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); } _onDone(data) { if (data) { if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: data.chunk, done: false }); } else { this._cachedChunks.push(data.chunk); } } this._done = true; if (this._cachedChunks.length > 0) { return; } for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } _onError(status) { this._storedError = createResponseStatusError(status, this._url); this._headersReceivedCapability.reject(this._storedError); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._cachedChunks.length = 0; } _onProgress(evt) { var _a2; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: evt.loaded, total: evt.lengthComputable ? evt.total : this._contentLength }); } get filename() { return this._filename; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } get contentLength() { return this._contentLength; } get headersReady() { return this._headersReceivedCapability.promise; } async read() { if (this._storedError) { throw this._storedError; } if (this._cachedChunks.length > 0) { const chunk = this._cachedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } }; var PDFNetworkStreamRangeRequestReader = class { constructor(manager, begin, end) { this._manager = manager; const args = { onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = manager.url; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this._storedError = void 0; this.onProgress = null; this.onClosed = null; } _close() { var _a2; (_a2 = this.onClosed) == null ? void 0 : _a2.call(this, this); } _onDone(data) { const chunk = data.chunk; if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; this._close(); } _onError(status) { this._storedError = createResponseStatusError(status, this._url); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._queuedChunk = null; } _onProgress(evt) { var _a2; if (!this.isStreamingSupported) { (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: evt.loaded }); } } get isStreamingSupported() { return false; } async read() { if (this._storedError) { throw this._storedError; } if (this._queuedChunk !== null) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } }; var urlRegex = /^[a-z][a-z0-9\-+.]+:/i; function parseUrlOrPath(sourceUrl) { if (urlRegex.test(sourceUrl)) { return new URL(sourceUrl); } const url = NodePackages.get("url"); return new URL(url.pathToFileURL(sourceUrl)); } function createRequest(url, headers, callback) { if (url.protocol === "http:") { const http = NodePackages.get("http"); return http.request(url, { headers }, callback); } const https = NodePackages.get("https"); return https.request(url, { headers }, callback); } var PDFNodeStream = class { constructor(source) { this.source = source; this.url = parseUrlOrPath(source.url); this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; this.isFsUrl = this.url.protocol === "file:"; this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } getFullReader() { assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } getRangeReader(start, end) { if (end <= this._progressiveDataLength) { return null; } const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var BaseFullReader = class { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; const source = stream.source; this._contentLength = source.length; this._loaded = 0; this._filename = null; this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; this._readCapability = Promise.withResolvers(); this._headersCapability = Promise.withResolvers(); } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; if (this._done) { return { value: void 0, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded, total: this._contentLength }); const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", (reason) => { this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { this._error(new AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); } } }; var BaseRangeReader = class { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = Promise.withResolvers(); const source = stream.source; this._isStreamingSupported = !source.disableStream; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; if (this._done) { return { value: void 0, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded }); const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", (reason) => { this._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } }; var PDFNodeStreamFullReader = class extends BaseFullReader { constructor(stream) { super(stream); const handleResponse = (response) => { if (response.statusCode === 404) { const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; this._headersCapability.reject(error); return; } this._headersCapability.resolve(); this._setReadableStream(response); const getResponseHeader = (name) => this._readableStream.headers[name.toLowerCase()]; const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); }; this._request = createRequest(this._url, stream.httpHeaders, handleResponse); this._request.on("error", (reason) => { this._storedError = reason; this._headersCapability.reject(reason); }); this._request.end(); } }; var PDFNodeStreamRangeReader = class extends BaseRangeReader { constructor(stream, start, end) { super(stream); this._httpHeaders = {}; for (const property in stream.httpHeaders) { const value = stream.httpHeaders[property]; if (value === void 0) { continue; } this._httpHeaders[property] = value; } this._httpHeaders.Range = `bytes=${start}-${end - 1}`; const handleResponse = (response) => { if (response.statusCode === 404) { const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; return; } this._setReadableStream(response); }; this._request = createRequest(this._url, this._httpHeaders, handleResponse); this._request.on("error", (reason) => { this._storedError = reason; }); this._request.end(); } }; var PDFNodeStreamFsFullReader = class extends BaseFullReader { constructor(stream) { super(stream); const fs = NodePackages.get("fs"); fs.promises.lstat(this._url).then((stat) => { this._contentLength = stat.size; this._setReadableStream(fs.createReadStream(this._url)); this._headersCapability.resolve(); }, (error) => { if (error.code === "ENOENT") { error = new MissingPDFException(`Missing PDF "${this._url}".`); } this._storedError = error; this._headersCapability.reject(error); }); } }; var PDFNodeStreamFsRangeReader = class extends BaseRangeReader { constructor(stream, start, end) { super(stream); const fs = NodePackages.get("fs"); this._setReadableStream(fs.createReadStream(this._url, { start, end: end - 1 })); } }; var MAX_TEXT_DIVS_TO_RENDER = 1e5; var DEFAULT_FONT_SIZE = 30; var DEFAULT_FONT_ASCENT = 0.8; var _a, _capability, _container2, _disableProcessItems, _fontInspectorEnabled, _lang, _layoutTextParams, _pageHeight, _pageWidth, _reader, _rootContainer, _rotation, _scale, _styleCache, _textContentItemsStr, _textContentSource, _textDivs, _textDivProperties, _transform, _ascentCache, _canvasContexts, _minFontSize, _pendingTextLayers, _processItems, processItems_fn, _appendText, appendText_fn, _layout, layout_fn, _getCtx, getCtx_fn, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn, _getAscent, getAscent_fn; var _TextLayer = class { constructor({ textContentSource, container, viewport }) { __privateAdd(this, _processItems); __privateAdd(this, _appendText); __privateAdd(this, _layout); __privateAdd(this, _capability, Promise.withResolvers()); __privateAdd(this, _container2, null); __privateAdd(this, _disableProcessItems, false); __privateAdd(this, _fontInspectorEnabled, !!((_a = globalThis.FontInspector) == null ? void 0 : _a.enabled)); __privateAdd(this, _lang, null); __privateAdd(this, _layoutTextParams, null); __privateAdd(this, _pageHeight, 0); __privateAdd(this, _pageWidth, 0); __privateAdd(this, _reader, null); __privateAdd(this, _rootContainer, null); __privateAdd(this, _rotation, 0); __privateAdd(this, _scale, 0); __privateAdd(this, _styleCache, /* @__PURE__ */ Object.create(null)); __privateAdd(this, _textContentItemsStr, []); __privateAdd(this, _textContentSource, null); __privateAdd(this, _textDivs, []); __privateAdd(this, _textDivProperties, /* @__PURE__ */ new WeakMap()); __privateAdd(this, _transform, null); var _a2; if (textContentSource instanceof ReadableStream) { __privateSet(this, _textContentSource, textContentSource); } else if (typeof textContentSource === "object") { __privateSet(this, _textContentSource, new ReadableStream({ start(controller) { controller.enqueue(textContentSource); controller.close(); } })); } else { throw new Error('No "textContentSource" parameter specified.'); } __privateSet(this, _container2, __privateSet(this, _rootContainer, container)); __privateSet(this, _scale, viewport.scale * (globalThis.devicePixelRatio || 1)); __privateSet(this, _rotation, viewport.rotation); __privateSet(this, _layoutTextParams, { prevFontSize: null, prevFontFamily: null, div: null, properties: null, ctx: null }); const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims; __privateSet(this, _transform, [1, 0, 0, -1, -pageX, pageY + pageHeight]); __privateSet(this, _pageWidth, pageWidth); __privateSet(this, _pageHeight, pageHeight); __privateMethod(_a2 = _TextLayer, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn).call(_a2); setLayerDimensions(container, viewport); __privateGet(this, _capability).promise.catch(() => { }).then(() => { __privateGet(_TextLayer, _pendingTextLayers).delete(this); __privateSet(this, _layoutTextParams, null); __privateSet(this, _styleCache, null); }); } render() { const pump = () => { __privateGet(this, _reader).read().then(({ value, done }) => { var _a2; if (done) { __privateGet(this, _capability).resolve(); return; } (_a2 = __privateGet(this, _lang)) != null ? _a2 : __privateSet(this, _lang, value.lang); Object.assign(__privateGet(this, _styleCache), value.styles); __privateMethod(this, _processItems, processItems_fn).call(this, value.items); pump(); }, __privateGet(this, _capability).reject); }; __privateSet(this, _reader, __privateGet(this, _textContentSource).getReader()); __privateGet(_TextLayer, _pendingTextLayers).add(this); pump(); return __privateGet(this, _capability).promise; } update({ viewport, onBefore = null }) { var _a2; const scale = viewport.scale * (globalThis.devicePixelRatio || 1); const rotation = viewport.rotation; if (rotation !== __privateGet(this, _rotation)) { onBefore == null ? void 0 : onBefore(); __privateSet(this, _rotation, rotation); setLayerDimensions(__privateGet(this, _rootContainer), { rotation }); } if (scale !== __privateGet(this, _scale)) { onBefore == null ? void 0 : onBefore(); __privateSet(this, _scale, scale); const params = { prevFontSize: null, prevFontFamily: null, div: null, properties: null, ctx: __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)) }; for (const div of __privateGet(this, _textDivs)) { params.properties = __privateGet(this, _textDivProperties).get(div); params.div = div; __privateMethod(this, _layout, layout_fn).call(this, params); } } } cancel() { var _a2; const abortEx = new AbortException("TextLayer task cancelled."); (_a2 = __privateGet(this, _reader)) == null ? void 0 : _a2.cancel(abortEx).catch(() => { }); __privateSet(this, _reader, null); __privateGet(this, _capability).reject(abortEx); } get textDivs() { return __privateGet(this, _textDivs); } get textContentItemsStr() { return __privateGet(this, _textContentItemsStr); } static cleanup() { if (__privateGet(this, _pendingTextLayers).size > 0) { return; } __privateGet(this, _ascentCache).clear(); for (const { canvas } of __privateGet(this, _canvasContexts).values()) { canvas.remove(); } __privateGet(this, _canvasContexts).clear(); } }; var TextLayer = _TextLayer; _capability = new WeakMap(); _container2 = new WeakMap(); _disableProcessItems = new WeakMap(); _fontInspectorEnabled = new WeakMap(); _lang = new WeakMap(); _layoutTextParams = new WeakMap(); _pageHeight = new WeakMap(); _pageWidth = new WeakMap(); _reader = new WeakMap(); _rootContainer = new WeakMap(); _rotation = new WeakMap(); _scale = new WeakMap(); _styleCache = new WeakMap(); _textContentItemsStr = new WeakMap(); _textContentSource = new WeakMap(); _textDivs = new WeakMap(); _textDivProperties = new WeakMap(); _transform = new WeakMap(); _ascentCache = new WeakMap(); _canvasContexts = new WeakMap(); _minFontSize = new WeakMap(); _pendingTextLayers = new WeakMap(); _processItems = new WeakSet(); processItems_fn = function(items) { var _a2, _b, _c; if (__privateGet(this, _disableProcessItems)) { return; } (_c = (_b = __privateGet(this, _layoutTextParams)).ctx) != null ? _c : _b.ctx = __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)); const textDivs = __privateGet(this, _textDivs), textContentItemsStr = __privateGet(this, _textContentItemsStr); for (const item of items) { if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { warn("Ignoring additional textDivs for performance reasons."); __privateSet(this, _disableProcessItems, true); return; } if (item.str === void 0) { if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { const parent = __privateGet(this, _container2); __privateSet(this, _container2, document.createElement("span")); __privateGet(this, _container2).classList.add("markedContent"); if (item.id !== null) { __privateGet(this, _container2).setAttribute("id", `${item.id}`); } parent.append(__privateGet(this, _container2)); } else if (item.type === "endMarkedContent") { __privateSet(this, _container2, __privateGet(this, _container2).parentNode); } continue; } textContentItemsStr.push(item.str); __privateMethod(this, _appendText, appendText_fn).call(this, item); } }; _appendText = new WeakSet(); appendText_fn = function(geom) { var _a2; const textDiv = document.createElement("span"); const textDivProperties = { angle: 0, canvasWidth: 0, hasText: geom.str !== "", hasEOL: geom.hasEOL, fontSize: 0 }; __privateGet(this, _textDivs).push(textDiv); const tx = Util.transform(__privateGet(this, _transform), geom.transform); let angle = Math.atan2(tx[1], tx[0]); const style = __privateGet(this, _styleCache)[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } const fontFamily = __privateGet(this, _fontInspectorEnabled) && style.fontSubstitution || style.fontFamily; const fontHeight = Math.hypot(tx[2], tx[3]); const fontAscent = fontHeight * __privateMethod(_a2 = _TextLayer, _getAscent, getAscent_fn).call(_a2, fontFamily, __privateGet(this, _lang)); let left, top; if (angle === 0) { left = tx[4]; top = tx[5] - fontAscent; } else { left = tx[4] + fontAscent * Math.sin(angle); top = tx[5] - fontAscent * Math.cos(angle); } const scaleFactorStr = "calc(var(--scale-factor)*"; const divStyle = textDiv.style; if (__privateGet(this, _container2) === __privateGet(this, _rootContainer)) { divStyle.left = `${(100 * left / __privateGet(this, _pageWidth)).toFixed(2)}%`; divStyle.top = `${(100 * top / __privateGet(this, _pageHeight)).toFixed(2)}%`; } else { divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; } divStyle.fontSize = `${scaleFactorStr}${(__privateGet(_TextLayer, _minFontSize) * fontHeight).toFixed(2)}px)`; divStyle.fontFamily = fontFamily; textDivProperties.fontSize = fontHeight; textDiv.setAttribute("role", "presentation"); textDiv.textContent = geom.str; textDiv.dir = geom.dir; if (__privateGet(this, _fontInspectorEnabled)) { textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } let shouldScaleText = false; if (geom.str.length > 1) { shouldScaleText = true; } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { const absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { shouldScaleText = true; } } if (shouldScaleText) { textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; } __privateGet(this, _textDivProperties).set(textDiv, textDivProperties); __privateGet(this, _layoutTextParams).div = textDiv; __privateGet(this, _layoutTextParams).properties = textDivProperties; __privateMethod(this, _layout, layout_fn).call(this, __privateGet(this, _layoutTextParams)); if (textDivProperties.hasText) { __privateGet(this, _container2).append(textDiv); } if (textDivProperties.hasEOL) { const br = document.createElement("br"); br.setAttribute("role", "presentation"); __privateGet(this, _container2).append(br); } }; _layout = new WeakSet(); layout_fn = function(params) { const { div, properties, ctx, prevFontSize, prevFontFamily } = params; const { style } = div; let transform = ""; if (__privateGet(_TextLayer, _minFontSize) > 1) { transform = `scale(${1 / __privateGet(_TextLayer, _minFontSize)})`; } if (properties.canvasWidth !== 0 && properties.hasText) { const { fontFamily } = style; const { canvasWidth, fontSize } = properties; if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { ctx.font = `${fontSize * __privateGet(this, _scale)}px ${fontFamily}`; params.prevFontSize = fontSize; params.prevFontFamily = fontFamily; } const { width } = ctx.measureText(div.textContent); if (width > 0) { transform = `scaleX(${canvasWidth * __privateGet(this, _scale) / width}) ${transform}`; } } if (properties.angle !== 0) { transform = `rotate(${properties.angle}deg) ${transform}`; } if (transform.length > 0) { style.transform = transform; } }; _getCtx = new WeakSet(); getCtx_fn = function(lang = null) { let canvasContext = __privateGet(this, _canvasContexts).get(lang || (lang = "")); if (!canvasContext) { const canvas = document.createElement("canvas"); canvas.className = "hiddenCanvasElement"; canvas.lang = lang; document.body.append(canvas); canvasContext = canvas.getContext("2d", { alpha: false, willReadFrequently: true }); __privateGet(this, _canvasContexts).set(lang, canvasContext); } return canvasContext; }; _ensureMinFontSizeComputed = new WeakSet(); ensureMinFontSizeComputed_fn = function() { if (__privateGet(this, _minFontSize) !== null) { return; } const div = document.createElement("div"); div.style.opacity = 0; div.style.lineHeight = 1; div.style.fontSize = "1px"; div.style.position = "absolute"; div.textContent = "X"; document.body.append(div); __privateSet(this, _minFontSize, div.getBoundingClientRect().height); div.remove(); }; _getAscent = new WeakSet(); getAscent_fn = function(fontFamily, lang) { const cachedAscent = __privateGet(this, _ascentCache).get(fontFamily); if (cachedAscent) { return cachedAscent; } const ctx = __privateMethod(this, _getCtx, getCtx_fn).call(this, lang); const savedFont = ctx.font; ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; const metrics = ctx.measureText(""); let ascent = metrics.fontBoundingBoxAscent; let descent = Math.abs(metrics.fontBoundingBoxDescent); if (ascent) { const ratio2 = ascent / (ascent + descent); __privateGet(this, _ascentCache).set(fontFamily, ratio2); ctx.canvas.width = ctx.canvas.height = 0; ctx.font = savedFont; return ratio2; } ctx.strokeStyle = "red"; ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("g", 0, 0); let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; descent = 0; for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { if (pixels[i] > 0) { descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; ascent = 0; for (let i = 0, ii = pixels.length; i < ii; i += 4) { if (pixels[i] > 0) { ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.canvas.width = ctx.canvas.height = 0; ctx.font = savedFont; const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT; __privateGet(this, _ascentCache).set(fontFamily, ratio); return ratio; }; __privateAdd(TextLayer, _getCtx); __privateAdd(TextLayer, _ensureMinFontSizeComputed); __privateAdd(TextLayer, _getAscent); __privateAdd(TextLayer, _ascentCache, /* @__PURE__ */ new Map()); __privateAdd(TextLayer, _canvasContexts, /* @__PURE__ */ new Map()); __privateAdd(TextLayer, _minFontSize, null); __privateAdd(TextLayer, _pendingTextLayers, /* @__PURE__ */ new Set()); var XfaText = class { static textContent(xfa) { const items = []; const output = { items, styles: /* @__PURE__ */ Object.create(null) }; function walk(node) { var _a2; if (!node) { return; } let str = null; const name = node.name; if (name === "#text") { str = node.value; } else if (!XfaText.shouldBuildText(name)) { return; } else if ((_a2 = node == null ? void 0 : node.attributes) == null ? void 0 : _a2.textContent) { str = node.attributes.textContent; } else if (node.value) { str = node.value; } if (str !== null) { items.push({ str }); } if (!node.children) { return; } for (const child of node.children) { walk(child); } } walk(xfa); return output; } static shouldBuildText(name) { return !(name === "textarea" || name === "input" || name === "option" || name === "select"); } }; var DEFAULT_RANGE_CHUNK_SIZE = 65536; var RENDERING_CANCELLED_TIMEOUT = 100; var DELAYED_CLEANUP_TIMEOUT = 5e3; var DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory; var DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory; var DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory; var DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory; function getDocument(src = {}) { var _a2, _b; if (typeof src === "string" || src instanceof URL) { src = { url: src }; } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) { src = { data: src }; } const task = new PDFDocumentLoadingTask(); const { docId } = task; const url = src.url ? getUrlProp(src.url) : null; const data = src.data ? getDataProp(src.data) : null; const httpHeaders = src.httpHeaders || null; const withCredentials = src.withCredentials === true; const password = (_a2 = src.password) != null ? _a2 : null; const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; let worker = src.worker instanceof PDFWorker ? src.worker : null; const verbosity2 = src.verbosity; const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; const cMapPacked = src.cMapPacked !== false; const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; const ignoreErrors = src.stopAtErrors !== true; const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; const isEvalSupported2 = src.isEvalSupported !== false; const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS; const fontExtraProperties = src.fontExtraProperties === true; const enableXfa = src.enableXfa === true; const ownerDocument = src.ownerDocument || globalThis.document; const disableRange = src.disableRange === true; const disableStream = src.disableStream === true; const disableAutoFetch = src.disableAutoFetch === true; const pdfBug = src.pdfBug === true; const enableHWA = src.enableHWA === true; const length = rangeTransport ? rangeTransport.length : (_b = src.length) != null ? _b : NaN; const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace; const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI); const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ ownerDocument, enableHWA }); const filterFactory = src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument }); const styleElement = null; setVerbosityLevel(verbosity2); const transportFactory = { canvasFactory, filterFactory }; if (!useWorkerFetch) { transportFactory.cMapReaderFactory = new CMapReaderFactory({ baseUrl: cMapUrl, isCompressed: cMapPacked }); transportFactory.standardFontDataFactory = new StandardFontDataFactory({ baseUrl: standardFontDataUrl }); } if (!worker) { const workerParams = { verbosity: verbosity2, port: GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } const docParams = { docId, apiVersion: "4.6.82", data, password, disableAutoFetch, rangeChunkSize, length, docBaseUrl, enableXfa, evaluatorOptions: { maxImageSize, disableFontFace, ignoreErrors, isEvalSupported: isEvalSupported2, isOffscreenCanvasSupported, canvasMaxAreaInBytes, fontExtraProperties, useSystemFonts, cMapUrl: useWorkerFetch ? cMapUrl : null, standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null } }; const transportParams = { disableFontFace, fontExtraProperties, ownerDocument, pdfBug, styleElement, loadingParams: { disableAutoFetch, enableXfa } }; worker.promise.then(function() { if (task.destroyed) { throw new Error("Loading aborted"); } if (worker.destroyed) { throw new Error("Worker was destroyed"); } const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null); let networkStream; if (rangeTransport) { networkStream = new PDFDataTransportStream(rangeTransport, { disableRange, disableStream }); } else if (!data) { if (!url) { throw new Error("getDocument - no `url` parameter provided."); } const createPDFNetworkStream = (params) => { if (isNodeJS) { const isFetchSupported = function() { return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype; }; return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params); } return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params); }; networkStream = createPDFNetworkStream({ url, length, httpHeaders, withCredentials, rangeChunkSize, disableRange, disableStream }); } return workerIdPromise.then((workerId) => { if (task.destroyed) { throw new Error("Loading aborted"); } if (worker.destroyed) { throw new Error("Worker was destroyed"); } const messageHandler = new MessageHandler(docId, workerId, worker.port); const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); task._transport = transport; messageHandler.send("Ready", null); }); }).catch(task._capability.reject); return task; } function getUrlProp(val) { if (val instanceof URL) { return val.href; } try { return new URL(val, window.location).href; } catch (e) { if (isNodeJS && typeof val === "string") { return val; } } throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property."); } function getDataProp(val) { if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); } if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { return val; } if (typeof val === "string") { return stringToBytes(val); } if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val == null ? void 0 : val.length)) { return new Uint8Array(val); } throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property."); } function isRefProxy(ref) { return typeof ref === "object" && Number.isInteger(ref == null ? void 0 : ref.num) && ref.num >= 0 && Number.isInteger(ref == null ? void 0 : ref.gen) && ref.gen >= 0; } var _docId2; var _PDFDocumentLoadingTask = class { constructor() { this._capability = Promise.withResolvers(); this._transport = null; this._worker = null; this.docId = `d${__privateWrapper(_PDFDocumentLoadingTask, _docId2)._++}`; this.destroyed = false; this.onPassword = null; this.onProgress = null; } get promise() { return this._capability.promise; } async destroy() { var _a2, _b, _c; this.destroyed = true; try { if ((_a2 = this._worker) == null ? void 0 : _a2.port) { this._worker._pendingDestroy = true; } await ((_b = this._transport) == null ? void 0 : _b.destroy()); } catch (ex) { if ((_c = this._worker) == null ? void 0 : _c.port) { delete this._worker._pendingDestroy; } throw ex; } this._transport = null; if (this._worker) { this._worker.destroy(); this._worker = null; } } }; var PDFDocumentLoadingTask = _PDFDocumentLoadingTask; _docId2 = new WeakMap(); __privateAdd(PDFDocumentLoadingTask, _docId2, 0); var PDFDataRangeTransport = class { constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; this.contentDispositionFilename = contentDispositionFilename; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; this._readyCapability = Promise.withResolvers(); } addRangeListener(listener) { this._rangeListeners.push(listener); } addProgressListener(listener) { this._progressListeners.push(listener); } addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } onDataRange(begin, chunk) { for (const listener of this._rangeListeners) { listener(begin, chunk); } } onDataProgress(loaded, total) { this._readyCapability.promise.then(() => { for (const listener of this._progressListeners) { listener(loaded, total); } }); } onDataProgressiveRead(chunk) { this._readyCapability.promise.then(() => { for (const listener of this._progressiveReadListeners) { listener(chunk); } }); } onDataProgressiveDone() { this._readyCapability.promise.then(() => { for (const listener of this._progressiveDoneListeners) { listener(); } }); } transportReady() { this._readyCapability.resolve(); } requestDataRange(begin, end) { unreachable("Abstract method PDFDataRangeTransport.requestDataRange"); } abort() { } }; var PDFDocumentProxy = class { constructor(pdfInfo, transport) { this._pdfInfo = pdfInfo; this._transport = transport; } get annotationStorage() { return this._transport.annotationStorage; } get filterFactory() { return this._transport.filterFactory; } get numPages() { return this._pdfInfo.numPages; } get fingerprints() { return this._pdfInfo.fingerprints; } get isPureXfa() { return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); } get allXfaHtml() { return this._transport._htmlForXfa; } getPage(pageNumber) { return this._transport.getPage(pageNumber); } getPageIndex(ref) { return this._transport.getPageIndex(ref); } getDestinations() { return this._transport.getDestinations(); } getDestination(id) { return this._transport.getDestination(id); } getPageLabels() { return this._transport.getPageLabels(); } getPageLayout() { return this._transport.getPageLayout(); } getPageMode() { return this._transport.getPageMode(); } getViewerPreferences() { return this._transport.getViewerPreferences(); } getOpenAction() { return this._transport.getOpenAction(); } getAttachments() { return this._transport.getAttachments(); } getJSActions() { return this._transport.getDocJSActions(); } getOutline() { return this._transport.getOutline(); } getOptionalContentConfig({ intent = "display" } = {}) { const { renderingIntent } = this._transport.getRenderingIntent(intent); return this._transport.getOptionalContentConfig(renderingIntent); } getPermissions() { return this._transport.getPermissions(); } getMetadata() { return this._transport.getMetadata(); } getMarkInfo() { return this._transport.getMarkInfo(); } getData() { return this._transport.getData(); } saveDocument() { return this._transport.saveDocument(); } getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } cleanup(keepLoadedFonts = false) { return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); } destroy() { return this.loadingTask.destroy(); } cachedPageNumber(ref) { return this._transport.cachedPageNumber(ref); } get loadingParams() { return this._transport.loadingParams; } get loadingTask() { return this._transport.loadingTask; } getFieldObjects() { return this._transport.getFieldObjects(); } hasJSActions() { return this._transport.hasJSActions(); } getCalculationOrderIds() { return this._transport.getCalculationOrderIds(); } }; var _delayedCleanupTimeout, _pendingCleanup, _tryCleanup, tryCleanup_fn, _abortDelayedCleanup, abortDelayedCleanup_fn; var PDFPageProxy = class { constructor(pageIndex, pageInfo, transport, pdfBug = false) { __privateAdd(this, _tryCleanup); __privateAdd(this, _abortDelayedCleanup); __privateAdd(this, _delayedCleanupTimeout, null); __privateAdd(this, _pendingCleanup, false); this._pageIndex = pageIndex; this._pageInfo = pageInfo; this._transport = transport; this._stats = pdfBug ? new StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this._maybeCleanupAfterRender = false; this._intentStates = /* @__PURE__ */ new Map(); this.destroyed = false; } get pageNumber() { return this._pageIndex + 1; } get rotate() { return this._pageInfo.rotate; } get ref() { return this._pageInfo.ref; } get userUnit() { return this._pageInfo.userUnit; } get view() { return this._pageInfo.view; } getViewport({ scale, rotation = this.rotate, offsetX = 0, offsetY = 0, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.view, scale, rotation, offsetX, offsetY, dontFlip }); } getAnnotations({ intent = "display" } = {}) { const { renderingIntent } = this._transport.getRenderingIntent(intent); return this._transport.getAnnotations(this._pageIndex, renderingIntent); } getJSActions() { return this._transport.getPageJSActions(this._pageIndex); } get filterFactory() { return this._transport.filterFactory; } get isPureXfa() { return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); } async getXfa() { var _a2; return ((_a2 = this._transport._htmlForXfa) == null ? void 0 : _a2.children[this._pageIndex]) || null; } render({ canvasContext, viewport, intent = "display", annotationMode = AnnotationMode.ENABLE, transform = null, background = null, optionalContentConfigPromise = null, annotationCanvasMap = null, pageColors = null, printAnnotationStorage = null, isEditing = false }) { var _a2, _b; (_a2 = this._stats) == null ? void 0 : _a2.time("Overall"); const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing); const { renderingIntent, cacheKey } = intentArgs; __privateSet(this, _pendingCleanup, false); __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); optionalContentConfigPromise || (optionalContentConfigPromise = this._transport.getOptionalContentConfig(renderingIntent)); let intentState = this._intentStates.get(cacheKey); if (!intentState) { intentState = /* @__PURE__ */ Object.create(null); this._intentStates.set(cacheKey, intentState); } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); if (!intentState.displayReadyCapability) { intentState.displayReadyCapability = Promise.withResolvers(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false, separateAnnots: null }; (_b = this._stats) == null ? void 0 : _b.time("Page Request"); this._pumpOperatorList(intentArgs); } const complete = (error) => { var _a3; intentState.renderTasks.delete(internalRenderTask); if (this._maybeCleanupAfterRender || intentPrint) { __privateSet(this, _pendingCleanup, true); } __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, !intentPrint); if (error) { internalRenderTask.capability.reject(error); this._abortOperatorList({ intentState, reason: error instanceof Error ? error : new Error(error) }); } else { internalRenderTask.capability.resolve(); } if (this._stats) { this._stats.timeEnd("Rendering"); this._stats.timeEnd("Overall"); if ((_a3 = globalThis.Stats) == null ? void 0 : _a3.enabled) { globalThis.Stats.add(this.pageNumber, this._stats); } } }; const internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext, viewport, transform, background }, objs: this.objs, commonObjs: this.commonObjs, annotationCanvasMap, operatorList: intentState.operatorList, pageIndex: this._pageIndex, canvasFactory: this._transport.canvasFactory, filterFactory: this._transport.filterFactory, useRequestAnimationFrame: !intentPrint, pdfBug: this._pdfBug, pageColors }); (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(internalRenderTask); const renderTask = internalRenderTask.task; Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { var _a3; if (this.destroyed) { complete(); return; } (_a3 = this._stats) == null ? void 0 : _a3.time("Rendering"); if (!(optionalContentConfig.renderingIntent & renderingIntent)) { throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods."); } internalRenderTask.initializeGraphics({ transparency, optionalContentConfig }); internalRenderTask.operatorListChanged(); }).catch(complete); return renderTask; } getOperatorList({ intent = "display", annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false } = {}) { var _a2; function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); intentState.renderTasks.delete(opListTask); } } const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true); let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = /* @__PURE__ */ Object.create(null); this._intentStates.set(intentArgs.cacheKey, intentState); } let opListTask; if (!intentState.opListReadCapability) { opListTask = /* @__PURE__ */ Object.create(null); opListTask.operatorListChanged = operatorListChanged; intentState.opListReadCapability = Promise.withResolvers(); (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false, separateAnnots: null }; (_a2 = this._stats) == null ? void 0 : _a2.time("Page Request"); this._pumpOperatorList(intentArgs); } return intentState.opListReadCapability.promise; } streamTextContent({ includeMarkedContent = false, disableNormalization = false } = {}) { const TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, includeMarkedContent: includeMarkedContent === true, disableNormalization: disableNormalization === true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size(textContent) { return textContent.items.length; } }); } getTextContent(params = {}) { if (this._transport._htmlForXfa) { return this.getXfa().then((xfa) => XfaText.textContent(xfa)); } const readableStream = this.streamTextContent(params); return new Promise(function(resolve, reject) { function pump() { reader.read().then(function({ value, done }) { var _a2; if (done) { resolve(textContent); return; } (_a2 = textContent.lang) != null ? _a2 : textContent.lang = value.lang; Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); } const reader = readableStream.getReader(); const textContent = { items: [], styles: /* @__PURE__ */ Object.create(null), lang: null }; pump(); }); } getStructTree() { return this._transport.getStructTree(this._pageIndex); } _destroy() { this.destroyed = true; const waitOn = []; for (const intentState of this._intentStates.values()) { this._abortOperatorList({ intentState, reason: new Error("Page was destroyed."), force: true }); if (intentState.opListReadCapability) { continue; } for (const internalRenderTask of intentState.renderTasks) { waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } this.objs.clear(); __privateSet(this, _pendingCleanup, false); __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); return Promise.all(waitOn); } cleanup(resetStats = false) { __privateSet(this, _pendingCleanup, true); const success = __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); if (resetStats && success) { this._stats && (this._stats = new StatTimer()); } return success; } _startRenderPage(transparency, cacheKey) { var _a2, _b; const intentState = this._intentStates.get(cacheKey); if (!intentState) { return; } (_a2 = this._stats) == null ? void 0 : _a2.timeEnd("Page Request"); (_b = intentState.displayReadyCapability) == null ? void 0 : _b.resolve(transparency); } _renderPageChunk(operatorListChunk, intentState) { for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } intentState.operatorList.lastChunk = operatorListChunk.lastChunk; intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } if (operatorListChunk.lastChunk) { __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); } } _pumpOperatorList({ renderingIntent, cacheKey, annotationStorageSerializable, modifiedIds }) { const { map, transfer } = annotationStorageSerializable; const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { pageIndex: this._pageIndex, intent: renderingIntent, cacheKey, annotationStorage: map, modifiedIds }, transfer); const reader = readableStream.getReader(); const intentState = this._intentStates.get(cacheKey); intentState.streamReader = reader; const pump = () => { reader.read().then(({ value, done }) => { if (done) { intentState.streamReader = null; return; } if (this._transport.destroyed) { return; } this._renderPageChunk(value, intentState); pump(); }, (reason) => { intentState.streamReader = null; if (this._transport.destroyed) { return; } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { intentState.opListReadCapability.reject(reason); } else { throw reason; } }); }; pump(); } _abortOperatorList({ intentState, reason, force = false }) { if (!intentState.streamReader) { return; } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } if (!force) { if (intentState.renderTasks.size > 0) { return; } if (reason instanceof RenderingCancelledException) { let delay = RENDERING_CANCELLED_TIMEOUT; if (reason.extraDelay > 0 && reason.extraDelay < 1e3) { delay += reason.extraDelay; } intentState.streamReaderCancelTimeout = setTimeout(() => { intentState.streamReaderCancelTimeout = null; this._abortOperatorList({ intentState, reason, force: true }); }, delay); return; } } intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => { }); intentState.streamReader = null; if (this._transport.destroyed) { return; } for (const [curCacheKey, curIntentState] of this._intentStates) { if (curIntentState === intentState) { this._intentStates.delete(curCacheKey); break; } } this.cleanup(); } get stats() { return this._stats; } }; _delayedCleanupTimeout = new WeakMap(); _pendingCleanup = new WeakMap(); _tryCleanup = new WeakSet(); tryCleanup_fn = function(delayed = false) { __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); if (!__privateGet(this, _pendingCleanup) || this.destroyed) { return false; } if (delayed) { __privateSet(this, _delayedCleanupTimeout, setTimeout(() => { __privateSet(this, _delayedCleanupTimeout, null); __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); }, DELAYED_CLEANUP_TIMEOUT)); return false; } for (const { renderTasks, operatorList } of this._intentStates.values()) { if (renderTasks.size > 0 || !operatorList.lastChunk) { return false; } } this._intentStates.clear(); this.objs.clear(); __privateSet(this, _pendingCleanup, false); return true; }; _abortDelayedCleanup = new WeakSet(); abortDelayedCleanup_fn = function() { if (__privateGet(this, _delayedCleanupTimeout)) { clearTimeout(__privateGet(this, _delayedCleanupTimeout)); __privateSet(this, _delayedCleanupTimeout, null); } }; var _listeners, _deferred; var LoopbackPort = class { constructor() { __privateAdd(this, _listeners, /* @__PURE__ */ new Set()); __privateAdd(this, _deferred, Promise.resolve()); } postMessage(obj, transfer) { const event = { data: structuredClone(obj, transfer ? { transfer } : null) }; __privateGet(this, _deferred).then(() => { for (const listener of __privateGet(this, _listeners)) { listener.call(this, event); } }); } addEventListener(name, listener) { __privateGet(this, _listeners).add(listener); } removeEventListener(name, listener) { __privateGet(this, _listeners).delete(listener); } terminate() { __privateGet(this, _listeners).clear(); } }; _listeners = new WeakMap(); _deferred = new WeakMap(); var _fakeWorkerId, _isWorkerDisabled, _workerPorts, _resolve, resolve_fn, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get; var _PDFWorker = class { constructor({ name = null, port = null, verbosity: verbosity2 = getVerbosityLevel() } = {}) { __privateAdd(this, _resolve); var _a2; this.name = name; this.destroyed = false; this.verbosity = verbosity2; this._readyCapability = Promise.withResolvers(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { if ((_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.has(port)) { throw new Error("Cannot use more than one PDFWorker per port."); } (__privateGet(_PDFWorker, _workerPorts) || __privateSet(_PDFWorker, _workerPorts, /* @__PURE__ */ new WeakMap())).set(port, this); this._initializeFromPort(port); return; } this._initialize(); } get promise() { if (isNodeJS) { return Promise.all([NodePackages.promise, this._readyCapability.promise]); } return this._readyCapability.promise; } get port() { return this._port; } get messageHandler() { return this._messageHandler; } _initializeFromPort(port) { this._port = port; this._messageHandler = new MessageHandler("main", "worker", port); this._messageHandler.on("ready", function() { }); __privateMethod(this, _resolve, resolve_fn).call(this); } _initialize() { if (__privateGet(_PDFWorker, _isWorkerDisabled) || __privateGet(_PDFWorker, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { this._setupFakeWorker(); return; } let { workerSrc } = _PDFWorker; try { if (!_PDFWorker._isSameOrigin(window.location.href, workerSrc)) { workerSrc = _PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href); } const worker = new Worker(workerSrc, { type: "module" }); const messageHandler = new MessageHandler("main", "worker", worker); const terminateEarly = () => { ac.abort(); messageHandler.destroy(); worker.terminate(); if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); } else { this._setupFakeWorker(); } }; const ac = new AbortController(); worker.addEventListener("error", () => { if (!this._webWorker) { terminateEarly(); } }, { signal: ac.signal }); messageHandler.on("test", (data) => { ac.abort(); if (this.destroyed || !data) { terminateEarly(); return; } this._messageHandler = messageHandler; this._port = worker; this._webWorker = worker; __privateMethod(this, _resolve, resolve_fn).call(this); }); messageHandler.on("ready", (data) => { ac.abort(); if (this.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { this._setupFakeWorker(); } }); const sendTest = () => { const testObj = new Uint8Array(); messageHandler.send("test", testObj, [testObj.buffer]); }; sendTest(); return; } catch (e) { info("The worker has been disabled."); } this._setupFakeWorker(); } _setupFakeWorker() { if (!__privateGet(_PDFWorker, _isWorkerDisabled)) { warn("Setting up fake worker."); __privateSet(_PDFWorker, _isWorkerDisabled, true); } _PDFWorker._setupFakeWorkerGlobal.then((WorkerMessageHandler) => { if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); return; } const port = new LoopbackPort(); this._port = port; const id = `fake${__privateWrapper(_PDFWorker, _fakeWorkerId)._++}`; const workerHandler = new MessageHandler(id + "_worker", id, port); WorkerMessageHandler.setup(workerHandler, port); this._messageHandler = new MessageHandler(id, id + "_worker", port); __privateMethod(this, _resolve, resolve_fn).call(this); }).catch((reason) => { this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); }); } destroy() { var _a2; this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } (_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.delete(this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } static fromPort(params) { var _a2; if (!(params == null ? void 0 : params.port)) { throw new Error("PDFWorker.fromPort - invalid method signature."); } const cachedPort = (_a2 = __privateGet(this, _workerPorts)) == null ? void 0 : _a2.get(params.port); if (cachedPort) { if (cachedPort._pendingDestroy) { throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls."); } return cachedPort; } return new _PDFWorker(params); } static get workerSrc() { if (GlobalWorkerOptions.workerSrc) { return GlobalWorkerOptions.workerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } static get _setupFakeWorkerGlobal() { const loader = async () => { if (__privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { return __privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get); } const worker = await import( /*webpackIgnore: true*/ this.workerSrc ); return worker.WorkerMessageHandler; }; return shadow(this, "_setupFakeWorkerGlobal", loader()); } }; var PDFWorker = _PDFWorker; _fakeWorkerId = new WeakMap(); _isWorkerDisabled = new WeakMap(); _workerPorts = new WeakMap(); _resolve = new WeakSet(); resolve_fn = function() { this._readyCapability.resolve(); this._messageHandler.send("configure", { verbosity: this.verbosity }); }; _mainThreadWorkerMessageHandler = new WeakSet(); mainThreadWorkerMessageHandler_get = function() { var _a2; try { return ((_a2 = globalThis.pdfjsWorker) == null ? void 0 : _a2.WorkerMessageHandler) || null; } catch (e) { return null; } }; __privateAdd(PDFWorker, _mainThreadWorkerMessageHandler); __privateAdd(PDFWorker, _fakeWorkerId, 0); __privateAdd(PDFWorker, _isWorkerDisabled, false); __privateAdd(PDFWorker, _workerPorts, void 0); (() => { if (isNodeJS) { __privateSet(_PDFWorker, _isWorkerDisabled, true); GlobalWorkerOptions.workerSrc || (GlobalWorkerOptions.workerSrc = "./pdf.worker.mjs"); } _PDFWorker._isSameOrigin = (baseUrl, otherUrl) => { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; }; _PDFWorker._createCDNWrapper = (url) => { const wrapper = `await import("${url}");`; return URL.createObjectURL(new Blob([wrapper], { type: "text/javascript" })); }; })(); var _methodPromises, _pageCache, _pagePromises, _pageRefCache, _passwordCapability, _cacheSimpleMethod, cacheSimpleMethod_fn; var WorkerTransport = class { constructor(messageHandler, loadingTask, networkStream, params, factory) { __privateAdd(this, _cacheSimpleMethod); __privateAdd(this, _methodPromises, /* @__PURE__ */ new Map()); __privateAdd(this, _pageCache, /* @__PURE__ */ new Map()); __privateAdd(this, _pagePromises, /* @__PURE__ */ new Map()); __privateAdd(this, _pageRefCache, /* @__PURE__ */ new Map()); __privateAdd(this, _passwordCapability, null); this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new FontLoader({ ownerDocument: params.ownerDocument, styleElement: params.styleElement }); this.loadingParams = params.loadingParams; this._params = params; this.canvasFactory = factory.canvasFactory; this.filterFactory = factory.filterFactory; this.cMapReaderFactory = factory.cMapReaderFactory; this.standardFontDataFactory = factory.standardFontDataFactory; this.destroyed = false; this.destroyCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.downloadInfoCapability = Promise.withResolvers(); this.setupMessageHandler(); } get annotationStorage() { return shadow(this, "annotationStorage", new AnnotationStorage()); } getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) { let renderingIntent = RenderingIntentFlag.DISPLAY; let annotationStorageSerializable = SerializableEmpty; switch (intent) { case "any": renderingIntent = RenderingIntentFlag.ANY; break; case "display": break; case "print": renderingIntent = RenderingIntentFlag.PRINT; break; default: warn(`getRenderingIntent - invalid intent: ${intent}`); } const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; switch (annotationMode) { case AnnotationMode.DISABLE: renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE; break; case AnnotationMode.ENABLE: break; case AnnotationMode.ENABLE_FORMS: renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS; break; case AnnotationMode.ENABLE_STORAGE: renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE; annotationStorageSerializable = annotationStorage.serializable; break; default: warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); } if (isEditing) { renderingIntent += RenderingIntentFlag.IS_EDITING; } if (isOpList) { renderingIntent += RenderingIntentFlag.OPLIST; } const { ids: modifiedIds, hash: modifiedIdsHash } = annotationStorage.modifiedIds; const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash]; return { renderingIntent, cacheKey: cacheKeyBuf.join("_"), annotationStorageSerializable, modifiedIds }; } destroy() { var _a2; if (this.destroyCapability) { return this.destroyCapability.promise; } this.destroyed = true; this.destroyCapability = Promise.withResolvers(); (_a2 = __privateGet(this, _passwordCapability)) == null ? void 0 : _a2.reject(new Error("Worker was destroyed during onPassword callback")); const waitOn = []; for (const page of __privateGet(this, _pageCache).values()) { waitOn.push(page._destroy()); } __privateGet(this, _pageCache).clear(); __privateGet(this, _pagePromises).clear(); __privateGet(this, _pageRefCache).clear(); if (this.hasOwnProperty("annotationStorage")) { this.annotationStorage.resetModified(); } const terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); Promise.all(waitOn).then(() => { var _a3; this.commonObjs.clear(); this.fontLoader.clear(); __privateGet(this, _methodPromises).clear(); this.filterFactory.destroy(); TextLayer.cleanup(); (_a3 = this._networkStream) == null ? void 0 : _a3.cancelAllRequests(new AbortException("Worker was terminated.")); if (this.messageHandler) { this.messageHandler.destroy(); this.messageHandler = null; } this.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } setupMessageHandler() { const { messageHandler, loadingTask } = this; messageHandler.on("GetReader", (data, sink) => { assert(this._networkStream, "GetReader - no `IPDFStream` instance available."); this._fullReader = this._networkStream.getFullReader(); this._fullReader.onProgress = (evt) => { this._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = () => { this._fullReader.read().then(function({ value, done }) { if (done) { sink.close(); return; } assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch((reason) => { sink.error(reason); }); }; sink.onCancel = (reason) => { this._fullReader.cancel(reason); sink.ready.catch((readyReason) => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", (data) => { const headersCapability = Promise.withResolvers(); const fullReader = this._fullReader; fullReader.headersReady.then(() => { var _a2; if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (this._lastProgress) { (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, this._lastProgress); } fullReader.onProgress = (evt) => { var _a3; (_a3 = loadingTask.onProgress) == null ? void 0 : _a3.call(loadingTask, { loaded: evt.loaded, total: evt.total }); }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }); messageHandler.on("GetRangeReader", (data, sink) => { assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); if (!rangeReader) { sink.close(); return; } sink.onPull = () => { rangeReader.read().then(function({ value, done }) { if (done) { sink.close(); return; } assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch((reason) => { sink.error(reason); }); }; sink.onCancel = (reason) => { rangeReader.cancel(reason); sink.ready.catch((readyReason) => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("GetDoc", ({ pdfInfo }) => { this._numPages = pdfInfo.numPages; this._htmlForXfa = pdfInfo.htmlForXfa; delete pdfInfo.htmlForXfa; loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); messageHandler.on("DocException", function(ex) { let reason; switch (ex.name) { case "PasswordException": reason = new PasswordException(ex.message, ex.code); break; case "InvalidPDFException": reason = new InvalidPDFException(ex.message); break; case "MissingPDFException": reason = new MissingPDFException(ex.message); break; case "UnexpectedResponseException": reason = new UnexpectedResponseException(ex.message, ex.status); break; case "UnknownErrorException": reason = new UnknownErrorException(ex.message, ex.details); break; default: unreachable("DocException - expected a valid Error."); } loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", (exception) => { __privateSet(this, _passwordCapability, Promise.withResolvers()); if (loadingTask.onPassword) { const updatePassword = (password) => { if (password instanceof Error) { __privateGet(this, _passwordCapability).reject(password); } else { __privateGet(this, _passwordCapability).resolve({ password }); } }; try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { __privateGet(this, _passwordCapability).reject(ex); } } else { __privateGet(this, _passwordCapability).reject(new PasswordException(exception.message, exception.code)); } return __privateGet(this, _passwordCapability).promise; }); messageHandler.on("DataLoaded", (data) => { var _a2; (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { loaded: data.length, total: data.length }); this.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", (data) => { if (this.destroyed) { return; } const page = __privateGet(this, _pageCache).get(data.pageIndex); page._startRenderPage(data.transparency, data.cacheKey); }); messageHandler.on("commonobj", ([id, type, exportedData]) => { var _a2; if (this.destroyed) { return null; } if (this.commonObjs.has(id)) { return null; } switch (type) { case "Font": const { disableFontFace, fontExtraProperties, pdfBug } = this._params; if ("error" in exportedData) { const exportedError = exportedData.error; warn(`Error during font loading: ${exportedError}`); this.commonObjs.resolve(id, exportedError); break; } const inspectFont = pdfBug && ((_a2 = globalThis.FontInspector) == null ? void 0 : _a2.enabled) ? (font2, url) => globalThis.FontInspector.fontAdded(font2, url) : null; const font = new FontFaceObject(exportedData, { disableFontFace, inspectFont }); this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", { id })).finally(() => { if (!fontExtraProperties && font.data) { font.data = null; } this.commonObjs.resolve(id, font); }); break; case "CopyLocalImage": const { imageRef } = exportedData; assert(imageRef, "The imageRef must be defined."); for (const pageProxy of __privateGet(this, _pageCache).values()) { for (const [, data] of pageProxy.objs) { if ((data == null ? void 0 : data.ref) !== imageRef) { continue; } if (!data.dataLen) { return null; } this.commonObjs.resolve(id, structuredClone(data)); return data.dataLen; } } break; case "FontPath": case "Image": case "Pattern": this.commonObjs.resolve(id, exportedData); break; default: throw new Error(`Got unknown common object type ${type}`); } return null; }); messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { var _a2; if (this.destroyed) { return; } const pageProxy = __privateGet(this, _pageCache).get(pageIndex); if (pageProxy.objs.has(id)) { return; } if (pageProxy._intentStates.size === 0) { (_a2 = imageData == null ? void 0 : imageData.bitmap) == null ? void 0 : _a2.close(); return; } switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); if ((imageData == null ? void 0 : imageData.dataLen) > MAX_IMAGE_SIZE_TO_CACHE) { pageProxy._maybeCleanupAfterRender = true; } break; case "Pattern": pageProxy.objs.resolve(id, imageData); break; default: throw new Error(`Got unknown object type ${type}`); } }); messageHandler.on("DocProgress", (data) => { var _a2; if (this.destroyed) { return; } (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { loaded: data.loaded, total: data.total }); }); messageHandler.on("FetchBuiltInCMap", (data) => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.cMapReaderFactory) { return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.cMapReaderFactory.fetch(data); }); messageHandler.on("FetchStandardFontData", (data) => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.standardFontDataFactory) { return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.standardFontDataFactory.fetch(data); }); } getData() { return this.messageHandler.sendWithPromise("GetData", null); } saveDocument() { var _a2, _b; if (this.annotationStorage.size <= 0) { warn("saveDocument called while `annotationStorage` is empty, please use the getData-method instead."); } const { map, transfer } = this.annotationStorage.serializable; return this.messageHandler.sendWithPromise("SaveDocument", { isPureXfa: !!this._htmlForXfa, numPages: this._numPages, annotationStorage: map, filename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null }, transfer).finally(() => { this.annotationStorage.resetModified(); }); } getPage(pageNumber) { if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { return Promise.reject(new Error("Invalid page request.")); } const pageIndex = pageNumber - 1, cachedPromise = __privateGet(this, _pagePromises).get(pageIndex); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex }).then((pageInfo) => { if (this.destroyed) { throw new Error("Transport destroyed"); } if (pageInfo.refStr) { __privateGet(this, _pageRefCache).set(pageInfo.refStr, pageNumber); } const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); __privateGet(this, _pageCache).set(pageIndex, page); return page; }); __privateGet(this, _pagePromises).set(pageIndex, promise); return promise; } getPageIndex(ref) { if (!isRefProxy(ref)) { return Promise.reject(new Error("Invalid pageIndex request.")); } return this.messageHandler.sendWithPromise("GetPageIndex", { num: ref.num, gen: ref.gen }); } getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex, intent }); } getFieldObjects() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetFieldObjects"); } hasJSActions() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "HasJSActions"); } getCalculationOrderIds() { return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); } getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } return this.messageHandler.sendWithPromise("GetDestination", { id }); } getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } getDocJSActions() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetDocJSActions"); } getPageJSActions(pageIndex) { return this.messageHandler.sendWithPromise("GetPageJSActions", { pageIndex }); } getStructTree(pageIndex) { return this.messageHandler.sendWithPromise("GetStructTree", { pageIndex }); } getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } getOptionalContentConfig(renderingIntent) { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetOptionalContentConfig").then((data) => new OptionalContentConfig(data, renderingIntent)); } getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } getMetadata() { const name = "GetMetadata", cachedPromise = __privateGet(this, _methodPromises).get(name); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise(name, null).then((results) => { var _a2, _b, _c, _d; return { info: results[0], metadata: results[1] ? new Metadata(results[1]) : null, contentDispositionFilename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null, contentLength: (_d = (_c = this._fullReader) == null ? void 0 : _c.contentLength) != null ? _d : null }; }); __privateGet(this, _methodPromises).set(name, promise); return promise; } getMarkInfo() { return this.messageHandler.sendWithPromise("GetMarkInfo", null); } async startCleanup(keepLoadedFonts = false) { if (this.destroyed) { return; } await this.messageHandler.sendWithPromise("Cleanup", null); for (const page of __privateGet(this, _pageCache).values()) { const cleanupSuccessful = page.cleanup(); if (!cleanupSuccessful) { throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); } } this.commonObjs.clear(); if (!keepLoadedFonts) { this.fontLoader.clear(); } __privateGet(this, _methodPromises).clear(); this.filterFactory.destroy(true); TextLayer.cleanup(); } cachedPageNumber(ref) { var _a2; if (!isRefProxy(ref)) { return null; } const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`; return (_a2 = __privateGet(this, _pageRefCache).get(refStr)) != null ? _a2 : null; } }; _methodPromises = new WeakMap(); _pageCache = new WeakMap(); _pagePromises = new WeakMap(); _pageRefCache = new WeakMap(); _passwordCapability = new WeakMap(); _cacheSimpleMethod = new WeakSet(); cacheSimpleMethod_fn = function(name, data = null) { const cachedPromise = __privateGet(this, _methodPromises).get(name); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise(name, data); __privateGet(this, _methodPromises).set(name, promise); return promise; }; var INITIAL_DATA = Symbol("INITIAL_DATA"); var _objs, _ensureObj, ensureObj_fn; var PDFObjects = class { constructor() { __privateAdd(this, _ensureObj); __privateAdd(this, _objs, /* @__PURE__ */ Object.create(null)); } get(objId, callback = null) { if (callback) { const obj2 = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); obj2.promise.then(() => callback(obj2.data)); return null; } const obj = __privateGet(this, _objs)[objId]; if (!obj || obj.data === INITIAL_DATA) { throw new Error(`Requesting object that isn't resolved yet ${objId}.`); } return obj.data; } has(objId) { const obj = __privateGet(this, _objs)[objId]; return !!obj && obj.data !== INITIAL_DATA; } resolve(objId, data = null) { const obj = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); obj.data = data; obj.resolve(); } clear() { var _a2; for (const objId in __privateGet(this, _objs)) { const { data } = __privateGet(this, _objs)[objId]; (_a2 = data == null ? void 0 : data.bitmap) == null ? void 0 : _a2.close(); } __privateSet(this, _objs, /* @__PURE__ */ Object.create(null)); } *[Symbol.iterator]() { for (const objId in __privateGet(this, _objs)) { const { data } = __privateGet(this, _objs)[objId]; if (data === INITIAL_DATA) { continue; } yield [objId, data]; } } }; _objs = new WeakMap(); _ensureObj = new WeakSet(); ensureObj_fn = function(objId) { var _a2; return (_a2 = __privateGet(this, _objs))[objId] || (_a2[objId] = { ...Promise.withResolvers(), data: INITIAL_DATA }); }; var _internalRenderTask; var RenderTask = class { constructor(internalRenderTask) { __privateAdd(this, _internalRenderTask, null); __privateSet(this, _internalRenderTask, internalRenderTask); this.onContinue = null; } get promise() { return __privateGet(this, _internalRenderTask).capability.promise; } cancel(extraDelay = 0) { __privateGet(this, _internalRenderTask).cancel(null, extraDelay); } get separateAnnots() { const { separateAnnots } = __privateGet(this, _internalRenderTask).operatorList; if (!separateAnnots) { return false; } const { annotationCanvasMap } = __privateGet(this, _internalRenderTask); return separateAnnots.form || separateAnnots.canvas && (annotationCanvasMap == null ? void 0 : annotationCanvasMap.size) > 0; } }; _internalRenderTask = new WeakMap(); var _rAF, _canvasInUse; var _InternalRenderTask = class { constructor({ callback, params, objs, commonObjs, annotationCanvasMap, operatorList, pageIndex, canvasFactory, filterFactory, useRequestAnimationFrame = false, pdfBug = false, pageColors = null }) { __privateAdd(this, _rAF, null); this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.annotationCanvasMap = annotationCanvasMap; this.operatorListIdx = null; this.operatorList = operatorList; this._pageIndex = pageIndex; this.canvasFactory = canvasFactory; this.filterFactory = filterFactory; this._pdfBug = pdfBug; this.pageColors = pageColors; this.running = false; this.graphicsReadyCallback = null; this.graphicsReady = false; this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; this.cancelled = false; this.capability = Promise.withResolvers(); this.task = new RenderTask(this); this._cancelBound = this.cancel.bind(this); this._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; } get completed() { return this.capability.promise.catch(function() { }); } initializeGraphics({ transparency = false, optionalContentConfig }) { var _a2, _b; if (this.cancelled) { return; } if (this._canvas) { if (__privateGet(_InternalRenderTask, _canvasInUse).has(this._canvas)) { throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed."); } __privateGet(_InternalRenderTask, _canvasInUse).add(this._canvas); } if (this._pdfBug && ((_a2 = globalThis.StepperManager) == null ? void 0 : _a2.enabled)) { this.stepper = globalThis.StepperManager.create(this._pageIndex); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } const { canvasContext, viewport, transform, background } = this.params; this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { optionalContentConfig }, this.annotationCanvasMap, this.pageColors); this.gfx.beginDrawing({ transform, viewport, transparency, background }); this.operatorListIdx = 0; this.graphicsReady = true; (_b = this.graphicsReadyCallback) == null ? void 0 : _b.call(this); } cancel(error = null, extraDelay = 0) { var _a2; this.running = false; this.cancelled = true; (_a2 = this.gfx) == null ? void 0 : _a2.endDrawing(); if (__privateGet(this, _rAF)) { window.cancelAnimationFrame(__privateGet(this, _rAF)); __privateSet(this, _rAF, null); } __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); } operatorListChanged() { var _a2; if (!this.graphicsReady) { this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound); return; } (_a2 = this.stepper) == null ? void 0 : _a2.updateOperatorList(this.operatorList); if (this.running) { return; } this._continue(); } _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } _scheduleNext() { if (this._useRequestAnimationFrame) { __privateSet(this, _rAF, window.requestAnimationFrame(() => { __privateSet(this, _rAF, null); this._nextBound().catch(this._cancelBound); })); } else { Promise.resolve().then(this._nextBound).catch(this._cancelBound); } } async _next() { if (this.cancelled) { return; } this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); if (this.operatorListIdx === this.operatorList.argsArray.length) { this.running = false; if (this.operatorList.lastChunk) { this.gfx.endDrawing(); __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); this.callback(); } } } }; var InternalRenderTask = _InternalRenderTask; _rAF = new WeakMap(); _canvasInUse = new WeakMap(); __privateAdd(InternalRenderTask, _canvasInUse, /* @__PURE__ */ new WeakSet()); var version2 = "4.6.82"; var build = "9b541910f"; function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } function scaleAndClamp(x) { return Math.max(0, Math.min(255, 255 * x)); } var ColorConverters = class { static CMYK_G([c, y, m, k]) { return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } static G_CMYK([g]) { return ["CMYK", 0, 0, 0, 1 - g]; } static G_RGB([g]) { return ["RGB", g, g, g]; } static G_rgb([g]) { g = scaleAndClamp(g); return [g, g, g]; } static G_HTML([g]) { const G = makeColorComp(g); return `#${G}${G}${G}`; } static RGB_G([r, g, b]) { return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } static RGB_rgb(color) { return color.map(scaleAndClamp); } static RGB_HTML(color) { return `#${color.map(makeColorComp).join("")}`; } static T_HTML() { return "#00000000"; } static T_rgb() { return [null]; } static CMYK_RGB([c, y, m, k]) { return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } static CMYK_rgb([c, y, m, k]) { return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; } static CMYK_HTML(components) { const rgb = this.CMYK_RGB(components).slice(1); return this.RGB_HTML(rgb); } static RGB_CMYK([r, g, b]) { const c = 1 - r; const m = 1 - g; const y = 1 - b; const k = Math.min(c, m, y); return ["CMYK", c, m, y, k]; } }; var XfaLayer = class { static setupStorage(html, id, element2, storage, intent) { const storedData = storage.getValue(id, { value: null }); switch (element2.name) { case "textarea": if (storedData.value !== null) { html.textContent = storedData.value; } if (intent === "print") { break; } html.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); }); break; case "input": if (element2.attributes.type === "radio" || element2.attributes.type === "checkbox") { if (storedData.value === element2.attributes.xfaOn) { html.setAttribute("checked", true); } else if (storedData.value === element2.attributes.xfaOff) { html.removeAttribute("checked"); } if (intent === "print") { break; } html.addEventListener("change", (event) => { storage.setValue(id, { value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") }); }); } else { if (storedData.value !== null) { html.setAttribute("value", storedData.value); } if (intent === "print") { break; } html.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); }); } break; case "select": if (storedData.value !== null) { html.setAttribute("value", storedData.value); for (const option2 of element2.children) { if (option2.attributes.value === storedData.value) { option2.attributes.selected = true; } else if (option2.attributes.hasOwnProperty("selected")) { delete option2.attributes.selected; } } } html.addEventListener("input", (event) => { const options = event.target.options; const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; storage.setValue(id, { value }); }); break; } } static setAttributes({ html, element: element2, storage = null, intent, linkService }) { const { attributes } = element2; const isHTMLAnchorElement = html instanceof HTMLAnchorElement; if (attributes.type === "radio") { attributes.name = `${attributes.name}-${intent}`; } for (const [key, value] of Object.entries(attributes)) { if (value === null || value === void 0) { continue; } switch (key) { case "class": if (value.length) { html.setAttribute(key, value.join(" ")); } break; case "dataId": break; case "id": html.setAttribute("data-element-id", value); break; case "style": Object.assign(html.style, value); break; case "textContent": html.textContent = value; break; default: if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { html.setAttribute(key, value); } } } if (isHTMLAnchorElement) { linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); } if (storage && attributes.dataId) { this.setupStorage(html, attributes.dataId, element2, storage); } } static render(parameters) { var _a2, _b; const storage = parameters.annotationStorage; const linkService = parameters.linkService; const root = parameters.xfaHtml; const intent = parameters.intent || "display"; const rootHtml = document.createElement(root.name); if (root.attributes) { this.setAttributes({ html: rootHtml, element: root, intent, linkService }); } const isNotForRichText = intent !== "richText"; const rootDiv = parameters.div; rootDiv.append(rootHtml); if (parameters.viewport) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; rootDiv.style.transform = transform; } if (isNotForRichText) { rootDiv.setAttribute("class", "xfaLayer xfaFont"); } const textDivs = []; if (root.children.length === 0) { if (root.value) { const node = document.createTextNode(root.value); rootHtml.append(node); if (isNotForRichText && XfaText.shouldBuildText(root.name)) { textDivs.push(node); } } return { textDivs }; } const stack = [[root, -1, rootHtml]]; while (stack.length > 0) { const [parent, i, html] = stack.at(-1); if (i + 1 === parent.children.length) { stack.pop(); continue; } const child = parent.children[++stack.at(-1)[1]]; if (child === null) { continue; } const { name } = child; if (name === "#text") { const node = document.createTextNode(child.value); textDivs.push(node); html.append(node); continue; } const childHtml = ((_a2 = child == null ? void 0 : child.attributes) == null ? void 0 : _a2.xmlns) ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); html.append(childHtml); if (child.attributes) { this.setAttributes({ html: childHtml, element: child, storage, intent, linkService }); } if (((_b = child.children) == null ? void 0 : _b.length) > 0) { stack.push([child, -1, childHtml]); } else if (child.value) { const node = document.createTextNode(child.value); if (isNotForRichText && XfaText.shouldBuildText(name)) { textDivs.push(node); } childHtml.append(node); } } for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { el.setAttribute("readOnly", true); } return { textDivs }; } static update(parameters) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; parameters.div.style.transform = transform; parameters.div.hidden = false; } }; var DEFAULT_TAB_INDEX = 1e3; var annotation_layer_DEFAULT_FONT_SIZE = 9; var GetElementsByNameSet = /* @__PURE__ */ new WeakSet(); function getRectDims(rect) { return { width: rect[2] - rect[0], height: rect[3] - rect[1] }; } var AnnotationElementFactory = class { static create(parameters) { const subtype = parameters.data.annotationType; switch (subtype) { case AnnotationType.LINK: return new LinkAnnotationElement(parameters); case AnnotationType.TEXT: return new TextAnnotationElement(parameters); case AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } return new PushButtonWidgetAnnotationElement(parameters); case "Ch": return new ChoiceWidgetAnnotationElement(parameters); case "Sig": return new SignatureWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); case AnnotationType.POPUP: return new PopupAnnotationElement(parameters); case AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); case AnnotationType.LINE: return new LineAnnotationElement(parameters); case AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); case AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); case AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); case AnnotationType.CARET: return new CaretAnnotationElement(parameters); case AnnotationType.INK: return new InkAnnotationElement(parameters); case AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); case AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); case AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); case AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); case AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); case AnnotationType.STAMP: return new StampAnnotationElement(parameters); case AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); } } }; var _updates, _hasBorder, _popupElement, _setRectEdited, setRectEdited_fn; var _AnnotationElement = class { constructor(parameters, { isRenderable = false, ignoreBorder = false, createQuadrilaterals = false } = {}) { __privateAdd(this, _setRectEdited); __privateAdd(this, _updates, null); __privateAdd(this, _hasBorder, false); __privateAdd(this, _popupElement, null); this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderForms = parameters.renderForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; this.enableScripting = parameters.enableScripting; this.hasJSActions = parameters.hasJSActions; this._fieldObjects = parameters.fieldObjects; this.parent = parameters.parent; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } if (createQuadrilaterals) { this._createQuadrilaterals(); } } static _hasPopupData({ titleObj, contentsObj, richText }) { return !!((titleObj == null ? void 0 : titleObj.str) || (contentsObj == null ? void 0 : contentsObj.str) || (richText == null ? void 0 : richText.str)); } get _isEditable() { return this.data.isEditable; } get hasPopupData() { return _AnnotationElement._hasPopupData(this.data); } updateEdited(params) { var _a2; if (!this.container) { return; } __privateGet(this, _updates) || __privateSet(this, _updates, { rect: this.data.rect.slice(0) }); const { rect } = params; if (rect) { __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, rect); } (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.updateEdited(params); } resetEdited() { var _a2; if (!__privateGet(this, _updates)) { return; } __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, __privateGet(this, _updates).rect); (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.resetEdited(); __privateSet(this, _updates, null); } _createContainer(ignoreBorder) { const { data, parent: { page, viewport } } = this; const container = document.createElement("section"); container.setAttribute("data-annotation-id", data.id); if (!(this instanceof WidgetAnnotationElement)) { container.tabIndex = DEFAULT_TAB_INDEX; } const { style } = container; style.zIndex = this.parent.zIndex++; if (data.popupRef) { container.setAttribute("aria-haspopup", "dialog"); } if (data.alternativeText) { container.title = data.alternativeText; } if (data.noRotate) { container.classList.add("norotate"); } if (!data.rect || this instanceof PopupAnnotationElement) { const { rotation: rotation2 } = data; if (!data.hasOwnCanvas && rotation2 !== 0) { this.setRotation(rotation2, container); } return container; } const { width, height } = getRectDims(data.rect); if (!ignoreBorder && data.borderStyle.width > 0) { style.borderWidth = `${data.borderStyle.width}px`; const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; style.borderRadius = radius; } else if (this instanceof RadioButtonWidgetAnnotationElement) { const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; style.borderRadius = radius; } switch (data.borderStyle.style) { case AnnotationBorderStyleType.SOLID: style.borderStyle = "solid"; break; case AnnotationBorderStyleType.DASHED: style.borderStyle = "dashed"; break; case AnnotationBorderStyleType.BEVELED: warn("Unimplemented border style: beveled"); break; case AnnotationBorderStyleType.INSET: warn("Unimplemented border style: inset"); break; case AnnotationBorderStyleType.UNDERLINE: style.borderBottomStyle = "solid"; break; default: break; } const borderColor = data.borderColor || null; if (borderColor) { __privateSet(this, _hasBorder, true); style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); } else { style.borderWidth = 0; } } const rect = 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]]); const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims; style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; const { rotation } = data; if (data.hasOwnCanvas || rotation === 0) { style.width = `${100 * width / pageWidth}%`; style.height = `${100 * height / pageHeight}%`; } else { this.setRotation(rotation, container); } return container; } setRotation(angle, container = this.container) { if (!this.data.rect) { return; } const { pageWidth, pageHeight } = this.parent.viewport.rawDims; const { width, height } = getRectDims(this.data.rect); let elementWidth, elementHeight; if (angle % 180 === 0) { elementWidth = 100 * width / pageWidth; elementHeight = 100 * height / pageHeight; } else { elementWidth = 100 * height / pageWidth; elementHeight = 100 * width / pageHeight; } container.style.width = `${elementWidth}%`; container.style.height = `${elementHeight}%`; container.setAttribute("data-main-rotation", (360 - angle) % 360); } get _commonActions() { const setColor = (jsName, styleName, event) => { const color = event.detail[jsName]; const colorType = color[0]; const colorArray = color.slice(1); event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); this.annotationStorage.setValue(this.data.id, { [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) }); }; return shadow(this, "_commonActions", { display: (event) => { const { display } = event.detail; const hidden = display % 2 === 1; this.container.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { noView: hidden, noPrint: display === 1 || display === 2 }); }, print: (event) => { this.annotationStorage.setValue(this.data.id, { noPrint: !event.detail.print }); }, hidden: (event) => { const { hidden } = event.detail; this.container.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { noPrint: hidden, noView: hidden }); }, focus: (event) => { setTimeout(() => event.target.focus({ preventScroll: false }), 0); }, userName: (event) => { event.target.title = event.detail.userName; }, readonly: (event) => { event.target.disabled = event.detail.readonly; }, required: (event) => { this._setRequired(event.target, event.detail.required); }, bgColor: (event) => { setColor("bgColor", "backgroundColor", event); }, fillColor: (event) => { setColor("fillColor", "backgroundColor", event); }, fgColor: (event) => { setColor("fgColor", "color", event); }, textColor: (event) => { setColor("textColor", "color", event); }, borderColor: (event) => { setColor("borderColor", "borderColor", event); }, strokeColor: (event) => { setColor("strokeColor", "borderColor", event); }, rotation: (event) => { const angle = event.detail.rotation; this.setRotation(angle); this.annotationStorage.setValue(this.data.id, { rotation: angle }); } }); } _dispatchEventFromSandbox(actions, jsEvent) { const commonActions = this._commonActions; for (const name of Object.keys(jsEvent.detail)) { const action = actions[name] || commonActions[name]; action == null ? void 0 : action(jsEvent); } } _setDefaultPropertiesFromJS(element2) { if (!this.enableScripting) { return; } const storedData = this.annotationStorage.getRawValue(this.data.id); if (!storedData) { return; } const commonActions = this._commonActions; for (const [actionName, detail] of Object.entries(storedData)) { const action = commonActions[actionName]; if (action) { const eventProxy = { detail: { [actionName]: detail }, target: element2 }; action(eventProxy); delete storedData[actionName]; } } } _createQuadrilaterals() { if (!this.container) { return; } const { quadPoints } = this.data; if (!quadPoints) { return; } const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map((x) => Math.fround(x)); if (quadPoints.length === 8) { const [trX, trY, blX, blY] = quadPoints.subarray(2, 6); if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { return; } } const { style } = this.container; let svgBuffer; if (__privateGet(this, _hasBorder)) { const { borderColor, borderWidth } = style; style.borderWidth = 0; svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; this.container.classList.add("hasBorder"); } const width = rectTrX - rectBlX; const height = rectTrY - rectBlY; const { svgFactory } = this; const svg = svgFactory.createElement("svg"); svg.classList.add("quadrilateralsContainer"); svg.setAttribute("width", 0); svg.setAttribute("height", 0); const defs = svgFactory.createElement("defs"); svg.append(defs); const clipPath = svgFactory.createElement("clipPath"); const id = `clippath_${this.data.id}`; clipPath.setAttribute("id", id); clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); defs.append(clipPath); for (let i = 2, ii = quadPoints.length; i < ii; i += 8) { const trX = quadPoints[i]; const trY = quadPoints[i + 1]; const blX = quadPoints[i + 2]; const blY = quadPoints[i + 3]; const rect = svgFactory.createElement("rect"); const x = (blX - rectBlX) / width; const y = (rectTrY - trY) / height; const rectWidth = (trX - blX) / width; const rectHeight = (trY - blY) / height; rect.setAttribute("x", x); rect.setAttribute("y", y); rect.setAttribute("width", rectWidth); rect.setAttribute("height", rectHeight); clipPath.append(rect); svgBuffer == null ? void 0 : svgBuffer.push(``); } if (__privateGet(this, _hasBorder)) { svgBuffer.push(`')`); style.backgroundImage = svgBuffer.join(""); } this.container.append(svg); this.container.style.clipPath = `url(#${id})`; } _createPopup() { const { container, data } = this; container.setAttribute("aria-haspopup", "dialog"); const popup = __privateSet(this, _popupElement, new PopupAnnotationElement({ data: { color: data.color, titleObj: data.titleObj, modificationDate: data.modificationDate, contentsObj: data.contentsObj, richText: data.richText, parentRect: data.rect, borderStyle: 0, id: `popup_${data.id}`, rotation: data.rotation }, parent: this.parent, elements: [this] })); this.parent.div.append(popup.render()); } render() { unreachable("Abstract method `AnnotationElement.render` called"); } _getElementsByName(name, skipId = null) { const fields = []; if (this._fieldObjects) { const fieldObj = this._fieldObjects[name]; if (fieldObj) { for (const { page, id, exportValues } of fieldObj) { if (page === -1) { continue; } if (id === skipId) { continue; } const exportValue = typeof exportValues === "string" ? exportValues : null; const domElement = document.querySelector(`[data-element-id="${id}"]`); if (domElement && !GetElementsByNameSet.has(domElement)) { warn(`_getElementsByName - element not allowed: ${id}`); continue; } fields.push({ id, exportValue, domElement }); } } return fields; } for (const domElement of document.getElementsByName(name)) { const { exportValue } = domElement; const id = domElement.getAttribute("data-element-id"); if (id === skipId) { continue; } if (!GetElementsByNameSet.has(domElement)) { continue; } fields.push({ id, exportValue, domElement }); } return fields; } show() { var _a2; if (this.container) { this.container.hidden = false; } (_a2 = this.popup) == null ? void 0 : _a2.maybeShow(); } hide() { var _a2; if (this.container) { this.container.hidden = true; } (_a2 = this.popup) == null ? void 0 : _a2.forceHide(); } getElementsToTriggerPopup() { return this.container; } addHighlightArea() { const triggers = this.getElementsToTriggerPopup(); if (Array.isArray(triggers)) { for (const element2 of triggers) { element2.classList.add("highlightArea"); } } else { triggers.classList.add("highlightArea"); } } _editOnDoubleClick() { if (!this._isEditable) { return; } const { annotationEditorType: mode, data: { id: editId } } = this; this.container.addEventListener("dblclick", () => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("switchannotationeditormode", { source: this, mode, editId }); }); } }; var AnnotationElement = _AnnotationElement; _updates = new WeakMap(); _hasBorder = new WeakMap(); _popupElement = new WeakMap(); _setRectEdited = new WeakSet(); setRectEdited_fn = function(rect) { const { container: { style }, data: { rect: currentRect, rotation }, parent: { viewport: { rawDims: { pageWidth, pageHeight, pageX, pageY } } } } = this; currentRect == null ? void 0 : currentRect.splice(0, 4, ...rect); const { width, height } = getRectDims(rect); style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`; if (rotation === 0) { style.width = `${100 * width / pageWidth}%`; style.height = `${100 * height / pageHeight}%`; } else { this.setRotation(rotation); } }; var _setInternalLink, setInternalLink_fn, _bindAttachment, bindAttachment_fn, _bindSetOCGState, bindSetOCGState_fn; var LinkAnnotationElement = class extends AnnotationElement { constructor(parameters, options = null) { super(parameters, { isRenderable: true, ignoreBorder: !!(options == null ? void 0 : options.ignoreBorder), createQuadrilaterals: true }); __privateAdd(this, _setInternalLink); __privateAdd(this, _bindAttachment); __privateAdd(this, _bindSetOCGState); this.isTooltipOnly = parameters.data.isTooltipOnly; } render() { const { data, linkService } = this; const link = document.createElement("a"); link.setAttribute("data-element-id", data.id); let isBound = false; if (data.url) { linkService.addLinkAttributes(link, data.url, data.newWindow); isBound = true; } else if (data.action) { this._bindNamedAction(link, data.action); isBound = true; } else if (data.attachment) { __privateMethod(this, _bindAttachment, bindAttachment_fn).call(this, link, data.attachment, data.attachmentDest); isBound = true; } else if (data.setOCGState) { __privateMethod(this, _bindSetOCGState, bindSetOCGState_fn).call(this, link, data.setOCGState); isBound = true; } else if (data.dest) { this._bindLink(link, data.dest); isBound = true; } else { if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { this._bindJSAction(link, data); isBound = true; } if (data.resetForm) { this._bindResetFormAction(link, data.resetForm); isBound = true; } else if (this.isTooltipOnly && !isBound) { this._bindLink(link, ""); isBound = true; } } this.container.classList.add("linkAnnotation"); if (isBound) { this.container.append(link); } return this.container; } _bindLink(link, destination) { link.href = this.linkService.getDestinationHash(destination); link.onclick = () => { if (destination) { this.linkService.goToDestination(destination); } return false; }; if (destination || destination === "") { __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } } _bindNamedAction(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeNamedAction(action); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } _bindJSAction(link, data) { link.href = this.linkService.getAnchorUrl(""); const map = /* @__PURE__ */ new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); for (const name of Object.keys(data.actions)) { const jsName = map.get(name); if (!jsName) { continue; } link[jsName] = () => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: data.id, name } }); return false; }; } if (!link.onclick) { link.onclick = () => false; } __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } _bindResetFormAction(link, resetForm) { const otherClickAction = link.onclick; if (!otherClickAction) { link.href = this.linkService.getAnchorUrl(""); } __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); if (!this._fieldObjects) { warn(`_bindResetFormAction - "resetForm" action not supported, ensure that the \`fieldObjects\` parameter is provided.`); if (!otherClickAction) { link.onclick = () => false; } return; } link.onclick = () => { var _a2; otherClickAction == null ? void 0 : otherClickAction(); const { fields: resetFormFields, refs: resetFormRefs, include } = resetForm; const allFields = []; if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { const fieldIds = new Set(resetFormRefs); for (const fieldName of resetFormFields) { const fields = this._fieldObjects[fieldName] || []; for (const { id } of fields) { fieldIds.add(id); } } for (const fields of Object.values(this._fieldObjects)) { for (const field of fields) { if (fieldIds.has(field.id) === include) { allFields.push(field); } } } } else { for (const fields of Object.values(this._fieldObjects)) { allFields.push(...fields); } } const storage = this.annotationStorage; const allIds = []; for (const field of allFields) { const { id } = field; allIds.push(id); switch (field.type) { case "text": { const value = field.defaultValue || ""; storage.setValue(id, { value }); break; } case "checkbox": case "radiobutton": { const value = field.defaultValue === field.exportValues; storage.setValue(id, { value }); break; } case "combobox": case "listbox": { const value = field.defaultValue || ""; storage.setValue(id, { value }); break; } default: continue; } const domElement = document.querySelector(`[data-element-id="${id}"]`); if (!domElement) { continue; } else if (!GetElementsByNameSet.has(domElement)) { warn(`_bindResetFormAction - element not allowed: ${id}`); continue; } domElement.dispatchEvent(new Event("resetform")); } if (this.enableScripting) { (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: "app", ids: allIds, name: "ResetForm" } }); } return false; }; } }; _setInternalLink = new WeakSet(); setInternalLink_fn = function() { this.container.setAttribute("data-internal-link", ""); }; _bindAttachment = new WeakSet(); bindAttachment_fn = function(link, attachment, dest = null) { link.href = this.linkService.getAnchorUrl(""); if (attachment.description) { link.title = attachment.description; } link.onclick = () => { var _a2; (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(attachment.content, attachment.filename, dest); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); }; _bindSetOCGState = new WeakSet(); bindSetOCGState_fn = function(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeSetOCGState(action); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); }; var TextAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true }); } render() { this.container.classList.add("textAnnotation"); const image = document.createElement("img"); image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); image.setAttribute("data-l10n-args", JSON.stringify({ type: this.data.name })); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.append(image); return this.container; } }; var WidgetAnnotationElement = class extends AnnotationElement { render() { return this.container; } showElementAndHideCanvas(element2) { var _a2; if (this.data.hasOwnCanvas) { if (((_a2 = element2.previousSibling) == null ? void 0 : _a2.nodeName) === "CANVAS") { element2.previousSibling.hidden = true; } element2.hidden = false; } } _getKeyModifier(event) { return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; } _setEventListener(element2, elementData, baseName, eventName, valueGetter) { if (baseName.includes("mouse")) { element2.addEventListener(baseName, (event) => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: valueGetter(event), shift: event.shiftKey, modifier: this._getKeyModifier(event) } }); }); } else { element2.addEventListener(baseName, (event) => { var _a2; if (baseName === "blur") { if (!elementData.focused || !event.relatedTarget) { return; } elementData.focused = false; } else if (baseName === "focus") { if (elementData.focused) { return; } elementData.focused = true; } if (!valueGetter) { return; } (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: valueGetter(event) } }); }); } } _setEventListeners(element2, elementData, names, getter) { var _a2, _b, _c; for (const [baseName, eventName] of names) { if (eventName === "Action" || ((_a2 = this.data.actions) == null ? void 0 : _a2[eventName])) { if (eventName === "Focus" || eventName === "Blur") { elementData || (elementData = { focused: false }); } this._setEventListener(element2, elementData, baseName, eventName, getter); if (eventName === "Focus" && !((_b = this.data.actions) == null ? void 0 : _b.Blur)) { this._setEventListener(element2, elementData, "blur", "Blur", null); } else if (eventName === "Blur" && !((_c = this.data.actions) == null ? void 0 : _c.Focus)) { this._setEventListener(element2, elementData, "focus", "Focus", null); } } } } _setBackgroundColor(element2) { const color = this.data.backgroundColor || null; element2.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]); } _setTextStyle(element2) { const TEXT_ALIGNMENT = ["left", "center", "right"]; const { fontColor } = this.data.defaultAppearanceData; const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE; const style = element2.style; let computedFontSize; const BORDER_SIZE = 2; const roundToOneDecimal = (x) => Math.round(10 * x) / 10; if (this.data.multiLine) { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1; const lineHeight = height / numberOfLines; computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR)); } else { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR)); } style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); if (this.data.textAlignment !== null) { style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } } _setRequired(element2, isRequired) { if (isRequired) { element2.setAttribute("required", true); } else { element2.removeAttribute("required"); } element2.setAttribute("aria-required", isRequired); } }; var TextWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, { isRenderable }); } setPropertyOnSiblings(base, key, value, keyInStorage) { const storage = this.annotationStorage; for (const element2 of this._getElementsByName(base.name, base.id)) { if (element2.domElement) { element2.domElement[key] = value; } storage.setValue(element2.id, { [keyInStorage]: value }); } } render() { var _a2, _b; const storage = this.annotationStorage; const id = this.data.id; this.container.classList.add("textWidgetAnnotation"); let element2 = null; if (this.renderForms) { const storedData = storage.getValue(id, { value: this.data.fieldValue }); let textContent = storedData.value || ""; const maxLen = storage.getValue(id, { charLimit: this.data.maxLen }).charLimit; if (maxLen && textContent.length > maxLen) { textContent = textContent.slice(0, maxLen); } let fieldFormattedValues = storedData.formattedValue || ((_a2 = this.data.textContent) == null ? void 0 : _a2.join("\n")) || null; if (fieldFormattedValues && this.data.comb) { fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); } const elementData = { userValue: textContent, formattedValue: fieldFormattedValues, lastCommittedValue: null, commitKey: 1, focused: false }; if (this.data.multiLine) { element2 = document.createElement("textarea"); element2.textContent = fieldFormattedValues != null ? fieldFormattedValues : textContent; if (this.data.doNotScroll) { element2.style.overflowY = "hidden"; } } else { element2 = document.createElement("input"); element2.type = "text"; element2.setAttribute("value", fieldFormattedValues != null ? fieldFormattedValues : textContent); if (this.data.doNotScroll) { element2.style.overflowX = "hidden"; } } if (this.data.hasOwnCanvas) { element2.hidden = true; } GetElementsByNameSet.add(element2); element2.setAttribute("data-element-id", id); element2.disabled = this.data.readOnly; element2.name = this.data.fieldName; element2.tabIndex = DEFAULT_TAB_INDEX; this._setRequired(element2, this.data.required); if (maxLen) { element2.maxLength = maxLen; } element2.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); this.setPropertyOnSiblings(element2, "value", event.target.value, "value"); elementData.formattedValue = null; }); element2.addEventListener("resetform", (event) => { var _a3; const defaultValue = (_a3 = this.data.defaultFieldValue) != null ? _a3 : ""; element2.value = elementData.userValue = defaultValue; elementData.formattedValue = null; }); let blurListener = (event) => { const { formattedValue } = elementData; if (formattedValue !== null && formattedValue !== void 0) { event.target.value = formattedValue; } event.target.scrollLeft = 0; }; if (this.enableScripting && this.hasJSActions) { element2.addEventListener("focus", (event) => { var _a3; if (elementData.focused) { return; } const { target } = event; if (elementData.userValue) { target.value = elementData.userValue; } elementData.lastCommittedValue = target.value; elementData.commitKey = 1; if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Focus)) { elementData.focused = true; } }); element2.addEventListener("updatefromsandbox", (jsEvent) => { this.showElementAndHideCanvas(jsEvent.target); const actions = { value(event) { var _a3; elementData.userValue = (_a3 = event.detail.value) != null ? _a3 : ""; storage.setValue(id, { value: elementData.userValue.toString() }); event.target.value = elementData.userValue; }, formattedValue(event) { const { formattedValue } = event.detail; elementData.formattedValue = formattedValue; if (formattedValue !== null && formattedValue !== void 0 && event.target !== document.activeElement) { event.target.value = formattedValue; } storage.setValue(id, { formattedValue }); }, selRange(event) { event.target.setSelectionRange(...event.detail.selRange); }, charLimit: (event) => { var _a3; const { charLimit } = event.detail; const { target } = event; if (charLimit === 0) { target.removeAttribute("maxLength"); return; } target.setAttribute("maxLength", charLimit); let value = elementData.userValue; if (!value || value.length <= charLimit) { return; } value = value.slice(0, charLimit); target.value = elementData.userValue = value; storage.setValue(id, { value }); (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey: 1, selStart: target.selectionStart, selEnd: target.selectionEnd } }); } }; this._dispatchEventFromSandbox(actions, jsEvent); }); element2.addEventListener("keydown", (event) => { var _a3; elementData.commitKey = 1; let commitKey = -1; if (event.key === "Escape") { commitKey = 0; } else if (event.key === "Enter" && !this.data.multiLine) { commitKey = 2; } else if (event.key === "Tab") { elementData.commitKey = 3; } if (commitKey === -1) { return; } const { value } = event.target; if (elementData.lastCommittedValue === value) { return; } elementData.lastCommittedValue = value; elementData.userValue = value; (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); }); const _blurListener = blurListener; blurListener = null; element2.addEventListener("blur", (event) => { var _a3, _b2; if (!elementData.focused || !event.relatedTarget) { return; } if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Blur)) { elementData.focused = false; } const { value } = event.target; elementData.userValue = value; if (elementData.lastCommittedValue !== value) { (_b2 = this.linkService.eventBus) == null ? void 0 : _b2.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey: elementData.commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); } _blurListener(event); }); if ((_b = this.data.actions) == null ? void 0 : _b.Keystroke) { element2.addEventListener("beforeinput", (event) => { var _a3; elementData.lastCommittedValue = null; const { data, target } = event; const { value, selectionStart, selectionEnd } = target; let selStart = selectionStart, selEnd = selectionEnd; switch (event.inputType) { case "deleteWordBackward": { const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); if (match) { selStart -= match[0].length; } break; } case "deleteWordForward": { const match = value.substring(selectionStart).match(/^[^\w]*\w*/); if (match) { selEnd += match[0].length; } break; } case "deleteContentBackward": if (selectionStart === selectionEnd) { selStart -= 1; } break; case "deleteContentForward": if (selectionStart === selectionEnd) { selEnd += 1; } break; } event.preventDefault(); (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, change: data || "", willCommit: false, selStart, selEnd } }); }); } this._setEventListeners(element2, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.value); } if (blurListener) { element2.addEventListener("blur", blurListener); } if (this.data.comb) { const fieldWidth = this.data.rect[2] - this.data.rect[0]; const combWidth = fieldWidth / maxLen; element2.classList.add("comb"); element2.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; } } else { element2 = document.createElement("div"); element2.textContent = this.data.fieldValue; element2.style.verticalAlign = "middle"; element2.style.display = "table-cell"; if (this.data.hasOwnCanvas) { element2.hidden = true; } } this._setTextStyle(element2); this._setBackgroundColor(element2); this._setDefaultPropertiesFromJS(element2); this.container.append(element2); return this.container; } }; var SignatureWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: !!parameters.data.hasOwnCanvas }); } }; var CheckboxWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.exportValue === data.fieldValue }).value; if (typeof value === "string") { value = value !== "Off"; storage.setValue(id, { value }); } this.container.classList.add("buttonWidgetAnnotation", "checkBox"); const element2 = document.createElement("input"); GetElementsByNameSet.add(element2); element2.setAttribute("data-element-id", id); element2.disabled = data.readOnly; this._setRequired(element2, this.data.required); element2.type = "checkbox"; element2.name = data.fieldName; if (value) { element2.setAttribute("checked", true); } element2.setAttribute("exportValue", data.exportValue); element2.tabIndex = DEFAULT_TAB_INDEX; element2.addEventListener("change", (event) => { const { name, checked } = event.target; for (const checkbox of this._getElementsByName(name, id)) { const curChecked = checked && checkbox.exportValue === data.exportValue; if (checkbox.domElement) { checkbox.domElement.checked = curChecked; } storage.setValue(checkbox.id, { value: curChecked }); } storage.setValue(id, { value: checked }); }); element2.addEventListener("resetform", (event) => { const defaultValue = data.defaultFieldValue || "Off"; event.target.checked = defaultValue === data.exportValue; }); if (this.enableScripting && this.hasJSActions) { element2.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value(event) { event.target.checked = event.detail.value !== "Off"; storage.setValue(id, { value: event.target.checked }); } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element2, 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); } this._setBackgroundColor(element2); this._setDefaultPropertiesFromJS(element2); this.container.append(element2); return this.container; } }; var RadioButtonWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.classList.add("buttonWidgetAnnotation", "radioButton"); const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.fieldValue === data.buttonValue }).value; if (typeof value === "string") { value = value !== data.buttonValue; storage.setValue(id, { value }); } if (value) { for (const radio of this._getElementsByName(data.fieldName, id)) { storage.setValue(radio.id, { value: false }); } } const element2 = document.createElement("input"); GetElementsByNameSet.add(element2); element2.setAttribute("data-element-id", id); element2.disabled = data.readOnly; this._setRequired(element2, this.data.required); element2.type = "radio"; element2.name = data.fieldName; if (value) { element2.setAttribute("checked", true); } element2.tabIndex = DEFAULT_TAB_INDEX; element2.addEventListener("change", (event) => { const { name, checked } = event.target; for (const radio of this._getElementsByName(name, id)) { storage.setValue(radio.id, { value: false }); } storage.setValue(id, { value: checked }); }); element2.addEventListener("resetform", (event) => { const defaultValue = data.defaultFieldValue; event.target.checked = defaultValue !== null && defaultValue !== void 0 && defaultValue === data.buttonValue; }); if (this.enableScripting && this.hasJSActions) { const pdfButtonValue = data.buttonValue; element2.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value: (event) => { const checked = pdfButtonValue === event.detail.value; for (const radio of this._getElementsByName(event.target.name)) { const curChecked = checked && radio.id === id; if (radio.domElement) { radio.domElement.checked = curChecked; } storage.setValue(radio.id, { value: curChecked }); } } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element2, 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); } this._setBackgroundColor(element2); this._setDefaultPropertiesFromJS(element2); this.container.append(element2); return this.container; } }; var PushButtonWidgetAnnotationElement = class extends LinkAnnotationElement { constructor(parameters) { super(parameters, { ignoreBorder: parameters.data.hasAppearance }); } render() { const container = super.render(); container.classList.add("buttonWidgetAnnotation", "pushButton"); const linkElement = container.lastChild; if (this.enableScripting && this.hasJSActions && linkElement) { this._setDefaultPropertiesFromJS(linkElement); linkElement.addEventListener("updatefromsandbox", (jsEvent) => { this._dispatchEventFromSandbox({}, jsEvent); }); } return container; } }; var ChoiceWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.classList.add("choiceWidgetAnnotation"); const storage = this.annotationStorage; const id = this.data.id; const storedData = storage.getValue(id, { value: this.data.fieldValue }); const selectElement = document.createElement("select"); GetElementsByNameSet.add(selectElement); selectElement.setAttribute("data-element-id", id); selectElement.disabled = this.data.readOnly; this._setRequired(selectElement, this.data.required); selectElement.name = this.data.fieldName; selectElement.tabIndex = DEFAULT_TAB_INDEX; let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } selectElement.addEventListener("resetform", (event) => { const defaultValue = this.data.defaultFieldValue; for (const option2 of selectElement.options) { option2.selected = option2.value === defaultValue; } }); for (const option2 of this.data.options) { const optionElement = document.createElement("option"); optionElement.textContent = option2.displayValue; optionElement.value = option2.exportValue; if (storedData.value.includes(option2.exportValue)) { optionElement.setAttribute("selected", true); addAnEmptyEntry = false; } selectElement.append(optionElement); } let removeEmptyEntry = null; if (addAnEmptyEntry) { const noneOptionElement = document.createElement("option"); noneOptionElement.value = " "; noneOptionElement.setAttribute("hidden", true); noneOptionElement.setAttribute("selected", true); selectElement.prepend(noneOptionElement); removeEmptyEntry = () => { noneOptionElement.remove(); selectElement.removeEventListener("input", removeEmptyEntry); removeEmptyEntry = null; }; selectElement.addEventListener("input", removeEmptyEntry); } const getValue = (isExport) => { const name = isExport ? "value" : "textContent"; const { options, multiple } = selectElement; if (!multiple) { return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; } return Array.prototype.filter.call(options, (option2) => option2.selected).map((option2) => option2[name]); }; let selectedValues = getValue(false); const getItems = (event) => { const options = event.target.options; return Array.prototype.map.call(options, (option2) => ({ displayValue: option2.textContent, exportValue: option2.value })); }; if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value(event) { removeEmptyEntry == null ? void 0 : removeEmptyEntry(); const value = event.detail.value; const values = new Set(Array.isArray(value) ? value : [value]); for (const option2 of selectElement.options) { option2.selected = values.has(option2.value); } storage.setValue(id, { value: getValue(true) }); selectedValues = getValue(false); }, multipleSelection(event) { selectElement.multiple = true; }, remove(event) { const options = selectElement.options; const index2 = event.detail.remove; options[index2].selected = false; selectElement.remove(index2); if (options.length > 0) { const i = Array.prototype.findIndex.call(options, (option2) => option2.selected); if (i === -1) { options[0].selected = true; } } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, clear(event) { while (selectElement.length !== 0) { selectElement.remove(0); } storage.setValue(id, { value: null, items: [] }); selectedValues = getValue(false); }, insert(event) { const { index: index2, displayValue, exportValue } = event.detail.insert; const selectChild = selectElement.children[index2]; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; if (selectChild) { selectChild.before(optionElement); } else { selectElement.append(optionElement); } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, items(event) { const { items } = event.detail; while (selectElement.length !== 0) { selectElement.remove(0); } for (const item of items) { const { displayValue, exportValue } = item; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.append(optionElement); } if (selectElement.options.length > 0) { selectElement.options[0].selected = true; } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, indices(event) { const indices = new Set(event.detail.indices); for (const option2 of event.target.options) { option2.selected = indices.has(option2.index); } storage.setValue(id, { value: getValue(true) }); selectedValues = getValue(false); }, editable(event) { event.target.disabled = !event.detail.editable; } }; this._dispatchEventFromSandbox(actions, jsEvent); }); selectElement.addEventListener("input", (event) => { var _a2; const exportValue = getValue(true); const change = getValue(false); storage.setValue(id, { value: exportValue }); event.preventDefault(); (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value: selectedValues, change, changeEx: exportValue, willCommit: false, commitKey: 1, keyDown: false } }); }); 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); } else { selectElement.addEventListener("input", function(event) { storage.setValue(id, { value: getValue(true) }); }); } if (this.data.combo) { this._setTextStyle(selectElement); } else { } this._setBackgroundColor(selectElement); this._setDefaultPropertiesFromJS(selectElement); this.container.append(selectElement); return this.container; } }; var PopupAnnotationElement = class extends AnnotationElement { constructor(parameters) { const { data, elements } = parameters; super(parameters, { isRenderable: AnnotationElement._hasPopupData(data) }); this.elements = elements; this.popup = null; } render() { this.container.classList.add("popupAnnotation"); const popup = this.popup = new PopupElement({ container: this.container, color: this.data.color, titleObj: this.data.titleObj, modificationDate: this.data.modificationDate, contentsObj: this.data.contentsObj, richText: this.data.richText, rect: this.data.rect, parentRect: this.data.parentRect || null, parent: this.parent, elements: this.elements, open: this.data.open }); const elementIds = []; for (const element2 of this.elements) { element2.popup = popup; elementIds.push(element2.data.id); element2.addHighlightArea(); } this.container.setAttribute("aria-controls", elementIds.map((id) => `${AnnotationPrefix}${id}`).join(",")); return this.container; } }; var _boundKeyDown, _boundHide, _boundShow, _boundToggle, _color, _container3, _contentsObj, _dateObj, _elements, _parent, _parentRect, _pinned, _popup, _position2, _rect, _richText, _titleObj, _updates2, _wasVisible, _html, html_get, _fontSize, fontSize_get, _fontColor, fontColor_get, _makePopupContent, makePopupContent_fn, _keyDown, keyDown_fn, _setPosition, setPosition_fn, _toggle, toggle_fn, _show, show_fn, _hide, hide_fn; var PopupElement = class { constructor({ container, color, elements, titleObj, modificationDate, contentsObj, richText, parent, rect, parentRect, open }) { __privateAdd(this, _html); __privateAdd(this, _fontSize); __privateAdd(this, _fontColor); __privateAdd(this, _makePopupContent); __privateAdd(this, _keyDown); __privateAdd(this, _setPosition); __privateAdd(this, _toggle); __privateAdd(this, _show); __privateAdd(this, _hide); __privateAdd(this, _boundKeyDown, __privateMethod(this, _keyDown, keyDown_fn).bind(this)); __privateAdd(this, _boundHide, __privateMethod(this, _hide, hide_fn).bind(this)); __privateAdd(this, _boundShow, __privateMethod(this, _show, show_fn).bind(this)); __privateAdd(this, _boundToggle, __privateMethod(this, _toggle, toggle_fn).bind(this)); __privateAdd(this, _color, null); __privateAdd(this, _container3, null); __privateAdd(this, _contentsObj, null); __privateAdd(this, _dateObj, null); __privateAdd(this, _elements, null); __privateAdd(this, _parent, null); __privateAdd(this, _parentRect, null); __privateAdd(this, _pinned, false); __privateAdd(this, _popup, null); __privateAdd(this, _position2, null); __privateAdd(this, _rect, null); __privateAdd(this, _richText, null); __privateAdd(this, _titleObj, null); __privateAdd(this, _updates2, null); __privateAdd(this, _wasVisible, false); var _a2; __privateSet(this, _container3, container); __privateSet(this, _titleObj, titleObj); __privateSet(this, _contentsObj, contentsObj); __privateSet(this, _richText, richText); __privateSet(this, _parent, parent); __privateSet(this, _color, color); __privateSet(this, _rect, rect); __privateSet(this, _parentRect, parentRect); __privateSet(this, _elements, elements); __privateSet(this, _dateObj, PDFDateString.toDateObject(modificationDate)); this.trigger = elements.flatMap((e) => e.getElementsToTriggerPopup()); for (const element2 of this.trigger) { element2.addEventListener("click", __privateGet(this, _boundToggle)); element2.addEventListener("mouseenter", __privateGet(this, _boundShow)); element2.addEventListener("mouseleave", __privateGet(this, _boundHide)); element2.classList.add("popupTriggerArea"); } for (const element2 of elements) { (_a2 = element2.container) == null ? void 0 : _a2.addEventListener("keydown", __privateGet(this, _boundKeyDown)); } __privateGet(this, _container3).hidden = true; if (open) { __privateMethod(this, _toggle, toggle_fn).call(this); } } render() { if (__privateGet(this, _popup)) { return; } const popup = __privateSet(this, _popup, document.createElement("div")); popup.className = "popup"; if (__privateGet(this, _color)) { const baseColor = popup.style.outlineColor = Util.makeHexColor(...__privateGet(this, _color)); if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; } else { const BACKGROUND_ENLIGHT = 0.7; popup.style.backgroundColor = Util.makeHexColor(...__privateGet(this, _color).map((c) => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); } } const header = document.createElement("span"); header.className = "header"; const title = document.createElement("h1"); header.append(title); ({ dir: title.dir, str: title.textContent } = __privateGet(this, _titleObj)); popup.append(header); if (__privateGet(this, _dateObj)) { const modificationDate = document.createElement("span"); modificationDate.classList.add("popupDate"); modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"); modificationDate.setAttribute("data-l10n-args", JSON.stringify({ dateObj: __privateGet(this, _dateObj).valueOf() })); header.append(modificationDate); } const html = __privateGet(this, _html, html_get); if (html) { XfaLayer.render({ xfaHtml: html, intent: "richText", div: popup }); popup.lastChild.classList.add("richText", "popupContent"); } else { const contents = this._formatContents(__privateGet(this, _contentsObj)); popup.append(contents); } __privateGet(this, _container3).append(popup); } _formatContents({ str, dir }) { const p = document.createElement("p"); p.classList.add("popupContent"); p.dir = dir; const lines = str.split(/(?:\r\n?|\n)/); for (let i = 0, ii = lines.length; i < ii; ++i) { const line = lines[i]; p.append(document.createTextNode(line)); if (i < ii - 1) { p.append(document.createElement("br")); } } return p; } updateEdited({ rect, popupContent }) { var _a2; __privateGet(this, _updates2) || __privateSet(this, _updates2, { contentsObj: __privateGet(this, _contentsObj), richText: __privateGet(this, _richText) }); if (rect) { __privateSet(this, _position2, null); } if (popupContent) { __privateSet(this, _richText, __privateMethod(this, _makePopupContent, makePopupContent_fn).call(this, popupContent)); __privateSet(this, _contentsObj, null); } (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); __privateSet(this, _popup, null); } resetEdited() { var _a2; if (!__privateGet(this, _updates2)) { return; } ({ contentsObj: __privateWrapper(this, _contentsObj)._, richText: __privateWrapper(this, _richText)._ } = __privateGet(this, _updates2)); __privateSet(this, _updates2, null); (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); __privateSet(this, _popup, null); __privateSet(this, _position2, null); } forceHide() { __privateSet(this, _wasVisible, this.isVisible); if (!__privateGet(this, _wasVisible)) { return; } __privateGet(this, _container3).hidden = true; } maybeShow() { if (!__privateGet(this, _wasVisible)) { return; } if (!__privateGet(this, _popup)) { __privateMethod(this, _show, show_fn).call(this); } __privateSet(this, _wasVisible, false); __privateGet(this, _container3).hidden = false; } get isVisible() { return __privateGet(this, _container3).hidden === false; } }; _boundKeyDown = new WeakMap(); _boundHide = new WeakMap(); _boundShow = new WeakMap(); _boundToggle = new WeakMap(); _color = new WeakMap(); _container3 = new WeakMap(); _contentsObj = new WeakMap(); _dateObj = new WeakMap(); _elements = new WeakMap(); _parent = new WeakMap(); _parentRect = new WeakMap(); _pinned = new WeakMap(); _popup = new WeakMap(); _position2 = new WeakMap(); _rect = new WeakMap(); _richText = new WeakMap(); _titleObj = new WeakMap(); _updates2 = new WeakMap(); _wasVisible = new WeakMap(); _html = new WeakSet(); html_get = function() { const richText = __privateGet(this, _richText); const contentsObj = __privateGet(this, _contentsObj); if ((richText == null ? void 0 : richText.str) && (!(contentsObj == null ? void 0 : contentsObj.str) || contentsObj.str === richText.str)) { return __privateGet(this, _richText).html || null; } return null; }; _fontSize = new WeakSet(); fontSize_get = function() { var _a2, _b, _c; return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.fontSize) || 0; }; _fontColor = new WeakSet(); fontColor_get = function() { var _a2, _b, _c; return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.color) || null; }; _makePopupContent = new WeakSet(); makePopupContent_fn = function(text2) { const popupLines = []; const popupContent = { str: text2, html: { name: "div", attributes: { dir: "auto" }, children: [{ name: "p", children: popupLines }] } }; const lineAttributes = { style: { color: __privateGet(this, _fontColor, fontColor_get), fontSize: __privateGet(this, _fontSize, fontSize_get) ? `calc(${__privateGet(this, _fontSize, fontSize_get)}px * var(--scale-factor))` : "" } }; for (const line of text2.split("\n")) { popupLines.push({ name: "span", value: line, attributes: lineAttributes }); } return popupContent; }; _keyDown = new WeakSet(); keyDown_fn = function(event) { if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { return; } if (event.key === "Enter" || event.key === "Escape" && __privateGet(this, _pinned)) { __privateMethod(this, _toggle, toggle_fn).call(this); } }; _setPosition = new WeakSet(); setPosition_fn = function() { if (__privateGet(this, _position2) !== null) { return; } const { page: { view }, viewport: { rawDims: { pageWidth, pageHeight, pageX, pageY } } } = __privateGet(this, _parent); let useParentRect = !!__privateGet(this, _parentRect); let rect = useParentRect ? __privateGet(this, _parentRect) : __privateGet(this, _rect); for (const element2 of __privateGet(this, _elements)) { if (!rect || Util.intersect(element2.data.rect, rect) !== null) { rect = element2.data.rect; useParentRect = true; break; } } const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; const popupLeft = normalizedRect[0] + parentWidth; const popupTop = normalizedRect[1]; __privateSet(this, _position2, [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]); const { style } = __privateGet(this, _container3); style.left = `${__privateGet(this, _position2)[0]}%`; style.top = `${__privateGet(this, _position2)[1]}%`; }; _toggle = new WeakSet(); toggle_fn = function() { __privateSet(this, _pinned, !__privateGet(this, _pinned)); if (__privateGet(this, _pinned)) { __privateMethod(this, _show, show_fn).call(this); __privateGet(this, _container3).addEventListener("click", __privateGet(this, _boundToggle)); __privateGet(this, _container3).addEventListener("keydown", __privateGet(this, _boundKeyDown)); } else { __privateMethod(this, _hide, hide_fn).call(this); __privateGet(this, _container3).removeEventListener("click", __privateGet(this, _boundToggle)); __privateGet(this, _container3).removeEventListener("keydown", __privateGet(this, _boundKeyDown)); } }; _show = new WeakSet(); show_fn = function() { if (!__privateGet(this, _popup)) { this.render(); } if (!this.isVisible) { __privateMethod(this, _setPosition, setPosition_fn).call(this); __privateGet(this, _container3).hidden = false; __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) + 1e3; } else if (__privateGet(this, _pinned)) { __privateGet(this, _container3).classList.add("focused"); } }; _hide = new WeakSet(); hide_fn = function() { __privateGet(this, _container3).classList.remove("focused"); if (__privateGet(this, _pinned) || !this.isVisible) { return; } __privateGet(this, _container3).hidden = true; __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) - 1e3; }; var FreeTextAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); this.textContent = parameters.data.textContent; this.textPosition = parameters.data.textPosition; this.annotationEditorType = AnnotationEditorType.FREETEXT; } render() { this.container.classList.add("freeTextAnnotation"); if (this.textContent) { const content = document.createElement("div"); content.classList.add("annotationTextContent"); content.setAttribute("role", "comment"); for (const line of this.textContent) { const lineSpan = document.createElement("span"); lineSpan.textContent = line; content.append(lineSpan); } this.container.append(content); } if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this._editOnDoubleClick(); return this.container; } }; var _line; var LineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _line, null); } render() { this.container.classList.add("lineAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const line = __privateSet(this, _line, this.svgFactory.createElement("svg:line")); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); line.setAttribute("fill", "transparent"); svg.append(line); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _line); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _line = new WeakMap(); var _square; var SquareAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _square, null); } render() { this.container.classList.add("squareAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const square = __privateSet(this, _square, this.svgFactory.createElement("svg:rect")); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "transparent"); svg.append(square); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _square); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _square = new WeakMap(); var _circle; var CircleAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _circle, null); } render() { this.container.classList.add("circleAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const circle = __privateSet(this, _circle, this.svgFactory.createElement("svg:ellipse")); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "transparent"); svg.append(circle); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _circle); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _circle = new WeakMap(); var _polyline; var PolylineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _polyline, null); this.containerClassName = "polylineAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.classList.add(this.containerClassName); const { data: { rect, vertices, borderStyle, popupRef } } = this; if (!vertices) { return this.container; } const { width, height } = getRectDims(rect); const svg = this.svgFactory.create(width, height, true); let points = []; for (let i = 0, ii = vertices.length; i < ii; i += 2) { const x = vertices[i] - rect[0]; const y = rect[3] - vertices[i + 1]; points.push(`${x},${y}`); } points = points.join(" "); const polyline = __privateSet(this, _polyline, this.svgFactory.createElement(this.svgElementName)); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); svg.append(polyline); this.container.append(svg); if (!popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _polyline); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _polyline = new WeakMap(); var PolygonAnnotationElement = class extends PolylineAnnotationElement { constructor(parameters) { super(parameters); this.containerClassName = "polygonAnnotation"; this.svgElementName = "svg:polygon"; } }; var CaretAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); } render() { this.container.classList.add("caretAnnotation"); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } }; var _polylines; var InkAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _polylines, []); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; this.annotationEditorType = AnnotationEditorType.INK; } render() { this.container.classList.add(this.containerClassName); const { data: { rect, inkLists, borderStyle, popupRef } } = this; const { width, height } = getRectDims(rect); const svg = this.svgFactory.create(width, height, true); for (const inkList of inkLists) { let points = []; for (let i = 0, ii = inkList.length; i < ii; i += 2) { const x = inkList[i] - rect[0]; const y = rect[3] - inkList[i + 1]; points.push(`${x},${y}`); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); __privateGet(this, _polylines).push(polyline); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); if (!popupRef && this.hasPopupData) { this._createPopup(); } svg.append(polyline); } this.container.append(svg); return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _polylines); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _polylines = new WeakMap(); var HighlightAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("highlightAnnotation"); return this.container; } }; var UnderlineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("underlineAnnotation"); return this.container; } }; var SquigglyAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("squigglyAnnotation"); return this.container; } }; var StrikeOutAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("strikeoutAnnotation"); return this.container; } }; var StampAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); } render() { this.container.classList.add("stampAnnotation"); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } }; var _trigger, _download, download_fn; var FileAttachmentAnnotationElement = class extends AnnotationElement { constructor(parameters) { var _a2; super(parameters, { isRenderable: true }); __privateAdd(this, _download); __privateAdd(this, _trigger, null); const { file } = this.data; this.filename = file.filename; this.content = file.content; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("fileattachmentannotation", { source: this, ...file }); } render() { this.container.classList.add("fileAttachmentAnnotation"); const { container, data } = this; let trigger; if (data.hasAppearance || data.fillAlpha === 0) { trigger = document.createElement("div"); } else { trigger = document.createElement("img"); trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; if (data.fillAlpha && data.fillAlpha < 1) { trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; } } trigger.addEventListener("dblclick", __privateMethod(this, _download, download_fn).bind(this)); __privateSet(this, _trigger, trigger); const { isMac } = util_FeatureTest.platform; container.addEventListener("keydown", (evt) => { if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { __privateMethod(this, _download, download_fn).call(this); } }); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } else { trigger.classList.add("popupTriggerArea"); } container.append(trigger); return container; } getElementsToTriggerPopup() { return __privateGet(this, _trigger); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _trigger = new WeakMap(); _download = new WeakSet(); download_fn = function() { var _a2; (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(this.content, this.filename); }; var _accessibilityManager, _annotationCanvasMap, _editableAnnotations, _appendElement, appendElement_fn, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn; var AnnotationLayer = class { constructor({ div, accessibilityManager, annotationCanvasMap, annotationEditorUIManager, page, viewport }) { __privateAdd(this, _appendElement); __privateAdd(this, _setAnnotationCanvasMap); __privateAdd(this, _accessibilityManager, null); __privateAdd(this, _annotationCanvasMap, null); __privateAdd(this, _editableAnnotations, /* @__PURE__ */ new Map()); this.div = div; __privateSet(this, _accessibilityManager, accessibilityManager); __privateSet(this, _annotationCanvasMap, annotationCanvasMap); this.page = page; this.viewport = viewport; this.zIndex = 0; this._annotationEditorUIManager = annotationEditorUIManager; } hasEditableAnnotations() { return __privateGet(this, _editableAnnotations).size > 0; } async render(params) { var _a2; const { annotations } = params; const layer = this.div; setLayerDimensions(layer, this.viewport); const popupToElements = /* @__PURE__ */ new Map(); const elementParams = { data: null, layer, linkService: params.linkService, downloadManager: params.downloadManager, imageResourcesPath: params.imageResourcesPath || "", renderForms: params.renderForms !== false, svgFactory: new DOMSVGFactory(), annotationStorage: params.annotationStorage || new AnnotationStorage(), enableScripting: params.enableScripting === true, hasJSActions: params.hasJSActions, fieldObjects: params.fieldObjects, parent: this, elements: null }; for (const data of annotations) { if (data.noHTML) { continue; } const isPopupAnnotation = data.annotationType === AnnotationType.POPUP; if (!isPopupAnnotation) { const { width, height } = getRectDims(data.rect); if (width <= 0 || height <= 0) { continue; } } else { const elements = popupToElements.get(data.id); if (!elements) { continue; } elementParams.elements = elements; } elementParams.data = data; const element2 = AnnotationElementFactory.create(elementParams); if (!element2.isRenderable) { continue; } if (!isPopupAnnotation && data.popupRef) { const elements = popupToElements.get(data.popupRef); if (!elements) { popupToElements.set(data.popupRef, [element2]); } else { elements.push(element2); } } const rendered = element2.render(); if (data.hidden) { rendered.style.visibility = "hidden"; } __privateMethod(this, _appendElement, appendElement_fn).call(this, rendered, data.id); if (element2._isEditable) { __privateGet(this, _editableAnnotations).set(element2.data.id, element2); (_a2 = this._annotationEditorUIManager) == null ? void 0 : _a2.renderAnnotationElement(element2); } } __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); } update({ viewport }) { const layer = this.div; this.viewport = viewport; setLayerDimensions(layer, { rotation: viewport.rotation }); __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); layer.hidden = false; } getEditableAnnotations() { return Array.from(__privateGet(this, _editableAnnotations).values()); } getEditableAnnotation(id) { return __privateGet(this, _editableAnnotations).get(id); } }; _accessibilityManager = new WeakMap(); _annotationCanvasMap = new WeakMap(); _editableAnnotations = new WeakMap(); _appendElement = new WeakSet(); appendElement_fn = function(element2, id) { var _a2; const contentElement = element2.firstChild || element2; contentElement.id = `${AnnotationPrefix}${id}`; this.div.append(element2); (_a2 = __privateGet(this, _accessibilityManager)) == null ? void 0 : _a2.moveElementInDOM(this.div, element2, contentElement, false); }; _setAnnotationCanvasMap = new WeakSet(); setAnnotationCanvasMap_fn = function() { if (!__privateGet(this, _annotationCanvasMap)) { return; } const layer = this.div; for (const [id, canvas] of __privateGet(this, _annotationCanvasMap)) { const element2 = layer.querySelector(`[data-annotation-id="${id}"]`); if (!element2) { continue; } canvas.className = "annotationContent"; const { firstChild } = element2; if (!firstChild) { element2.append(canvas); } else if (firstChild.nodeName === "CANVAS") { firstChild.replaceWith(canvas); } else if (!firstChild.classList.contains("annotationContent")) { firstChild.before(canvas); } else { firstChild.after(canvas); } } __privateGet(this, _annotationCanvasMap).clear(); }; var EOL_PATTERN = /\r\n?|\n/g; var _color2, _content, _editorDivId, _editModeAC, _fontSize2, _initialData, _updateFontSize, updateFontSize_fn, _updateColor, updateColor_fn, _extractText, extractText_fn, _setEditorDimensions, setEditorDimensions_fn, _getNodeContent, getNodeContent_fn, _setContent, setContent_fn, _serializeContent, serializeContent_fn, _deserializeContent, deserializeContent_fn, _hasElementChanged, hasElementChanged_fn; var _FreeTextEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "freeTextEditor" }); __privateAdd(this, _updateFontSize); __privateAdd(this, _updateColor); __privateAdd(this, _extractText); __privateAdd(this, _setEditorDimensions); __privateAdd(this, _setContent); __privateAdd(this, _serializeContent); __privateAdd(this, _hasElementChanged); __privateAdd(this, _color2, void 0); __privateAdd(this, _content, ""); __privateAdd(this, _editorDivId, `${this.id}-editor`); __privateAdd(this, _editModeAC, null); __privateAdd(this, _fontSize2, void 0); __privateAdd(this, _initialData, null); __privateSet(this, _color2, params.color || _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor); __privateSet(this, _fontSize2, params.fontSize || _FreeTextEditor._defaultFontSize); } static get _keyboardManager() { const proto = _FreeTextEditor.prototype; const arrowChecker = (self) => self.isEmpty(); const small = AnnotationEditorUIManager.TRANSLATE_SMALL; const big = AnnotationEditorUIManager.TRANSLATE_BIG; return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { bubbles: true }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { args: [-small, 0], checker: arrowChecker }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { args: [-big, 0], checker: arrowChecker }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { args: [small, 0], checker: arrowChecker }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { args: [big, 0], checker: arrowChecker }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { args: [0, -small], checker: arrowChecker }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { args: [0, -big], checker: arrowChecker }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { args: [0, small], checker: arrowChecker }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { args: [0, big], checker: arrowChecker }]])); } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager, { strings: ["pdfjs-free-text-default-content"] }); const style = getComputedStyle(document.documentElement); this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.FREETEXT_SIZE: _FreeTextEditor._defaultFontSize = value; break; case AnnotationEditorParamsType.FREETEXT_COLOR: _FreeTextEditor._defaultColor = value; break; } } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.FREETEXT_SIZE: __privateMethod(this, _updateFontSize, updateFontSize_fn).call(this, value); break; case AnnotationEditorParamsType.FREETEXT_COLOR: __privateMethod(this, _updateColor, updateColor_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.FREETEXT_SIZE, _FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; } get propertiesToUpdate() { return [[AnnotationEditorParamsType.FREETEXT_SIZE, __privateGet(this, _fontSize2)], [AnnotationEditorParamsType.FREETEXT_COLOR, __privateGet(this, _color2)]]; } _translateEmpty(x, y) { this._uiManager.translateSelectedEditors(x, y, true); } getInitialTranslation() { const scale = this.parentScale; return [-_FreeTextEditor._internalPadding * scale, -(_FreeTextEditor._internalPadding + __privateGet(this, _fontSize2)) * scale]; } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } if (!this.isAttachedToDOM) { this.parent.add(this); } } enableEditMode() { if (this.isInEditMode()) { return; } this.parent.setEditingState(false); this.parent.updateToolbar(AnnotationEditorType.FREETEXT); super.enableEditMode(); this.overlayDiv.classList.remove("enabled"); this.editorDiv.contentEditable = true; this._isDraggable = false; this.div.removeAttribute("aria-activedescendant"); __privateSet(this, _editModeAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _editModeAC)); this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), { signal }); this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), { signal }); this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), { signal }); this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), { signal }); this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), { signal }); } disableEditMode() { var _a2; if (!this.isInEditMode()) { return; } this.parent.setEditingState(true); super.disableEditMode(); this.overlayDiv.classList.add("enabled"); this.editorDiv.contentEditable = false; this.div.setAttribute("aria-activedescendant", __privateGet(this, _editorDivId)); this._isDraggable = true; (_a2 = __privateGet(this, _editModeAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _editModeAC, null); this.div.focus({ preventScroll: true }); this.isEditing = false; this.parent.div.classList.add("freetextEditing"); } focusin(event) { if (!this._focusEventsAllowed) { return; } super.focusin(event); if (event.target !== this.editorDiv) { this.editorDiv.focus(); } } onceAdded() { var _a2; if (this.width) { return; } this.enableEditMode(); this.editorDiv.focus(); if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { this.center(); } this._initialOptions = null; } isEmpty() { return !this.editorDiv || this.editorDiv.innerText.trim() === ""; } remove() { this.isEditing = false; if (this.parent) { this.parent.setEditingState(true); this.parent.div.classList.add("freetextEditing"); } super.remove(); } commit() { if (!this.isInEditMode()) { return; } super.commit(); this.disableEditMode(); const savedText = __privateGet(this, _content); const newText = __privateSet(this, _content, __privateMethod(this, _extractText, extractText_fn).call(this).trimEnd()); if (savedText === newText) { return; } const setText = (text2) => { __privateSet(this, _content, text2); if (!text2) { this.remove(); return; } __privateMethod(this, _setContent, setContent_fn).call(this); this._uiManager.rebuild(this); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); }; this.addCommands({ cmd: () => { setText(newText); }, undo: () => { setText(savedText); }, mustExec: false }); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); } shouldGetKeyboardEvents() { return this.isInEditMode(); } enterInEditMode() { this.enableEditMode(); this.editorDiv.focus(); } dblclick(event) { this.enterInEditMode(); } keydown(event) { if (event.target === this.div && event.key === "Enter") { this.enterInEditMode(); event.preventDefault(); } } editorDivKeydown(event) { _FreeTextEditor._keyboardManager.exec(this, event); } editorDivFocus(event) { this.isEditing = true; } editorDivBlur(event) { this.isEditing = false; } editorDivInput(event) { this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); } disableEditing() { this.editorDiv.setAttribute("role", "comment"); this.editorDiv.removeAttribute("aria-multiline"); } enableEditing() { this.editorDiv.setAttribute("role", "textbox"); this.editorDiv.setAttribute("aria-multiline", true); } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.editorDiv = document.createElement("div"); this.editorDiv.className = "internal"; this.editorDiv.setAttribute("id", __privateGet(this, _editorDivId)); this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); this.enableEditing(); AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then((msg) => { var _a2; return (_a2 = this.editorDiv) == null ? void 0 : _a2.setAttribute("default-content", msg); }); this.editorDiv.contentEditable = true; const { style } = this.editorDiv; style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; style.color = __privateGet(this, _color2); this.div.append(this.editorDiv); this.overlayDiv = document.createElement("div"); this.overlayDiv.classList.add("overlay", "enabled"); this.div.append(this.overlayDiv); bindEvents(this, this.div, ["dblclick", "keydown"]); if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; if (this.annotationElementId) { const { position } = __privateGet(this, _initialData); let [tx, ty] = this.getInitialTranslation(); [tx, ty] = this.pageTranslationToScreen(tx, ty); const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; let posX, posY; switch (this.rotation) { case 0: posX = baseX + (position[0] - pageX) / pageWidth; posY = baseY + this.height - (position[1] - pageY) / pageHeight; break; case 90: posX = baseX + (position[0] - pageX) / pageWidth; posY = baseY - (position[1] - pageY) / pageHeight; [tx, ty] = [ty, -tx]; break; case 180: posX = baseX - this.width + (position[0] - pageX) / pageWidth; posY = baseY - (position[1] - pageY) / pageHeight; [tx, ty] = [-tx, -ty]; break; case 270: posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; [tx, ty] = [-ty, tx]; break; } this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); } else { this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); } __privateMethod(this, _setContent, setContent_fn).call(this); this._isDraggable = true; this.editorDiv.contentEditable = false; } else { this._isDraggable = false; this.editorDiv.contentEditable = true; } return this.div; } editorDivPaste(event) { var _a2, _b, _c; const clipboardData = event.clipboardData || window.clipboardData; const { types } = clipboardData; if (types.length === 1 && types[0] === "text/plain") { return; } event.preventDefault(); const paste = __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n"); if (!paste) { return; } const selection = window.getSelection(); if (!selection.rangeCount) { return; } this.editorDiv.normalize(); selection.deleteFromDocument(); const range = selection.getRangeAt(0); if (!paste.includes("\n")) { range.insertNode(document.createTextNode(paste)); this.editorDiv.normalize(); selection.collapseToStart(); return; } const { startContainer, startOffset } = range; const bufferBefore = []; const bufferAfter = []; if (startContainer.nodeType === Node.TEXT_NODE) { const parent = startContainer.parentElement; bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, "")); if (parent !== this.editorDiv) { let buffer = bufferBefore; for (const child of this.editorDiv.childNodes) { if (child === parent) { buffer = bufferAfter; continue; } buffer.push(__privateMethod(_b = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_b, child)); } } bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, "")); } else if (startContainer === this.editorDiv) { let buffer = bufferBefore; let i = 0; for (const child of this.editorDiv.childNodes) { if (i++ === startOffset) { buffer = bufferAfter; } buffer.push(__privateMethod(_c = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_c, child)); } } __privateSet(this, _content, `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`); __privateMethod(this, _setContent, setContent_fn).call(this); const newRange = new Range(); let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0); for (const { firstChild } of this.editorDiv.childNodes) { if (firstChild.nodeType === Node.TEXT_NODE) { const length = firstChild.nodeValue.length; if (beforeLength <= length) { newRange.setStart(firstChild, beforeLength); newRange.setEnd(firstChild, beforeLength); break; } beforeLength -= length; } } selection.removeAllRanges(); selection.addRange(newRange); } get contentDiv() { return this.editorDiv; } static deserialize(data, parent, uiManager) { var _a2; let initialData = null; if (data instanceof FreeTextAnnotationElement) { const { data: { defaultAppearanceData: { fontSize, fontColor }, rect, rotation, id }, textContent, textPosition, parent: { page: { pageNumber } } } = data; if (!textContent || textContent.length === 0) { return null; } initialData = data = { annotationType: AnnotationEditorType.FREETEXT, color: Array.from(fontColor), fontSize, value: textContent.join("\n"), position: textPosition, pageIndex: pageNumber - 1, rect: rect.slice(0), rotation, id, deleted: false }; } const editor = super.deserialize(data, parent, uiManager); __privateSet(editor, _fontSize2, data.fontSize); __privateSet(editor, _color2, Util.makeHexColor(...data.color)); __privateSet(editor, _content, __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, data.value)); editor.annotationElementId = data.id || null; __privateSet(editor, _initialData, initialData); return editor; } serialize(isForCopying = false) { if (this.isEmpty()) { return null; } if (this.deleted) { return { pageIndex: this.pageIndex, id: this.annotationElementId, deleted: true }; } const padding = _FreeTextEditor._internalPadding * this.parentScale; const rect = this.getRect(padding, padding); const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : __privateGet(this, _color2)); const serialized = { annotationType: AnnotationEditorType.FREETEXT, color, fontSize: __privateGet(this, _fontSize2), value: __privateMethod(this, _serializeContent, serializeContent_fn).call(this), pageIndex: this.pageIndex, rect, rotation: this.rotation, structTreeParentId: this._structTreeParentId }; if (isForCopying) { return serialized; } if (this.annotationElementId && !__privateMethod(this, _hasElementChanged, hasElementChanged_fn).call(this, serialized)) { return null; } serialized.id = this.annotationElementId; return serialized; } renderAnnotationElement(annotation) { const content = super.renderAnnotationElement(annotation); if (this.deleted) { return content; } const { style } = content; style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; style.color = __privateGet(this, _color2); content.replaceChildren(); for (const line of __privateGet(this, _content).split("\n")) { const div = document.createElement("div"); div.append(line ? document.createTextNode(line) : document.createElement("br")); content.append(div); } const padding = _FreeTextEditor._internalPadding * this.parentScale; annotation.updateEdited({ rect: this.getRect(padding, padding), popupContent: __privateGet(this, _content) }); return content; } resetAnnotationElement(annotation) { super.resetAnnotationElement(annotation); annotation.resetEdited(); } }; var FreeTextEditor = _FreeTextEditor; _color2 = new WeakMap(); _content = new WeakMap(); _editorDivId = new WeakMap(); _editModeAC = new WeakMap(); _fontSize2 = new WeakMap(); _initialData = new WeakMap(); _updateFontSize = new WeakSet(); updateFontSize_fn = function(fontSize) { const setFontsize = (size) => { this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; this.translate(0, -(size - __privateGet(this, _fontSize2)) * this.parentScale); __privateSet(this, _fontSize2, size); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); }; const savedFontsize = __privateGet(this, _fontSize2); this.addCommands({ cmd: setFontsize.bind(this, fontSize), undo: setFontsize.bind(this, savedFontsize), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.FREETEXT_SIZE, overwriteIfSameType: true, keepUndo: true }); }; _updateColor = new WeakSet(); updateColor_fn = function(color) { const setColor = (col) => { __privateSet(this, _color2, this.editorDiv.style.color = col); }; const savedColor = __privateGet(this, _color2); this.addCommands({ cmd: setColor.bind(this, color), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.FREETEXT_COLOR, overwriteIfSameType: true, keepUndo: true }); }; _extractText = new WeakSet(); extractText_fn = function() { var _a2; const buffer = []; this.editorDiv.normalize(); for (const child of this.editorDiv.childNodes) { buffer.push(__privateMethod(_a2 = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_a2, child)); } return buffer.join("\n"); }; _setEditorDimensions = new WeakSet(); setEditorDimensions_fn = function() { const [parentWidth, parentHeight] = this.parentDimensions; let rect; if (this.isAttachedToDOM) { rect = this.div.getBoundingClientRect(); } else { const { currentLayer, div } = this; const savedDisplay = div.style.display; const savedVisibility = div.classList.contains("hidden"); div.classList.remove("hidden"); div.style.display = "hidden"; currentLayer.div.append(this.div); rect = div.getBoundingClientRect(); div.remove(); div.style.display = savedDisplay; div.classList.toggle("hidden", savedVisibility); } if (this.rotation % 180 === this.parentRotation % 180) { this.width = rect.width / parentWidth; this.height = rect.height / parentHeight; } else { this.width = rect.height / parentWidth; this.height = rect.width / parentHeight; } this.fixAndSetPosition(); }; _getNodeContent = new WeakSet(); getNodeContent_fn = function(node) { return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); }; _setContent = new WeakSet(); setContent_fn = function() { this.editorDiv.replaceChildren(); if (!__privateGet(this, _content)) { return; } for (const line of __privateGet(this, _content).split("\n")) { const div = document.createElement("div"); div.append(line ? document.createTextNode(line) : document.createElement("br")); this.editorDiv.append(div); } }; _serializeContent = new WeakSet(); serializeContent_fn = function() { return __privateGet(this, _content).replaceAll("\xA0", " "); }; _deserializeContent = new WeakSet(); deserializeContent_fn = function(content) { return content.replaceAll(" ", "\xA0"); }; _hasElementChanged = new WeakSet(); hasElementChanged_fn = function(serialized) { const { value, fontSize, color, pageIndex } = __privateGet(this, _initialData); return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; }; __privateAdd(FreeTextEditor, _getNodeContent); __privateAdd(FreeTextEditor, _deserializeContent); __publicField(FreeTextEditor, "_freeTextDefaultContent", ""); __publicField(FreeTextEditor, "_internalPadding", 0); __publicField(FreeTextEditor, "_defaultColor", null); __publicField(FreeTextEditor, "_defaultFontSize", 10); __publicField(FreeTextEditor, "_type", "freetext"); __publicField(FreeTextEditor, "_editorType", AnnotationEditorType.FREETEXT); var _box, _verticalEdges, _intervals, _getOutlines, getOutlines_fn, _binarySearch, binarySearch_fn, _insert, insert_fn, _remove, remove_fn, _breakEdge, breakEdge_fn; var Outliner = class { constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { __privateAdd(this, _getOutlines); __privateAdd(this, _binarySearch); __privateAdd(this, _insert); __privateAdd(this, _remove); __privateAdd(this, _breakEdge); __privateAdd(this, _box, void 0); __privateAdd(this, _verticalEdges, []); __privateAdd(this, _intervals, []); let minX = Infinity; let maxX = -Infinity; let minY = Infinity; let maxY = -Infinity; const NUMBER_OF_DIGITS = 4; const EPSILON = 10 ** -NUMBER_OF_DIGITS; for (const { x, y, width, height } of boxes) { const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; const left = [x1, y1, y2, true]; const right = [x2, y1, y2, false]; __privateGet(this, _verticalEdges).push(left, right); minX = Math.min(minX, x1); maxX = Math.max(maxX, x2); minY = Math.min(minY, y1); maxY = Math.max(maxY, y2); } const bboxWidth = maxX - minX + 2 * innerMargin; const bboxHeight = maxY - minY + 2 * innerMargin; const shiftedMinX = minX - innerMargin; const shiftedMinY = minY - innerMargin; const lastEdge = __privateGet(this, _verticalEdges).at(isLTR ? -1 : -2); const lastPoint = [lastEdge[0], lastEdge[2]]; for (const edge of __privateGet(this, _verticalEdges)) { const [x, y1, y2] = edge; edge[0] = (x - shiftedMinX) / bboxWidth; edge[1] = (y1 - shiftedMinY) / bboxHeight; edge[2] = (y2 - shiftedMinY) / bboxHeight; } __privateSet(this, _box, { x: shiftedMinX, y: shiftedMinY, width: bboxWidth, height: bboxHeight, lastPoint }); } getOutlines() { __privateGet(this, _verticalEdges).sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); const outlineVerticalEdges = []; for (const edge of __privateGet(this, _verticalEdges)) { if (edge[3]) { outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); __privateMethod(this, _insert, insert_fn).call(this, edge); } else { __privateMethod(this, _remove, remove_fn).call(this, edge); outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); } } return __privateMethod(this, _getOutlines, getOutlines_fn).call(this, outlineVerticalEdges); } }; _box = new WeakMap(); _verticalEdges = new WeakMap(); _intervals = new WeakMap(); _getOutlines = new WeakSet(); getOutlines_fn = function(outlineVerticalEdges) { const edges = []; const allEdges = /* @__PURE__ */ new Set(); for (const edge of outlineVerticalEdges) { const [x, y1, y2] = edge; edges.push([x, y1, edge], [x, y2, edge]); } edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); for (let i = 0, ii = edges.length; i < ii; i += 2) { const edge1 = edges[i][2]; const edge2 = edges[i + 1][2]; edge1.push(edge2); edge2.push(edge1); allEdges.add(edge1); allEdges.add(edge2); } const outlines = []; let outline; while (allEdges.size > 0) { const edge = allEdges.values().next().value; let [x, y1, y2, edge1, edge2] = edge; allEdges.delete(edge); let lastPointX = x; let lastPointY = y1; outline = [x, y2]; outlines.push(outline); while (true) { let e; if (allEdges.has(edge1)) { e = edge1; } else if (allEdges.has(edge2)) { e = edge2; } else { break; } allEdges.delete(e); [x, y1, y2, edge1, edge2] = e; if (lastPointX !== x) { outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); lastPointX = x; } lastPointY = lastPointY === y1 ? y2 : y1; } outline.push(lastPointX, lastPointY); } return new HighlightOutline(outlines, __privateGet(this, _box)); }; _binarySearch = new WeakSet(); binarySearch_fn = function(y) { const array = __privateGet(this, _intervals); let start = 0; let end = array.length - 1; while (start <= end) { const middle = start + end >> 1; const y1 = array[middle][0]; if (y1 === y) { return middle; } if (y1 < y) { start = middle + 1; } else { end = middle - 1; } } return end + 1; }; _insert = new WeakSet(); insert_fn = function([, y1, y2]) { const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); __privateGet(this, _intervals).splice(index2, 0, [y1, y2]); }; _remove = new WeakSet(); remove_fn = function([, y1, y2]) { const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); for (let i = index2; i < __privateGet(this, _intervals).length; i++) { const [start, end] = __privateGet(this, _intervals)[i]; if (start !== y1) { break; } if (start === y1 && end === y2) { __privateGet(this, _intervals).splice(i, 1); return; } } for (let i = index2 - 1; i >= 0; i--) { const [start, end] = __privateGet(this, _intervals)[i]; if (start !== y1) { break; } if (start === y1 && end === y2) { __privateGet(this, _intervals).splice(i, 1); return; } } }; _breakEdge = new WeakSet(); breakEdge_fn = function(edge) { const [x, y1, y2] = edge; const results = [[x, y1, y2]]; const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y2); for (let i = 0; i < index2; i++) { const [start, end] = __privateGet(this, _intervals)[i]; for (let j = 0, jj = results.length; j < jj; j++) { const [, y3, y4] = results[j]; if (end <= y3 || y4 <= start) { continue; } if (y3 >= start) { if (y4 > end) { results[j][1] = end; } else { if (jj === 1) { return []; } results.splice(j, 1); j--; jj--; } continue; } results[j][2] = start; if (y4 > end) { results.push([x, end, y4]); } } } return results; }; var Outline = class { toSVGPath() { throw new Error("Abstract method `toSVGPath` must be implemented."); } get box() { throw new Error("Abstract getter `box` must be implemented."); } serialize(_bbox2, _rotation2) { throw new Error("Abstract method `serialize` must be implemented."); } get free() { return this instanceof FreeHighlightOutline; } }; var _box2, _outlines; var HighlightOutline = class extends Outline { constructor(outlines, box) { super(); __privateAdd(this, _box2, void 0); __privateAdd(this, _outlines, void 0); __privateSet(this, _outlines, outlines); __privateSet(this, _box2, box); } toSVGPath() { const buffer = []; for (const polygon of __privateGet(this, _outlines)) { let [prevX, prevY] = polygon; buffer.push(`M${prevX} ${prevY}`); for (let i = 2; i < polygon.length; i += 2) { const x = polygon[i]; const y = polygon[i + 1]; if (x === prevX) { buffer.push(`V${y}`); prevY = y; } else if (y === prevY) { buffer.push(`H${x}`); prevX = x; } } buffer.push("Z"); } return buffer.join(" "); } serialize([blX, blY, trX, trY], _rotation2) { const outlines = []; const width = trX - blX; const height = trY - blY; for (const outline of __privateGet(this, _outlines)) { const points = new Array(outline.length); for (let i = 0; i < outline.length; i += 2) { points[i] = blX + outline[i] * width; points[i + 1] = trY - outline[i + 1] * height; } outlines.push(points); } return outlines; } get box() { return __privateGet(this, _box2); } }; _box2 = new WeakMap(); _outlines = new WeakMap(); var _box3, _bottom, _innerMargin, _isLTR, _top, _last, _lastX, _lastY, _min, _min_dist, _scaleFactor, _thickness, _points, _MIN_DIST, _MIN_DIFF, _MIN, _getLastCoords, getLastCoords_fn; var _FreeOutliner = class { constructor({ x, y }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { __privateAdd(this, _getLastCoords); __privateAdd(this, _box3, void 0); __privateAdd(this, _bottom, []); __privateAdd(this, _innerMargin, void 0); __privateAdd(this, _isLTR, void 0); __privateAdd(this, _top, []); __privateAdd(this, _last, new Float64Array(18)); __privateAdd(this, _lastX, void 0); __privateAdd(this, _lastY, void 0); __privateAdd(this, _min, void 0); __privateAdd(this, _min_dist, void 0); __privateAdd(this, _scaleFactor, void 0); __privateAdd(this, _thickness, void 0); __privateAdd(this, _points, []); __privateSet(this, _box3, box); __privateSet(this, _thickness, thickness * scaleFactor); __privateSet(this, _isLTR, isLTR); __privateGet(this, _last).set([NaN, NaN, NaN, NaN, x, y], 6); __privateSet(this, _innerMargin, innerMargin); __privateSet(this, _min_dist, __privateGet(_FreeOutliner, _MIN_DIST) * scaleFactor); __privateSet(this, _min, __privateGet(_FreeOutliner, _MIN) * scaleFactor); __privateSet(this, _scaleFactor, scaleFactor); __privateGet(this, _points).push(x, y); } get free() { return true; } isEmpty() { return isNaN(__privateGet(this, _last)[8]); } add({ x, y }) { var _a2; __privateSet(this, _lastX, x); __privateSet(this, _lastY, y); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); let [x1, y1, x2, y2] = __privateGet(this, _last).subarray(8, 12); const diffX = x - x2; const diffY = y - y2; const d = Math.hypot(diffX, diffY); if (d < __privateGet(this, _min)) { return false; } const diffD = d - __privateGet(this, _min_dist); const K = diffD / d; const shiftX = K * diffX; const shiftY = K * diffY; let x0 = x1; let y0 = y1; x1 = x2; y1 = y2; x2 += shiftX; y2 += shiftY; (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.push(x, y); const nX = -shiftY / diffD; const nY = shiftX / diffD; const thX = nX * __privateGet(this, _thickness); const thY = nY * __privateGet(this, _thickness); __privateGet(this, _last).set(__privateGet(this, _last).subarray(2, 8), 0); __privateGet(this, _last).set([x2 + thX, y2 + thY], 4); __privateGet(this, _last).set(__privateGet(this, _last).subarray(14, 18), 12); __privateGet(this, _last).set([x2 - thX, y2 - thY], 16); if (isNaN(__privateGet(this, _last)[6])) { if (__privateGet(this, _top).length === 0) { __privateGet(this, _last).set([x1 + thX, y1 + thY], 2); __privateGet(this, _top).push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); __privateGet(this, _last).set([x1 - thX, y1 - thY], 14); __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); } __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); return !this.isEmpty(); } __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)); if (angle < Math.PI / 2) { [x1, y1, x2, y2] = __privateGet(this, _last).subarray(2, 6); __privateGet(this, _top).push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); [x1, y1, x0, y0] = __privateGet(this, _last).subarray(14, 18); __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); return true; } [x0, y0, x1, y1, x2, y2] = __privateGet(this, _last).subarray(0, 6); __privateGet(this, _top).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); [x2, y2, x1, y1, x0, y0] = __privateGet(this, _last).subarray(12, 18); __privateGet(this, _bottom).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); return true; } toSVGPath() { if (this.isEmpty()) { return ""; } const top = __privateGet(this, _top); const bottom = __privateGet(this, _bottom); const lastTop = __privateGet(this, _last).subarray(4, 6); const lastBottom = __privateGet(this, _last).subarray(16, 18); const [x, y, width, height] = __privateGet(this, _box3); const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); if (isNaN(__privateGet(this, _last)[6]) && !this.isEmpty()) { return `M${(__privateGet(this, _last)[2] - x) / width} ${(__privateGet(this, _last)[3] - y) / height} L${(__privateGet(this, _last)[4] - x) / width} ${(__privateGet(this, _last)[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(__privateGet(this, _last)[16] - x) / width} ${(__privateGet(this, _last)[17] - y) / height} L${(__privateGet(this, _last)[14] - x) / width} ${(__privateGet(this, _last)[15] - y) / height} Z`; } const buffer = []; buffer.push(`M${top[4]} ${top[5]}`); for (let i = 6; i < top.length; i += 6) { if (isNaN(top[i])) { buffer.push(`L${top[i + 4]} ${top[i + 5]}`); } else { buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`); } } buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`); for (let i = bottom.length - 6; i >= 6; i -= 6) { if (isNaN(bottom[i])) { buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`); } else { buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`); } } buffer.push(`L${bottom[4]} ${bottom[5]} Z`); return buffer.join(" "); } getOutlines() { var _a2, _b; const top = __privateGet(this, _top); const bottom = __privateGet(this, _bottom); const last = __privateGet(this, _last); const lastTop = last.subarray(4, 6); const lastBottom = last.subarray(16, 18); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); const points = new Float64Array(((_b = (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.length) != null ? _b : 0) + 2); for (let i = 0, ii = points.length - 2; i < ii; i += 2) { points[i] = (__privateGet(this, _points)[i] - layerX) / layerWidth; points[i + 1] = (__privateGet(this, _points)[i + 1] - layerY) / layerHeight; } points[points.length - 2] = (__privateGet(this, _lastX) - layerX) / layerWidth; points[points.length - 1] = (__privateGet(this, _lastY) - layerY) / layerHeight; const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); if (isNaN(last[6]) && !this.isEmpty()) { const outline2 = new Float64Array(36); outline2.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0); return new FreeHighlightOutline(outline2, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); } const outline = new Float64Array(__privateGet(this, _top).length + 24 + __privateGet(this, _bottom).length); let N = top.length; for (let i = 0; i < N; i += 2) { if (isNaN(top[i])) { outline[i] = outline[i + 1] = NaN; continue; } outline[i] = top[i]; outline[i + 1] = top[i + 1]; } outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], N); N += 24; for (let i = bottom.length - 6; i >= 6; i -= 6) { for (let j = 0; j < 6; j += 2) { if (isNaN(bottom[i + j])) { outline[N] = outline[N + 1] = NaN; N += 2; continue; } outline[N] = bottom[i + j]; outline[N + 1] = bottom[i + j + 1]; N += 2; } } outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N); return new FreeHighlightOutline(outline, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); } }; var FreeOutliner = _FreeOutliner; _box3 = new WeakMap(); _bottom = new WeakMap(); _innerMargin = new WeakMap(); _isLTR = new WeakMap(); _top = new WeakMap(); _last = new WeakMap(); _lastX = new WeakMap(); _lastY = new WeakMap(); _min = new WeakMap(); _min_dist = new WeakMap(); _scaleFactor = new WeakMap(); _thickness = new WeakMap(); _points = new WeakMap(); _MIN_DIST = new WeakMap(); _MIN_DIFF = new WeakMap(); _MIN = new WeakMap(); _getLastCoords = new WeakSet(); getLastCoords_fn = function() { const lastTop = __privateGet(this, _last).subarray(4, 6); const lastBottom = __privateGet(this, _last).subarray(16, 18); const [x, y, width, height] = __privateGet(this, _box3); return [(__privateGet(this, _lastX) + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (__privateGet(this, _lastX) + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; }; __privateAdd(FreeOutliner, _MIN_DIST, 8); __privateAdd(FreeOutliner, _MIN_DIFF, 2); __privateAdd(FreeOutliner, _MIN, __privateGet(_FreeOutliner, _MIN_DIST) + __privateGet(_FreeOutliner, _MIN_DIFF)); var _box4, _bbox, _innerMargin2, _isLTR2, _points2, _scaleFactor2, _outline, _rescale, rescale_fn, _rescaleAndSwap, rescaleAndSwap_fn, _computeMinMax, computeMinMax_fn; var FreeHighlightOutline = class extends Outline { constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { super(); __privateAdd(this, _rescale); __privateAdd(this, _rescaleAndSwap); __privateAdd(this, _computeMinMax); __privateAdd(this, _box4, void 0); __privateAdd(this, _bbox, null); __privateAdd(this, _innerMargin2, void 0); __privateAdd(this, _isLTR2, void 0); __privateAdd(this, _points2, void 0); __privateAdd(this, _scaleFactor2, void 0); __privateAdd(this, _outline, void 0); __privateSet(this, _outline, outline); __privateSet(this, _points2, points); __privateSet(this, _box4, box); __privateSet(this, _scaleFactor2, scaleFactor); __privateSet(this, _innerMargin2, innerMargin); __privateSet(this, _isLTR2, isLTR); __privateMethod(this, _computeMinMax, computeMinMax_fn).call(this, isLTR); const { x, y, width, height } = __privateGet(this, _bbox); for (let i = 0, ii = outline.length; i < ii; i += 2) { outline[i] = (outline[i] - x) / width; outline[i + 1] = (outline[i + 1] - y) / height; } for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = (points[i] - x) / width; points[i + 1] = (points[i + 1] - y) / height; } } toSVGPath() { const buffer = [`M${__privateGet(this, _outline)[4]} ${__privateGet(this, _outline)[5]}`]; for (let i = 6, ii = __privateGet(this, _outline).length; i < ii; i += 6) { if (isNaN(__privateGet(this, _outline)[i])) { buffer.push(`L${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); continue; } buffer.push(`C${__privateGet(this, _outline)[i]} ${__privateGet(this, _outline)[i + 1]} ${__privateGet(this, _outline)[i + 2]} ${__privateGet(this, _outline)[i + 3]} ${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); } buffer.push("Z"); return buffer.join(" "); } serialize([blX, blY, trX, trY], rotation) { const width = trX - blX; const height = trY - blY; let outline; let points; switch (rotation) { case 0: outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), blX, trY, width, -height); points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), blX, trY, width, -height); break; case 90: outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), blX, blY, width, height); points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), blX, blY, width, height); break; case 180: outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), trX, blY, -width, height); points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), trX, blY, -width, height); break; case 270: outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), trX, trY, -width, -height); points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), trX, trY, -width, -height); break; } return { outline: Array.from(outline), points: [Array.from(points)] }; } get box() { return __privateGet(this, _bbox); } getNewOutline(thickness, innerMargin) { const { x, y, width, height } = __privateGet(this, _bbox); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box4); const sx = width * layerWidth; const sy = height * layerHeight; const tx = x * layerWidth + layerX; const ty = y * layerHeight + layerY; const outliner = new FreeOutliner({ x: __privateGet(this, _points2)[0] * sx + tx, y: __privateGet(this, _points2)[1] * sy + ty }, __privateGet(this, _box4), __privateGet(this, _scaleFactor2), thickness, __privateGet(this, _isLTR2), innerMargin != null ? innerMargin : __privateGet(this, _innerMargin2)); for (let i = 2; i < __privateGet(this, _points2).length; i += 2) { outliner.add({ x: __privateGet(this, _points2)[i] * sx + tx, y: __privateGet(this, _points2)[i + 1] * sy + ty }); } return outliner.getOutlines(); } }; _box4 = new WeakMap(); _bbox = new WeakMap(); _innerMargin2 = new WeakMap(); _isLTR2 = new WeakMap(); _points2 = new WeakMap(); _scaleFactor2 = new WeakMap(); _outline = new WeakMap(); _rescale = new WeakSet(); rescale_fn = function(src, tx, ty, sx, sy) { const dest = new Float64Array(src.length); for (let i = 0, ii = src.length; i < ii; i += 2) { dest[i] = tx + src[i] * sx; dest[i + 1] = ty + src[i + 1] * sy; } return dest; }; _rescaleAndSwap = new WeakSet(); rescaleAndSwap_fn = function(src, tx, ty, sx, sy) { const dest = new Float64Array(src.length); for (let i = 0, ii = src.length; i < ii; i += 2) { dest[i] = tx + src[i + 1] * sx; dest[i + 1] = ty + src[i] * sy; } return dest; }; _computeMinMax = new WeakSet(); computeMinMax_fn = function(isLTR) { const outline = __privateGet(this, _outline); let lastX = outline[4]; let lastY = outline[5]; let minX = lastX; let minY = lastY; let maxX = lastX; let maxY = lastY; let lastPointX = lastX; let lastPointY = lastY; const ltrCallback = isLTR ? Math.max : Math.min; for (let i = 6, ii = outline.length; i < ii; i += 6) { if (isNaN(outline[i])) { minX = Math.min(minX, outline[i + 4]); minY = Math.min(minY, outline[i + 5]); maxX = Math.max(maxX, outline[i + 4]); maxY = Math.max(maxY, outline[i + 5]); if (lastPointY < outline[i + 5]) { lastPointX = outline[i + 4]; lastPointY = outline[i + 5]; } else if (lastPointY === outline[i + 5]) { lastPointX = ltrCallback(lastPointX, outline[i + 4]); } } else { const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6)); minX = Math.min(minX, bbox[0]); minY = Math.min(minY, bbox[1]); maxX = Math.max(maxX, bbox[2]); maxY = Math.max(maxY, bbox[3]); if (lastPointY < bbox[3]) { lastPointX = bbox[2]; lastPointY = bbox[3]; } else if (lastPointY === bbox[3]) { lastPointX = ltrCallback(lastPointX, bbox[2]); } } lastX = outline[i + 4]; lastY = outline[i + 5]; } const x = minX - __privateGet(this, _innerMargin2), y = minY - __privateGet(this, _innerMargin2), width = maxX - minX + 2 * __privateGet(this, _innerMargin2), height = maxY - minY + 2 * __privateGet(this, _innerMargin2); __privateSet(this, _bbox, { x, y, width, height, lastPoint: [lastPointX, lastPointY] }); }; var _boundKeyDown2, _boundPointerDown, _button, _buttonSwatch, _defaultColor, _dropdown, _dropdownWasFromKeyboard, _isMainColorPicker, _editor3, _eventBus, _uiManager2, _type, _getDropdownRoot, getDropdownRoot_fn, _colorSelect, colorSelect_fn, _keyDown2, keyDown_fn2, _openDropdown, openDropdown_fn, _pointerDown2, pointerDown_fn2, _isDropdownVisible, isDropdownVisible_get; var _ColorPicker = class { constructor({ editor = null, uiManager = null }) { __privateAdd(this, _getDropdownRoot); __privateAdd(this, _colorSelect); __privateAdd(this, _keyDown2); __privateAdd(this, _openDropdown); __privateAdd(this, _pointerDown2); __privateAdd(this, _isDropdownVisible); __privateAdd(this, _boundKeyDown2, __privateMethod(this, _keyDown2, keyDown_fn2).bind(this)); __privateAdd(this, _boundPointerDown, __privateMethod(this, _pointerDown2, pointerDown_fn2).bind(this)); __privateAdd(this, _button, null); __privateAdd(this, _buttonSwatch, null); __privateAdd(this, _defaultColor, void 0); __privateAdd(this, _dropdown, null); __privateAdd(this, _dropdownWasFromKeyboard, false); __privateAdd(this, _isMainColorPicker, false); __privateAdd(this, _editor3, null); __privateAdd(this, _eventBus, void 0); __privateAdd(this, _uiManager2, null); __privateAdd(this, _type, void 0); var _a2; if (editor) { __privateSet(this, _isMainColorPicker, false); __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_COLOR); __privateSet(this, _editor3, editor); } else { __privateSet(this, _isMainColorPicker, true); __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR); } __privateSet(this, _uiManager2, (editor == null ? void 0 : editor._uiManager) || uiManager); __privateSet(this, _eventBus, __privateGet(this, _uiManager2)._eventBus); __privateSet(this, _defaultColor, (editor == null ? void 0 : editor.color) || ((_a2 = __privateGet(this, _uiManager2)) == null ? void 0 : _a2.highlightColors.values().next().value) || "#FFFF98"); } static get _keyboardManager() { return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], _ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], _ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], _ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], _ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], _ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], _ColorPicker.prototype._moveToEnd]])); } renderButton() { const button = __privateSet(this, _button, document.createElement("button")); button.className = "colorPicker"; button.tabIndex = "0"; button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); button.setAttribute("aria-haspopup", true); const signal = __privateGet(this, _uiManager2)._signal; button.addEventListener("click", __privateMethod(this, _openDropdown, openDropdown_fn).bind(this), { signal }); button.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { signal }); const swatch = __privateSet(this, _buttonSwatch, document.createElement("span")); swatch.className = "swatch"; swatch.setAttribute("aria-hidden", true); swatch.style.backgroundColor = __privateGet(this, _defaultColor); button.append(swatch); return button; } renderMainDropdown() { const dropdown = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); dropdown.setAttribute("aria-orientation", "horizontal"); dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); return dropdown; } _colorSelectFromKeyboard(event) { if (event.target === __privateGet(this, _button)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } const color = event.target.getAttribute("data-color"); if (!color) { return; } __privateMethod(this, _colorSelect, colorSelect_fn).call(this, color, event); } _moveToNext(event) { var _a2, _b; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } if (event.target === __privateGet(this, _button)) { (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); return; } (_b = event.target.nextSibling) == null ? void 0 : _b.focus(); } _moveToPrevious(event) { var _a2, _b; if (event.target === ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.firstChild) || event.target === __privateGet(this, _button)) { if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { this._hideDropdownFromKeyboard(); } return; } if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); } (_b = event.target.previousSibling) == null ? void 0 : _b.focus(); } _moveToBeginning(event) { var _a2; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); } _moveToEnd(event) { var _a2; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } (_a2 = __privateGet(this, _dropdown).lastChild) == null ? void 0 : _a2.focus(); } hideDropdown() { var _a2; (_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.classList.add("hidden"); window.removeEventListener("pointerdown", __privateGet(this, _boundPointerDown)); } _hideDropdownFromKeyboard() { var _a2; if (__privateGet(this, _isMainColorPicker)) { return; } if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { (_a2 = __privateGet(this, _editor3)) == null ? void 0 : _a2.unselect(); return; } this.hideDropdown(); __privateGet(this, _button).focus({ preventScroll: true, focusVisible: __privateGet(this, _dropdownWasFromKeyboard) }); } updateColor(color) { if (__privateGet(this, _buttonSwatch)) { __privateGet(this, _buttonSwatch).style.backgroundColor = color; } if (!__privateGet(this, _dropdown)) { return; } const i = __privateGet(this, _uiManager2).highlightColors.values(); for (const child of __privateGet(this, _dropdown).children) { child.setAttribute("aria-selected", i.next().value === color); } } destroy() { var _a2, _b; (_a2 = __privateGet(this, _button)) == null ? void 0 : _a2.remove(); __privateSet(this, _button, null); __privateSet(this, _buttonSwatch, null); (_b = __privateGet(this, _dropdown)) == null ? void 0 : _b.remove(); __privateSet(this, _dropdown, null); } }; var ColorPicker = _ColorPicker; _boundKeyDown2 = new WeakMap(); _boundPointerDown = new WeakMap(); _button = new WeakMap(); _buttonSwatch = new WeakMap(); _defaultColor = new WeakMap(); _dropdown = new WeakMap(); _dropdownWasFromKeyboard = new WeakMap(); _isMainColorPicker = new WeakMap(); _editor3 = new WeakMap(); _eventBus = new WeakMap(); _uiManager2 = new WeakMap(); _type = new WeakMap(); _getDropdownRoot = new WeakSet(); getDropdownRoot_fn = function() { const div = document.createElement("div"); const signal = __privateGet(this, _uiManager2)._signal; div.addEventListener("contextmenu", noContextMenu, { signal }); div.className = "dropdown"; div.role = "listbox"; div.setAttribute("aria-multiselectable", false); div.setAttribute("aria-orientation", "vertical"); div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); for (const [name, color] of __privateGet(this, _uiManager2).highlightColors) { const button = document.createElement("button"); button.tabIndex = "0"; button.role = "option"; button.setAttribute("data-color", color); button.title = name; button.setAttribute("data-l10n-id", `pdfjs-editor-colorpicker-${name}`); const swatch = document.createElement("span"); button.append(swatch); swatch.className = "swatch"; swatch.style.backgroundColor = color; button.setAttribute("aria-selected", color === __privateGet(this, _defaultColor)); button.addEventListener("click", __privateMethod(this, _colorSelect, colorSelect_fn).bind(this, color), { signal }); div.append(button); } div.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { signal }); return div; }; _colorSelect = new WeakSet(); colorSelect_fn = function(color, event) { event.stopPropagation(); __privateGet(this, _eventBus).dispatch("switchannotationeditorparams", { source: this, type: __privateGet(this, _type), value: color }); }; _keyDown2 = new WeakSet(); keyDown_fn2 = function(event) { _ColorPicker._keyboardManager.exec(this, event); }; _openDropdown = new WeakSet(); openDropdown_fn = function(event) { if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { this.hideDropdown(); return; } __privateSet(this, _dropdownWasFromKeyboard, event.detail === 0); window.addEventListener("pointerdown", __privateGet(this, _boundPointerDown), { signal: __privateGet(this, _uiManager2)._signal }); if (__privateGet(this, _dropdown)) { __privateGet(this, _dropdown).classList.remove("hidden"); return; } const root = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); __privateGet(this, _button).append(root); }; _pointerDown2 = new WeakSet(); pointerDown_fn2 = function(event) { var _a2; if ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.contains(event.target)) { return; } this.hideDropdown(); }; _isDropdownVisible = new WeakSet(); isDropdownVisible_get = function() { return __privateGet(this, _dropdown) && !__privateGet(this, _dropdown).classList.contains("hidden"); }; var _anchorNode, _anchorOffset, _boxes, _clipPathId, _colorPicker2, _focusOutlines, _focusNode, _focusOffset, _highlightDiv, _highlightOutlines, _id4, _isFreeHighlight, _lastPoint, _opacity, _outlineId, _text, _thickness2, _methodOfCreation, _createOutlines, createOutlines_fn, _createFreeOutlines, createFreeOutlines_fn, _updateColor2, updateColor_fn2, _updateThickness, updateThickness_fn, _changeThickness, changeThickness_fn, _cleanDrawLayer, cleanDrawLayer_fn, _addToDrawLayer, addToDrawLayer_fn, _rotateBbox, rotateBbox_fn, _keydown, keydown_fn, _setCaret, setCaret_fn, _getRotation, getRotation_fn, _serializeBoxes, serializeBoxes_fn, _serializeOutlines, serializeOutlines_fn, _highlightMove, highlightMove_fn, _endHighlight, endHighlight_fn; var _HighlightEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "highlightEditor" }); __privateAdd(this, _createOutlines); __privateAdd(this, _createFreeOutlines); __privateAdd(this, _updateColor2); __privateAdd(this, _updateThickness); __privateAdd(this, _changeThickness); __privateAdd(this, _cleanDrawLayer); __privateAdd(this, _addToDrawLayer); __privateAdd(this, _keydown); __privateAdd(this, _setCaret); __privateAdd(this, _getRotation); __privateAdd(this, _serializeBoxes); __privateAdd(this, _serializeOutlines); __privateAdd(this, _anchorNode, null); __privateAdd(this, _anchorOffset, 0); __privateAdd(this, _boxes, void 0); __privateAdd(this, _clipPathId, null); __privateAdd(this, _colorPicker2, null); __privateAdd(this, _focusOutlines, null); __privateAdd(this, _focusNode, null); __privateAdd(this, _focusOffset, 0); __privateAdd(this, _highlightDiv, null); __privateAdd(this, _highlightOutlines, null); __privateAdd(this, _id4, null); __privateAdd(this, _isFreeHighlight, false); __privateAdd(this, _lastPoint, null); __privateAdd(this, _opacity, void 0); __privateAdd(this, _outlineId, null); __privateAdd(this, _text, ""); __privateAdd(this, _thickness2, void 0); __privateAdd(this, _methodOfCreation, ""); this.color = params.color || _HighlightEditor._defaultColor; __privateSet(this, _thickness2, params.thickness || _HighlightEditor._defaultThickness); __privateSet(this, _opacity, params.opacity || _HighlightEditor._defaultOpacity); __privateSet(this, _boxes, params.boxes || null); __privateSet(this, _methodOfCreation, params.methodOfCreation || ""); __privateSet(this, _text, params.text || ""); this._isDraggable = false; if (params.highlightId > -1) { __privateSet(this, _isFreeHighlight, true); __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, params); __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); } else { __privateSet(this, _anchorNode, params.anchorNode); __privateSet(this, _anchorOffset, params.anchorOffset); __privateSet(this, _focusNode, params.focusNode); __privateSet(this, _focusOffset, params.focusOffset); __privateMethod(this, _createOutlines, createOutlines_fn).call(this); __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); this.rotate(this.rotation); } } static get _keyboardManager() { const proto = _HighlightEditor.prototype; return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, { args: [0] }], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, { args: [1] }], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, { args: [2] }], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, { args: [3] }]])); } get telemetryInitialData() { return { action: "added", type: __privateGet(this, _isFreeHighlight) ? "free_highlight" : "highlight", color: this._uiManager.highlightColorNames.get(this.color), thickness: __privateGet(this, _thickness2), methodOfCreation: __privateGet(this, _methodOfCreation) }; } get telemetryFinalData() { return { type: "highlight", color: this._uiManager.highlightColorNames.get(this.color) }; } static computeTelemetryFinalData(data) { return { numberOfColors: data.get("color").size }; } static initialize(l10n, uiManager) { var _a2; AnnotationEditor.initialize(l10n, uiManager); _HighlightEditor._defaultColor || (_HighlightEditor._defaultColor = ((_a2 = uiManager.highlightColors) == null ? void 0 : _a2.values().next().value) || "#fff066"); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: _HighlightEditor._defaultColor = value; break; case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: _HighlightEditor._defaultThickness = value; break; } } translateInPage(x, y) { } get toolbarPosition() { return __privateGet(this, _lastPoint); } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.HIGHLIGHT_COLOR: __privateMethod(this, _updateColor2, updateColor_fn2).call(this, value); break; case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: __privateMethod(this, _updateThickness, updateThickness_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, _HighlightEditor._defaultThickness]]; } get propertiesToUpdate() { return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, __privateGet(this, _thickness2) || _HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, __privateGet(this, _isFreeHighlight)]]; } async addEditToolbar() { const toolbar = await super.addEditToolbar(); if (!toolbar) { return null; } if (this._uiManager.highlightColors) { __privateSet(this, _colorPicker2, new ColorPicker({ editor: this })); toolbar.addColorPicker(__privateGet(this, _colorPicker2)); } return toolbar; } disableEditing() { super.disableEditing(); this.div.classList.toggle("disabled", true); } enableEditing() { super.enableEditing(); this.div.classList.toggle("disabled", false); } fixAndSetPosition() { return super.fixAndSetPosition(__privateMethod(this, _getRotation, getRotation_fn).call(this)); } getBaseTranslation() { return [0, 0]; } getRect(tx, ty) { return super.getRect(tx, ty, __privateMethod(this, _getRotation, getRotation_fn).call(this)); } onceAdded() { this.parent.addUndoableEditor(this); this.div.focus(); } remove() { __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); this._reportTelemetry({ action: "deleted" }); super.remove(); } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); if (!this.isAttachedToDOM) { this.parent.add(this); } } setParent(parent) { var _a2; let mustBeSelected = false; if (this.parent && !parent) { __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); } else if (parent) { __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this, parent); mustBeSelected = !this.parent && ((_a2 = this.div) == null ? void 0 : _a2.classList.contains("selectedEditor")); } super.setParent(parent); this.show(this._isVisible); if (mustBeSelected) { this.select(); } } rotate(angle) { var _a2, _b, _c; const { drawLayer } = this.parent; let box; if (__privateGet(this, _isFreeHighlight)) { angle = (angle - this.rotation + 360) % 360; box = __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, angle); } else { box = __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, this, angle); } drawLayer.rotate(__privateGet(this, _id4), angle); drawLayer.rotate(__privateGet(this, _outlineId), angle); drawLayer.updateBox(__privateGet(this, _id4), box); drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_c = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_c, __privateGet(this, _focusOutlines).box, angle)); } render() { if (this.div) { return this.div; } const div = super.render(); if (__privateGet(this, _text)) { div.setAttribute("aria-label", __privateGet(this, _text)); div.setAttribute("role", "mark"); } if (__privateGet(this, _isFreeHighlight)) { div.classList.add("free"); } else { this.div.addEventListener("keydown", __privateMethod(this, _keydown, keydown_fn).bind(this), { signal: this._uiManager._signal }); } const highlightDiv = __privateSet(this, _highlightDiv, document.createElement("div")); div.append(highlightDiv); highlightDiv.setAttribute("aria-hidden", "true"); highlightDiv.className = "internal"; highlightDiv.style.clipPath = __privateGet(this, _clipPathId); const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(this.width * parentWidth, this.height * parentHeight); bindEvents(this, __privateGet(this, _highlightDiv), ["pointerover", "pointerleave"]); this.enableEditing(); return div; } pointerover() { this.parent.drawLayer.addClass(__privateGet(this, _outlineId), "hovered"); } pointerleave() { this.parent.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); } _moveCaret(direction) { this.parent.unselect(this); switch (direction) { case 0: case 2: __privateMethod(this, _setCaret, setCaret_fn).call(this, true); break; case 1: case 3: __privateMethod(this, _setCaret, setCaret_fn).call(this, false); break; } } select() { var _a2, _b; super.select(); if (!__privateGet(this, _outlineId)) { return; } (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); (_b = this.parent) == null ? void 0 : _b.drawLayer.addClass(__privateGet(this, _outlineId), "selected"); } unselect() { var _a2; super.unselect(); if (!__privateGet(this, _outlineId)) { return; } (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "selected"); if (!__privateGet(this, _isFreeHighlight)) { __privateMethod(this, _setCaret, setCaret_fn).call(this, false); } } get _mustFixPosition() { return !__privateGet(this, _isFreeHighlight); } show(visible = this._isVisible) { super.show(visible); if (this.parent) { this.parent.drawLayer.show(__privateGet(this, _id4), visible); this.parent.drawLayer.show(__privateGet(this, _outlineId), visible); } } static startHighlighting(parent, isLTR, { target: textLayer, x, y }) { const { x: layerX, y: layerY, width: parentWidth, height: parentHeight } = textLayer.getBoundingClientRect(); const ac = new AbortController(); const signal = parent.combinedSignal(ac); const pointerDown = (e) => { e.preventDefault(); e.stopPropagation(); }; const pointerUpCallback = (e) => { ac.abort(); __privateMethod(this, _endHighlight, endHighlight_fn).call(this, parent, e); }; window.addEventListener("blur", pointerUpCallback, { signal }); window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("pointerdown", pointerDown, { capture: true, passive: false, signal }); window.addEventListener("contextmenu", noContextMenu, { signal }); textLayer.addEventListener("pointermove", __privateMethod(this, _highlightMove, highlightMove_fn).bind(this, parent), { signal }); this._freeHighlight = new FreeOutliner({ x, y }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 1e-3); ({ id: this._freeHighlightId, clipPathId: this._freeHighlightClipId } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true)); } static deserialize(data, parent, uiManager) { var _a2; const editor = super.deserialize(data, parent, uiManager); const { rect: [blX, blY, trX, trY], color, quadPoints } = data; editor.color = Util.makeHexColor(...color); __privateSet(editor, _opacity, data.opacity); const [pageWidth, pageHeight] = editor.pageDimensions; editor.width = (trX - blX) / pageWidth; editor.height = (trY - blY) / pageHeight; const boxes = __privateSet(editor, _boxes, []); for (let i = 0; i < quadPoints.length; i += 8) { boxes.push({ x: (quadPoints[4] - trX) / pageWidth, y: (trY - (1 - quadPoints[i + 5])) / pageHeight, width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight }); } __privateMethod(_a2 = editor, _createOutlines, createOutlines_fn).call(_a2); return editor; } serialize(isForCopying = false) { if (this.isEmpty() || isForCopying) { return null; } const rect = this.getRect(0, 0); const color = AnnotationEditor._colorManager.convert(this.color); return { annotationType: AnnotationEditorType.HIGHLIGHT, color, opacity: __privateGet(this, _opacity), thickness: __privateGet(this, _thickness2), quadPoints: __privateMethod(this, _serializeBoxes, serializeBoxes_fn).call(this), outlines: __privateMethod(this, _serializeOutlines, serializeOutlines_fn).call(this, rect), pageIndex: this.pageIndex, rect, rotation: __privateMethod(this, _getRotation, getRotation_fn).call(this), structTreeParentId: this._structTreeParentId }; } static canCreateNewEmptyEditor() { return false; } }; var HighlightEditor = _HighlightEditor; _anchorNode = new WeakMap(); _anchorOffset = new WeakMap(); _boxes = new WeakMap(); _clipPathId = new WeakMap(); _colorPicker2 = new WeakMap(); _focusOutlines = new WeakMap(); _focusNode = new WeakMap(); _focusOffset = new WeakMap(); _highlightDiv = new WeakMap(); _highlightOutlines = new WeakMap(); _id4 = new WeakMap(); _isFreeHighlight = new WeakMap(); _lastPoint = new WeakMap(); _opacity = new WeakMap(); _outlineId = new WeakMap(); _text = new WeakMap(); _thickness2 = new WeakMap(); _methodOfCreation = new WeakMap(); _createOutlines = new WeakSet(); createOutlines_fn = function() { const outliner = new Outliner(__privateGet(this, _boxes), 1e-3); __privateSet(this, _highlightOutlines, outliner.getOutlines()); ({ x: this.x, y: this.y, width: this.width, height: this.height } = __privateGet(this, _highlightOutlines).box); const outlinerForOutline = new Outliner(__privateGet(this, _boxes), 25e-4, 1e-3, this._uiManager.direction === "ltr"); __privateSet(this, _focusOutlines, outlinerForOutline.getOutlines()); const { lastPoint } = __privateGet(this, _focusOutlines).box; __privateSet(this, _lastPoint, [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]); }; _createFreeOutlines = new WeakSet(); createFreeOutlines_fn = function({ highlightOutlines, highlightId, clipPathId }) { var _a2, _b; __privateSet(this, _highlightOutlines, highlightOutlines); const extraThickness = 1.5; __privateSet(this, _focusOutlines, highlightOutlines.getNewOutline(__privateGet(this, _thickness2) / 2 + extraThickness, 25e-4)); if (highlightId >= 0) { __privateSet(this, _id4, highlightId); __privateSet(this, _clipPathId, clipPathId); this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines); __privateSet(this, _outlineId, this.parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); } else if (this.parent) { const angle = this.parent.viewport.rotation; this.parent.drawLayer.updateLine(__privateGet(this, _id4), highlightOutlines); this.parent.drawLayer.updateBox(__privateGet(this, _id4), __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, (angle - this.rotation + 360) % 360)); this.parent.drawLayer.updateLine(__privateGet(this, _outlineId), __privateGet(this, _focusOutlines)); this.parent.drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, __privateGet(this, _focusOutlines).box, angle)); } const { x, y, width, height } = highlightOutlines.box; switch (this.rotation) { case 0: this.x = x; this.y = y; this.width = width; this.height = height; break; case 90: { const [pageWidth, pageHeight] = this.parentDimensions; this.x = y; this.y = 1 - x; this.width = width * pageHeight / pageWidth; this.height = height * pageWidth / pageHeight; break; } case 180: this.x = 1 - x; this.y = 1 - y; this.width = width; this.height = height; break; case 270: { const [pageWidth, pageHeight] = this.parentDimensions; this.x = 1 - y; this.y = x; this.width = width * pageHeight / pageWidth; this.height = height * pageWidth / pageHeight; break; } } const { lastPoint } = __privateGet(this, _focusOutlines).box; __privateSet(this, _lastPoint, [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]); }; _updateColor2 = new WeakSet(); updateColor_fn2 = function(color) { const setColor = (col) => { var _a2, _b; this.color = col; (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.changeColor(__privateGet(this, _id4), col); (_b = __privateGet(this, _colorPicker2)) == null ? void 0 : _b.updateColor(col); }; const savedColor = this.color; this.addCommands({ cmd: setColor.bind(this, color), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, overwriteIfSameType: true, keepUndo: true }); this._reportTelemetry({ action: "color_changed", color: this._uiManager.highlightColorNames.get(color) }, true); }; _updateThickness = new WeakSet(); updateThickness_fn = function(thickness) { const savedThickness = __privateGet(this, _thickness2); const setThickness = (th) => { __privateSet(this, _thickness2, th); __privateMethod(this, _changeThickness, changeThickness_fn).call(this, th); }; this.addCommands({ cmd: setThickness.bind(this, thickness), undo: setThickness.bind(this, savedThickness), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_THICKNESS, overwriteIfSameType: true, keepUndo: true }); this._reportTelemetry({ action: "thickness_changed", thickness }, true); }; _changeThickness = new WeakSet(); changeThickness_fn = function(thickness) { if (!__privateGet(this, _isFreeHighlight)) { return; } __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, { highlightOutlines: __privateGet(this, _highlightOutlines).getNewOutline(thickness / 2) }); this.fixAndSetPosition(); const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(this.width * parentWidth, this.height * parentHeight); }; _cleanDrawLayer = new WeakSet(); cleanDrawLayer_fn = function() { if (__privateGet(this, _id4) === null || !this.parent) { return; } this.parent.drawLayer.remove(__privateGet(this, _id4)); __privateSet(this, _id4, null); this.parent.drawLayer.remove(__privateGet(this, _outlineId)); __privateSet(this, _outlineId, null); }; _addToDrawLayer = new WeakSet(); addToDrawLayer_fn = function(parent = this.parent) { if (__privateGet(this, _id4) !== null) { return; } ({ id: __privateWrapper(this, _id4)._, clipPathId: __privateWrapper(this, _clipPathId)._ } = parent.drawLayer.highlight(__privateGet(this, _highlightOutlines), this.color, __privateGet(this, _opacity))); __privateSet(this, _outlineId, parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); if (__privateGet(this, _highlightDiv)) { __privateGet(this, _highlightDiv).style.clipPath = __privateGet(this, _clipPathId); } }; _rotateBbox = new WeakSet(); rotateBbox_fn = function({ x, y, width, height }, angle) { switch (angle) { case 90: return { x: 1 - y - height, y: x, width: height, height: width }; case 180: return { x: 1 - x - width, y: 1 - y - height, width, height }; case 270: return { x: y, y: 1 - x - width, width: height, height: width }; } return { x, y, width, height }; }; _keydown = new WeakSet(); keydown_fn = function(event) { _HighlightEditor._keyboardManager.exec(this, event); }; _setCaret = new WeakSet(); setCaret_fn = function(start) { if (!__privateGet(this, _anchorNode)) { return; } const selection = window.getSelection(); if (start) { selection.setPosition(__privateGet(this, _anchorNode), __privateGet(this, _anchorOffset)); } else { selection.setPosition(__privateGet(this, _focusNode), __privateGet(this, _focusOffset)); } }; _getRotation = new WeakSet(); getRotation_fn = function() { return __privateGet(this, _isFreeHighlight) ? this.rotation : 0; }; _serializeBoxes = new WeakSet(); serializeBoxes_fn = function() { if (__privateGet(this, _isFreeHighlight)) { return null; } const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; const boxes = __privateGet(this, _boxes); const quadPoints = new Float32Array(boxes.length * 8); let i = 0; for (const { x, y, width, height } of boxes) { const sx = x * pageWidth + pageX; const sy = (1 - y - height) * pageHeight + pageY; quadPoints[i] = quadPoints[i + 4] = sx; quadPoints[i + 1] = quadPoints[i + 3] = sy; quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight; i += 8; } return quadPoints; }; _serializeOutlines = new WeakSet(); serializeOutlines_fn = function(rect) { return __privateGet(this, _highlightOutlines).serialize(rect, __privateMethod(this, _getRotation, getRotation_fn).call(this)); }; _highlightMove = new WeakSet(); highlightMove_fn = function(parent, event) { if (this._freeHighlight.add(event)) { parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight); } }; _endHighlight = new WeakSet(); endHighlight_fn = function(parent, event) { if (!this._freeHighlight.isEmpty()) { parent.createAndAddNewEditor(event, false, { highlightId: this._freeHighlightId, highlightOutlines: this._freeHighlight.getOutlines(), clipPathId: this._freeHighlightClipId, methodOfCreation: "main_toolbar" }); } else { parent.drawLayer.removeFreeHighlight(this._freeHighlightId); } this._freeHighlightId = -1; this._freeHighlight = null; this._freeHighlightClipId = ""; }; __privateAdd(HighlightEditor, _rotateBbox); __privateAdd(HighlightEditor, _highlightMove); __privateAdd(HighlightEditor, _endHighlight); __publicField(HighlightEditor, "_defaultColor", null); __publicField(HighlightEditor, "_defaultOpacity", 1); __publicField(HighlightEditor, "_defaultThickness", 12); __publicField(HighlightEditor, "_l10nPromise"); __publicField(HighlightEditor, "_type", "highlight"); __publicField(HighlightEditor, "_editorType", AnnotationEditorType.HIGHLIGHT); __publicField(HighlightEditor, "_freeHighlightId", -1); __publicField(HighlightEditor, "_freeHighlight", null); __publicField(HighlightEditor, "_freeHighlightClipId", ""); var _baseHeight, _baseWidth, _canvasContextMenuTimeoutId, _currentPath2D, _disableEditing, _drawingAC, _hasSomethingToDraw, _isCanvasInitialized, _observer, _pointerdownAC, _realWidth, _realHeight, _requestFrameCallback, _updateThickness2, updateThickness_fn2, _updateColor3, updateColor_fn3, _updateOpacity, updateOpacity_fn, _getInitialBBox, getInitialBBox_fn, _setStroke, setStroke_fn, _startDrawing, startDrawing_fn, _draw, draw_fn, _endPath, endPath_fn, _stopDrawing, stopDrawing_fn, _drawPoints, drawPoints_fn, _makeBezierCurve, makeBezierCurve_fn, _generateBezierPoints, generateBezierPoints_fn, _redraw, redraw_fn, _addPointerdownListener, addPointerdownListener_fn, _removePointerdownListener, removePointerdownListener_fn, _endDrawing, endDrawing_fn, _createCanvas, createCanvas_fn, _createObserver, createObserver_fn, _setCanvasDims, setCanvasDims_fn, _setScaleFactor, setScaleFactor_fn, _updateTransform, updateTransform_fn, _buildPath2D, buildPath2D_fn, _toPDFCoordinates, toPDFCoordinates_fn, _fromPDFCoordinates, fromPDFCoordinates_fn, _serializePaths, serializePaths_fn, _getBbox, getBbox_fn, _getPadding, getPadding_fn, _fitToContent, fitToContent_fn; var _InkEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "inkEditor" }); __privateAdd(this, _updateThickness2); __privateAdd(this, _updateColor3); __privateAdd(this, _updateOpacity); __privateAdd(this, _getInitialBBox); __privateAdd(this, _setStroke); __privateAdd(this, _startDrawing); __privateAdd(this, _draw); __privateAdd(this, _endPath); __privateAdd(this, _stopDrawing); __privateAdd(this, _drawPoints); __privateAdd(this, _makeBezierCurve); __privateAdd(this, _generateBezierPoints); __privateAdd(this, _redraw); __privateAdd(this, _addPointerdownListener); __privateAdd(this, _removePointerdownListener); __privateAdd(this, _endDrawing); __privateAdd(this, _createCanvas); __privateAdd(this, _createObserver); __privateAdd(this, _setCanvasDims); __privateAdd(this, _setScaleFactor); __privateAdd(this, _updateTransform); __privateAdd(this, _serializePaths); __privateAdd(this, _getBbox); __privateAdd(this, _getPadding); __privateAdd(this, _fitToContent); __privateAdd(this, _baseHeight, 0); __privateAdd(this, _baseWidth, 0); __privateAdd(this, _canvasContextMenuTimeoutId, null); __privateAdd(this, _currentPath2D, new Path2D()); __privateAdd(this, _disableEditing, false); __privateAdd(this, _drawingAC, null); __privateAdd(this, _hasSomethingToDraw, false); __privateAdd(this, _isCanvasInitialized, false); __privateAdd(this, _observer, null); __privateAdd(this, _pointerdownAC, null); __privateAdd(this, _realWidth, 0); __privateAdd(this, _realHeight, 0); __privateAdd(this, _requestFrameCallback, null); this.color = params.color || null; this.thickness = params.thickness || null; this.opacity = params.opacity || null; this.paths = []; this.bezierPath2D = []; this.allRawPaths = []; this.currentPath = []; this.scaleFactor = 1; this.translationX = this.translationY = 0; this.x = 0; this.y = 0; this._willKeepAspectRatio = true; } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.INK_THICKNESS: _InkEditor._defaultThickness = value; break; case AnnotationEditorParamsType.INK_COLOR: _InkEditor._defaultColor = value; break; case AnnotationEditorParamsType.INK_OPACITY: _InkEditor._defaultOpacity = value / 100; break; } } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.INK_THICKNESS: __privateMethod(this, _updateThickness2, updateThickness_fn2).call(this, value); break; case AnnotationEditorParamsType.INK_COLOR: __privateMethod(this, _updateColor3, updateColor_fn3).call(this, value); break; case AnnotationEditorParamsType.INK_OPACITY: __privateMethod(this, _updateOpacity, updateOpacity_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.INK_THICKNESS, _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(_InkEditor._defaultOpacity * 100)]]; } get propertiesToUpdate() { var _a2; return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * ((_a2 = this.opacity) != null ? _a2 : _InkEditor._defaultOpacity))]]; } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } if (!this.canvas) { __privateMethod(this, _createCanvas, createCanvas_fn).call(this); __privateMethod(this, _createObserver, createObserver_fn).call(this); } if (!this.isAttachedToDOM) { this.parent.add(this); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); } __privateMethod(this, _fitToContent, fitToContent_fn).call(this); } remove() { var _a2; if (this.canvas === null) { return; } if (!this.isEmpty()) { this.commit(); } this.canvas.width = this.canvas.height = 0; this.canvas.remove(); this.canvas = null; if (__privateGet(this, _canvasContextMenuTimeoutId)) { clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); __privateSet(this, _canvasContextMenuTimeoutId, null); } (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer, null); super.remove(); } setParent(parent) { if (!this.parent && parent) { this._uiManager.removeShouldRescale(this); } else if (this.parent && parent === null) { this._uiManager.addShouldRescale(this); } super.setParent(parent); } onScaleChanging() { const [parentWidth, parentHeight] = this.parentDimensions; const width = this.width * parentWidth; const height = this.height * parentHeight; this.setDimensions(width, height); } enableEditMode() { if (__privateGet(this, _disableEditing) || this.canvas === null) { return; } super.enableEditMode(); this._isDraggable = false; __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); } disableEditMode() { if (!this.isInEditMode() || this.canvas === null) { return; } super.disableEditMode(); this._isDraggable = !this.isEmpty(); this.div.classList.remove("editing"); __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); } onceAdded() { this._isDraggable = !this.isEmpty(); } isEmpty() { return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; } commit() { if (__privateGet(this, _disableEditing)) { return; } super.commit(); this.isEditing = false; this.disableEditMode(); this.setInForeground(); __privateSet(this, _disableEditing, true); this.div.classList.add("disabled"); __privateMethod(this, _fitToContent, fitToContent_fn).call(this, true); this.select(); this.parent.addInkEditorIfNeeded(true); this.moveInDOM(); this.div.focus({ preventScroll: true }); } focusin(event) { if (!this._focusEventsAllowed) { return; } super.focusin(event); this.enableEditMode(); } canvasPointerdown(event) { if (event.button !== 0 || !this.isInEditMode() || __privateGet(this, _disableEditing)) { return; } this.setInForeground(); event.preventDefault(); if (!this.div.contains(document.activeElement)) { this.div.focus({ preventScroll: true }); } __privateMethod(this, _startDrawing, startDrawing_fn).call(this, event.offsetX, event.offsetY); } canvasPointermove(event) { event.preventDefault(); __privateMethod(this, _draw, draw_fn).call(this, event.offsetX, event.offsetY); } canvasPointerup(event) { event.preventDefault(); __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); } canvasPointerleave(event) { __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); } get isResizable() { return !this.isEmpty() && __privateGet(this, _disableEditing); } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.div.setAttribute("data-l10n-id", "pdfjs-ink"); const [x, y, w, h] = __privateMethod(this, _getInitialBBox, getInitialBBox_fn).call(this); this.setAt(x, y, 0, 0); this.setDims(w, h); __privateMethod(this, _createCanvas, createCanvas_fn).call(this); if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); __privateSet(this, _isCanvasInitialized, true); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); this.setDims(this.width * parentWidth, this.height * parentHeight); __privateMethod(this, _redraw, redraw_fn).call(this); this.div.classList.add("disabled"); } else { this.div.classList.add("editing"); this.enableEditMode(); } __privateMethod(this, _createObserver, createObserver_fn).call(this); return this.div; } setDimensions(width, height) { const roundedWidth = Math.round(width); const roundedHeight = Math.round(height); if (__privateGet(this, _realWidth) === roundedWidth && __privateGet(this, _realHeight) === roundedHeight) { return; } __privateSet(this, _realWidth, roundedWidth); __privateSet(this, _realHeight, roundedHeight); this.canvas.style.visibility = "hidden"; const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.fixAndSetPosition(); if (__privateGet(this, _disableEditing)) { __privateMethod(this, _setScaleFactor, setScaleFactor_fn).call(this, width, height); } __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); __privateMethod(this, _redraw, redraw_fn).call(this); this.canvas.style.visibility = "visible"; this.fixDims(); } static deserialize(data, parent, uiManager) { var _a2, _b, _c; if (data instanceof InkAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); editor.thickness = data.thickness; editor.color = Util.makeHexColor(...data.color); editor.opacity = data.opacity; const [pageWidth, pageHeight] = editor.pageDimensions; const width = editor.width * pageWidth; const height = editor.height * pageHeight; const scaleFactor = editor.parentScale; const padding = data.thickness / 2; __privateSet(editor, _disableEditing, true); __privateSet(editor, _realWidth, Math.round(width)); __privateSet(editor, _realHeight, Math.round(height)); const { paths, rect, rotation } = data; for (let { bezier } of paths) { bezier = __privateMethod(_a2 = _InkEditor, _fromPDFCoordinates, fromPDFCoordinates_fn).call(_a2, bezier, rect, rotation); const path = []; editor.paths.push(path); let p0 = scaleFactor * (bezier[0] - padding); let p1 = scaleFactor * (bezier[1] - padding); for (let i = 2, ii = bezier.length; i < ii; i += 6) { const p10 = scaleFactor * (bezier[i] - padding); const p11 = scaleFactor * (bezier[i + 1] - padding); const p20 = scaleFactor * (bezier[i + 2] - padding); const p21 = scaleFactor * (bezier[i + 3] - padding); const p30 = scaleFactor * (bezier[i + 4] - padding); const p31 = scaleFactor * (bezier[i + 5] - padding); path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); p0 = p30; p1 = p31; } const path2D = __privateMethod(this, _buildPath2D, buildPath2D_fn).call(this, path); editor.bezierPath2D.push(path2D); } const bbox = __privateMethod(_b = editor, _getBbox, getBbox_fn).call(_b); __privateSet(editor, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); __privateSet(editor, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); __privateMethod(_c = editor, _setScaleFactor, setScaleFactor_fn).call(_c, width, height); return editor; } serialize() { if (this.isEmpty()) { return null; } const rect = this.getRect(0, 0); const color = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); return { annotationType: AnnotationEditorType.INK, color, thickness: this.thickness, opacity: this.opacity, paths: __privateMethod(this, _serializePaths, serializePaths_fn).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), pageIndex: this.pageIndex, rect, rotation: this.rotation, structTreeParentId: this._structTreeParentId }; } }; var InkEditor = _InkEditor; _baseHeight = new WeakMap(); _baseWidth = new WeakMap(); _canvasContextMenuTimeoutId = new WeakMap(); _currentPath2D = new WeakMap(); _disableEditing = new WeakMap(); _drawingAC = new WeakMap(); _hasSomethingToDraw = new WeakMap(); _isCanvasInitialized = new WeakMap(); _observer = new WeakMap(); _pointerdownAC = new WeakMap(); _realWidth = new WeakMap(); _realHeight = new WeakMap(); _requestFrameCallback = new WeakMap(); _updateThickness2 = new WeakSet(); updateThickness_fn2 = function(thickness) { const setThickness = (th) => { this.thickness = th; __privateMethod(this, _fitToContent, fitToContent_fn).call(this); }; const savedThickness = this.thickness; this.addCommands({ cmd: setThickness.bind(this, thickness), undo: setThickness.bind(this, savedThickness), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_THICKNESS, overwriteIfSameType: true, keepUndo: true }); }; _updateColor3 = new WeakSet(); updateColor_fn3 = function(color) { const setColor = (col) => { this.color = col; __privateMethod(this, _redraw, redraw_fn).call(this); }; const savedColor = this.color; this.addCommands({ cmd: setColor.bind(this, color), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_COLOR, overwriteIfSameType: true, keepUndo: true }); }; _updateOpacity = new WeakSet(); updateOpacity_fn = function(opacity) { const setOpacity = (op) => { this.opacity = op; __privateMethod(this, _redraw, redraw_fn).call(this); }; opacity /= 100; const savedOpacity = this.opacity; this.addCommands({ cmd: setOpacity.bind(this, opacity), undo: setOpacity.bind(this, savedOpacity), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_OPACITY, overwriteIfSameType: true, keepUndo: true }); }; _getInitialBBox = new WeakSet(); getInitialBBox_fn = function() { const { parentRotation, parentDimensions: [width, height] } = this; switch (parentRotation) { case 90: return [0, height, height, width]; case 180: return [width, height, width, height]; case 270: return [width, 0, height, width]; default: return [0, 0, width, height]; } }; _setStroke = new WeakSet(); setStroke_fn = function() { const { ctx, color, opacity, thickness, parentScale, scaleFactor } = this; ctx.lineWidth = thickness * parentScale / scaleFactor; ctx.lineCap = "round"; ctx.lineJoin = "round"; ctx.miterLimit = 10; ctx.strokeStyle = `${color}${opacityToHex(opacity)}`; }; _startDrawing = new WeakSet(); startDrawing_fn = function(x, y) { var _a2; this.canvas.addEventListener("contextmenu", noContextMenu, { signal: this._uiManager._signal }); __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); __privateSet(this, _drawingAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _drawingAC)); this.canvas.addEventListener("pointerleave", this.canvasPointerleave.bind(this), { signal }); this.canvas.addEventListener("pointermove", this.canvasPointermove.bind(this), { signal }); this.canvas.addEventListener("pointerup", this.canvasPointerup.bind(this), { signal }); this.isEditing = true; if (!__privateGet(this, _isCanvasInitialized)) { __privateSet(this, _isCanvasInitialized, true); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); this.thickness || (this.thickness = _InkEditor._defaultThickness); this.color || (this.color = _InkEditor._defaultColor || AnnotationEditor._defaultLineColor); (_a2 = this.opacity) != null ? _a2 : this.opacity = _InkEditor._defaultOpacity; } this.currentPath.push([x, y]); __privateSet(this, _hasSomethingToDraw, false); __privateMethod(this, _setStroke, setStroke_fn).call(this); __privateSet(this, _requestFrameCallback, () => { __privateMethod(this, _drawPoints, drawPoints_fn).call(this); if (__privateGet(this, _requestFrameCallback)) { window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); } }); window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); }; _draw = new WeakSet(); draw_fn = function(x, y) { const [lastX, lastY] = this.currentPath.at(-1); if (this.currentPath.length > 1 && x === lastX && y === lastY) { return; } const currentPath = this.currentPath; let path2D = __privateGet(this, _currentPath2D); currentPath.push([x, y]); __privateSet(this, _hasSomethingToDraw, true); if (currentPath.length <= 2) { path2D.moveTo(...currentPath[0]); path2D.lineTo(x, y); return; } if (currentPath.length === 3) { __privateSet(this, _currentPath2D, path2D = new Path2D()); path2D.moveTo(...currentPath[0]); } __privateMethod(this, _makeBezierCurve, makeBezierCurve_fn).call(this, path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); }; _endPath = new WeakSet(); endPath_fn = function() { if (this.currentPath.length === 0) { return; } const lastPoint = this.currentPath.at(-1); __privateGet(this, _currentPath2D).lineTo(...lastPoint); }; _stopDrawing = new WeakSet(); stopDrawing_fn = function(x, y) { __privateSet(this, _requestFrameCallback, null); x = Math.min(Math.max(x, 0), this.canvas.width); y = Math.min(Math.max(y, 0), this.canvas.height); __privateMethod(this, _draw, draw_fn).call(this, x, y); __privateMethod(this, _endPath, endPath_fn).call(this); let bezier; if (this.currentPath.length !== 1) { bezier = __privateMethod(this, _generateBezierPoints, generateBezierPoints_fn).call(this); } else { const xy = [x, y]; bezier = [[xy, xy.slice(), xy.slice(), xy]]; } const path2D = __privateGet(this, _currentPath2D); const currentPath = this.currentPath; this.currentPath = []; __privateSet(this, _currentPath2D, new Path2D()); const cmd = () => { this.allRawPaths.push(currentPath); this.paths.push(bezier); this.bezierPath2D.push(path2D); this._uiManager.rebuild(this); }; const undo = () => { this.allRawPaths.pop(); this.paths.pop(); this.bezierPath2D.pop(); if (this.paths.length === 0) { this.remove(); } else { if (!this.canvas) { __privateMethod(this, _createCanvas, createCanvas_fn).call(this); __privateMethod(this, _createObserver, createObserver_fn).call(this); } __privateMethod(this, _fitToContent, fitToContent_fn).call(this); } }; this.addCommands({ cmd, undo, mustExec: true }); }; _drawPoints = new WeakSet(); drawPoints_fn = function() { if (!__privateGet(this, _hasSomethingToDraw)) { return; } __privateSet(this, _hasSomethingToDraw, false); const thickness = Math.ceil(this.thickness * this.parentScale); const lastPoints = this.currentPath.slice(-3); const x = lastPoints.map((xy) => xy[0]); const y = lastPoints.map((xy) => xy[1]); const xMin = Math.min(...x) - thickness; const xMax = Math.max(...x) + thickness; const yMin = Math.min(...y) - thickness; const yMax = Math.max(...y) + thickness; const { ctx } = this; ctx.save(); ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); for (const path of this.bezierPath2D) { ctx.stroke(path); } ctx.stroke(__privateGet(this, _currentPath2D)); ctx.restore(); }; _makeBezierCurve = new WeakSet(); makeBezierCurve_fn = function(path2D, x0, y0, x1, y1, x2, y2) { const prevX = (x0 + x1) / 2; const prevY = (y0 + y1) / 2; const x3 = (x1 + x2) / 2; const y3 = (y1 + y2) / 2; path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); }; _generateBezierPoints = new WeakSet(); generateBezierPoints_fn = function() { const path = this.currentPath; if (path.length <= 2) { return [[path[0], path[0], path.at(-1), path.at(-1)]]; } const bezierPoints = []; let i; let [x0, y0] = path[0]; for (i = 1; i < path.length - 2; i++) { const [x12, y12] = path[i]; const [x22, y22] = path[i + 1]; const x3 = (x12 + x22) / 2; const y3 = (y12 + y22) / 2; const control12 = [x0 + 2 * (x12 - x0) / 3, y0 + 2 * (y12 - y0) / 3]; const control22 = [x3 + 2 * (x12 - x3) / 3, y3 + 2 * (y12 - y3) / 3]; bezierPoints.push([[x0, y0], control12, control22, [x3, y3]]); [x0, y0] = [x3, y3]; } const [x1, y1] = path[i]; const [x2, y2] = path[i + 1]; const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); return bezierPoints; }; _redraw = new WeakSet(); redraw_fn = function() { if (this.isEmpty()) { __privateMethod(this, _updateTransform, updateTransform_fn).call(this); return; } __privateMethod(this, _setStroke, setStroke_fn).call(this); const { canvas, ctx } = this; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, canvas.width, canvas.height); __privateMethod(this, _updateTransform, updateTransform_fn).call(this); for (const path of this.bezierPath2D) { ctx.stroke(path); } }; _addPointerdownListener = new WeakSet(); addPointerdownListener_fn = function() { if (__privateGet(this, _pointerdownAC)) { return; } __privateSet(this, _pointerdownAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _pointerdownAC)); this.canvas.addEventListener("pointerdown", this.canvasPointerdown.bind(this), { signal }); }; _removePointerdownListener = new WeakSet(); removePointerdownListener_fn = function() { var _a2; (_a2 = this.pointerdownAC) == null ? void 0 : _a2.abort(); this.pointerdownAC = null; }; _endDrawing = new WeakSet(); endDrawing_fn = function(event) { var _a2; (_a2 = __privateGet(this, _drawingAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _drawingAC, null); __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); if (__privateGet(this, _canvasContextMenuTimeoutId)) { clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); } __privateSet(this, _canvasContextMenuTimeoutId, setTimeout(() => { __privateSet(this, _canvasContextMenuTimeoutId, null); this.canvas.removeEventListener("contextmenu", noContextMenu); }, 10)); __privateMethod(this, _stopDrawing, stopDrawing_fn).call(this, event.offsetX, event.offsetY); this.addToAnnotationStorage(); this.setInBackground(); }; _createCanvas = new WeakSet(); createCanvas_fn = function() { this.canvas = document.createElement("canvas"); this.canvas.width = this.canvas.height = 0; this.canvas.className = "inkEditorCanvas"; this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); this.div.append(this.canvas); this.ctx = this.canvas.getContext("2d"); }; _createObserver = new WeakSet(); createObserver_fn = function() { __privateSet(this, _observer, new ResizeObserver((entries) => { const rect = entries[0].contentRect; if (rect.width && rect.height) { this.setDimensions(rect.width, rect.height); } })); __privateGet(this, _observer).observe(this.div); this._uiManager._signal.addEventListener("abort", () => { var _a2; (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer, null); }, { once: true }); }; _setCanvasDims = new WeakSet(); setCanvasDims_fn = function() { if (!__privateGet(this, _isCanvasInitialized)) { return; } const [parentWidth, parentHeight] = this.parentDimensions; this.canvas.width = Math.ceil(this.width * parentWidth); this.canvas.height = Math.ceil(this.height * parentHeight); __privateMethod(this, _updateTransform, updateTransform_fn).call(this); }; _setScaleFactor = new WeakSet(); setScaleFactor_fn = function(width, height) { const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); const scaleFactorW = (width - padding) / __privateGet(this, _baseWidth); const scaleFactorH = (height - padding) / __privateGet(this, _baseHeight); this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); }; _updateTransform = new WeakSet(); updateTransform_fn = function() { const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this) / 2; this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); }; _buildPath2D = new WeakSet(); buildPath2D_fn = function(bezier) { const path2D = new Path2D(); for (let i = 0, ii = bezier.length; i < ii; i++) { const [first, control1, control2, second] = bezier[i]; if (i === 0) { path2D.moveTo(...first); } path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); } return path2D; }; _toPDFCoordinates = new WeakSet(); toPDFCoordinates_fn = function(points, rect, rotation) { const [blX, blY, trX, trY] = rect; switch (rotation) { case 0: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] += blX; points[i + 1] = trY - points[i + 1]; } break; case 90: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = points[i + 1] + blX; points[i + 1] = x + blY; } break; case 180: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = trX - points[i]; points[i + 1] += blY; } break; case 270: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = trX - points[i + 1]; points[i + 1] = trY - x; } break; default: throw new Error("Invalid rotation"); } return points; }; _fromPDFCoordinates = new WeakSet(); fromPDFCoordinates_fn = function(points, rect, rotation) { const [blX, blY, trX, trY] = rect; switch (rotation) { case 0: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] -= blX; points[i + 1] = trY - points[i + 1]; } break; case 90: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = points[i + 1] - blY; points[i + 1] = x - blX; } break; case 180: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = trX - points[i]; points[i + 1] -= blY; } break; case 270: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = trY - points[i + 1]; points[i + 1] = trX - x; } break; default: throw new Error("Invalid rotation"); } return points; }; _serializePaths = new WeakSet(); serializePaths_fn = function(s, tx, ty, rect) { var _a2, _b; const paths = []; const padding = this.thickness / 2; const shiftX = s * tx + padding; const shiftY = s * ty + padding; for (const bezier of this.paths) { const buffer = []; const points = []; for (let j = 0, jj = bezier.length; j < jj; j++) { const [first, control1, control2, second] = bezier[j]; if (first[0] === second[0] && first[1] === second[1] && jj === 1) { const p0 = s * first[0] + shiftX; const p1 = s * first[1] + shiftY; buffer.push(p0, p1); points.push(p0, p1); break; } const p10 = s * first[0] + shiftX; const p11 = s * first[1] + shiftY; const p20 = s * control1[0] + shiftX; const p21 = s * control1[1] + shiftY; const p30 = s * control2[0] + shiftX; const p31 = s * control2[1] + shiftY; const p40 = s * second[0] + shiftX; const p41 = s * second[1] + shiftY; if (j === 0) { buffer.push(p10, p11); points.push(p10, p11); } buffer.push(p20, p21, p30, p31, p40, p41); points.push(p20, p21); if (j === jj - 1) { points.push(p40, p41); } } paths.push({ bezier: __privateMethod(_a2 = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_a2, buffer, rect, this.rotation), points: __privateMethod(_b = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_b, points, rect, this.rotation) }); } return paths; }; _getBbox = new WeakSet(); getBbox_fn = function() { let xMin = Infinity; let xMax = -Infinity; let yMin = Infinity; let yMax = -Infinity; for (const path of this.paths) { for (const [first, control1, control2, second] of path) { const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); xMin = Math.min(xMin, bbox[0]); yMin = Math.min(yMin, bbox[1]); xMax = Math.max(xMax, bbox[2]); yMax = Math.max(yMax, bbox[3]); } } return [xMin, yMin, xMax, yMax]; }; _getPadding = new WeakSet(); getPadding_fn = function() { return __privateGet(this, _disableEditing) ? Math.ceil(this.thickness * this.parentScale) : 0; }; _fitToContent = new WeakSet(); fitToContent_fn = function(firstTime = false) { if (this.isEmpty()) { return; } if (!__privateGet(this, _disableEditing)) { __privateMethod(this, _redraw, redraw_fn).call(this); return; } const bbox = __privateMethod(this, _getBbox, getBbox_fn).call(this); const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); __privateSet(this, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); __privateSet(this, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); const width = Math.ceil(padding + __privateGet(this, _baseWidth) * this.scaleFactor); const height = Math.ceil(padding + __privateGet(this, _baseHeight) * this.scaleFactor); const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.setAspectRatio(width, height); const prevTranslationX = this.translationX; const prevTranslationY = this.translationY; this.translationX = -bbox[0]; this.translationY = -bbox[1]; __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); __privateMethod(this, _redraw, redraw_fn).call(this); __privateSet(this, _realWidth, width); __privateSet(this, _realHeight, height); this.setDims(width, height); const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); }; __privateAdd(InkEditor, _buildPath2D); __privateAdd(InkEditor, _toPDFCoordinates); __privateAdd(InkEditor, _fromPDFCoordinates); __publicField(InkEditor, "_defaultColor", null); __publicField(InkEditor, "_defaultOpacity", 1); __publicField(InkEditor, "_defaultThickness", 1); __publicField(InkEditor, "_type", "ink"); __publicField(InkEditor, "_editorType", AnnotationEditorType.INK); var _bitmap, _bitmapId, _bitmapPromise, _bitmapUrl, _bitmapFile, _bitmapFileName, _canvas, _observer2, _resizeTimeoutId, _isSvg, _hasBeenAddedInUndoStack, _getBitmapFetched, getBitmapFetched_fn, _getBitmapDone, getBitmapDone_fn, _getBitmap, getBitmap_fn, _createCanvas2, createCanvas_fn2, _setDimensions, setDimensions_fn, _scaleBitmap, scaleBitmap_fn, _drawBitmap, drawBitmap_fn, _serializeBitmap, serializeBitmap_fn, _createObserver2, createObserver_fn2; var _StampEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "stampEditor" }); __privateAdd(this, _getBitmapFetched); __privateAdd(this, _getBitmapDone); __privateAdd(this, _getBitmap); __privateAdd(this, _createCanvas2); __privateAdd(this, _setDimensions); __privateAdd(this, _scaleBitmap); __privateAdd(this, _drawBitmap); __privateAdd(this, _serializeBitmap); __privateAdd(this, _createObserver2); __privateAdd(this, _bitmap, null); __privateAdd(this, _bitmapId, null); __privateAdd(this, _bitmapPromise, null); __privateAdd(this, _bitmapUrl, null); __privateAdd(this, _bitmapFile, null); __privateAdd(this, _bitmapFileName, ""); __privateAdd(this, _canvas, null); __privateAdd(this, _observer2, null); __privateAdd(this, _resizeTimeoutId, null); __privateAdd(this, _isSvg, false); __privateAdd(this, _hasBeenAddedInUndoStack, false); __privateSet(this, _bitmapUrl, params.bitmapUrl); __privateSet(this, _bitmapFile, params.bitmapFile); } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager); } static get supportedTypes() { const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; return shadow(this, "supportedTypes", types.map((type) => `image/${type}`)); } static get supportedTypesStr() { return shadow(this, "supportedTypesStr", this.supportedTypes.join(",")); } static isHandlingMimeForPasting(mime) { return this.supportedTypes.includes(mime); } static paste(item, parent) { parent.pasteEditor(AnnotationEditorType.STAMP, { bitmapFile: item.getAsFile() }); } altTextFinish() { if (this._uiManager.useNewAltTextFlow) { this.div.hidden = false; } super.altTextFinish(); } get telemetryFinalData() { var _a2; return { type: "stamp", hasAltText: !!((_a2 = this.altTextData) == null ? void 0 : _a2.altText) }; } static computeTelemetryFinalData(data) { var _a2, _b; const hasAltTextStats = data.get("hasAltText"); return { hasAltText: (_a2 = hasAltTextStats.get(true)) != null ? _a2 : 0, hasNoAltText: (_b = hasAltTextStats.get(false)) != null ? _b : 0 }; } async mlGuessAltText(imageData = null, updateAltTextData = true) { if (this.hasAltTextData()) { return null; } const { mlManager } = this._uiManager; if (!mlManager) { throw new Error("No ML."); } if (!await mlManager.isEnabledFor("altText")) { throw new Error("ML isn't enabled for alt text."); } const { data, width, height } = imageData || this.copyCanvas(null, true).imageData; const response = await mlManager.guess({ name: "altText", request: { data, width, height, channels: data.length / (width * height) } }); if (!response) { throw new Error("No response from the AI service."); } if (response.error) { throw new Error("Error from the AI service."); } if (response.cancel) { return null; } if (!response.output) { throw new Error("No valid response from the AI service."); } const altText = response.output; await this.setGuessedAltText(altText); if (updateAltTextData && !this.hasAltTextData()) { this.altTextData = { alt: altText, decorative: false }; } return altText; } remove() { var _a2, _b; if (__privateGet(this, _bitmapId)) { __privateSet(this, _bitmap, null); this._uiManager.imageManager.deleteId(__privateGet(this, _bitmapId)); (_a2 = __privateGet(this, _canvas)) == null ? void 0 : _a2.remove(); __privateSet(this, _canvas, null); (_b = __privateGet(this, _observer2)) == null ? void 0 : _b.disconnect(); __privateSet(this, _observer2, null); if (__privateGet(this, _resizeTimeoutId)) { clearTimeout(__privateGet(this, _resizeTimeoutId)); __privateSet(this, _resizeTimeoutId, null); } } super.remove(); } rebuild() { if (!this.parent) { if (__privateGet(this, _bitmapId)) { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } return; } super.rebuild(); if (this.div === null) { return; } if (__privateGet(this, _bitmapId) && __privateGet(this, _canvas) === null) { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } if (!this.isAttachedToDOM) { this.parent.add(this); } } onceAdded() { this._isDraggable = true; this.div.focus(); } isEmpty() { return !(__privateGet(this, _bitmapPromise) || __privateGet(this, _bitmap) || __privateGet(this, _bitmapUrl) || __privateGet(this, _bitmapFile) || __privateGet(this, _bitmapId)); } get isResizable() { return true; } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.div.hidden = true; this.addAltTextButton(); if (__privateGet(this, _bitmap)) { __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); } else { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); } return this.div; } copyCanvas(maxDimension, createImageData = false) { var _a2; if (!maxDimension) { maxDimension = 224; } const { width: bitmapWidth, height: bitmapHeight } = __privateGet(this, _bitmap); const canvas = document.createElement("canvas"); let bitmap = __privateGet(this, _bitmap); let width = bitmapWidth, height = bitmapHeight; if (bitmapWidth > maxDimension || bitmapHeight > maxDimension) { const ratio = Math.min(maxDimension / bitmapWidth, maxDimension / bitmapHeight); width = Math.floor(bitmapWidth * ratio); height = Math.floor(bitmapHeight * ratio); if (!__privateGet(this, _isSvg)) { bitmap = __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); } } canvas.width = width; canvas.height = height; const ctx = canvas.getContext("2d"); ctx.filter = this._uiManager.hcmFilter; let white = "white", black = "#cfcfd8"; if (this._uiManager.hcmFilter !== "none") { black = "black"; } else if ((_a2 = window.matchMedia) == null ? void 0 : _a2.call(window, "(prefers-color-scheme: dark)").matches) { white = "#8f8f9d"; black = "#42414d"; } const boxDim = 15; const pattern = new OffscreenCanvas(boxDim * 2, boxDim * 2); const patternCtx = pattern.getContext("2d"); patternCtx.fillStyle = white; patternCtx.fillRect(0, 0, boxDim * 2, boxDim * 2); patternCtx.fillStyle = black; patternCtx.fillRect(0, 0, boxDim, boxDim); patternCtx.fillRect(boxDim, boxDim, boxDim, boxDim); ctx.fillStyle = ctx.createPattern(pattern, "repeat"); ctx.fillRect(0, 0, width, height); if (createImageData) { const offscreen = new OffscreenCanvas(width, height); const offscreenCtx = offscreen.getContext("2d", { willReadFrequently: true }); offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); const data = offscreenCtx.getImageData(0, 0, width, height).data; ctx.drawImage(offscreen, 0, 0); return { canvas, imageData: { width, height, data } }; } ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); return { canvas, imageData: null }; } getImageForAltText() { return __privateGet(this, _canvas); } static deserialize(data, parent, uiManager) { if (data instanceof StampAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); const { rect, bitmapUrl, bitmapId, isSvg, accessibilityData } = data; if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { __privateSet(editor, _bitmapId, bitmapId); } else { __privateSet(editor, _bitmapUrl, bitmapUrl); } __privateSet(editor, _isSvg, isSvg); const [parentWidth, parentHeight] = editor.pageDimensions; editor.width = (rect[2] - rect[0]) / parentWidth; editor.height = (rect[3] - rect[1]) / parentHeight; if (accessibilityData) { editor.altTextData = accessibilityData; } return editor; } serialize(isForCopying = false, context = null) { if (this.isEmpty()) { return null; } const serialized = { annotationType: AnnotationEditorType.STAMP, bitmapId: __privateGet(this, _bitmapId), pageIndex: this.pageIndex, rect: this.getRect(0, 0), rotation: this.rotation, isSvg: __privateGet(this, _isSvg), structTreeParentId: this._structTreeParentId }; if (isForCopying) { serialized.bitmapUrl = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, true); serialized.accessibilityData = this.serializeAltText(true); return serialized; } const { decorative, altText } = this.serializeAltText(false); if (!decorative && altText) { serialized.accessibilityData = { type: "Figure", alt: altText }; } if (context === null) { return serialized; } context.stamps || (context.stamps = /* @__PURE__ */ new Map()); const area = __privateGet(this, _isSvg) ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; if (!context.stamps.has(__privateGet(this, _bitmapId))) { context.stamps.set(__privateGet(this, _bitmapId), { area, serialized }); serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); } else if (__privateGet(this, _isSvg)) { const prevData = context.stamps.get(__privateGet(this, _bitmapId)); if (area > prevData.area) { prevData.area = area; prevData.serialized.bitmap.close(); prevData.serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); } } return serialized; } }; var StampEditor = _StampEditor; _bitmap = new WeakMap(); _bitmapId = new WeakMap(); _bitmapPromise = new WeakMap(); _bitmapUrl = new WeakMap(); _bitmapFile = new WeakMap(); _bitmapFileName = new WeakMap(); _canvas = new WeakMap(); _observer2 = new WeakMap(); _resizeTimeoutId = new WeakMap(); _isSvg = new WeakMap(); _hasBeenAddedInUndoStack = new WeakMap(); _getBitmapFetched = new WeakSet(); getBitmapFetched_fn = function(data, fromId = false) { if (!data) { this.remove(); return; } __privateSet(this, _bitmap, data.bitmap); if (!fromId) { __privateSet(this, _bitmapId, data.id); __privateSet(this, _isSvg, data.isSvg); } if (data.file) { __privateSet(this, _bitmapFileName, data.file.name); } __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); }; _getBitmapDone = new WeakSet(); getBitmapDone_fn = function() { __privateSet(this, _bitmapPromise, null); this._uiManager.enableWaiting(false); if (!__privateGet(this, _canvas)) { return; } if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { this._editToolbar.hide(); this._uiManager.editAltText(this, true); return; } if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { this._reportTelemetry({ action: "pdfjs.image.image_added", data: { alt_text_modal: false, alt_text_type: "empty" } }); try { this.mlGuessAltText(); } catch (e) { } } this.div.focus(); }; _getBitmap = new WeakSet(); getBitmap_fn = function() { if (__privateGet(this, _bitmapId)) { this._uiManager.enableWaiting(true); this._uiManager.imageManager.getFromId(__privateGet(this, _bitmapId)).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data, true)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)); return; } if (__privateGet(this, _bitmapUrl)) { const url = __privateGet(this, _bitmapUrl); __privateSet(this, _bitmapUrl, null); this._uiManager.enableWaiting(true); __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromUrl(url).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); return; } if (__privateGet(this, _bitmapFile)) { const file = __privateGet(this, _bitmapFile); __privateSet(this, _bitmapFile, null); this._uiManager.enableWaiting(true); __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromFile(file).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); return; } const input = document.createElement("input"); input.type = "file"; input.accept = _StampEditor.supportedTypesStr; const signal = this._uiManager._signal; __privateSet(this, _bitmapPromise, new Promise((resolve) => { input.addEventListener("change", async () => { if (!input.files || input.files.length === 0) { this.remove(); } else { this._uiManager.enableWaiting(true); const data = await this._uiManager.imageManager.getFromFile(input.files[0]); this._reportTelemetry({ action: "pdfjs.image.image_selected", data: { alt_text_modal: this._uiManager.useNewAltTextFlow } }); __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data); } resolve(); }, { signal }); input.addEventListener("cancel", () => { this.remove(); resolve(); }, { signal }); }).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); input.click(); }; _createCanvas2 = new WeakSet(); createCanvas_fn2 = function() { const { div } = this; let { width, height } = __privateGet(this, _bitmap); const [pageWidth, pageHeight] = this.pageDimensions; const MAX_RATIO = 0.75; if (this.width) { width = this.width * pageWidth; height = this.height * pageHeight; } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); width *= factor; height *= factor; } const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); this._uiManager.enableWaiting(false); const canvas = __privateSet(this, _canvas, document.createElement("canvas")); div.append(canvas); if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow) { div.hidden = false; } __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); __privateMethod(this, _createObserver2, createObserver_fn2).call(this); if (!__privateGet(this, _hasBeenAddedInUndoStack)) { this.parent.addUndoableEditor(this); __privateSet(this, _hasBeenAddedInUndoStack, true); } this._reportTelemetry({ action: "inserted_image" }); if (__privateGet(this, _bitmapFileName)) { canvas.setAttribute("aria-label", __privateGet(this, _bitmapFileName)); } }; _setDimensions = new WeakSet(); setDimensions_fn = function(width, height) { var _a2; const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.setDims(width, height); if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { this.center(); } else { this.fixAndSetPosition(); } this._initialOptions = null; if (__privateGet(this, _resizeTimeoutId) !== null) { clearTimeout(__privateGet(this, _resizeTimeoutId)); } const TIME_TO_WAIT = 200; __privateSet(this, _resizeTimeoutId, setTimeout(() => { __privateSet(this, _resizeTimeoutId, null); __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); }, TIME_TO_WAIT)); }; _scaleBitmap = new WeakSet(); scaleBitmap_fn = function(width, height) { const { width: bitmapWidth, height: bitmapHeight } = __privateGet(this, _bitmap); let newWidth = bitmapWidth; let newHeight = bitmapHeight; let bitmap = __privateGet(this, _bitmap); while (newWidth > 2 * width || newHeight > 2 * height) { const prevWidth = newWidth; const prevHeight = newHeight; if (newWidth > 2 * width) { newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); } if (newHeight > 2 * height) { newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); } const offscreen = new OffscreenCanvas(newWidth, newHeight); const ctx = offscreen.getContext("2d"); ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); bitmap = offscreen.transferToImageBitmap(); } return bitmap; }; _drawBitmap = new WeakSet(); drawBitmap_fn = function(width, height) { width = Math.ceil(width); height = Math.ceil(height); const canvas = __privateGet(this, _canvas); if (!canvas || canvas.width === width && canvas.height === height) { return; } canvas.width = width; canvas.height = height; const bitmap = __privateGet(this, _isSvg) ? __privateGet(this, _bitmap) : __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); const ctx = canvas.getContext("2d"); ctx.filter = this._uiManager.hcmFilter; ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); }; _serializeBitmap = new WeakSet(); serializeBitmap_fn = function(toUrl) { if (toUrl) { if (__privateGet(this, _isSvg)) { const url = this._uiManager.imageManager.getSvgUrl(__privateGet(this, _bitmapId)); if (url) { return url; } } const canvas = document.createElement("canvas"); ({ width: canvas.width, height: canvas.height } = __privateGet(this, _bitmap)); const ctx = canvas.getContext("2d"); ctx.drawImage(__privateGet(this, _bitmap), 0, 0); return canvas.toDataURL(); } if (__privateGet(this, _isSvg)) { const [pageWidth, pageHeight] = this.pageDimensions; const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS); const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS); const offscreen = new OffscreenCanvas(width, height); const ctx = offscreen.getContext("2d"); ctx.drawImage(__privateGet(this, _bitmap), 0, 0, __privateGet(this, _bitmap).width, __privateGet(this, _bitmap).height, 0, 0, width, height); return offscreen.transferToImageBitmap(); } return structuredClone(__privateGet(this, _bitmap)); }; _createObserver2 = new WeakSet(); createObserver_fn2 = function() { if (!this._uiManager._signal) { return; } __privateSet(this, _observer2, new ResizeObserver((entries) => { const rect = entries[0].contentRect; if (rect.width && rect.height) { __privateMethod(this, _setDimensions, setDimensions_fn).call(this, rect.width, rect.height); } })); __privateGet(this, _observer2).observe(this.div); this._uiManager._signal.addEventListener("abort", () => { var _a2; (_a2 = __privateGet(this, _observer2)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer2, null); }, { once: true }); }; __publicField(StampEditor, "_type", "stamp"); __publicField(StampEditor, "_editorType", AnnotationEditorType.STAMP); var _accessibilityManager2, _allowClick, _annotationLayer, _clickAC, _editorFocusTimeoutId, _editors, _hadPointerDown, _isCleaningUp, _isDisabling, _textLayer, _textSelectionAC, _uiManager3, _editorTypes2, _textLayerPointerDown, textLayerPointerDown_fn, _currentEditorType, currentEditorType_get, _createNewEditor, createNewEditor_fn, _getCenterPoint, getCenterPoint_fn, _cleanup, cleanup_fn; var _AnnotationEditorLayer = class { constructor({ uiManager, pageIndex, div, accessibilityManager, annotationLayer, drawLayer, textLayer, viewport, l10n }) { __privateAdd(this, _textLayerPointerDown); __privateAdd(this, _currentEditorType); __privateAdd(this, _createNewEditor); __privateAdd(this, _getCenterPoint); __privateAdd(this, _cleanup); __privateAdd(this, _accessibilityManager2, void 0); __privateAdd(this, _allowClick, false); __privateAdd(this, _annotationLayer, null); __privateAdd(this, _clickAC, null); __privateAdd(this, _editorFocusTimeoutId, null); __privateAdd(this, _editors, /* @__PURE__ */ new Map()); __privateAdd(this, _hadPointerDown, false); __privateAdd(this, _isCleaningUp, false); __privateAdd(this, _isDisabling, false); __privateAdd(this, _textLayer, null); __privateAdd(this, _textSelectionAC, null); __privateAdd(this, _uiManager3, void 0); const editorTypes = [...__privateGet(_AnnotationEditorLayer, _editorTypes2).values()]; if (!_AnnotationEditorLayer._initialized) { _AnnotationEditorLayer._initialized = true; for (const editorType of editorTypes) { editorType.initialize(l10n, uiManager); } } uiManager.registerEditorTypes(editorTypes); __privateSet(this, _uiManager3, uiManager); this.pageIndex = pageIndex; this.div = div; __privateSet(this, _accessibilityManager2, accessibilityManager); __privateSet(this, _annotationLayer, annotationLayer); this.viewport = viewport; __privateSet(this, _textLayer, textLayer); this.drawLayer = drawLayer; __privateGet(this, _uiManager3).addLayer(this); } get isEmpty() { return __privateGet(this, _editors).size === 0; } get isInvisible() { return this.isEmpty && __privateGet(this, _uiManager3).getMode() === AnnotationEditorType.NONE; } updateToolbar(mode) { __privateGet(this, _uiManager3).updateToolbar(mode); } updateMode(mode = __privateGet(this, _uiManager3).getMode()) { __privateMethod(this, _cleanup, cleanup_fn).call(this); switch (mode) { case AnnotationEditorType.NONE: this.disableTextSelection(); this.togglePointerEvents(false); this.toggleAnnotationLayerPointerEvents(true); this.disableClick(); return; case AnnotationEditorType.INK: this.addInkEditorIfNeeded(false); this.disableTextSelection(); this.togglePointerEvents(true); this.disableClick(); break; case AnnotationEditorType.HIGHLIGHT: this.enableTextSelection(); this.togglePointerEvents(false); this.disableClick(); break; default: this.disableTextSelection(); this.togglePointerEvents(true); this.enableClick(); } this.toggleAnnotationLayerPointerEvents(false); const { classList } = this.div; for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); } this.div.hidden = false; } hasTextLayer(textLayer) { var _a2; return textLayer === ((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div); } addInkEditorIfNeeded(isCommitting) { if (__privateGet(this, _uiManager3).getMode() !== AnnotationEditorType.INK) { return; } if (!isCommitting) { for (const editor2 of __privateGet(this, _editors).values()) { if (editor2.isEmpty()) { editor2.setInBackground(); return; } } } const editor = this.createAndAddNewEditor({ offsetX: 0, offsetY: 0 }, false); editor.setInBackground(); } setEditingState(isEditing) { __privateGet(this, _uiManager3).setEditingState(isEditing); } addCommands(params) { __privateGet(this, _uiManager3).addCommands(params); } toggleDrawing(enabled = false) { this.div.classList.toggle("drawing", !enabled); } togglePointerEvents(enabled = false) { this.div.classList.toggle("disabled", !enabled); } toggleAnnotationLayerPointerEvents(enabled = false) { var _a2; (_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.div.classList.toggle("disabled", !enabled); } enable() { this.div.tabIndex = 0; this.togglePointerEvents(true); const annotationElementIds = /* @__PURE__ */ new Set(); for (const editor of __privateGet(this, _editors).values()) { editor.enableEditing(); editor.show(true); if (editor.annotationElementId) { __privateGet(this, _uiManager3).removeChangedExistingAnnotation(editor); annotationElementIds.add(editor.annotationElementId); } } if (!__privateGet(this, _annotationLayer)) { return; } const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); for (const editable of editables) { editable.hide(); if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(editable.data.id)) { continue; } if (annotationElementIds.has(editable.data.id)) { continue; } const editor = this.deserialize(editable); if (!editor) { continue; } this.addOrRebuild(editor); editor.enableEditing(); } } disable() { var _a2; __privateSet(this, _isDisabling, true); this.div.tabIndex = -1; this.togglePointerEvents(false); const changedAnnotations = /* @__PURE__ */ new Map(); const resetAnnotations = /* @__PURE__ */ new Map(); for (const editor of __privateGet(this, _editors).values()) { editor.disableEditing(); if (!editor.annotationElementId) { continue; } if (editor.serialize() !== null) { changedAnnotations.set(editor.annotationElementId, editor); continue; } else { resetAnnotations.set(editor.annotationElementId, editor); } (_a2 = this.getEditableAnnotation(editor.annotationElementId)) == null ? void 0 : _a2.show(); editor.remove(); } if (__privateGet(this, _annotationLayer)) { const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); for (const editable of editables) { const { id } = editable.data; if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(id)) { continue; } let editor = resetAnnotations.get(id); if (editor) { editor.resetAnnotationElement(editable); editor.show(false); editable.show(); continue; } editor = changedAnnotations.get(id); if (editor) { __privateGet(this, _uiManager3).addChangedExistingAnnotation(editor); editor.renderAnnotationElement(editable); editor.show(false); } editable.show(); } } __privateMethod(this, _cleanup, cleanup_fn).call(this); if (this.isEmpty) { this.div.hidden = true; } const { classList } = this.div; for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { classList.remove(`${editorType._type}Editing`); } this.disableTextSelection(); this.toggleAnnotationLayerPointerEvents(true); __privateSet(this, _isDisabling, false); } getEditableAnnotation(id) { var _a2; return ((_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.getEditableAnnotation(id)) || null; } setActiveEditor(editor) { const currentActive = __privateGet(this, _uiManager3).getActive(); if (currentActive === editor) { return; } __privateGet(this, _uiManager3).setActiveEditor(editor); } enableTextSelection() { var _a2; this.div.tabIndex = -1; if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && !__privateGet(this, _textSelectionAC)) { __privateSet(this, _textSelectionAC, new AbortController()); const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _textSelectionAC)); __privateGet(this, _textLayer).div.addEventListener("pointerdown", __privateMethod(this, _textLayerPointerDown, textLayerPointerDown_fn).bind(this), { signal }); __privateGet(this, _textLayer).div.classList.add("highlighting"); } } disableTextSelection() { var _a2; this.div.tabIndex = 0; if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && __privateGet(this, _textSelectionAC)) { __privateGet(this, _textSelectionAC).abort(); __privateSet(this, _textSelectionAC, null); __privateGet(this, _textLayer).div.classList.remove("highlighting"); } } enableClick() { if (__privateGet(this, _clickAC)) { return; } __privateSet(this, _clickAC, new AbortController()); const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _clickAC)); this.div.addEventListener("pointerdown", this.pointerdown.bind(this), { signal }); this.div.addEventListener("pointerup", this.pointerup.bind(this), { signal }); } disableClick() { var _a2; (_a2 = __privateGet(this, _clickAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _clickAC, null); } attach(editor) { __privateGet(this, _editors).set(editor.id, editor); const { annotationElementId } = editor; if (annotationElementId && __privateGet(this, _uiManager3).isDeletedAnnotationElement(annotationElementId)) { __privateGet(this, _uiManager3).removeDeletedAnnotationElement(editor); } } detach(editor) { var _a2; __privateGet(this, _editors).delete(editor.id); (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.removePointerInTextLayer(editor.contentDiv); if (!__privateGet(this, _isDisabling) && editor.annotationElementId) { __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor); } } remove(editor) { this.detach(editor); __privateGet(this, _uiManager3).removeEditor(editor); editor.div.remove(); editor.isAttachedToDOM = false; if (!__privateGet(this, _isCleaningUp)) { this.addInkEditorIfNeeded(false); } } changeParent(editor) { var _a2; if (editor.parent === this) { return; } if (editor.parent && editor.annotationElementId) { __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor.annotationElementId); AnnotationEditor.deleteAnnotationElement(editor); editor.annotationElementId = null; } this.attach(editor); (_a2 = editor.parent) == null ? void 0 : _a2.detach(editor); editor.setParent(this); if (editor.div && editor.isAttachedToDOM) { editor.div.remove(); this.div.append(editor.div); } } add(editor) { if (editor.parent === this && editor.isAttachedToDOM) { return; } this.changeParent(editor); __privateGet(this, _uiManager3).addEditor(editor); this.attach(editor); if (!editor.isAttachedToDOM) { const div = editor.render(); this.div.append(div); editor.isAttachedToDOM = true; } editor.fixAndSetPosition(); editor.onceAdded(); __privateGet(this, _uiManager3).addToAnnotationStorage(editor); editor._reportTelemetry(editor.telemetryInitialData); } moveEditorInDOM(editor) { var _a2; if (!editor.isAttachedToDOM) { return; } const { activeElement } = document; if (editor.div.contains(activeElement) && !__privateGet(this, _editorFocusTimeoutId)) { editor._focusEventsAllowed = false; __privateSet(this, _editorFocusTimeoutId, setTimeout(() => { __privateSet(this, _editorFocusTimeoutId, null); if (!editor.div.contains(document.activeElement)) { editor.div.addEventListener("focusin", () => { editor._focusEventsAllowed = true; }, { once: true, signal: __privateGet(this, _uiManager3)._signal }); activeElement.focus(); } else { editor._focusEventsAllowed = true; } }, 0)); } editor._structTreeParentId = (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); } addOrRebuild(editor) { if (editor.needsToBeRebuilt()) { editor.parent || (editor.parent = this); editor.rebuild(); editor.show(); } else { this.add(editor); } } addUndoableEditor(editor) { const cmd = () => editor._uiManager.rebuild(editor); const undo = () => { editor.remove(); }; this.addCommands({ cmd, undo, mustExec: false }); } getNextId() { return __privateGet(this, _uiManager3).getId(); } combinedSignal(ac) { return __privateGet(this, _uiManager3).combinedSignal(ac); } canCreateNewEmptyEditor() { var _a2; return (_a2 = __privateGet(this, _currentEditorType, currentEditorType_get)) == null ? void 0 : _a2.canCreateNewEmptyEditor(); } pasteEditor(mode, params) { __privateGet(this, _uiManager3).updateToolbar(mode); __privateGet(this, _uiManager3).updateMode(mode); const { offsetX, offsetY } = __privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this); const id = this.getNextId(); const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { parent: this, id, x: offsetX, y: offsetY, uiManager: __privateGet(this, _uiManager3), isCentered: true, ...params }); if (editor) { this.add(editor); } } deserialize(data) { var _a2, _b; return ((_b = __privateGet(_AnnotationEditorLayer, _editorTypes2).get((_a2 = data.annotationType) != null ? _a2 : data.annotationEditorType)) == null ? void 0 : _b.deserialize(data, this, __privateGet(this, _uiManager3))) || null; } createAndAddNewEditor(event, isCentered, data = {}) { const id = this.getNextId(); const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { parent: this, id, x: event.offsetX, y: event.offsetY, uiManager: __privateGet(this, _uiManager3), isCentered, ...data }); if (editor) { this.add(editor); } return editor; } addNewEditor() { this.createAndAddNewEditor(__privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this), true); } setSelected(editor) { __privateGet(this, _uiManager3).setSelected(editor); } toggleSelected(editor) { __privateGet(this, _uiManager3).toggleSelected(editor); } isSelected(editor) { return __privateGet(this, _uiManager3).isSelected(editor); } unselect(editor) { __privateGet(this, _uiManager3).unselect(editor); } pointerup(event) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } if (event.target !== this.div) { return; } if (!__privateGet(this, _hadPointerDown)) { return; } __privateSet(this, _hadPointerDown, false); if (!__privateGet(this, _allowClick)) { __privateSet(this, _allowClick, true); return; } if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.STAMP) { __privateGet(this, _uiManager3).unselectAll(); return; } this.createAndAddNewEditor(event, false); } pointerdown(event) { if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.HIGHLIGHT) { this.enableTextSelection(); } if (__privateGet(this, _hadPointerDown)) { __privateSet(this, _hadPointerDown, false); return; } const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } if (event.target !== this.div) { return; } __privateSet(this, _hadPointerDown, true); const editor = __privateGet(this, _uiManager3).getActive(); __privateSet(this, _allowClick, !editor || editor.isEmpty()); } findNewParent(editor, x, y) { const layer = __privateGet(this, _uiManager3).findParent(x, y); if (layer === null || layer === this) { return false; } layer.changeParent(editor); return true; } destroy() { var _a2, _b; if (((_a2 = __privateGet(this, _uiManager3).getActive()) == null ? void 0 : _a2.parent) === this) { __privateGet(this, _uiManager3).commitOrRemove(); __privateGet(this, _uiManager3).setActiveEditor(null); } if (__privateGet(this, _editorFocusTimeoutId)) { clearTimeout(__privateGet(this, _editorFocusTimeoutId)); __privateSet(this, _editorFocusTimeoutId, null); } for (const editor of __privateGet(this, _editors).values()) { (_b = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _b.removePointerInTextLayer(editor.contentDiv); editor.setParent(null); editor.isAttachedToDOM = false; editor.div.remove(); } this.div = null; __privateGet(this, _editors).clear(); __privateGet(this, _uiManager3).removeLayer(this); } render({ viewport }) { this.viewport = viewport; setLayerDimensions(this.div, viewport); for (const editor of __privateGet(this, _uiManager3).getEditors(this.pageIndex)) { this.add(editor); editor.rebuild(); } this.updateMode(); } update({ viewport }) { __privateGet(this, _uiManager3).commitOrRemove(); __privateMethod(this, _cleanup, cleanup_fn).call(this); const oldRotation = this.viewport.rotation; const rotation = viewport.rotation; this.viewport = viewport; setLayerDimensions(this.div, { rotation }); if (oldRotation !== rotation) { for (const editor of __privateGet(this, _editors).values()) { editor.rotate(rotation); } } this.addInkEditorIfNeeded(false); } get pageDimensions() { const { pageWidth, pageHeight } = this.viewport.rawDims; return [pageWidth, pageHeight]; } get scale() { return __privateGet(this, _uiManager3).viewParameters.realScale; } }; var AnnotationEditorLayer = _AnnotationEditorLayer; _accessibilityManager2 = new WeakMap(); _allowClick = new WeakMap(); _annotationLayer = new WeakMap(); _clickAC = new WeakMap(); _editorFocusTimeoutId = new WeakMap(); _editors = new WeakMap(); _hadPointerDown = new WeakMap(); _isCleaningUp = new WeakMap(); _isDisabling = new WeakMap(); _textLayer = new WeakMap(); _textSelectionAC = new WeakMap(); _uiManager3 = new WeakMap(); _editorTypes2 = new WeakMap(); _textLayerPointerDown = new WeakSet(); textLayerPointerDown_fn = function(event) { __privateGet(this, _uiManager3).unselectAll(); const { target } = event; if (target === __privateGet(this, _textLayer).div || target.classList.contains("endOfContent") && __privateGet(this, _textLayer).div.contains(target)) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } __privateGet(this, _uiManager3).showAllEditors("highlight", true, true); __privateGet(this, _textLayer).div.classList.add("free"); this.toggleDrawing(); HighlightEditor.startHighlighting(this, __privateGet(this, _uiManager3).direction === "ltr", event); __privateGet(this, _textLayer).div.addEventListener("pointerup", () => { __privateGet(this, _textLayer).div.classList.remove("free"); this.toggleDrawing(true); }, { once: true, signal: __privateGet(this, _uiManager3)._signal }); event.preventDefault(); } }; _currentEditorType = new WeakSet(); currentEditorType_get = function() { return __privateGet(_AnnotationEditorLayer, _editorTypes2).get(__privateGet(this, _uiManager3).getMode()); }; _createNewEditor = new WeakSet(); createNewEditor_fn = function(params) { const editorType = __privateGet(this, _currentEditorType, currentEditorType_get); return editorType ? new editorType.prototype.constructor(params) : null; }; _getCenterPoint = new WeakSet(); getCenterPoint_fn = function() { const { x, y, width, height } = this.div.getBoundingClientRect(); const tlX = Math.max(0, x); const tlY = Math.max(0, y); const brX = Math.min(window.innerWidth, x + width); const brY = Math.min(window.innerHeight, y + height); const centerX = (tlX + brX) / 2 - x; const centerY = (tlY + brY) / 2 - y; const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; return { offsetX, offsetY }; }; _cleanup = new WeakSet(); cleanup_fn = function() { __privateSet(this, _isCleaningUp, true); for (const editor of __privateGet(this, _editors).values()) { if (editor.isEmpty()) { editor.remove(); } } __privateSet(this, _isCleaningUp, false); }; __publicField(AnnotationEditorLayer, "_initialized", false); __privateAdd(AnnotationEditorLayer, _editorTypes2, new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map((type) => [type._editorType, type]))); var _parent2, _id5, _mapping, _toUpdate, _setBox, setBox_fn, _createSVG, createSVG_fn, _createClipPath, createClipPath_fn; var _DrawLayer = class { constructor({ pageIndex }) { __privateAdd(this, _createSVG); __privateAdd(this, _createClipPath); __privateAdd(this, _parent2, null); __privateAdd(this, _id5, 0); __privateAdd(this, _mapping, /* @__PURE__ */ new Map()); __privateAdd(this, _toUpdate, /* @__PURE__ */ new Map()); this.pageIndex = pageIndex; } setParent(parent) { if (!__privateGet(this, _parent2)) { __privateSet(this, _parent2, parent); return; } if (__privateGet(this, _parent2) !== parent) { if (__privateGet(this, _mapping).size > 0) { for (const root of __privateGet(this, _mapping).values()) { root.remove(); parent.append(root); } } __privateSet(this, _parent2, parent); } } static get _svgFactory() { return shadow(this, "_svgFactory", new DOMSVGFactory()); } highlight(outlines, color, opacity, isPathUpdatable = false) { const id = __privateWrapper(this, _id5)._++; const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); root.classList.add("highlight"); if (outlines.free) { root.classList.add("free"); } const defs = _DrawLayer._svgFactory.createElement("defs"); root.append(defs); const path = _DrawLayer._svgFactory.createElement("path"); defs.append(path); const pathId = `path_p${this.pageIndex}_${id}`; path.setAttribute("id", pathId); path.setAttribute("d", outlines.toSVGPath()); if (isPathUpdatable) { __privateGet(this, _toUpdate).set(id, path); } const clipPathId = __privateMethod(this, _createClipPath, createClipPath_fn).call(this, defs, pathId); const use = _DrawLayer._svgFactory.createElement("use"); root.append(use); root.setAttribute("fill", color); root.setAttribute("fill-opacity", opacity); use.setAttribute("href", `#${pathId}`); __privateGet(this, _mapping).set(id, root); return { id, clipPathId: `url(#${clipPathId})` }; } highlightOutline(outlines) { const id = __privateWrapper(this, _id5)._++; const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); root.classList.add("highlightOutline"); const defs = _DrawLayer._svgFactory.createElement("defs"); root.append(defs); const path = _DrawLayer._svgFactory.createElement("path"); defs.append(path); const pathId = `path_p${this.pageIndex}_${id}`; path.setAttribute("id", pathId); path.setAttribute("d", outlines.toSVGPath()); path.setAttribute("vector-effect", "non-scaling-stroke"); let maskId; if (outlines.free) { root.classList.add("free"); const mask = _DrawLayer._svgFactory.createElement("mask"); defs.append(mask); maskId = `mask_p${this.pageIndex}_${id}`; mask.setAttribute("id", maskId); mask.setAttribute("maskUnits", "objectBoundingBox"); const rect = _DrawLayer._svgFactory.createElement("rect"); mask.append(rect); rect.setAttribute("width", "1"); rect.setAttribute("height", "1"); rect.setAttribute("fill", "white"); const use = _DrawLayer._svgFactory.createElement("use"); mask.append(use); use.setAttribute("href", `#${pathId}`); use.setAttribute("stroke", "none"); use.setAttribute("fill", "black"); use.setAttribute("fill-rule", "nonzero"); use.classList.add("mask"); } const use1 = _DrawLayer._svgFactory.createElement("use"); root.append(use1); use1.setAttribute("href", `#${pathId}`); if (maskId) { use1.setAttribute("mask", `url(#${maskId})`); } const use2 = use1.cloneNode(); root.append(use2); use1.classList.add("mainOutline"); use2.classList.add("secondaryOutline"); __privateGet(this, _mapping).set(id, root); return id; } finalizeLine(id, line) { const path = __privateGet(this, _toUpdate).get(id); __privateGet(this, _toUpdate).delete(id); this.updateBox(id, line.box); path.setAttribute("d", line.toSVGPath()); } updateLine(id, line) { const root = __privateGet(this, _mapping).get(id); const defs = root.firstChild; const path = defs.firstChild; path.setAttribute("d", line.toSVGPath()); } removeFreeHighlight(id) { this.remove(id); __privateGet(this, _toUpdate).delete(id); } updatePath(id, line) { __privateGet(this, _toUpdate).get(id).setAttribute("d", line.toSVGPath()); } updateBox(id, box) { var _a2; __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, __privateGet(this, _mapping).get(id), box); } show(id, visible) { __privateGet(this, _mapping).get(id).classList.toggle("hidden", !visible); } rotate(id, angle) { __privateGet(this, _mapping).get(id).setAttribute("data-main-rotation", angle); } changeColor(id, color) { __privateGet(this, _mapping).get(id).setAttribute("fill", color); } changeOpacity(id, opacity) { __privateGet(this, _mapping).get(id).setAttribute("fill-opacity", opacity); } addClass(id, className) { __privateGet(this, _mapping).get(id).classList.add(className); } removeClass(id, className) { __privateGet(this, _mapping).get(id).classList.remove(className); } remove(id) { if (__privateGet(this, _parent2) === null) { return; } __privateGet(this, _mapping).get(id).remove(); __privateGet(this, _mapping).delete(id); } destroy() { __privateSet(this, _parent2, null); for (const root of __privateGet(this, _mapping).values()) { root.remove(); } __privateGet(this, _mapping).clear(); } }; var DrawLayer = _DrawLayer; _parent2 = new WeakMap(); _id5 = new WeakMap(); _mapping = new WeakMap(); _toUpdate = new WeakMap(); _setBox = new WeakSet(); setBox_fn = function(element2, { x = 0, y = 0, width = 1, height = 1 } = {}) { const { style } = element2; style.top = `${100 * y}%`; style.left = `${100 * x}%`; style.width = `${100 * width}%`; style.height = `${100 * height}%`; }; _createSVG = new WeakSet(); createSVG_fn = function(box) { var _a2; const svg = _DrawLayer._svgFactory.create(1, 1, true); __privateGet(this, _parent2).append(svg); svg.setAttribute("aria-hidden", true); __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, svg, box); return svg; }; _createClipPath = new WeakSet(); createClipPath_fn = function(defs, pathId) { const clipPath = _DrawLayer._svgFactory.createElement("clipPath"); defs.append(clipPath); const clipPathId = `clip_${pathId}`; clipPath.setAttribute("id", clipPathId); clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); const clipPathUse = _DrawLayer._svgFactory.createElement("use"); clipPath.append(clipPathUse); clipPathUse.setAttribute("href", `#${pathId}`); clipPathUse.classList.add("clip"); return clipPathId; }; __privateAdd(DrawLayer, _setBox); var __webpack_exports__AbortException = __webpack_exports__.AbortException; var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker; var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer; var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; var __webpack_exports__OPS = __webpack_exports__.OPS; var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; var __webpack_exports__TextLayer = __webpack_exports__.TextLayer; var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; var __webpack_exports__Util = __webpack_exports__.Util; var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; var __webpack_exports__build = __webpack_exports__.build; var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; var __webpack_exports__fetchData = __webpack_exports__.fetchData; var __webpack_exports__getDocument = __webpack_exports__.getDocument; var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; var __webpack_exports__shadow = __webpack_exports__.shadow; var __webpack_exports__version = __webpack_exports__.version; // inline-worker:__inline-worker function inlineWorker(scriptText) { let blob = new Blob([scriptText], { type: "text/javascript" }); let url = URL.createObjectURL(blob); let worker = new Worker(url); URL.revokeObjectURL(url); return worker; } // src/processors/pdf.worker.js function Worker2() { return inlineWorker('var Rn=Object.defineProperty;var xu=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var pu=Object.prototype.hasOwnProperty;var wu=(e,A,t)=>A in e?Rn(e,A,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[A]=t;var yu=(e,A)=>{for(var t in A)Rn(e,t,{get:A[t],enumerable:!0})},bu=(e,A,t,i)=>{if(A&&typeof A=="object"||typeof A=="function")for(let s of mu(A))!pu.call(e,s)&&s!==t&&Rn(e,s,{get:()=>A[s],enumerable:!(i=xu(A,s))||i.enumerable});return e};var Du=e=>bu(Rn({},"__esModule",{value:!0}),e);var et=(e,A,t)=>(wu(e,typeof A!="symbol"?A+"":A,t),t),lo=(e,A,t)=>{if(!A.has(e))throw TypeError("Cannot "+t)};var ne=(e,A,t)=>(lo(e,A,"read from private field"),t?t.call(e):A.get(e)),HA=(e,A,t)=>{if(A.has(e))throw TypeError("Cannot add the same private member more than once");A instanceof WeakSet?A.add(e):A.set(e,t)},_s=(e,A,t,i)=>(lo(e,A,"write to private field"),i?i.call(e,t):A.set(e,t),t);var mA=(e,A,t)=>(lo(e,A,"access private method"),t);var Dx={};yu(Dx,{WorkerMessageHandler:()=>bx});module.exports=Du(Dx);var Ba={};Ba.d=(e,A)=>{for(var t in A)Ba.o(A,t)&&!Ba.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:A[t]})};Ba.o=(e,A)=>Object.prototype.hasOwnProperty.call(e,A);var qE=globalThis.pdfjsWorker={};Ba.d(qE,{WorkerMessageHandler:()=>H0});var ku=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),Wt=[1,0,0,1,0,0],E0=[.001,0,0,.001,0,0],Su=1e7,Qi=1.35,Cr=.35,R1=Cr/Qi,st={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256};var TE="pdfjs_internal_editor_",bi={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15};var N1={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},PE={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},Ke={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},Le={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26},Ho={GROUP:"Group",REPLY:"R"},it={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512},Te={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864},Y0={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},WE={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},Fu={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},Ru={O:"PageOpen",C:"PageClose"},Da={ERRORS:0,WARNINGS:1,INFOS:5},Br={NONE:0,BINARY:1},y={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93},G1={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},Xg=Da.WARNINGS;function Nu(e){Number.isInteger(e)&&(Xg=e)}function Gu(){return Xg}function PA(e){Xg>=Da.INFOS&&console.log(`Info: ${e}`)}function k(e){Xg>=Da.WARNINGS&&console.log(`Warning: ${e}`)}function OA(e){throw new Error(e)}function gt(e,A){e||OA(A)}function Uu(e){switch(e==null?void 0:e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Qr(e,A=null,t=null){if(!e)return null;try{if(t&&typeof e=="string"){if(t.addDefaultProtocol&&e.startsWith("www.")){let s=e.match(/\\./g);(s==null?void 0:s.length)>=2&&(e=`http://${e}`)}if(t.tryConvertEncoding)try{e=ka(e)}catch(s){}}let i=A?new URL(e,A):new URL(e);if(Uu(i))return i}catch(i){}return null}function nA(e,A,t,i=!1){return Object.defineProperty(e,A,{value:t,enumerable:!i,configurable:!0,writable:!1}),t}var At=function(){function A(t,i){this.message=t,this.name=i}return A.prototype=new Error,A.constructor=A,A}(),bs=class extends At{constructor(A,t){super(A,"PasswordException"),this.code=t}},Ds=class extends At{constructor(A,t){super(A,"UnknownErrorException"),this.details=t}},ks=class extends At{constructor(A){super(A,"InvalidPDFException")}},Er=class extends At{constructor(A){super(A,"MissingPDFException")}},fr=class extends At{constructor(A,t){super(A,"UnexpectedResponseException"),this.status=t}},v=class extends At{constructor(A){super(A,"FormatError")}},ve=class extends At{constructor(A){super(A,"AbortException")}};function Qt(e){(typeof e!="object"||(e==null?void 0:e.length)===void 0)&&OA("Invalid argument for bytesToString");let A=e.length,t=8192;if(A>24&255,e>>16&255,e>>8&255,e&255)}function OE(e){return Object.keys(e).length}function Mu(){let e=new Uint8Array(4);return e[0]=1,new Uint32Array(e.buffer,0,1)[0]===1}function Lu(){try{return new Function(""),!0}catch(e){return!1}}var Ot=class{static get isLittleEndian(){return nA(this,"isLittleEndian",Mu())}static get isEvalSupported(){return nA(this,"isEvalSupported",Lu())}static get isOffscreenCanvasSupported(){return nA(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas!="undefined")}static get platform(){return typeof navigator!="undefined"&&typeof(navigator==null?void 0:navigator.platform)=="string"?nA(this,"platform",{isMac:navigator.platform.includes("Mac")}):nA(this,"platform",{isMac:!1})}static get isCSSRoundSupported(){var A,t;return nA(this,"isCSSRoundSupported",(t=(A=globalThis.CSS)==null?void 0:A.supports)==null?void 0:t.call(A,"width: round(1.5px, 1px)"))}},ho=Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,"0")),Es,zn,nn,Jo,Ce=class{static makeHexColor(A,t,i){return`#${ho[A]}${ho[t]}${ho[i]}`}static scaleMinMax(A,t){let i;A[0]?(A[0]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[0],t[2]*=A[0],A[3]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[3],t[3]*=A[3]):(i=t[0],t[0]=t[1],t[1]=i,i=t[2],t[2]=t[3],t[3]=i,A[1]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[1],t[3]*=A[1],A[2]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[2],t[2]*=A[2]),t[0]+=A[4],t[1]+=A[5],t[2]+=A[4],t[3]+=A[5]}static transform(A,t){return[A[0]*t[0]+A[2]*t[1],A[1]*t[0]+A[3]*t[1],A[0]*t[2]+A[2]*t[3],A[1]*t[2]+A[3]*t[3],A[0]*t[4]+A[2]*t[5]+A[4],A[1]*t[4]+A[3]*t[5]+A[5]]}static applyTransform(A,t){let i=A[0]*t[0]+A[1]*t[2]+t[4],s=A[0]*t[1]+A[1]*t[3]+t[5];return[i,s]}static applyInverseTransform(A,t){let i=t[0]*t[3]-t[1]*t[2],s=(A[0]*t[3]-A[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,a=(-A[0]*t[1]+A[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i;return[s,a]}static getAxialAlignedBoundingBox(A,t){let i=this.applyTransform(A,t),s=this.applyTransform(A.slice(2,4),t),a=this.applyTransform([A[0],A[3]],t),n=this.applyTransform([A[2],A[1]],t);return[Math.min(i[0],s[0],a[0],n[0]),Math.min(i[1],s[1],a[1],n[1]),Math.max(i[0],s[0],a[0],n[0]),Math.max(i[1],s[1],a[1],n[1])]}static inverseTransform(A){let t=A[0]*A[3]-A[1]*A[2];return[A[3]/t,-A[1]/t,-A[2]/t,A[0]/t,(A[2]*A[5]-A[4]*A[3])/t,(A[4]*A[1]-A[5]*A[0])/t]}static singularValueDecompose2dScale(A){let t=[A[0],A[2],A[1],A[3]],i=A[0]*t[0]+A[1]*t[2],s=A[0]*t[1]+A[1]*t[3],a=A[2]*t[0]+A[3]*t[2],n=A[2]*t[1]+A[3]*t[3],r=(i+n)/2,g=Math.sqrt((i+n)**2-4*(i*n-a*s))/2,o=r+g||1,I=r-g||1;return[Math.sqrt(o),Math.sqrt(I)]}static normalizeRect(A){let t=A.slice(0);return A[0]>A[2]&&(t[0]=A[2],t[2]=A[0]),A[1]>A[3]&&(t[1]=A[3],t[3]=A[1]),t}static intersect(A,t){let i=Math.max(Math.min(A[0],A[2]),Math.min(t[0],t[2])),s=Math.min(Math.max(A[0],A[2]),Math.max(t[0],t[2]));if(i>s)return null;let a=Math.max(Math.min(A[1],A[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(A[1],A[3]),Math.max(t[1],t[3]));return a>n?null:[i,a,s,n]}static bezierBoundingBox(A,t,i,s,a,n,r,g,o){return o?(o[0]=Math.min(o[0],A,r),o[1]=Math.min(o[1],t,g),o[2]=Math.max(o[2],A,r),o[3]=Math.max(o[3],t,g)):o=[Math.min(A,r),Math.min(t,g),Math.max(A,r),Math.max(t,g)],mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-A+3*(i-a)+r),6*(A-2*i+a),3*(i-A),o),mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-t+3*(s-n)+g),6*(t-2*s+n),3*(s-t),o),o}};Es=new WeakSet,zn=function(A,t,i,s,a,n,r,g,o,I){if(o<=0||o>=1)return;let c=1-o,l=o*o,h=l*o,C=c*(c*(c*A+3*o*t)+3*l*i)+h*s,B=c*(c*(c*a+3*o*n)+3*l*r)+h*g;I[0]=Math.min(I[0],C),I[1]=Math.min(I[1],B),I[2]=Math.max(I[2],C),I[3]=Math.max(I[3],B)},nn=new WeakSet,Jo=function(A,t,i,s,a,n,r,g,o,I,c,l){if(Math.abs(o)<1e-12){Math.abs(I)>=1e-12&&mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,-c/I,l);return}let h=I**2-4*c*o;if(h<0)return;let C=Math.sqrt(h),B=2*o;mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I+C)/B,l),mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I-C)/B,l)},HA(Ce,Es),HA(Ce,nn);var Hu=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,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,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function jA(e){if(e[0]>="\\xEF"){let t;if(e[0]==="\\xFE"&&e[1]==="\\xFF"?(t="utf-16be",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xFF"&&e[1]==="\\xFE"?(t="utf-16le",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xEF"&&e[1]==="\\xBB"&&e[2]==="\\xBF"&&(t="utf-8"),t)try{let i=new TextDecoder(t,{fatal:!0}),s=Pe(e),a=i.decode(s);return a.includes("\\x1B")?a.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,""):a}catch(i){k(`stringToPDFString: "${i}".`)}}let A=[];for(let t=0,i=e.length;tt?t.normalize("NFKC"):U1.get(i))}var Yu="pdfjs_internal_id_",_e={BEZIER_CURVE_TO:0,MOVE_TO:1,LINE_TO:2,QUADRATIC_CURVE_TO:3,RESTORE:4,SAVE:5,SCALE:6,TRANSFORM:7,TRANSLATE:8},Ku=Symbol("CIRCULAR_REF"),Ge=Symbol("EOF"),$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null);function vu(){$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null)}var M=class{constructor(A){this.name=A}static get(A){return Ar[A]||(Ar[A]=new M(A))}},fe=class{constructor(A){this.cmd=A}static get(A){return $n[A]||($n[A]=new fe(A))}},ZE=function(){return ZE},F=class{constructor(A=null){this._map=Object.create(null),this.xref=A,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=ZE}assignXref(A){this.xref=A}get size(){return Object.keys(this._map).length}get(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetch(s,this.suppressEncryption):s}async getAsync(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetchAsync(s,this.suppressEncryption):s}getArray(A,t,i){let s=this._map[A];if(s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref&&(s=this.xref.fetch(s,this.suppressEncryption)),Array.isArray(s)){s=s.slice();for(let a=0,n=s.length;a{OA("Should not call `set` on the empty dictionary.")},nA(this,"empty",A)}static merge({xref:A,dictArray:t,mergeSubDicts:i=!1}){let s=new F(A),a=new Map;for(let n of t)if(n instanceof F)for(let[r,g]of Object.entries(n._map)){let o=a.get(r);if(o===void 0)o=[],a.set(r,o);else if(!i||!(g instanceof F))continue;o.push(g)}for(let[n,r]of a){if(r.length===1||!(r[0]instanceof F)){s._map[n]=r[0];continue}let g=new F(A);for(let o of r)for(let[I,c]of Object.entries(o._map))g._map[I]===void 0&&(g._map[I]=c);g.size>0&&(s._map[n]=g)}return a.clear(),s.size>0?s:F.empty}clone(){let A=new F(this.xref);for(let t of this.getKeys())A.set(t,this.getRaw(t));return A}delete(A){delete this._map[A]}},oA=class{constructor(A,t){this.num=A,this.gen=t}toString(){return this.gen===0?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(A){let t=W0[A];if(t)return t;let i=/^(\\d+)R(\\d*)$/.exec(A);return!i||i[1]==="0"?null:W0[A]=new oA(parseInt(i[1]),i[2]?parseInt(i[2]):0)}static get(A,t){let i=t===0?`${A}R`:`${A}R${t}`;return W0[i]||(W0[i]=new oA(A,t))}},be=class{constructor(A=null){this._set=new Set(A==null?void 0:A._set)}has(A){return this._set.has(A.toString())}put(A){this._set.add(A.toString())}remove(A){this._set.delete(A.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}},mt=class{constructor(){this._map=new Map}get size(){return this._map.size}get(A){return this._map.get(A.toString())}has(A){return this._map.has(A.toString())}put(A,t){this._map.set(A.toString(),t)}putAlias(A,t){this._map.set(A.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(let[A,t]of this._map)yield[oA.fromString(A),t]}};function ye(e,A){return e instanceof M&&(A===void 0||e.name===A)}function Ne(e,A){return e instanceof fe&&(A===void 0||e.cmd===A)}function jE(e,A){return e instanceof F&&(A===void 0||ye(e.get("Type"),A))}function ur(e,A){return e.num===A.num&&e.gen===A.gen}var KA=class{get length(){OA("Abstract getter `length` accessed")}get isEmpty(){OA("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return nA(this,"isDataLoaded",!0)}getByte(){OA("Abstract method `getByte` called")}getBytes(A){OA("Abstract method `getBytes` called")}async getImageData(A,t){return this.getBytes(A,t)}async asyncGetBytes(){OA("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}peekByte(){let A=this.getByte();return A!==-1&&this.pos--,A}peekBytes(A){let t=this.getBytes(A);return this.pos-=t.length,t}getUint16(){let A=this.getByte(),t=this.getByte();return A===-1||t===-1?-1:(A<<8)+t}getInt32(){let A=this.getByte(),t=this.getByte(),i=this.getByte(),s=this.getByte();return(A<<24)+(t<<16)+(i<<8)+s}getByteRange(A,t){OA("Abstract method `getByteRange` called")}getString(A){return Qt(this.getBytes(A))}skip(A){this.pos+=A||1}reset(){OA("Abstract method `reset` called")}moveStart(){OA("Abstract method `moveStart` called")}makeSubStream(A,t,i=null){OA("Abstract method `makeSubStream` called")}getBaseStreams(){return null}},XE=/^[1-9]\\.\\d$/;function he(e){let A;return function(){return e&&(A=Object.create(null),e(A),e=null),A}}var ge=class extends At{constructor(A,t){super(`Missing data [${A}, ${t})`,"MissingDataException"),this.begin=A,this.end=t}},Sa=class extends At{constructor(A){super(A,"ParserEOFException")}},ti=class extends At{constructor(A){super(A,"XRefEntryException")}},Pi=class extends At{constructor(A){super(A,"XRefParseException")}};function VE(e){let A=e.length;if(A===0)return new Uint8Array(0);if(A===1)return new Uint8Array(e[0]);let t=0;for(let a=0;a0,"The number should be a positive integer.");let t=[],i;for(;e>=1e3;)e-=1e3,t.push("M");i=e/100|0,e%=100,t.push(Bo[i]),i=e/10|0,e%=10,t.push(Bo[10+i]),t.push(Bo[20+e]);let s=t.join("");return A?s.toLowerCase():s}function g1(e){return e<=0?0:Math.ceil(Math.log2(e))}function Di(e,A){return e[A]<<24>>24}function we(e,A){return e[A]<<8|e[A+1]}function le(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function pt(e){return e===32||e===9||e===13||e===10}function Tu(e,A){return Array.isArray(e)&&(A===null||e.length===A)&&e.every(t=>typeof t=="boolean")}function wt(e,A){return Array.isArray(e)?(A===null||e.length===A)&&e.every(t=>typeof t=="number"):ArrayBuffer.isView(e)&&(e.length===0||typeof e[0]=="number")&&(A===null||e.length===A)}function Ki(e,A){return wt(e,6)?e:A}function Ko(e,A){return wt(e,4)?e:A}function Ei(e,A){return wt(e,4)?Ce.normalizeRect(e):A}function _E(e){let A=/(.+)\\[(\\d+)\\]$/;return e.split(".").map(t=>{let i=t.match(A);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:t,pos:0}})}function o1(e){let A=[],t=0;for(let i=0,s=e.length;i126||a===35||a===40||a===41||a===60||a===62||a===91||a===93||a===123||a===125||a===47||a===37)&&(tA===`\n`?"\\\\n":A==="\\r"?"\\\\r":`\\\\${A}`)}function dr(e,A,t,i){if(!e)return;let s=null;if(e instanceof oA){if(i.has(e))return;s=e,i.put(s),e=A.fetch(e)}if(Array.isArray(e))for(let a of e)dr(a,A,t,i);else if(e instanceof F){if(ye(e.get("S"),"JavaScript")){let a=e.get("JS"),n;a instanceof KA?n=a.getString():typeof a=="string"&&(n=a),n&&(n=jA(n).replaceAll("\\0","")),n&&t.push(n)}dr(e.getRaw("Next"),A,t,i)}s&&i.remove(s)}function Vg(e,A,t){let i=Object.create(null),s=Mt({dict:A,key:"AA",stopWhenFound:!1});if(s)for(let a=s.length-1;a>=0;a--){let n=s[a];if(n instanceof F)for(let r of n.getKeys()){let g=t[r];if(!g)continue;let o=n.getRaw(r),I=new be,c=[];dr(o,e,c,I),c.length>0&&(i[g]=c)}}if(A.has("A")){let a=A.get("A"),n=new be,r=[];dr(a,e,r,n),r.length>0&&(i.Action=r)}return OE(i)>0?i:null}var Pu={60:"<",62:">",38:"&",34:""",39:"'"};function*Wu(e){for(let A=0,t=e.length;A55295&&(i<57344||i>65533)&&A++,yield i}}function ls(e){let A=[],t=0;for(let i=0,s=e.length;i55295&&(a<57344||a>65533)&&i++,t=i+1}return A.length===0?e:(t: ${e}.`),!1;return!0}function Ou(e){let A="14",t="400",i=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:s,fontWeight:a,italicAngle:n}=e;if(!vo(s,!0))return!1;let r=a?a.toString():"";e.fontWeight=i.has(r)?r:t;let g=parseFloat(n);return e.italicAngle=isNaN(g)||g<-90||g>90?A:n.toString(),!0}function zE(e){let A=["app.launchURL","window.open","xfa.host.gotoURL"],i=new RegExp("^\\\\s*("+A.join("|").replaceAll(".","\\\\.")+`)\\\\((?:\'|")([^\'"]*)(?:\'|")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))`,"i").exec(e);if(i!=null&&i[2]){let s=i[2],a=!1;return i[3]==="true"&&i[1]==="app.launchURL"&&(a=!0),{url:s,newWindow:a}}return null}function Ae(e){if(Number.isInteger(e))return e.toString();let A=Math.round(e*100);return A%100===0?(A/100).toString():A%10===0?e.toFixed(1):e.toFixed(2)}function $E(e){if(!e)return null;let A=new Map;for(let[t,i]of e){if(!t.startsWith(TE))continue;let s=A.get(i.pageIndex);s||(s=[],A.set(i.pageIndex,s)),s.push(i)}return A.size>0?A:null}function ii(e){return Zu(e)?e:Af(e,!0)}function Zu(e){return/^[\\x00-\\x7F]*$/.test(e)}function ju(e){let A=[];for(let t=0,i=e.length;t>8&255).toString(16).padStart(2,"0"),(s&255).toString(16).padStart(2,"0"))}return A.join("")}function Af(e,A=!1){let t=[];A&&t.push("\\xFE\\xFF");for(let i=0,s=e.length;i>8&255),String.fromCharCode(a&255))}return t.join("")}function xr(e,A,t){switch(e){case 90:return[0,1,-1,0,A,0];case 180:return[-1,0,0,-1,A,t];case 270:return[0,-1,1,0,0,t];default:throw new Error("Invalid rotation")}}function M1(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}var Ie=class extends KA{constructor(A,t,i,s){super(),this.bytes=A instanceof Uint8Array?A:new Uint8Array(A),this.start=t||0,this.pos=this.start,this.end=t+i||this.bytes.length,this.dict=s}get length(){return this.end-this.start}get isEmpty(){return this.length===0}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return t.subarray(i,s);let a=i+A;return a>s&&(a=s),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),this.bytes.subarray(A,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(A,t,i=null){return new Ie(this.bytes.buffer,A,t,i)}},It=class extends Ie{constructor(A){super(Pe(A))}},Rs=class extends Ie{constructor(){super(new Uint8Array(0))}},qo=class extends Ie{constructor(A,t,i){super(new Uint8Array(A),0,A,null),this.chunkSize=t,this._loadedChunks=new Set,this.numChunks=Math.ceil(A/t),this.manager=i,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){let A=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let a=i;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new ge(A,A+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(A,t){if(A>=t||t<=this.progressiveDataLength)return;let i=Math.floor(A/this.chunkSize);if(i>this.numChunks)return;let s=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let a=i;a=this.end?-1:(A>=this.progressiveDataLength&&this.ensureByte(A),this.bytes[this.pos++])}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return s>this.progressiveDataLength&&this.ensureRange(i,s),t.subarray(i,s);let a=i+A;return a>s&&(a=s),a>this.progressiveDataLength&&this.ensureRange(i,a),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(A,t),this.bytes.subarray(A,t)}makeSubStream(A,t,i=null){t?A+t>this.progressiveDataLength&&this.ensureRange(A,A+t):A>=this.progressiveDataLength&&this.ensureByte(A);function s(){}s.prototype=Object.create(this),s.prototype.getMissingChunks=function(){let n=this.chunkSize,r=Math.floor(this.start/n),g=Math.floor((this.end-1)/n)+1,o=[];for(let I=r;I{let g=({value:o,done:I})=>{try{if(I){let c=VE(s);s=null,n(c);return}a+=o.byteLength,i.isStreamingSupported&&this.onProgress({loaded:a}),s.push(o),i.read().then(g,r)}catch(c){r(c)}};i.read().then(g,r)}).then(n=>{this.aborted||this.onReceiveData({chunk:n,begin:A})})}requestAllChunks(A=!1){if(!A){let t=this.stream.getMissingChunks();this._requestChunks(t)}return this._loadedStreamCapability.promise}_requestChunks(A){let t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(let n of A)this.stream.hasChunk(n)||i.add(n);if(i.size===0)return Promise.resolve();let s=Promise.withResolvers();this._promisesByRequest.set(t,s);let a=[];for(let n of i){let r=this._requestsByChunk.get(n);r||(r=[],this._requestsByChunk.set(n,r),a.push(n)),r.push(t)}if(a.length>0){let n=this.groupChunks(a);for(let r of n){let g=r.beginChunk*this.chunkSize,o=Math.min(r.endChunk*this.chunkSize,this.length);this.sendRequest(g,o).catch(s.reject)}}return s.promise.catch(n=>{if(!this.aborted)throw n})}getStream(){return this.stream}requestRange(A,t){t=Math.min(t,this.length);let i=this.getBeginChunk(A),s=this.getEndChunk(t),a=[];for(let n=i;n=0&&s+1!==r&&(t.push({beginChunk:i,endChunk:s+1}),i=r),a+1===A.length&&t.push({beginChunk:i,endChunk:r+1}),s=r}return t}onProgress(A){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+A.loaded,total:this.length})}onReceiveData(A){let t=A.chunk,i=A.begin===void 0,s=i?this.progressiveDataLength:A.begin,a=s+t.byteLength,n=Math.floor(s/this.chunkSize),r=a0)&&g.push(c)}}}if(!this.disableAutoFetch&&this._requestsByChunk.size===0){let o;if(this.stream.numChunksLoaded===1){let I=this.stream.numChunks-1;this.stream.hasChunk(I)||(o=I)}else o=this.stream.nextEmptyChunk(r);Number.isInteger(o)&&this._requestChunks([o])}for(let o of g){let I=this._promisesByRequest.get(o);this._promisesByRequest.delete(o),I.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(A){this._loadedStreamCapability.reject(A)}getBeginChunk(A){return Math.floor(A/this.chunkSize)}getEndChunk(A){return Math.floor((A-1)/this.chunkSize)+1}abort(A){var t;this.aborted=!0,(t=this.pdfNetworkStream)==null||t.cancelAllRequests(A);for(let i of this._promisesByRequest.values())i.reject(A)}};function Xu(e,A,t,i,s,a,n){n=n!==1?0:n;let g=t/s,o=i/a,I=0,c,l=new Uint16Array(s),h=t*3;for(let C=0;Cl&&this.name!=="DeviceGray"&&this.name!=="DeviceRGB"){let C=r<=8?new Uint8Array(l):new Uint16Array(l);for(let Q=0;Q=.99554525?1:mA(this,Hi,Z0).call(this,0,1,(1+.055)*t**(1/2.4)-.055)},Hi=new WeakSet,Z0=function(t,i,s){return Math.max(t,Math.min(i,s))},Ji=new WeakSet,j0=function(t){return t<0?-mA(this,Ji,j0).call(this,-t):t>8?((t+16)/116)**3:t*ne(je,kg)},Rg=new WeakSet,sf=function(t,i,s){if(t[0]===0&&t[1]===0&&t[2]===0){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=mA(this,Ji,j0).call(this,0),n=a,r=mA(this,Ji,j0).call(this,t[0]),g=a,o=mA(this,Ji,j0).call(this,t[1]),I=a,c=mA(this,Ji,j0).call(this,t[2]),l=(1-n)/(1-r),h=1-l,C=(1-g)/(1-o),B=1-C,Q=(1-I)/(1-c),E=1-Q;s[0]=i[0]*l+h,s[1]=i[1]*C+B,s[2]=i[2]*Q+E},Ng=new WeakSet,af=function(t,i,s){if(t[0]===1&&t[2]===1){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Sg,ef).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},Gg=new WeakSet,nf=function(t,i,s){let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Fg,tf).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},hn=new WeakSet,$o=function(t,i,s,a,n){let r=mA(this,Hi,Z0).call(this,0,1,t[i]*n),g=mA(this,Hi,Z0).call(this,0,1,t[i+1]*n),o=mA(this,Hi,Z0).call(this,0,1,t[i+2]*n),I=r===1?1:r**this.GR,c=g===1?1:g**this.GG,l=o===1?1:o**this.GB,h=this.MXA*I+this.MXB*c+this.MXC*l,C=this.MYA*I+this.MYB*c+this.MYC*l,B=this.MZA*I+this.MZB*c+this.MZC*l,Q=ne(je,fs);Q[0]=h,Q[1]=C,Q[2]=B;let E=ne(je,ln);mA(this,Ng,af).call(this,this.whitePoint,Q,E);let f=ne(je,fs);mA(this,Rg,sf).call(this,this.blackPoint,E,f);let u=ne(je,ln);mA(this,Gg,nf).call(this,ne(je,Dg),f,u);let d=ne(je,fs);mA(this,Li,O0).call(this,ne(je,bg),u,d),s[a]=mA(this,us,er).call(this,d[0])*255,s[a+1]=mA(this,us,er).call(this,d[1])*255,s[a+2]=mA(this,us,er).call(this,d[2])*255},HA(vt,on,new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296])),HA(vt,In,new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867])),HA(vt,bg,new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252])),HA(vt,Dg,new Float32Array([1,1,1])),HA(vt,cn,new Float32Array(3)),HA(vt,fs,new Float32Array(3)),HA(vt,ln,new Float32Array(3)),HA(vt,kg,((8+16)/116)**3/8);var ds,tr,xs,ir,Cn,eI,AI=class extends JA{constructor(t,i,s){super("Lab",3);HA(this,ds);HA(this,xs);HA(this,Cn);if(!t)throw new v("WhitePoint missing - required for color space Lab");if([this.XW,this.YW,this.ZW]=t,[this.amin,this.amax,this.bmin,this.bmax]=s||[-100,100,-100,100],[this.XB,this.YB,this.ZB]=i||[0,0,0],this.XW<0||this.ZW<0||this.YW!==1)throw new v("Invalid WhitePoint components, no fallback available");(this.XB<0||this.YB<0||this.ZB<0)&&(PA("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0),(this.amin>this.amax||this.bmin>this.bmax)&&(PA("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}getRgbItem(t,i,s,a){mA(this,Cn,eI).call(this,t,i,!1,s,a)}getRgbBuffer(t,i,s,a,n,r,g){let o=(1<=6/29?t**3:108/841*(t-4/29)},xs=new WeakSet,ir=function(t,i,s,a){return s+t*(a-s)/i},Cn=new WeakSet,eI=function(t,i,s,a,n){let r=t[i],g=t[i+1],o=t[i+2];s!==!1&&(r=mA(this,xs,ir).call(this,r,s,0,100),g=mA(this,xs,ir).call(this,g,s,this.amin,this.amax),o=mA(this,xs,ir).call(this,o,s,this.bmin,this.bmax)),g>this.amax?g=this.amax:gthis.bmax?o=this.bmax:o>>0}function Nn(e,A){return A===1?String.fromCharCode(e[0],e[1]):A===3?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,A+1))}function tt(e,A,t){let i=0;for(let s=t;s>=0;s--)i+=e[s]+A[s],e[s]=i&255,i>>=8}function e0(e,A){let t=1;for(let i=A;i>=0&&t>0;i--)t+=e[i],e[i]=t&255,t>>=8}var K0=16,Vu=19,tI=class{constructor(A){this.buffer=A,this.pos=0,this.end=A.length,this.tmpBuf=new Uint8Array(Vu)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let A=0,t;do{let i=this.readByte();if(i<0)throw new v("unexpected EOF in bcmap");t=!(i&128),A=A<<7|i&127}while(!t);return A}readSigned(){let A=this.readNumber();return A&1?~(A>>>1):A>>>1}readHex(A,t){A.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}readHexNumber(A,t){let i,s=this.tmpBuf,a=0;do{let o=this.readByte();if(o<0)throw new v("unexpected EOF in bcmap");i=!(o&128),s[a++]=o&127}while(!i);let n=t,r=0,g=0;for(;n>=0;){for(;g<8&&s.length>0;)r|=s[--a]<>=8,g-=8}}readHexSigned(A,t){this.readHexNumber(A,t);let i=A[t]&1?255:0,s=0;for(let a=0;a<=t;a++)s=(s&1)<<8|A[a],A[a]=s>>1^i}readString(){let A=this.readNumber(),t=new Array(A);for(let i=0;i=0;){let C=h>>5;if(C===7){switch(h&31){case 0:s.readString();break;case 1:n=s.readString();break}continue}let B=!!(h&16),Q=h&15;if(Q+1>K0)throw new Error("BinaryCMapReader.process: Invalid dataSize.");let E=1,f=s.readNumber();switch(C){case 0:s.readHex(r,Q),s.readHexNumber(g,Q),tt(g,r,Q),t.addCodespaceRange(Q+1,Ze(r,Q),Ze(g,Q));for(let u=1;ua&&(s=a)}else{for(;!this.eof;)this.readBlock(t);s=this.bufferLength}return this.pos=s,this.buffer.subarray(i,s)}async getImageData(A,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(A,t);let i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(A,t,i=null){if(t===void 0)for(;!this.eof;)this.readBlock();else{let s=A+t;for(;this.bufferLength<=s&&!this.eof;)this.readBlock()}return new Ie(this.buffer,A,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}},sI=class extends Me{constructor(A,t=null){let i=0;for(let s of A)i+=s instanceof Me?s._rawMinBufferLength:s.length;super(i),this.streams=A,this._onError=t}readBlock(){var r;let A=this.streams;if(A.length===0){this.eof=!0;return}let t=A.shift(),i;try{i=t.getBytes()}catch(g){if(this._onError){this._onError(g,(r=t.dict)==null?void 0:r.objId);return}throw g}let s=this.bufferLength,a=s+i.length;this.ensureBuffer(a).set(i,s),this.bufferLength=a}getBaseStreams(){let A=[];for(let t of this.streams){let i=t.getBaseStreams();i&&A.push(...i)}return A.length>0?A:null}},aI=class extends Me{constructor(A,t){t&&(t*=.8),super(t),this.str=A,this.dict=A.dict,this.input=new Uint8Array(5)}readBlock(){let s=this.str,a=s.getByte();for(;pt(a);)a=s.getByte();if(a===-1||a===126){this.eof=!0;return}let n=this.bufferLength,r,g;if(a===122){for(r=this.ensureBuffer(n+4),g=0;g<4;++g)r[n+g]=0;this.bufferLength+=4}else{let o=this.input;for(o[0]=a,g=1;g<5;++g){for(a=s.getByte();pt(a);)a=s.getByte();if(o[g]=a,a===-1||a===126)break}if(r=this.ensureBuffer(n+g-1),this.bufferLength+=g-1,g<5){for(;g<5;++g)o[g]=33+84;this.eof=!0}let I=0;for(g=0;g<5;++g)I=I*85+(o[g]-33);for(g=3;g>=0;--g)r[n+g]=I&255,I>>=8}}},nI=class extends Me{constructor(A,t){t&&(t*=.5),super(t),this.str=A,this.dict=A.dict,this.firstDigit=-1}readBlock(){let t=this.str.getBytes(8e3);if(!t.length){this.eof=!0;return}let i=t.length+1>>1,s=this.ensureBuffer(this.bufferLength+i),a=this.bufferLength,n=this.firstDigit;for(let r of t){let g;if(r>=48&&r<=57)g=r&15;else if(r>=65&&r<=70||r>=97&&r<=102)g=(r&15)+9;else if(r===62){this.eof=!0;break}else continue;n<0?n=g:(s[a++]=n<<4|g,n=-1)}n>=0&&this.eof&&(s[a++]=n<<4,n=-1),this.firstDigit=n,this.bufferLength=a}},rI=-2,gi=-1,Ii=0,He=1,kA=2,Je=3,Ye=4,gI=5,oI=6,rf=7,gf=8,L1=[[-1,-1],[-1,-1],[7,gf],[7,rf],[6,oI],[6,oI],[6,gI],[6,gI],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA]],H1=[[-1,-1],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],J1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],Y1=[[-1,-1],[-1,-1],[12,rI],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],K1=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],v1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]],pr=class{constructor(A,t={}){var s;if(!A||typeof A.next!="function")throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=A,this.eof=!1,this.encoding=t.K||0,this.eoline=t.EndOfLine||!1,this.byteAlign=t.EncodedByteAlign||!1,this.columns=t.Columns||1728,this.rows=t.Rows||0,this.eoblock=(s=t.EndOfBlock)!=null?s:!0,this.black=t.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;let i;for(;(i=this._lookBits(12))===0;)this._eatBits(1);i===1&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}readNextChar(){if(this.eof)return-1;let A=this.refLine,t=this.codingLine,i=this.columns,s,a,n,r;if(this.outputBits===0){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;this.err=!1;let o,I,c;if(this.nextLine2D){for(r=0;t[r]=64);do I+=c=this._getWhiteCode();while(c>=64)}else{do o+=c=this._getWhiteCode();while(c>=64);do I+=c=this._getBlackCode();while(c>=64)}for(this._addPixels(t[this.codingPos]+o,a),t[this.codingPos]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]=64);else do o+=c=this._getWhiteCode();while(c>=64);this._addPixels(t[this.codingPos]+o,a),a^=1}let l=!1;if(this.byteAlign&&(this.inputBits&=-8),!this.eoblock&&this.row===this.rows-1)this.rowsDone=!0;else{if(o=this._lookBits(12),this.eoline)for(;o!==gi&&o!==1;)this._eatBits(1),o=this._lookBits(12);else for(;o===0;)this._eatBits(1),o=this._lookBits(12);o===1?(this._eatBits(12),l=!0):o===gi&&(this.eof=!0)}if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&l&&this.byteAlign){if(o=this._lookBits(12),o===1){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(r=0;r<4;++r)o=this._lookBits(12),o!==1&&PA("bad rtc code: "+o),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(o=this._lookBits(13),o===gi)return this.eof=!0,-1;if(o>>1===1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(o&1))}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1],this.row++}let g;if(this.outputBits>=8)g=this.codingPos&1?0:255,this.outputBits-=8,this.outputBits===0&&t[this.codingPos]n?(g<<=n,this.codingPos&1||(g|=255>>8-n),this.outputBits-=n,n=0):(g<<=this.outputBits,this.codingPos&1||(g|=255>>8-this.outputBits),n-=this.outputBits,this.outputBits=0,t[this.codingPos]0&&(g<<=n,n=0))}while(n)}return this.black&&(g^=255),g}_addPixels(A,t){let i=this.codingLine,s=this.codingPos;A>i[s]&&(A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A),this.codingPos=s}_addPixelsNeg(A,t){let i=this.codingLine,s=this.codingPos;if(A>i[s])A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A;else if(A0&&A=a){let g=i[r-a];if(g[0]===n)return this._eatBits(n),[!0,g[1],!0]}}return[!1,0,!1]}_getTwoDimCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(7),t=L1[A],(t==null?void 0:t[0])>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,7,L1);if(i[0]&&i[2])return i[1]}return PA("Bad two dim code"),gi}_getWhiteCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(12),A===gi)return 1;if(t=A>>5?J1[A>>3]:H1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,9,J1);if(i[0]||(i=this._findTableCode(11,12,H1),i[0]))return i[1]}return PA("bad white code"),this._eatBits(1),1}_getBlackCode(){let A,t;if(this.eoblock){if(A=this._lookBits(13),A===gi)return 1;if(A>>7?!(A>>9)&&A>>7?t=K1[(A>>1)-64]:t=v1[A>>7]:t=Y1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(2,6,v1);if(i[0]||(i=this._findTableCode(7,12,K1,64),i[0])||(i=this._findTableCode(10,13,Y1),i[0]))return i[1]}return PA("bad black code"),this._eatBits(1),1}_lookBits(A){let t;for(;this.inputBits>16-A;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-A&65535>>16-A}_eatBits(A){(this.inputBits-=A)<0&&(this.inputBits=0)}},II=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,i instanceof F||(i=F.empty);let s={next(){return A.getByte()}};this.ccittFaxDecoder=new pr(s,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){let A=this.ccittFaxDecoder.readNextChar();if(A===-1){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=A}}},q1=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),zu=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),$u=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),Ad=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],ed=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5],Yi,X0,wr=class extends Me{constructor(t,i){super(i);HA(this,Yi);this.str=t,this.dict=t.dict;let s=t.getByte(),a=t.getByte();if(s===-1||a===-1)throw new v(`Invalid header in flate stream: ${s}, ${a}`);if((s&15)!==8)throw new v(`Unknown compression method in flate stream: ${s}, ${a}`);if(((s<<8)+a)%31!==0)throw new v(`Bad FCHECK in flate stream: ${s}, ${a}`);if(a&32)throw new v(`FDICT bit set in flate stream: ${s}, ${a}`);this.codeSize=0,this.codeBuf=0}async getImageData(t,i){let s=await this.asyncGetBytes();return(s==null?void 0:s.subarray(0,t))||this.getBytes(t)}async asyncGetBytes(){this.str.reset();let t=this.str.getBytes();try{let{readable:i,writable:s}=new DecompressionStream("deflate"),a=s.getWriter();a.write(t),a.close();let n=[],r=0;for await(let I of i)n.push(I),r+=I.byteLength;let g=new Uint8Array(r),o=0;for(let I of n)g.set(I,o),o+=I.byteLength;return g}catch(i){return this.str=new Ie(t,2,t.length,this.str.dict),this.reset(),null}}get isAsync(){return!0}getBits(t){let i=this.str,s=this.codeSize,a=this.codeBuf,n;for(;s>t,this.codeSize=s-=t,n}getCode(t){let i=this.str,s=t[0],a=t[1],n=this.codeSize,r=this.codeBuf,g;for(;n>16,c=o&65535;if(I<1||n>I,this.codeSize=n-I,c}generateHuffmanTable(t){let i=t.length,s=0,a;for(a=0;as&&(s=t[a]);let n=1<>=1;for(a=l;a>=1,i===0){let I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let c=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(c|=I<<8,(I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let l=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(l|=I<<8,l!==(~c&65535)&&(c!==0||l!==0))throw new v("Bad uncompressed block length in flate stream");this.codeBuf=0,this.codeSize=0;let h=this.bufferLength,C=h+c;if(t=this.ensureBuffer(C),this.bufferLength=C,c===0)a.peekByte()===-1&&(this.eof=!0);else{let B=a.getBytes(c);t.set(B,h),B.length0;)E[C++]=d}n=this.generateHuffmanTable(E.subarray(0,I)),r=this.generateHuffmanTable(E.subarray(I,Q))}else throw new v("Unknown block type in flate stream");t=this.buffer;let g=t?t.length:0,o=this.bufferLength;for(;;){let I=this.getCode(n);if(I<256){o+1>=g&&(t=this.ensureBuffer(o+1),g=t.length),t[o++]=I;continue}if(I===256){this.bufferLength=o;return}I-=257,I=zu[I];let c=I>>16;c>0&&(c=this.getBits(c)),s=(I&65535)+c,I=this.getCode(r),I=$u[I],c=I>>16,c>0&&(c=this.getBits(c));let l=(I&65535)+c;o+s>=g&&(t=this.ensureBuffer(o+s),g=t.length);for(let h=0;h>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}byteIn(){let A=this.data,t=this.bp;A[t]===255?A[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=A[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}readBit(A,t){let i=A[t]>>1,s=A[t]&1,a=td[i],n=a.qe,r,g=this.a-n;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--;while(!(g&32768));return this.a=g,A[t]=i<<1|s,r}},oe=class extends At{constructor(A){super(A,"Jbig2Error")}},lI=class{getContexts(A){return A in this?this[A]:this[A]=new Int8Array(1<<16)}},g0=class{constructor(A,t,i){this.data=A,this.start=t,this.end=i}get decoder(){let A=new cI(this.data,this.start,this.end);return nA(this,"decoder",A)}get contextCache(){let A=new lI;return nA(this,"contextCache",A)}},id=2**31-1,sd=-(2**31);function Xe(e,A,t){let i=e.getContexts(A),s=1;function a(o){let I=0;for(let c=0;c>>0}let n=a(1),r=a(1)?a(1)?a(1)?a(1)?a(1)?a(32)+4436:a(12)+340:a(8)+84:a(6)+20:a(4)+4:a(2),g;return n===0?g=r:r>0&&(g=-r),g>=sd&&g<=id?g:null}function of(e,A,t){let i=e.getContexts("IAID"),s=1;for(let a=0;a=D&&R=S)for(IA=IA<<1&C,u=0;u=0&&tA=0&&(QA=K[_][tA],QA&&(IA|=QA<=e?Z<<=1:Z=Z<<1|x[U][K];for(h=0;h=u||K<0||K>=f?Z<<=1:Z=Z<<1|i[U][K];let AA=p.readBit(m,Z);w[Y]=AA}}return x}function od(e,A,t,i,s,a,n,r,g,o,I,c){if(e&&A)throw new oe("symbol refinement with Huffman is not supported");let l=[],h=0,C=g1(t.length+i),B=I.decoder,Q=I.contextCache,E,f;for(e&&(E=vi(1),f=[],C=Math.max(C,1));l.length1)Z=cf(e,A,w,h,0,AA,1,t.concat(l),C,0,0,1,0,a,g,o,I,0,c);else{let gA=of(Q,B,C),R=Xe(Q,"IARDX",B),_=Xe(Q,"IARDY",B),tA=gA1&&(K=e?f.readBits(E):Xe(m,"IAIT",p));let Z=n*D+K,AA=e?h.symbolIDTable.decode(f):of(m,p,g),gA=A&&(e?f.readBit():Xe(m,"IARI",p)),R=r[AA],_=R[0].length,tA=R.length;if(gA){let N=Xe(m,"IARDW",p),H=Xe(m,"IARDH",p),q=Xe(m,"IARDX",p),T=Xe(m,"IARDY",p);_+=N,tA+=H,R=If(_,tA,C,R,(N>>1)+q,(H>>1)+T,!1,B,Q)}let IA=0;o?c&1?IA=tA-1:U+=tA-1:c>1?U+=_-1:IA=_-1;let QA=Z-(c&1?0:tA-1),V=U-(c&2?_-1:0),lA,EA,fA;if(o)for(lA=0;lA=0;E--)e?U=I1(Y,g,o,!0):U=_g(!1,g,o,t,!1,null,S,C),w[E]=U;let K,Z,AA,gA,R,_,tA,IA,QA;for(K=0;K=0;f--)AA^=w[f][K][Z],gA|=AA<>8,tA=c+K*l-Z*h>>8,_>=0&&_+p<=i&&tA>=0&&tA+m<=s)for(E=0;E=s))for(QA=Q[lA],IA=R[E],f=0;f=0&&V>5&7,g=[n&31],o=A+6;if(n===7){r=le(e,o-1)&536870911,o+=3;let C=r+7>>3;for(g[0]=e[o++];--C>0;)g.push(e[o++])}else if(n===5||n===6)throw new oe("invalid referred-to flags");t.retainBits=g;let I=4;t.number<=256?I=1:t.number<=65536&&(I=2);let c=[],l,h;for(l=0;l>>24&255,f[3]=C.height>>16&255,f[4]=C.height>>8&255,f[5]=C.height&255,l=o,h=e.length;l>2&3,c.huffmanDWSelector=l>>4&3,c.bitmapSizeSelector=l>>6&1,c.aggregationInstancesSelector=l>>7&1,c.bitmapCodingContextUsed=!!(l&256),c.bitmapCodingContextRetained=!!(l&512),c.template=l>>10&3,c.refinementTemplate=l>>12&1,a+=2,!c.huffman){for(o=c.template===0?4:1,r=[],g=0;g>2&3,h.stripSize=1<>4&3,h.transposed=!!(C&64),h.combinationOperator=C>>7&3,h.defaultPixelValue=C>>9&1,h.dsOffset=C<<17>>27,h.refinementTemplate=C>>15&1,h.huffman){let m=we(i,a);a+=2,h.huffmanFS=m&3,h.huffmanDS=m>>2&3,h.huffmanDT=m>>4&3,h.huffmanRefinementDW=m>>6&3,h.huffmanRefinementDH=m>>8&3,h.huffmanRefinementDX=m>>10&3,h.huffmanRefinementDY=m>>12&3,h.huffmanRefinementSizeSelector=!!(m&16384)}if(h.refinement&&!h.refinementTemplate){for(r=[],g=0;g<2;g++)r.push({x:Di(i,a),y:Di(i,a+1)}),a+=2;h.refinementAt=r}h.numberOfSymbolInstances=le(i,a),a+=4,n=[h,t.referredTo,i,a,s];break;case 16:let B={},Q=i[a++];B.mmr=!!(Q&1),B.template=Q>>1&3,B.patternWidth=i[a++],B.patternHeight=i[a++],B.maxPatternIndex=le(i,a),a+=4,n=[B,t.number,i,a,s];break;case 22:case 23:let E={};E.info=sr(i,a),a+=ar;let f=i[a++];E.mmr=!!(f&1),E.template=f>>1&3,E.enableSkip=!!(f&8),E.combinationOperator=f>>4&7,E.defaultPixelValue=f>>7&1,E.gridWidth=le(i,a),a+=4,E.gridHeight=le(i,a),a+=4,E.gridOffsetX=le(i,a)&4294967295,a+=4,E.gridOffsetY=le(i,a)&4294967295,a+=4,E.gridVectorX=we(i,a),a+=2,E.gridVectorY=we(i,a),a+=2,n=[E,t.referredTo,i,a,s];break;case 38:case 39:let u={};u.info=sr(i,a),a+=ar;let d=i[a++];if(u.mmr=!!(d&1),u.template=d>>1&3,u.prediction=!!(d&8),!u.mmr){for(o=u.template===0?4:1,r=[],g=0;g>2&1,x.combinationOperator=p>>3&3,x.requiresBuffer=!!(p&32),x.combinationOperatorOverride=!!(p&64),n=[x];break;case 49:break;case 50:break;case 51:break;case 53:n=[t.number,i,a,s];break;case 62:break;default:throw new oe(`segment type ${t.typeName}(${t.type}) is not implemented`)}let I="on"+t.typeName;I in A&&A[I].apply(A,n)}function Bd(e,A){for(let t=0,i=e.length;t>3,i=new Uint8ClampedArray(t*A.height);A.defaultPixelValue&&i.fill(255),this.buffer=i}drawBitmap(A,t){let i=this.currentPageInfo,s=A.width,a=A.height,n=i.width+7>>3,r=i.combinationOperatorOverride?A.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(A.x&7),I=A.y*n+(A.x>>3),c,l,h,C;switch(r){case 0:for(c=0;c>=1,h||(h=128,C++);I+=n}break;case 2:for(c=0;c>=1,h||(h=128,C++);I+=n}break;default:throw new oe(`operator ${r} is not supported`)}}onImmediateGenericRegion(A,t,i,s){let a=A.info,n=new g0(t,i,s),r=_g(A.mmr,a.width,a.height,A.template,A.prediction,null,A.at,n);this.drawBitmap(a,r)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(A,t,i,s,a,n){let r,g;A.huffman&&(r=ud(A,i,this.customTables),g=new w0(s,a,n));let o=this.symbols;o||(this.symbols=o={});let I=[];for(let l of i){let h=o[l];h&&I.push(...h)}let c=new g0(s,a,n);o[t]=od(A.huffman,A.refinement,I,A.numberOfNewSymbols,A.numberOfExportedSymbols,r,A.template,A.at,A.refinementTemplate,A.refinementAt,c,g)}onImmediateTextRegion(A,t,i,s,a){let n=A.info,r,g,o=this.symbols,I=[];for(let C of t){let B=o[C];B&&I.push(...B)}let c=g1(I.length);A.huffman&&(g=new w0(i,s,a),r=fd(A,t,this.customTables,I.length,g));let l=new g0(i,s,a),h=cf(A.huffman,A.refinement,n.width,n.height,A.defaultPixelValue,A.numberOfSymbolInstances,A.stripSize,I,c,A.transposed,A.dsOffset,A.referenceCorner,A.combinationOperator,r,A.refinementTemplate,A.refinementAt,l,A.logStripSize,g);this.drawBitmap(n,h)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(A,t,i,s,a){let n=this.patterns;n||(this.patterns=n={});let r=new g0(i,s,a);n[t]=Id(A.mmr,A.patternWidth,A.patternHeight,A.maxPatternIndex,A.template,r)}onImmediateHalftoneRegion(A,t,i,s,a){let n=this.patterns[t[0]],r=A.info,g=new g0(i,s,a),o=cd(A.mmr,n,A.template,r.width,r.height,A.defaultPixelValue,A.enableSkip,A.combinationOperator,A.gridWidth,A.gridHeight,A.gridOffsetX,A.gridOffsetY,A.gridVectorX,A.gridVectorY,g);this.drawBitmap(r,o)}onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(A,t,i,s){let a=this.customTables;a||(this.customTables=a={}),a[A]=Ed(t,i,s)}},si=class{constructor(A){A.length===2?(this.isOOB=!0,this.rangeLow=0,this.prefixLength=A[0],this.rangeLength=0,this.prefixCode=A[1],this.isLowerRange=!1):(this.isOOB=!1,this.rangeLow=A[0],this.prefixLength=A[1],this.rangeLength=A[2],this.prefixCode=A[3],this.isLowerRange=A[4]==="lower")}},Ns=class{constructor(A){this.children=[],A?(this.isLeaf=!0,this.rangeLength=A.rangeLength,this.rangeLow=A.rangeLow,this.isLowerRange=A.isLowerRange,this.isOOB=A.isOOB):this.isLeaf=!1}buildTree(A,t){let i=A.prefixCode>>t&1;if(t<=0)this.children[i]=new Ns(A);else{let s=this.children[i];s||(this.children[i]=s=new Ns(null)),s.buildTree(A,t-1)}}decodeNode(A){if(this.isLeaf){if(this.isOOB)return null;let i=A.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-i:i)}let t=this.children[A.readBit()];if(!t)throw new oe("invalid Huffman data");return t.decodeNode(A)}},Gs=class{constructor(A,t){t||this.assignPrefixCodes(A),this.rootNode=new Ns(null);for(let i=0,s=A.length;i0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(A){return this.rootNode.decodeNode(A)}assignPrefixCodes(A){let t=A.length,i=0;for(let I=0;I>1&7)+1,g=(i>>4&7)+1,o=[],I,c,l=s;do I=n.readBits(r),c=n.readBits(g),o.push(new si([l,I,c,0])),l+=1<=this.end)throw new oe("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}let A=this.currentByte>>this.shift&1;return this.shift--,A}readBits(A){let t=0,i;for(i=A-1;i>=0;i--)t|=this.readBit()<=this.end?-1:this.data[this.position++]}};function h0(e,A,t){let i=0;for(let s=0,a=A.length;s=32){let C,B,Q;switch(h){case 32:if(l===0)throw new oe("no previous value in symbol ID table");B=s.readBits(2)+3,C=a[l-1].prefixLength;break;case 33:B=s.readBits(3)+3,C=0;break;case 34:B=s.readBits(7)+11,C=0;break;default:throw new oe("invalid code length in symbol ID table")}for(Q=0;Q>c&1,c--}if(i&&!g)for(let I=0;I<5&&a.readNextChar()!==-1;I++);return n}var CI=class{parseChunks(A){return Qd(A)}parse(A){throw new Error("Not implemented: Jbig2Image.parse")}},BI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);let t=new CI,i=[];if(this.params instanceof F){let n=this.params.get("JBIG2Globals");if(n instanceof KA){let r=n.getBytes();i.push({data:r,start:0,end:r.length})}}i.push({data:A,start:0,end:A.length});let s=t.parseChunks(i),a=s.length;for(let n=0;n>3,c=i&7,l=e.length;t=new Uint32Array(t.buffer);let h=0;for(let C=0;C>2,g=new Uint32Array(e.buffer,A,r);if(Ot.isLittleEndian){for(;n>>24|I<<8|4278190080,t[i+2]=I>>>16|c<<16|4278190080,t[i+3]=c>>>8|4278190080}for(let o=n*4,I=e.length;o>>8|255,t[i+2]=I<<16|c>>>16|255,t[i+3]=c<<8|255}for(let o=n*4,I=e.length;o0&&!e[a-1];)a--;let n=[{children:[],index:0}],r=n[0],g;for(i=0;i0;)r=n.pop();for(r.index++,n.push(r);n.length<=i;)n.push(g={children:[],index:0}),r.children[r.index]=g.children,r=g;t++}i+10)return C--,h>>C&1;if(h=e[A++],h===255){let CA=e[A++];if(CA){if(CA===220&&o){A+=2;let N=we(e,A);if(A+=2,N>0&&N!==t.scanLines)throw new Fa("Found DNL marker (0xFFDC) while parsing scan data",N)}else if(CA===217){if(o){let N=Y*(t.precision===8?8:0);if(N>0&&Math.round(t.scanLines/N)>=5)throw new Fa("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",N)}throw new yr("Found EOI marker (0xFFD9) while parsing scan data")}throw new Gt(`unexpected marker ${(h<<8|CA).toString(16)}`)}}return C=7,h>>>7}function Q(CA){let N=CA;for(;;){switch(N=N[B()],typeof N){case"number":return N;case"object":continue}throw new Gt("invalid huffman sequence")}}function E(CA){let N=0;for(;CA>0;)N=N<<1|B(),CA--;return N}function f(CA){if(CA===1)return B()===1?1:-1;let N=E(CA);return N>=1<>4;if(X===0){if(W<15)break;T+=16;continue}T+=W;let G=Qa[T];CA.blockData[N+G]=f(X),T++}}function d(CA,N){let H=Q(CA.huffmanTableDC),q=H===0?0:f(H)<0){p--;return}let H=a,q=n;for(;H<=q;){let T=Q(CA.huffmanTableAC),$=T&15,X=T>>4;if($===0){if(X<15){p=E(X)+(1<>4,$===0)T<15?(p=E(T)+(1<0){for(gA=0;gA0?"unexpected":"excessive";k(`decodeScan - ${N} MCU data, current marker is: ${V.invalid}`),A=V.offset}if(V.marker>=65488&&V.marker<=65495)A+=2;else break}return A-l}function bd(e,A,t){let i=e.quantizationTable,s=e.blockData,a,n,r,g,o,I,c,l,h,C,B,Q,E,f,u,d,x;if(!i)throw new Gt("missing required Quantization Table.");for(let p=0;p<64;p+=8){if(h=s[A+p],C=s[A+p+1],B=s[A+p+2],Q=s[A+p+3],E=s[A+p+4],f=s[A+p+5],u=s[A+p+6],d=s[A+p+7],h*=i[p],!(C|B|Q|E|f|u|d)){x=v0*h+512>>10,t[p]=x,t[p+1]=x,t[p+2]=x,t[p+3]=x,t[p+4]=x,t[p+5]=x,t[p+6]=x,t[p+7]=x;continue}C*=i[p+1],B*=i[p+2],Q*=i[p+3],E*=i[p+4],f*=i[p+5],u*=i[p+6],d*=i[p+7],a=v0*h+128>>8,n=v0*E+128>>8,r=B,g=u,o=Yn*(C-d)+128>>8,l=Yn*(C+d)+128>>8,I=Q<<4,c=f<<4,a=a+n+1>>1,n=a-n,x=r*Jn+g*Hn+128>>8,r=r*Hn-g*Jn+128>>8,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,t[p]=a+l,t[p+7]=a-l,t[p+1]=n+c,t[p+6]=n-c,t[p+2]=r+I,t[p+5]=r-I,t[p+3]=g+o,t[p+4]=g-o}for(let p=0;p<8;++p){if(h=t[p],C=t[p+8],B=t[p+16],Q=t[p+24],E=t[p+32],f=t[p+40],u=t[p+48],d=t[p+56],!(C|B|Q|E|f|u|d)){x=v0*h+8192>>14,x<-2040?x=0:x>=2024?x=255:x=x+2056>>4,s[A+p]=x,s[A+p+8]=x,s[A+p+16]=x,s[A+p+24]=x,s[A+p+32]=x,s[A+p+40]=x,s[A+p+48]=x,s[A+p+56]=x;continue}a=v0*h+2048>>12,n=v0*E+2048>>12,r=B,g=u,o=Yn*(C-d)+2048>>12,l=Yn*(C+d)+2048>>12,I=Q,c=f,a=(a+n+1>>1)+4112,n=a-n,x=r*Jn+g*Hn+2048>>12,r=r*Hn-g*Jn+2048>>12,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,h=a+l,d=a-l,C=n+c,u=n-c,B=r+I,f=r-I,Q=g+o,E=g-o,h<16?h=0:h>=4080?h=255:h>>=4,C<16?C=0:C>=4080?C=255:C>>=4,B<16?B=0:B>=4080?B=255:B>>=4,Q<16?Q=0:Q>=4080?Q=255:Q>>=4,E<16?E=0:E>=4080?E=255:E>>=4,f<16?f=0:f>=4080?f=255:f>>=4,u<16?u=0:u>=4080?u=255:u>>=4,d<16?d=0:d>=4080?d=255:d>>=4,s[A+p]=h,s[A+p+8]=C,s[A+p+16]=B,s[A+p+24]=Q,s[A+p+32]=E,s[A+p+40]=f,s[A+p+48]=u,s[A+p+56]=d}}function Dd(e,A){let t=A.blocksPerLine,i=A.blocksPerColumn,s=new Int16Array(64);for(let a=0;a=i)return null;let a=we(e,A);if(a>=65472&&a<=65534)return{invalid:null,marker:a,offset:A};let n=we(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=i)return null;n=we(e,s)}return{invalid:a.toString(16),marker:n,offset:s}}var uI=class{constructor({decodeTransform:A=null,colorTransform:t=-1}={}){this._decodeTransform=A,this._colorTransform=t}parse(A,{dnlScanLines:t=null}={}){function i(){let B=we(A,a);a+=2;let Q=a+B-2,E=fI(A,Q,a);E!=null&&E.invalid&&(k("readDataBlock - incorrect length, current marker is: "+E.invalid),Q=E.offset);let f=A.subarray(a,Q);return a+=f.length,f}function s(B){let Q=Math.ceil(B.samplesPerLine/8/B.maxH),E=Math.ceil(B.scanLines/8/B.maxV);for(let f of B.components){let u=Math.ceil(Math.ceil(B.samplesPerLine/8)*f.h/B.maxH),d=Math.ceil(Math.ceil(B.scanLines/8)*f.v/B.maxV),x=Q*f.h,m=64*(E*f.v)*(x+1);f.blockData=new Int16Array(m),f.blocksPerLine=u,f.blocksPerColumn=d}B.mcusPerLine=Q,B.mcusPerColumn=E}let a=0,n=null,r=null,g,o,I=0,c=[],l=[],h=[],C=we(A,a);if(a+=2,C!==65496)throw new Gt("SOI not found");C=we(A,a),a+=2;A:for(;C!==65497;){let B,Q,E;switch(C){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:let f=i();C===65504&&f[0]===74&&f[1]===70&&f[2]===73&&f[3]===70&&f[4]===0&&(n={version:{major:f[5],minor:f[6]},densityUnits:f[7],xDensity:f[8]<<8|f[9],yDensity:f[10]<<8|f[11],thumbWidth:f[12],thumbHeight:f[13],thumbData:f.subarray(14,14+3*f[12]*f[13])}),C===65518&&f[0]===65&&f[1]===100&&f[2]===111&&f[3]===98&&f[4]===101&&(r={version:f[5]<<8|f[6],flags0:f[7]<<8|f[8],flags1:f[9]<<8|f[10],transformCode:f[11]});break;case 65499:let u=we(A,a);a+=2;let d=u+a-2,x;for(;a>4)if(_>>4===1)for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=we(A,a),a+=2;else throw new Gt("DQT - invalid table spec");else for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=A[a++];c[_&15]=tA}break;case 65472:case 65473:case 65474:if(g)throw new Gt("Only single frame JPEGs supported");a+=2,g={},g.extended=C===65473,g.progressive=C===65474,g.precision=A[a++];let p=we(A,a);a+=2,g.scanLines=t||p,g.samplesPerLine=we(A,a),a+=2,g.components=[],g.componentIds={};let m=A[a++],D=0,S=0;for(B=0;B>4,IA=A[a+1]&15;D>4?l:h)[_&15]=wd(tA,QA)}break;case 65501:a+=2,o=we(A,a),a+=2;break;case 65498:let Y=++I===1&&!t;a+=2;let U=A[a++],K=[];for(B=0;B>4],IA.huffmanTableAC=l[QA&15],K.push(IA)}let Z=A[a++],AA=A[a++],gA=A[a++];try{let _=yd(A,a,g,K,o,Z,AA,gA>>4,gA&15,Y);a+=_}catch(_){if(_ instanceof Fa)return k(`${_.message} -- attempting to re-parse the JPEG image.`),this.parse(A,{dnlScanLines:_.scanLines});if(_ instanceof yr){k(`${_.message} -- ignoring the rest of the image data.`);break A}throw _}break;case 65500:a+=4;break;case 65535:A[a]!==255&&a--;break;default:let R=fI(A,a-2,a-3);if(R!=null&&R.invalid){k("JpegImage.parse - unexpected data, current marker is: "+R.invalid),a=R.offset;break}if(!R||a>=A.length-1){k("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new Gt("JpegImage.parse - unknown marker: "+C.toString(16))}C=we(A,a),a+=2}if(!g)throw new Gt("JpegImage.parse - no frame data found.");this.width=g.samplesPerLine,this.height=g.scanLines,this.jfif=n,this.adobe=r,this.components=[];for(let B of g.components){let Q=c[B.quantizationId];Q&&(B.quantizationTable=Q),this.components.push({index:B.index,output:Dd(g,B),scaleX:B.h/g.maxH,scaleY:B.v/g.maxV,blocksPerLine:B.blocksPerLine,blocksPerColumn:B.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(A,t,i=!1){let s=this.width/A,a=this.height/t,n,r,g,o,I,c,l,h,C,B,Q=0,E,f=this.components.length,u=A*t*f,d=new Uint8ClampedArray(u),x=new Uint32Array(A),p=4294967288,m;for(l=0;l>8)+D[C+1];return d}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:this.numComponents===3?this._colorTransform===0?!1:!(this.components[0].index===82&&this.components[1].index===71&&this.components[2].index===66):this._colorTransform===1}_convertYccToRgb(A){let t,i,s;for(let a=0,n=A.length;a4)throw new Gt("Unsupported color mode");let n=this._getLinearizedBlockData(A,t,a);if(this.numComponents===1&&(i||s)){let r=n.length*(i?4:3),g=new Uint8ClampedArray(r),o=0;if(i)pd(n,new Uint32Array(g.buffer));else for(let I of n)g[o++]=I,g[o++]=I,g[o++]=I;return g}else if(this.numComponents===3&&this._isColorConversionNeeded){if(i){let r=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,r)}return this._convertYccToRgb(n)}else if(this.numComponents===4){if(this._isColorConversionNeeded)return i?this._convertYcckToRgba(n):s?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(i)return this._convertCmykToRgba(n);if(s)return this._convertCmykToRgb(n)}return n}},Ra=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);for(let n=0,r=A.length-1;n0&&(A=A.subarray(n));break}let t={decodeTransform:void 0,colorTransform:void 0},i=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(i)){let n=this.dict.get("BPC","BitsPerComponent")||8,r=i.length,g=new Int32Array(r),o=!1,I=(1<{var A;var e=typeof document!="undefined"?(A=document.currentScript)==null?void 0:A.src:void 0;return function(t={}){var i,s=t,a,n,r=new Promise((z,rA)=>{a=z,n=rA}),g=!0,o=!1;s.decode=function(z,{numComponents:rA=4,isIndexedColormap:xA=!1,smaskInData:RA=!1}){let YA=z.length,ae=s._malloc(YA);s.HEAPU8.set(z,ae);let ee=s._jp2_decode(ae,YA,rA>0?rA:0,!!xA,!!RA);if(s._free(ae),ee){let{errorMessages:te}=s;return te?(delete s.errorMessages,te):"Unknown error"}let{imageData:Oe}=s;return s.imageData=null,Oe};var I=Object.assign({},s),c=[],l="./this.program",h=(z,rA)=>{throw rA},C="",B,Q,E;(g||o)&&(o?C=self.location.href:typeof document!="undefined"&&document.currentScript&&(C=document.currentScript.src),e&&(C=e),C.startsWith("blob:")?C="":C=C.substr(0,C.replace(/[?#].*/,"").lastIndexOf("/")+1),B=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.send(null),rA.responseText},o&&(E=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.responseType="arraybuffer",rA.send(null),new Uint8Array(rA.response)}),Q=(z,rA,xA)=>{fetch(z,{credentials:"same-origin"}).then(RA=>RA.ok?RA.arrayBuffer():Promise.reject(new Error(RA.status+" : "+RA.url))).then(rA,xA)});var f=s.print||console.log.bind(console),u=s.printErr||console.error.bind(console);Object.assign(s,I),I=null,s.arguments&&(c=s.arguments),s.thisProgram&&(l=s.thisProgram),s.quit&&(h=s.quit);var d;s.wasmBinary&&(d=s.wasmBinary);function x(z){for(var rA=atob(z),xA=new Uint8Array(rA.length),RA=0;RAz.startsWith(W);function BA(){var z="data:application/octet-stream;base64,AGFzbQEAAAABzgEaYAN/f38Bf2AEf39/fwF/YAF/AGACf38AYAF/AX9gA39/fwBgAn9/AX9gBH9/f38AYAN/fn8BfmAFf39/f38Bf2ACfn8Bf2ACfn8BfmAFf39/f38AYAN/fn8Bf2AAAX9gB39/f39/f38Bf2AJf39/f39/f39/AX9gC39/f39/f39/f39/AX9gBn9/f39/fwF/YAZ/fH9/f38Bf2AIf39/f39/f38AYAh/f39/f39/fwF/YAAAYAZ/f39/f38AYAd/f39/f39/AGACfH8BfAJbDwFhAWEAAgFhAWIAAQFhAWMABQFhAWQAAgFhAWUADAFhAWYABwFhAWcAAwFhAWgABwFhAWkABQFhAWoACQFhAWsABAFhAWwABgFhAW0ABgFhAW4ABAFhAW8AAwPAAb4BBwIFAAYEAAUGBAUBBAwFFAYCAgICAAYQEQQCChICBQIEBwQCDgICDQYCFQMHAAAEAwEWCQkDAAkGAQQEBQUODwEBAwADBgIQBBcYAgcGAwcHAQECAAQZBAYHBA8MAAQCAgIABgAGAQEBAQEBAQEAAAAAAAYDAgICAwMDAwMAAxMIBA4EAAgDAwkECAoLCAAAAQEBAQEBAQENAQAEBAUJDwESEQEAAAYDAwEFBQUFBQUFBQELAQEBAQEBAQEBCgQFAXABbm4FBwEBggKAgAIGCAF/AUGQ2QULBxsGAXACAAFxAEEBcgCYAQFzABABdAEAAXUAlwEJvQEBAEEBC21RzAHCAXNzNqcBnAGZAYsBigGJAYgBhwGGAYUBhAFSgQGAAX9+fXx7enl4d3Z1ywHKAckByAHHAcYBQMUBxAFAQMMBwQHAAb8BvgG9AbwBuwG6AbkBswGoAaYBpQGkAaMBogGhAaABnwGeAZ0BmwGaAUlKTFJIgwFTOFCCAU9FRk4rJ6sBqgGsAbQBuAG1Aa8BqQGtAa4BtgG3AXCwAbEBsgFRlgGVAYwBjgGNAZIBkwGUAZABjwEKkZoOvgGCAgEDfyMAQZAEayIEJAACQCAARQ0AAkACQAJAAkAgAUEBaw4EAAEEAgQLIABBDGohAQwCCyAAQRBqIQEgAEEEaiEADAELIABBFGohASAAQQhqIQALIAEoAgAiBUUNACACRQ0AIAAoAgAhBiAEQQBBgAQQFSIBIAM2AowEIwBBoAFrIgAkACAAIAE2ApQBIABB/wM2ApgBIABBAEGQARAVIgBBfzYCTCAAQeYANgIkIABBfzYCUCAAIABBnwFqNgIsIAAgAEGUAWo2AlQgAUEAOgAAIAAgAiADQecAQegAEGsgAEGgAWokACABQQA6AP8DIAEgBiAFEQMACyAEQZAEaiQAC9ACAQV/IAAEQCAAQQRrIgMoAgAiBCEBIAMhAiAAQQhrKAIAIgAgAEF+cSIARwRAIAIgAGsiAigCBCIBIAIoAggiBTYCCCAFIAE2AgQgACAEaiEBCyADIARqIgAoAgAiAyAAIANqQQRrKAIARwRAIAAoAgQiBCAAKAIIIgA2AgggACAENgIEIAEgA2ohAQsgAiABNgIAIAIgAUF8cWpBBGsgAUEBcjYCACACAn8gAigCAEEIayIAQf8ATQRAIABBA3ZBAWsMAQsgAGchAyAAQR0gA2t2QQRzIANBAnRrQe4AaiAAQf8fTQ0AGkE/IABBHiADa3ZBAnMgA0EBdGtBxwBqIgAgAEE/TxsLIgFBBHQiAEGgxwFqNgIEIAIgAEGoxwFqIgAoAgA2AgggACACNgIAIAIoAgggAjYCBEGozwFBqM8BKQMAQgEgAa2GhDcDAAsLyQIBBH8gAUEANgIAAkAgAkUNACABIAJqIQMCQCACQRBJBEAgACEBDAELAkAgACACaiABTQ0AIAAgA08NACAAIQEMAQsgA0EQayEGIAAgAkFwcSIFaiEBIAMgBWshAwNAIAYgBGsgACAEav0AAAD9DAAAAAAAAAAAAAAAAAAAAAD9DQ8ODQwLCgkIBwYFBAMCAQD9CwAAIARBEGoiBCAFRw0ACyACIAVGDQELAkAgAkEDcSIGRQRAIAUhBAwBC0EAIQAgBSEEA0AgA0EBayIDIAEtAAA6AAAgBEEBaiEEIAFBAWohASAAQQFqIgAgBkcNAAsLIAUgAmtBfEsNAANAIANBAWsgAS0AADoAACADQQJrIAEtAAE6AAAgA0EDayABLQACOgAAIANBBGsiAyABLQADOgAAIAFBBGohASAEQQRqIgQgAkcNAAsLC4AEAQN/IAJBgARPBEAgACABIAIQAiAADwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCAD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IABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsEQEEADwsDQEF/IQQgAkHMmbPmAE0EQEF/IAEgAkEKbCIFaiABIAVB/////wdzSxshBAsgACADQQFqIgU2AgAgAywAASEGIAQhAiAFIQMgBkEwayIBQQpJDQALIAILtBQCFX8BfiMAQUBqIggkACAIIAE2AjwgCEEnaiEWIAhBKGohEQJAAkACQAJAA0BBACEHA0AgASENIAcgDkH/////B3NKDQIgByAOaiEOAkACQAJAAkAgASIHLQAAIgsEQANAAkACQCALQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByELA0AgCy0AAUElRwRAIAshAQwCCyAHQQFqIQcgCy0AAiEZIAtBAmoiASELIBlBJUYNAAsLIAcgDWsiByAOQf////8HcyIXSg0JIAAEQCAAIA0gBxAZCyAHDQcgCCABNgI8IAFBAWohB0F/IRACQCABLAABQTBrIglBCUsNACABLQACQSRHDQAgAUEDaiEHQQEhEiAJIRALIAggBzYCPEEAIQwCQCAHLAAAIgtBIGsiAUEfSwRAIAchCQwBCyAHIQlBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCTYCPCABIAxyIQwgBywAASILQSBrIgFBIE8NASAJIQdBASABdCIBQYnRBHENAAsLAkAgC0EqRgRAAn8CQCAJLAABQTBrIgFBCUsNACAJLQACQSRHDQACfyAARQRAIAQgAUECdGpBCjYCAEEADAELIAMgAUEDdGooAgALIQ8gCUEDaiEBQQEMAQsgEg0GIAlBAWohASAARQRAIAggATYCPEEAIRJBACEPDAMLIAIgAigCACIHQQRqNgIAIAcoAgAhD0EACyESIAggATYCPCAPQQBODQFBACAPayEPIAxBgMAAciEMDAELIAhBPGoQaSIPQQBIDQogCCgCPCEBC0EAIQdBfyEKAn9BACABLQAAQS5HDQAaIAEtAAFBKkYEQAJ/AkAgASwAAkEwayIJQQlLDQAgAS0AA0EkRw0AIAFBBGohAQJ/IABFBEAgBCAJQQJ0akEKNgIAQQAMAQsgAyAJQQN0aigCAAsMAQsgEg0GIAFBAmohAUEAIABFDQAaIAIgAigCACIJQQRqNgIAIAkoAgALIQogCCABNgI8IApBAE4MAQsgCCABQQFqNgI8IAhBPGoQaSEKIAgoAjwhAUEBCyETA0AgByEUQRwhCSABIhgsAAAiB0H7AGtBRkkNCyABQQFqIQEgByAUQTpsakG/wAFqLQAAIgdBAWtBCEkNAAsgCCABNgI8AkAgB0EbRwRAIAdFDQwgEEEATgRAIABFBEAgBCAQQQJ0aiAHNgIADAwLIAggAyAQQQN0aikDADcDMAwCCyAARQ0IIAhBMGogByACIAYQaAwBCyAQQQBODQtBACEHIABFDQgLIAAtAABBIHENCyAMQf//e3EiCyAMIAxBgMAAcRshDEEAIRBBsAghFSARIQkCQAJAAn8CQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIBgsAAAiB0FTcSAHIAdBD3FBA0YbIAcgFBsiB0HYAGsOIQQWFhYWFhYWFhAWCQYQEBAWBhYWFhYCBQMWFgoWARYWBAALAkAgB0HBAGsOBxAWCxYQEBAACyAHQdMARg0LDBULIAgpAzAhHEGwCAwFC0EAIQcCQAJAAkACQAJAAkACQCAUQf8BcQ4IAAECAwQcBQYcCyAIKAIwIA42AgAMGwsgCCgCMCAONgIADBoLIAgoAjAgDqw3AwAMGQsgCCgCMCAOOwEADBgLIAgoAjAgDjoAAAwXCyAIKAIwIA42AgAMFgsgCCgCMCAOrDcDAAwVC0EIIAogCkEITRshCiAMQQhyIQxB+AAhBwsgESEBIAgpAzAiHEIAUgRAIAdBIHEhDQNAIAFBAWsiASAcp0EPcUHQxAFqLQAAIA1yOgAAIBxCD1YhGiAcQgSIIRwgGg0ACwsgASENIAgpAzBQDQMgDEEIcUUNAyAHQQR2QbAIaiEVQQIhEAwDCyARIQEgCCkDMCIcQgBSBEADQCABQQFrIgEgHKdBB3FBMHI6AAAgHEIHViEbIBxCA4ghHCAbDQALCyABIQ0gDEEIcUUNAiAKIBEgAWsiAUEBaiABIApIGyEKDAILIAgpAzAiHEIAUwRAIAhCACAcfSIcNwMwQQEhEEGwCAwBCyAMQYAQcQRAQQEhEEGxCAwBC0GyCEGwCCAMQQFxIhAbCyEVIBwgERAqIQ0LIBMgCkEASHENESAMQf//e3EgDCATGyEMAkAgCCkDMCIcQgBSDQAgCg0AIBEhDUEAIQoMDgsgCiAcUCARIA1raiIBIAEgCkgbIQoMDQsgCCkDMCEcDAsLAn9B/////wcgCiAKQf////8HTxsiDCIHQQBHIQkCQAJAAkAgCCgCMCIBQYQMIAEbIg0iAUEDcUUNACAHRQ0AA0AgAS0AAEUNAiAHQQFrIgdBAEchCSABQQFqIgFBA3FFDQEgBw0ACwsgCUUNAQJAIAEtAABFDQAgB0EESQ0AA0BBgIKECCABKAIAIglrIAlyQYCBgoR4cUGAgYKEeEcNAiABQQRqIQEgB0EEayIHQQNLDQALCyAHRQ0BCwNAIAEgAS0AAEUNAhogAUEBaiEBIAdBAWsiBw0ACwtBAAsiASANayAMIAEbIgEgDWohCSAKQQBOBEAgCyEMIAEhCgwMCyALIQwgASEKIAktAAANDwwLCyAIKQMwIhxCAFINAUIAIRwMCQsgCgRAIAgoAjAMAgtBACEHIABBICAPQQAgDBAcDAILIAhBADYCDCAIIBw+AgggCCAIQQhqIgc2AjBBfyEKIAcLIQtBACEHA0ACQCALKAIAIg1FDQAgCEEEaiANEGciDUEASA0PIA0gCiAHa0sNACALQQRqIQsgByANaiIHIApJDQELC0E9IQkgB0EASA0MIABBICAPIAcgDBAcIAdFBEBBACEHDAELQQAhCSAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIKIA0QZyINIAlqIgkgB0sNASAAIAogDRAZIAtBBGohCyAHIAlLDQALCyAAQSAgDyAHIAxBgMAAcxAcIA8gByAHIA9IGyEHDAgLIBMgCkEASHENCUE9IQkgACAIKwMwIA8gCiAMIAcgBRETACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQaEEBIQ4gB0EBaiIHQQpHDQEMCwsLQQEhDiAHQQpPDQkDQCAEIAdBAnRqKAIADQEgB0EBaiIHQQpHDQALDAkLQRwhCQwGCyAIIBw8ACdBASEKIBYhDSALIQwLIAogCSANayILIAogC0obIgogEEH/////B3NKDQNBPSEJIA8gCiAQaiIBIAEgD0gbIgcgF0oNBCAAQSAgByABIAwQHCAAIBUgEBAZIABBMCAHIAEgDEGAgARzEBwgAEEwIAogC0EAEBwgACANIAsQGSAAQSAgByABIAxBgMAAcxAcIAgoAjwhAQwBCwsLQQAhDgwDC0E9IQkLQZTHASAJNgIAC0F/IQ4LIAhBQGskACAOC6gCAQR/IwBB0AFrIgUkACAFIAI2AswBIAVBoAFqIgJBAEEoEBUaIAUgBSgCzAE2AsgBAkBBACABIAVByAFqIAVB0ABqIAIgAyAEEGpBAEgNACAAKAJMQQBIIQggACAAKAIAIgdBX3E2AgACfwJAAkAgACgCMEUEQCAAQdAANgIwIABBADYCHCAAQgA3AxAgACgCLCEGIAAgBTYCLAwBCyAAKAIQDQELQX8gABA+DQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWogAyAEEGoLIQEgBgR/IABBAEEAIAAoAiQRAAAaIABBADYCMCAAIAY2AiwgAEEANgIcIAAoAhQaIABCADcDEEEABSABCxogACAAKAIAIAdBIHFyNgIAIAgNAAsgBUHQAWokAAsnAQF/QRwhAyABQQNxBH9BHAUgACABIAIQJSIANgIAQQBBMCAAGwsL/QMBBX8Cf0HgxAEoAgAiAiAAQQdqQXhxIgFBB2pBeHEiA2ohAAJAIANBACAAIAJNG0UEQCAAPwBBEHRNDQEgABAKDQELQZTHAUEwNgIAQX8MAQtB4MQBIAA2AgAgAgsiAkF/RwRAIAEgAmoiAEEEa0EQNgIAIABBEGsiA0EQNgIAAkACf0GgzwEoAgAiAQR/IAEoAggFQQALIAJGBEAgAiACQQRrKAIAQX5xayIEQQRrKAIAIQUgASAANgIIIAQgBUF+cWsiACAAKAIAakEEay0AAEEBcQRAIAAoAgQiASAAKAIIIgQ2AgggBCABNgIEIAAgAyAAayIBNgIADAMLIAJBEGsMAQsgAkEQNgIAIAIgADYCCCACIAE2AgQgAkEQNgIMQaDPASACNgIAIAJBEGoLIgAgAyAAayIBNgIACyAAIAFBfHFqQQRrIAFBAXI2AgAgAAJ/IAAoAgBBCGsiAUH/AE0EQCABQQN2QQFrDAELIAFBHSABZyIDa3ZBBHMgA0ECdGtB7gBqIAFB/x9NDQAaQT8gAUEeIANrdkECcyADQQF0a0HHAGoiASABQT9PGwsiAUEEdCIDQaDHAWo2AgQgACADQajHAWoiAygCADYCCCADIAA2AgAgACgCCCAANgIEQajPAUGozwEpAwBCASABrYaENwMACyACQX9HC70BAQJ/AkAgACgCTCIBQQBOBEAgAUUNAUHMzwEoAgAgAUH/////A3FHDQELAkAgACgCUEEKRg0AIAAoAhQiASAAKAIQRg0AIAAgAUEBajYCFCABQQo6AAAPCyAAEG8PCyAAQcwAaiIBIAEoAgAiAkH/////AyACGzYCAAJAAkAgACgCUEEKRg0AIAAoAhQiAiAAKAIQRg0AIAAgAkEBajYCFCACQQo6AAAMAQsgABBvCyABKAIAGiABQQA2AgALfAECfyMAQRBrIgEkACABQQo6AA8CQAJAIAAoAhAiAgR/IAIFIAAQPg0CIAAoAhALIAAoAhQiAkYNACAAKAJQQQpGDQAgACACQQFqNgIUIAJBCjoAAAwBCyAAIAFBD2pBASAAKAIkEQAAQQFHDQAgAS0ADxoLIAFBEGokAAuwAgECfyAABEAgACgCABA4IABBADYCACAAKAJIIgEEQCABEBAgAEEANgJICyAAKAJEIgEEQCABEBAgAEEANgJECyAAKAJsIgEEQCABEBAgAEEANgJsCyAAKAJ0IgEEQCABKAIAIgIEQCACEBAgACgCdCIBQQA2AgALIAEQECAAQQA2AnQLIAAoAngiAQRAIAEoAgwiAgRAIAIQECAAKAJ4IgFBADYCDAsgASgCBCICBEAgAhAQIAAoAngiAUEANgIECyABKAIIIgIEQCACEBAgACgCeCIBQQA2AggLIAEoAgAiAgRAIAIQECAAKAJ4IgFBADYCAAsgARAQIABBADYCeAsgACgCBCIBBEAgARAyIABBADYCBAsgACgCCCIBBEAgARAyIABBADYCCAsgABAQCwuLGwIefwV7IwBB8AFrIgkkAEEBIQ4CQCAAKAIAKAI8DQAgACgCgAENAAJAAkAgACgCdCIIRQRAIAAoAnghBAwBCyABKAIQIQMgCC8BBCEGAkAgACgCeCIERQ0AIAQoAgxFDQAgBC0AEiEDCwJAIAYEQCAIKAIAIQgDQCAIIAVBBmxqIgovAQAiByADTwRAIAkgAzYCtAEgCSAHNgKwASACQQFBoOYAIAlBsAFqEA9BACEODAYLAkAgCi8BBCIKRQ0AIApB//8DRg0AIApBAWsiCiADSQ0AIAkgAzYCpAEgCSAKNgKgASACQQFBoOYAIAlBoAFqEA9BACEODAYLIAVBAWoiBSAGRw0ACwwBCyADDQIMAQsDQCADQQFrIQNBACEFA0AgCCAFQQZsai8BACADRwRAIAVBAWoiBSAGRw0BDAQLCyADDQALCwJAIARFDQAgBCgCDCIKRQ0AAkACQCAELQASIggEQEEAIQVBASEHA0AgASgCECIDIAogBUECdGovAQAiBE0EQCAJIAM2ApQBIAkgBDYCkAEgAkEBQaDmACAJQZABahAPQQAhBwsgBUEBaiIFIAhHDQALIAhBBBATIgNFDQFBACEFA0ACQCAKIAVBAnRqIgQtAAIiBkECTwRAIAkgBjYCRCAJIAU2AkAgAkEBQcvZACAJQUBrEA9BACEHDAELIAggBC0AAyIETQRAIAkgBDYCgAEgAkEBQZPZACAJQYABahAPQQAhBwwBCyADIARBAnRqIQsCQCAGQQFHIgwNACALKAIARQ0AIAkgBDYCUCACQQFBvNUAIAlB0ABqEA9BACEHDAELAkAgBg0AIARFDQAgCSAENgJkIAkgBTYCYCACQQFBitgAIAlB4ABqEA9BACEHDAELAkAgDA0AIAQgBUYNACAJIAQ2AnggCSAFNgJ0IAkgBTYCcCACQQFBrtgAIAlB8ABqEA9BACEHDAELIAtBATYCAAsgBUEBaiIFIAhHDQALQQAhBQNAAkACQCADIAVBAnQiBGooAgBFBEAgBCAKai0AAg0BCyAFQQFqIgUgCEcNAiAHRQ0BIAEoAhBBAUcNBUEAIQUDQCADIAVBAnRqKAIABEAgCCAFQQFqIgVHDQEMBwsLQQAhByACQQJB7sUAQQAQDyAIQRBPBEAgCEHwAXEhB0EAIQQDQCAKIARBAnRqIgZBAToAAiAGIAQ6AAMgBkEBOgA+IAZBAToAOiAGQQE6ADYgBkEBOgAyIAZBAToALiAGQQE6ACogBkEBOgAmIAZBAToAIiAGQQE6AB4gBkEBOgAaIAZBAToAFiAGQQE6ABIgBkEBOgAOIAZBAToACiAGQQE6AAYgBiAEQQFyOgAHIAYgBEEPcjoAPyAGIARBDnI6ADsgBiAEQQ1yOgA3IAYgBEEMcjoAMyAGIARBC3I6AC8gBiAEQQpyOgArIAYgBEEJcjoAJyAGIARBCHI6ACMgBiAEQQdyOgAfIAYgBEEGcjoAGyAGIARBBXI6ABcgBiAEQQRyOgATIAYgBEEDcjoADyAGIARBAnI6AAsgBEEQaiIEIAdHDQALIAcgCEYNBgsDQCAKIAdBAnRqIgQgBzoAAyAEQQE6AAIgB0EBaiIHIAhHDQALDAULIAkgBTYCMCACQQFByNIAIAlBMGoQD0EAIQcgBUEBaiIFIAhHDQELCyADEBBBACEODAULIAhBBBATIgMNAQtBACEOIAJBAUGK2wBBABAPDAMLIAMQEAsCQCAAKAJ4IgNFDQAgAygCDCIPRQRAIAMoAgQQECAAKAJ4KAIIEBAgACgCeCgCABAQIAAoAngiAygCDCIEBH8gBBAQIAAoAngFIAMLEBAgAEEANgJ4DAELIAEoAhghDQJAAkAgAy0AEiIKBEAgAygCACEUIAMoAgQhBiADKAIIIQhBACEFAkADQCANIA8gBUECdGovAQBBNGxqKAIsBEAgCiAFQQFqIgVHDQEMAgsLIAkgBTYCICACQQFBwucAIAlBIGoQD0EAIQ4MBgsgCkE0bBAUIgtFDQFBACEFA0AgDyAFQQJ0aiIDLwEAIQcgCyADLQACBH8gAy0AAwUgBQtBNGxqIgQgDSAHQTRsaiID/QACAP0LAgAgBCADKAIwNgIwIAQgA/0AAiD9CwIgIAQgA/0AAhD9CwIQIAsgBUE0bGoiBCADKAIIIAMoAgxsQQJ0EBgiAzYCLCADRQRAIAUEQCAFQf//A3EhAANAIABBNGwgC2pBCGsoAgAQECAAQQFrIgANAAsLIAsQEEEAIQ4gAkEBQY7nAEEAEA8MBwsgBCAFIAhqLQAANgIYIAQgBSAGai0AADYCICAFQQFqIgUgCkcNAAsgACgCeC8BECIQQQFrIRIDQCALIBNBNGxqIgMoAgwgAygCCGwhBiANIA8gE0ECdGoiBC8BAEE0bGooAiwhCAJAIAQtAAJFBEAgBkUNASADKAIsIQVBACEHQQAhBAJAIAZBBEkNACAFIAhrQRBJDQAgBkF8cSEEQQAhAwNAIAUgA0ECdCIMaiAIIAxq/QACAP0LAgAgA0EEaiIDIARHDQALIAQgBkYNAgsgBCEDIAZBA3EiDARAA0AgBSADQQJ0IhFqIAggEWooAgA2AgAgA0EBaiEDIAdBAWoiByAMRw0ACwsgBCAGa0F8Sw0BA0AgBSADQQJ0IgRqIAQgCGooAgA2AgAgBSAEQQRqIgdqIAcgCGooAgA2AgAgBSAEQQhqIgdqIAcgCGooAgA2AgAgBSAEQQxqIgRqIAQgCGooAgA2AgAgA0EEaiIDIAZHDQALDAELIAZFDQAgFCAELQADIgNBAnRqIQQgCyADQTRsaigCLCEFQQAhAyAGQQFHBEAgBkF+cSEVQQAhDANAIAUgA0ECdCIHaiAEIAcgCGooAgAiESASIBAgEUobQQAgEUEAThsgCmxBAnRqKAIANgIAIAUgB0EEciIHaiAEIAcgCGooAgAiByASIAcgEEgbQQAgB0EAThsgCmxBAnRqKAIANgIAIANBAmohAyAMQQJqIgwgFUcNAAsLIAZBAXFFDQAgBSADQQJ0IgNqIAQgAyAIaigCACIDIBIgAyAQSBtBACADQQBOGyAKbEECdGooAgA2AgALIBNBAWoiEyAKRw0ACwwCCyAKQTRsEBQiCw0BC0EAIQ4gAkEBQY7nAEEAEA8MAwsgASgCECIDBEBBACEFA0AgDSAFQTRsaigCLCIEBEAgBBAQCyAFQQFqIgUgA0cNAAsLIA0QECABIAo2AhAgASALNgIYCyAAKAJ0IgVFDQEgBSgCACEHIAUvAQQiCwRAIAdBKmohEiAHQSRqIRMgB0EeaiERIAdBGGohFCAHQRJqIRUgB0EMaiEWIAdBBmohFyALQQJrIRhBACEFQQEhBANAAkAgASgCECIDIAcgBUEGbGoiDS8BACIGTQRAIAkgAzYCFCAJIAY2AhAgAkECQcw3IAlBEGoQDwwBCyANLwEEIghBAWpB//8DcUEBTQRAIAEoAhggBkE0bGogDS8BAjsBMAwBCyAIQQFrIgpB//8DcSIPIANPBEAgCSADNgIEIAkgDzYCACACQQJBozcgCRAPDAELAkAgBiAPRg0AIA0vAQINACAJIAEoAhgiCCAGQTRsaiIDKAIwNgLoASAJIAP9AAIg/QsD2AEgCSAD/QACEP0LA8gBIAkgA/0AAgD9CwO4ASADIAggD0E0bCIMaiIIKQIINwIIIAMgCCkCEDcCECADIAgpAhg3AhggAyAIKQIgNwIgIAMgCCkCKDcCKCADIAgoAjA2AjAgAyAIKQIANwIAIAEoAhggDGoiAyAJ/QADuAH9CwIAIAMgCf0AA9gB/QsCICADIAn9AAPIAf0LAhAgAyAJKALoATYCMCAFQQFqIAtPDQAgBCEIIBggBWtB//8DcSIDQQdPBEAgBCADQQFqIhlB+P8HcSIQaiEIIAr9ECEkIAb9ECEjQQAhDANAICMgJCASIAQgDGpBBmwiA2oiGiADIBNqIhsgAyARaiIcIAMgFGoiHSADIBVqIh4gAyAWaiIfIAMgF2oiICADIAdqIgP9CAEA/VUBAAH9VQEAAv1VAQAD/VUBAAT9VQEABf1VAQAG/VUBAAciISAj/S4gISAk/S0iJf1O/VIhIiAhICP9LSAl/VAiIf0ZAEEBcQRAIAMgIv1ZAQAACyAh/RkBQQFxBEAgICAi/VkBAAELICH9GQJBAXEEQCAfICL9WQEAAgsgIf0ZA0EBcQRAIB4gIv1ZAQADCyAh/RkEQQFxBEAgHSAi/VkBAAQLICH9GQVBAXEEQCAcICL9WQEABQsgIf0ZBkEBcQRAIBsgIv1ZAQAGCyAh/RkHQQFxBEAgGiAi/VkBAAcLIAxBCGoiDCAQRw0ACyAQIBlGDQELA0AgCiEDAkAgBiAHIAhBBmxqIgwvAQAiEEcEQCAGIQMgDyAQRw0BCyAMIAM7AQALIAsgCEEBaiIIQf//A3FHDQALCyABKAIYIAZBNGxqIA0vAQI7ATALIARBAWohBCAFQQFqIgUgC0cNAAsgACgCdCIFKAIAIQcLIAcEfyAHEBAgACgCdAUgBQsQECAAQQA2AnQMAQtBACEOIAJBAUGhxgBBABAPCyAJQfABaiQAIA4L6QEBBn8jAEEgayIEJAACfwJAIAAoAjwiAwRAQQEhBQNAIAAoAkwoAhggACgCQCACQQJ0aigCACIGQTRsaigCLEUEQCAEIAY2AhAgAUECQdo5IARBEGoQD0EAIQUgACgCPCEDCyACQQFqIgIgA0kNAAsMAQtBASEFQQEgACgCTCIDKAIQRQ0BGgNAIAMoAhggAkE0bGooAixFBEAgBCACNgIAIAFBAkHaOSAEEA9BACEFIAAoAkwhAwsgAkEBaiICIAMoAhBJDQALC0EBIAUNABogAUEBQb8VQQAQD0EACyEHIARBIGokACAHCwQAQX8LhgcCFn8CfiAAKAIYIhAoAhBFBEBBAQ8LIBAoAhghDSAAKAIUKAIAKAIUIQsDQCABIA0oAiQiAjYCJCALKAIcIgYgAkGYAWxqIQMCQAJAAn8gACgCQCIRBEAgBiALKAIYQZgBbGoiAkGQAWsoAgAgAkGYAWsoAgBrIQwgA0EMaiEGIANBBGohBCADKAIIIQIgAygCACEFQSQMAQsgA0GUAWohBiADQYwBaiEEIAMoApABIgIgAygCiAEiBWshDEE0CyALaigCACISRQ0AIAQoAgAhByAGKAIAIQkgAiAFayEGIAEoAggiA0J/IAE1AigiGIZCf4UiGSABNQIQfCAYiKciCGohBAJ/IAUgCEsEQCAFIAhrIQ5BACEIQQAgAiAETQ0BGiAGIAQgBWsiBmsMAQsgCCAFayEIIAIgBE0EQCAGIAhrIQZBACEOQQAMAQtBACEOIAMhBiACIARrCyEVIAkgB2shAiABKAIMIgQgGSABNQIUfCAYiKciCmohBQJ/IAcgCksEQCAHIAprIQ9BACEKQQAgBSAJTw0BGiACIAUgB2siAmsMAQsgCiAHayEKIAUgCU8EQCACIAprIQJBACEPQQAMAQtBACEPIAQhAiAJIAVrCyEHQQAhBSAIQQBIDQEgCkEASA0BIBVBAEgNASAHQQBIDQEgBkEASA0BIAJBAEgNASADIA9sIA5qIQcgCiAMbCAIaiEJAkACQAJAIAEoAiwiCA0AIAkNACAHDQAgAyAMRw0AIAMgBkcNACACIARHDQEgASALQSRBNCARG2oiAigCADYCLCACQQA2AgAMAwsgCA0BCyAERQ0CIAStIAOtfkIgiKcNAiADIARsIgNB/////wNLDQIgASADQQJ0EBgiAzYCLCADRQ0CIAYgASgCCCIERiABKAIMIgUgAkZxDQAgA0EAIAQgBWxBAnQQFRoLIAJFDQAgAkEBcSEXIAZBAnQhBiABKAIsIAdBAnRqIQQgEiAJQQJ0aiEFIAJBAUcEQCACQf7///8HcSEHQQAhAgNAIAQgBSAGEBIhFiAFIAxBAnQiCWoiCCAJaiEFIBYgASgCCEECdGogCCAGEBIgASgCCEECdGohBCACQQJqIgIgB0cNAAsLIBdFDQAgBCAFIAYQEhoLIAtBzABqIQsgDUE0aiENIAFBNGohAUEBIQUgFEEBaiIUIBAoAhBJDQELCyAFC9USAgl/DH4jAEGgAWsiBSQAAkAgAkEjTQRAQQAhAiADQQFBti5BABAPDAELIAJBJGsiAiACQQNuIglBA2xHBEBBACECIANBAUG2LkEAEA8MAQsgACgCSCEGIAEgBUGcAWoiAkECEBEgACAFKAKcATsBUCABQQJqIAZBCGpBBBARIAFBBmogBkEMakEEEBEgAUEKaiAGQQQQESABQQ5qIAZBBGpBBBARIAFBEmogAEHcAGpBBBARIAFBFmogAEHgAGpBBBARIAFBGmogAEHUAGpBBBARIAFBHmogAEHYAGpBBBARIAFBImogAkECEBECQAJAAkAgBSgCnAEiAkGAgAFNBEAgBiACNgIQIAIgCUcEQCAFIAk2AoQBIAUgAjYCgAEgA0EBQZHwACAFQYABahAPQQAhAgwFCyAGKAIEIgIgBigCDCIISSAGKAIIIgsgBigCACIES3FFBEAgBSAIrSACrX03A3ggBSALrSAErX03A3AgA0EBQdvsACAFQfAAahAPQQAhAgwFCyAAKAJcIgdBACAAKAJgIgobRQRAIAUgCjYCBCAFIAc2AgAgA0EBQYPxACAFEA9BACECDAULAkACQCAAKAJUIgwgBEsNAEF/IAcgDGoiByAHIAxJGyAETQ0AIAAoAlgiByACSw0AQX8gByAKaiIKIAcgCksbIAJLDQELQQAhAiADQQFB1hRBABAPDAULAkAgACgC4AENACAAKALYASIHRQ0AIAAoAtwBIgpFDQAgCyAEayIEIAdGIAggAmsiAiAKRnENACAFIAI2AmwgBSAENgJoIAUgCjYCZCAFIAc2AmAgA0EBQcPoACAFQeAAahAPQQAhAgwFCyAGIAlBNBATIgQ2AhggBEUNAQJAIAYoAhBFDQAgAUEkaiAFQZgBaiICQQEQESAEIAUoApgBIglBB3YiCjYCICAEIAlB/wBxQQFqIgw2AhggACgC4AEhCyABQSVqIAJBARARIAQgBSgCmAE2AgAgAUEmaiACQQEQESAEIAUoApgBIgg2AgRBACECIAQoAgAiB0GAAmtBgX5JBEBBACEJDAULQQAhCSAIQYACa0GBfkkNBCAEKAIYIghBH0sNAyAEQQA2AiQgBCAAKAKgATYCKEEBIQkgBigCEEEBTQ0AQQAgCiALGyEKQQAgDCALGyELIAFBJ2ohAQNAIAEgBUGYAWpBARARIAQgBSgCmAEiB0EHdiIINgJUIAQgB0H/AHFBAWoiBzYCTAJAIAAoAuABDQAgAC0AvAFBBHENACAHIAtGIAggCkZxDQAgBSAINgJUIAUgBzYCUCAFIAk2AkwgBSAKNgJIIAUgCzYCRCAFIAk2AkAgA0ECQcfuACAFQUBrEA8LIAFBAWogBUGYAWoiCEEBEBEgBCAFKAKYATYCNCABQQJqIAhBARARIAQgBSgCmAEiCDYCOCAEKAI0IgdBgAJrQYF+SQ0FIAhBgAJrQYB+TQ0FIAQoAkwiCEEgTw0EIAFBA2ohASAEQQA2AlggBCAAKAKgATYCXCAEQTRqIQQgCUEBaiIJIAYoAhBJDQALC0EAIQIgACgCXCIIRQ0EIAAoAmAiC0UNBCAAIAitIg1CAX0iDyAGKAIIIAAoAlQiB2utfCANgKciATYCaCAAIAutIg5CAX0iECAGKAIMIAAoAlgiCmutfCAOgKciBDYCbAJAAkAgAUUNACAERQ0AQf//AyAEbiABTw0BCyAFIAQ2AhQgBSABNgIQIANBAUG16QAgBUEQahAPDAULIAEgBGwhCQJAIAAtAERBAnEEQCAAIAAoAhwgB2sgCG42AhwgACAAKAIgIAprIAtuNgIgIAAgDyAAKAIkIAdrrXwgDYA+AiQgACAQIAAoAiggCmutfCAOgD4CKAwBCyAAIAQ2AiggACABNgIkIABCADcCHAsgACAJQYwsEBMiATYCnAEgAUUEQCADQQFBzR1BABAPDAULIAYoAhBBuAgQEyEBIAAoAgwgATYC0CsgACgCDCgC0CtFBEAgA0EBQc0dQQAQDwwFC0EKQRQQEyEBIAAoAgwgATYC8CsgACgCDCIBKALwK0UEQCADQQFBzR1BABAPDAULIAFBCjYC+CtBCkEUEBMhASAAKAIMIAE2AvwrIAAoAgwiASgC/CtFBEAgA0EBQc0dQQAQDwwFCyABQQo2AoQsAkAgBigCECIERQ0AIAYoAhghCEEAIQEgBEEBRwRAIARBfnEhCwNAIAggAUE0bGoiBygCIEUEQCAAKAIMKALQKyABQbgIbGpBASAHKAIYQQFrdDYCtAgLIAggAUEBciIHQTRsaiIKKAIgRQRAIAAoAgwoAtArIAdBuAhsakEBIAooAhhBAWt0NgK0CAsgAUECaiEBIAJBAmoiAiALRw0ACwsgBEEBcUUNACAIIAFBNGxqIgIoAiANACAAKAIMKALQKyABQbgIbGpBASACKAIYQQFrdDYCtAgLIAkEQCAAKAKcASEBQQAhAgNAIAEgBigCEEG4CBATIgQ2AtArIARFBEBBACECIANBAUHNHUEAEA8MBwsgAUGMLGohASACQQFqIgIgCUkNAAsLIABBBDYCCCAGKAIQIgMEQEF/IAAoAlgiASAAKAJgIgIgACgCbEEBa2xqIgQgAmoiAiACIARJGyICIAYoAgwiBCACIARJG60hEEF/IAAoAlQiAiAAKAJcIgQgACgCaEEBa2xqIgAgBGoiBCAAIARLGyIAIAYoAggiBCAAIARJG60hESABIAYoAgQiACAAIAFJG60hEiACIAYoAgAiACAAIAJJG60hEyAGKAIYIQBBACEBA0AgACAANQIEIg1CAX0iFCASfCANgCIVPgIUIAAgADUCACIOQgF9IhYgE3wgDoAiFz4CECAAQn8gADUCKCIPhkJ/hSIYIBAgFHwgDYAgFX1C/////w+DfCAPiD4CDCAAIBEgFnwgDoAgF31C/////w+DIBh8IA+IPgIIIABBNGohACABQQFqIgEgA0cNAAsLQQEhAgwECyAFIAI2ApABIANBAUH2OyAFQZABahAPQQAhAgwDC0EAIQIgBkEANgIQIANBAUHNHUEAEA8MAgsgBSAINgI0IAUgCTYCMCADQQFBt/MAIAVBMGoQDwwBCyAFIAg2AiggBSAHNgIkIAUgCTYCICADQQFBkesAIAVBIGoQDwsgBUGgAWokACACC54DAQd/IwBBEGsiBiQAAn8gAiACQQFBAiAAKAJIKAIQIghBgQJJGyIHQQF0QQVqIgRuIgUgBGxGIAIgBE9xRQRAIANBAUGKI0EAEA9BAAwBCwJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQRBACEAIAQtAIgsIgJBBHEEQCAEKAKkA0EBaiEACyAAIAVqIgVBIE8EQCAGIAU2AgAgA0EBQYs7IAYQD0EADAELIAQgAkEEcjoAiCwgACAFSQRAIAQgAEGUAWxqQagDaiECA0AgASACQQEQESABQQFqIgEgAkEEaiAHEBEgASAHaiIBIAJBCGpBAhARIAIgAigCCCIDIAQoAggiCSADIAlJGzYCCCABQQJqIAJBDGpBARARIAFBA2oiASACQRBqIAcQESABIAdqIgEgBkEMakEBEBEgAiAGKAIMNgIkIAIgAigCECIDIAggAyAISRs2AhAgAkGUAWohAiABQQFqIQEgAEEBaiIAIAVHDQALCyAEIAVBAWs2AqQDQQELIQogBkEQaiQAIAoL7AEBBH8jAEEQayIEJAACfwJAIAEgBEEIagJ/IAAoAkgoAhBBgAJNBEAgAgRAQX8hBUEBDAILIANBAUG+I0EAEA9BAAwDCyACQQFNDQFBfiEFQQILIgYQESAEIAIgBWo2AgwgBCgCCCICIAAoAkgoAhAiBU8EQCAEIAU2AgQgBCACNgIAIANBAUHGOiAEEA9BAAwCCyAAIAIgASAGaiAEQQxqIAMQQkUEQCADQQFBviNBABAPQQAMAgtBASAEKAIMRQ0BGiADQQFBviNBABAPQQAMAQsgA0EBQb4jQQAQD0EACyEHIARBEGokACAHC9kBAQR/IwBBEGsiBCQAIAQgAjYCDAJAAkAgAEEAIAEgBEEMaiADEEJFDQAgBCgCDA0AAn8gACgCCEEQRgRAIAAoApwBIAAoAswBQYwsbGoMAQsgACgCDAshB0EBIQUgACgCSCgCEEECSQ0BIAcoAtArIgJBHGohBkEBIQEgAiEDA0AgAyACKAIYNgLQCCADIAIoAqQGNgLcDiADQdQIaiAGQYgGEBIaIANBuAhqIQMgAUEBaiIBIAAoAkgoAhBJDQALDAELIANBAUHWIkEAEA8LIARBEGokACAFC9YBAQN/IwBBEGsiBCQAAkAgAkEBQQIgACgCSCgCECIGQYECSRsiBUECakcEQEEAIQAgA0EBQYogQQAQDwwBCwJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQIgASAEQQxqIAUQEUEBIQAgASAFaiIFIARBCGpBARARIAYgBCgCDCIBTQRAIAQgBjYCBCAEIAE2AgAgA0EBQdjvACAEEA9BACEADAELIAVBAWogAigC0CsgAUG4CGxqQagGakEBEBELIARBEGokACAAC4QCAQV/IwBBEGsiBCQAAn8gACgCCEEQRgRAIAAoApwBIAAoAswBQYwsbGoMAQsgACgCDAshBgJAIAJBAUECIAAoAkgiBygCEEGBAkkbIgVNBEBBACECIANBAUGkI0EAEA8MAQsgBCAFQX9zIAJqNgIMIAEgBEEIaiAFEBEgBCgCCCIIIAcoAhBPBEBBACECIANBAUGA6QBBABAPDAELQQEhAiABIAVqIgEgBigC0CsgCEG4CGxqQQEQESAAIAQoAgggAUEBaiAEQQxqIAMQQ0UEQEEAIQIgA0EBQaQjQQAQDwwBCyAEKAIMRQ0AQQAhAiADQQFBpCNBABAPCyAEQRBqJAAgAgusBgEHfyMAQRBrIgYkACAGIAI2AgwgACgCSCEJAn8gACgCCEEQRgRAIAAoApwBIAAoAswBQYwsbGoMAQsgACgCDAsiBCAELQCILEEBcjoAiCwCQCACQQRNBEAgA0EBQbwiQQAQDwwBCyABIARBARARIAQoAgBBCE8EQCADQQFBmiJBABAPDAELIAFBAWogBkEIakEBEBEgBCAGKAIIIgI2AgQgAkEFTgRAIANBAUHxIUEAEA8gBEF/NgIECyABQQJqIARBCGpBAhARIAQoAggiB0GAgARrQYCAfE0EQCAGIAc2AgAgA0EBQak9IAYQDwwBCyAEIAAoAqQBIgIgByACGzYCDCABQQRqIARBEGpBARARIAQoAhBBAk8EQCADQQFBhypBABAPDAELIAFBBWohAiAGIAYoAgxBBWs2AgwCQCAJKAIQIgdFDQAgBCgCAEEBcSEIIAQoAtArIQRBACEJIAdBCE8EQCAHQXhxIQEDQCAEIAVBuAhsaiAINgIAIAQgBUEBckG4CGxqIAg2AgAgBCAFQQJyQbgIbGogCDYCACAEIAVBA3JBuAhsaiAINgIAIAQgBUEEckG4CGxqIAg2AgAgBCAFQQVyQbgIbGogCDYCACAEIAVBBnJBuAhsaiAINgIAIAQgBUEHckG4CGxqIAg2AgAgBUEIaiEFIApBCGoiCiABRw0ACwsgB0EHcSIBRQ0AA0AgBCAFQbgIbGogCDYCACAFQQFqIQUgCUEBaiIJIAFHDQALC0EAIQUgAEEAIAIgBkEMaiADEENFBEAgA0EBQbwiQQAQDwwBCyAGKAIMBEAgA0EBQbwiQQAQDwwBCwJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQEgACgCSCgCEEECTwRAIAEoAtArIgEoAgRBAnQhByABQbAHaiEKIAFBrAZqIQNBASEJIAEhAgNAIAIgAf0AAgT9CwK8CCACIAEoAhQ2AswIIAJB5A5qIAMgBxASGiACQegPaiAKIAcQEhogAkG4CGohAiAJQQFqIgkgACgCSCgCEEkNAAsLQQEhBQsgBkEQaiQAIAUL7AkBBn8jAEHwAGsiBCQAIARBADYCaAJAIAJBCEcEQCADQQFBvR5BABAPIANBAUG9HkEAEA8MAQsgASAAQcwBakECEBEgAUECaiAEQewAakEEEBEgAUEGaiAEQeQAakEBEBEgAUEHaiAEQegAakEBEBEgACgCzAEiAiAAKAJoIgggACgCbGxPBEAgBCACNgJgIANBAUGdOyAEQeAAahAPDAELIAAoApwBIAJBjCxsaiEFIAIgCG4hByAEKAJkIQECQCAAKAIsIgZBAE4gAiAGR3ENACAFKALUK0EBaiIGIAFGDQAgBCAGNgJYIAQgATYCVCAEIAI2AlAgA0EBQbU7IARB0ABqEA9BACEFDAELIAUgATYC1CsCQAJAIAQoAmwiAUEBa0EMTQR/IAFBDEcNASAEQQw2AjAgA0ECQeXXACAEQTBqEA8gBCgCbAUgAQtFBEAgA0EEQbLPAEEAEA8gAEEBNgI4CwJAAkACQAJAIAUoAtgrIgEEQCAEKAJkIgYgAUkNASAEIAE2AiQgBCAGNgIgIANBAUGFJyAEQSBqEA8gAEEBNgI4QQAhBQwHCyAEKAJoIgYNAQwDCyAEKAJoIgZFDQELIAQgBiAALQBEQQR2QQFxaiIBNgJoIAQoAmQiBiAFKALYKyIJQQFrSwRAIAQgCTYCBCAEIAY2AgAgA0EBQaImIAQQDyAAQQE2AjhBACEFDAULIAEgBk0EQCAEIAE2AhQgBCAGNgIQIANBAUHpJyAEQRBqEA8gAEEBNgI4QQAhBQwFCyAFIAE2AtgrCyABIAQoAmRBAWpHDQAgACAALQBEQQFyOgBECyAEKAJsIQEgAEEQNgIIIABBACABQQxrIAAoAjgbNgIYAkAgACgCLCIBQX9GBEBBBCEFIAIgByAIbGsiASAAKAIcSQ0BIAEgACgCJE8NASAHIAAoAiBJDQEgByAAKAIoT0ECdCEFDAELIAAoAswBIAFHQQJ0IQULIAAgAC0AREH7AXEgBXI6AERBASEFIAAoAsgBIgFFDQIgASgCKCIGIAAoAswBIgJBKGxqIgcgAjYCACAHIAQoAmQiCDYCDCAEKAJoIgEEQCAHIAE2AgQgByAEKAJoIgE2AgggBygCECICRQRAIAFBGBATIQEgACgCyAEoAiggACgCzAFBKGxqIAE2AhAgAQ0EQQAhBSADQQFByTRBABAPDAQLIAIgAUEYbBAXIQEgACgCyAEoAiggACgCzAFBKGxqIQIgAUUEQCACKAIQEBBBACEFIAAoAsgBKAIoIAAoAswBQShsakEANgIQIANBAUHJNEEAEA8MBAsgAiABNgIQDAMLIAcoAhAiAUUEQCAHQQo2AghBCkEYEBMhASAAKALIASgCKCIGIAAoAswBIgJBKGxqIgcgATYCECABRQ0CIAQoAmQhCAsgCCAGIAJBKGxqIgIoAghJDQIgAiAIQQFqIgI2AgggASACQRhsEBchASAAKALIASgCKCAAKALMAUEobGohAiABRQRAIAIoAhAQEEEAIQUgACgCyAEoAiggACgCzAFBKGxqIgBBADYCCCAAQQA2AhAgA0EBQck0QQAQDwwDCyACIAE2AhAMAgsgBCABNgJAIANBAUHy2QAgBEFAaxAPQQAhBQwBC0EAIQUgB0EANgIIIANBAUHJNEEAEA8LIARB8ABqJAAgBQurBwEIfyMAQdAAayIEJAAgBEEBNgJMAkACQCAAKALIASIFKAIoIgMNACAFIAAoAmwgACgCaGwiAzYCJCADQSgQEyEDIAAoAsgBIgUgAzYCKCADRQRAQQAhBQwCCyAFKAIkRQ0AA0BBACEFIAMgBkEobCIHaiIDQQA2AhQgA0HkADYCHEHkAEEYEBMhCSAHIAAoAsgBIggoAigiA2ogCTYCGCAJRQ0CIAZBAWoiBiAIKAIkSQ0ACwsgACgCLCEJAkAgAygCEEUNAAJAIAMgCUEobGoiAygCBEUEQCABIAApAzBCAnwgAhA2DQFBACEFIAJBAUGnKUEAEA8MAwsgASADKAIQKQMAQgJ8IAIQNg0AQQAhBSACQQFBpylBABAPDAILIAAoAghBgAJHDQAgAEEINgIICwJAIAAoAmwgACgCaGwiB0UNACAAKAKcASEFQQAhAyAHQQhPBEAgB0F4cSEIQQAhBgNAIAUgA0GMLGxqQX82AtQrIAUgA0EBckGMLGxqQX82AtQrIAUgA0ECckGMLGxqQX82AtQrIAUgA0EDckGMLGxqQX82AtQrIAUgA0EEckGMLGxqQX82AtQrIAUgA0EFckGMLGxqQX82AtQrIAUgA0EGckGMLGxqQX82AtQrIAUgA0EHckGMLGxqQX82AtQrIANBCGohAyAGQQhqIgYgCEcNAAsLIAdBB3EiBkUNAANAIAUgA0GMLGxqQX82AtQrIANBAWohAyAKQQFqIgogBkcNAAsLQQAhBSAAIARByABqQQAgBEHEAGogBEFAayAEQTxqIARBOGogBEE0aiAEQcwAaiABIAIQJ0UNACAJQQFqIQcDQAJAIAQoAkxFDQAgACAEKAJIIgNBAEEAIAEgAhArRQ0CIAAoAmghCCAAKAJsIQogBCADQQFqIgY2AiAgBCAIIApsNgIkIAJBBEGg1wAgBEEgahAPIAAoAtABIAAoAkwoAhgQdEUNAiAAKAKcASADQYwsbGoiBSgC3CsiCARAIAgQECAFQgA3AtwrCyAEIAY2AhAgAkEEQeb8ACAEQRBqEA8gAyAJRgRAIAEgACgCyAEpAwhCAnwgAhA2DQFBACEFIAJBAUGnKUEAEA8MAwsgBCAHNgIEIAQgBjYCACACQQJB3eUAIAQQD0EAIQUgACAEQcgAakEAIARBxABqIARBQGsgBEE8aiAEQThqIARBNGogBEHMAGogASACECcNAQwCCwsgACACEHIhBQsgBEHQAGokACAFC8gGAgd/AX4jAEHQAGsiAyQAIANBATYCTAJAAkAgACgCaCIEQQFHDQAgACgCbEEBRw0AIAAoAlQNACAAKAJYDQAgACgCTCIFKAIADQAgBSgCBA0AIAUoAgggACgCXEcNACAFKAIMIAAoAmBHDQBBACEEIAAgA0HIAGpBACADQcQAaiADQUBrIANBPGogA0E4aiADQTRqIANBzABqIAEgAhAnRQ0BAkAgACADKAJIQQBBACABIAIQKwRAIAAoAkwiASgCEA0BQQEhBAwDCyACQQFBkcIAQQAQDwwCCyABKAIYIQFBACECA0AgASACQTRsIgRqKAIsEBAgACgCTCIFKAIYIgEgBGoiBiAAKALQASIHKAIUKAIAKAIUIAJBzABsaiIIKAIkNgIsIAYgBygCGCgCGCAEaigCJDYCJCAIQQA2AiRBASEEIAJBAWoiAiAFKAIQSQ0ACwwBCwNAAkACfwJAIARBAUcNACAAKAJsQQFHDQAgACgCnAEoAtwrRQ0AIANBADYCSCAAQQA2AswBIAAgACgCCEGAAXI2AghBAAwBC0EAIQQgACADQcgAakEAIANBxABqIANBQGsgA0E8aiADQThqIANBNGogA0HMAGogASACECdFDQMgAygCTEUNASADKAJICyIHQQFqIQQgACAHQQBBACABIAIQKyEJIAAoAmggACgCbGwhBSAJRQRAIAMgBTYCBCADIAQ2AgAgAkEBQZc5IAMQD0EAIQQMAwsgAyAFNgIkIAMgBDYCICACQQRBoNcAIANBIGoQDyAAKALQASAAKAJMKAIYEHRFBEBBACEEDAMLAkACQCAAKAJoQQFHDQAgACgCbEEBRw0AIAAoAkwiBSgCACAAKAJIIgYoAgBHDQEgBSgCBCAGKAIERw0BIAUoAgggBigCCEcNASAFKAIMIAYoAgxHDQELIAAoApwBIAdBjCxsaiIFKALcKyIGRQ0AIAYQECAFQgA3AtwrCyADIAQ2AhAgAkEEQeb8ACADQRBqEA8gASkDCCIKUAR+QgAFIAogASkDOH0LUARAIAAoAghBwABGDQELIAhBAWoiCCAAKAJoIgQgACgCbGxHDQELCyAAIAIQciEECyADQdAAaiQAIAQLtQYBDH8gACgCSCEJAkAgACgCaCAAKAJsbCIMBEAgCSgCECIBQbgIbCENIAEgAWxBAnQhCiAAKAIMIQQgACgCnAEhAwNAIAMoAtArIQsgAyAEQYwsEBIiAUEANgLoKyABQX82AtQrIAFBADYCsCggAUEANgKELCABQQA2AvArIAFCADcC+CsgASALNgLQKyABIAEtAIgsQfwBcToAiCwgBCgC6CsEQCABIAoQFCIDNgLoKyADRQRAQQAPCyADIAQoAugrIAoQEhoLIAEgBCgC+CtBFGwiBRAUIgM2AvArQQAhCCADRQ0CIAMgBCgC8CsgBRASGiAEKAL0KyIGBEAgBCgC8CshAyABKALwKyEFQQAhBwNAIAMoAgwEQCAFIAMoAhAQFCIGNgIMIAZFBEBBAA8LIAYgAygCDCADKAIQEBIaIAQoAvQrIQYLIAEgASgC+CtBAWo2AvgrIAVBFGohBSADQRRqIQMgB0EBaiIHIAZJDQALCyABIAQoAoQsQRRsIgUQFCIDNgL8KyADRQ0CIAMgBCgC/CsgBRASGiABIAQoAoQsIgg2AoQsIAgEQCAEKAL8KyEDIAEoAvwrIQVBACEHA0AgAygCCCIGBEAgBSABKALwKyAGIAQoAvAra2o2AggLIAMoAgwiBgRAIAUgASgC8CsgBiAEKALwK2tqNgIMCyAFQRRqIQUgA0EUaiEDIAdBAWoiByAIRw0ACwsgCyAEKALQKyANEBIaIAFBjCxqIQMgDkEBaiIOIAxHDQALC0EBIQggAAJ/QQBBAUHIABATIgFFDQAaIAEgAS0AKEH+AXFBAXI6ACggAUEBQQQQEyIENgIUIAEgBA0AGiABEBBBAAsiATYC0AEgAUUEQEEADwsgACgC1AEhBUEAIQQgASAAQdAAajYCHCABIAk2AhhBAUHQBhATIQMgASgCFCADNgIAAkAgA0UNACAJKAIQQcwAEBMhAyABKAIUKAIAIgcgAzYCFCADRQ0AIAcgCSgCEDYCECAAKAKkASEEIAEgBTYCLCABIAQ2AgBBASEECyAEDQAgACgC0AEQVUEAIQggAEEANgLQASACQQFBwhtBABAPCyAIC9USAwx/AX0BfiMAQTBrIggkACAAQQE2AggCfwJAAkAgASAIQShqIgVBAiACEBpBAkcNACAFIAhBLGpBAhARIAgoAixBz/4DRw0AIABBAjYCCCAAKALIASABKQM4QgJ9IhA3AwAgCCAQNwMQIAJBBEHu3gAgCEEQahAPIAAoAsgBIgMpAwAhECADKAIYIgdBAWoiBSADKAIgIgRNBEAgAygCHCEEDAILIAMCfyAEs0MAAMhCkiIPQwAAgE9dIA9DAAAAAGBxBEAgD6kMAQtBAAsiBTYCICADKAIcIAVBGGwQFyIEBEAgAyAENgIcIAMoAhgiB0EBaiEFDAILIAMoAhwQECADQQA2AiAgA0IANwMYIAJBAUGpHUEAEA8LIAJBAUG19QBBABAPQQAMAQsgBCAHQRhsaiIEQQI2AhAgBCAQxDcDCCAEQc/+AzsBACADIAU2AhggASAAKAIQQQIgAhAaQQJHBEAgAkEBQZYSQQAQD0EADAELIAAoAhAgCEEoakECEBECQAJAIAgoAigiBEGQ/wNHBEADQEHgvQEhByAEQf/9A00EQCAIIAQ2AgAgAkEBQcoQIAgQD0EADAULA0AgByIFKAIAIgMEQCAFQQxqIQcgAyAERw0BCwsCQAJAIAMNAEECIQYgAkECQfUcQQAQD0GWEiEHAkACQCABIAAoAhBBAiACEBpBAkcNAANAIAAoAhAgCEEsakECEBFB4L0BIQMgCCgCLCIEQYD+A08EQANAIAMiBSgCACIMBEAgA0EMaiEDIAQgDEcNAQsLIAUoAgQgACgCCHFFBEBB/CghBwwDCyAMBEAgDEGQ/wNGBEAgCEGQ/wM2AigMBwsgASkDOCEQIAAoAsgBIgMoAhgiBUEBaiIEIAMoAiAiB00EQCADKAIcIQcMBQsgAwJ/IAezQwAAyEKSIg9DAACAT10gD0MAAAAAYHEEQCAPqQwBC0EACyIFNgIgIAMoAhwgBUEYbBAXIgcEQCADIAc2AhwgAygCGCIFQQFqIQQMBQsgAygCHBAQIANBADYCICADQgA3AxhBqR0hBwwDCyAGQQJqIQYLIAEgACgCEEECIAIQGkECRg0ACwsgAkEBIAdBABAPIAJBAUH9yABBABAPQQAMBwsgByAFQRhsaiIFIAY2AhAgBSAQpyAGa6w3AwggBUEAOwEAIAMgBDYCGCAIIAw2AihB4L0BIQQDQCAEIgUoAgAiA0UNASAEQQxqIQQgAyAMRw0ACwsgBSgCBCAAKAIIcUUEQCACQQFB/ChBABAPQQAMBgsgASAAKAIQQQIgAhAaQQJHBEAgAkEBQZYSQQAQD0EADAYLIAAoAhAgCEEkakECEBEgCCgCJCIEQQFNBEAgAkEBQaEuQQAQD0EADAYLIAggBEECayIHNgIkIAAoAhAhBCAAKAIUIAdJBEAgBCAHEBciBEUEQCAAKAIQEBAgAEIANwMQIAJBAUHUJUEAEA9BAAwHCyAAIAQ2AhAgACAIKAIkIgc2AhQLIAEgBCAHIAIQGiIEIAgoAiRHBEAgAkEBQZYSQQAQD0EADAYLIAAgACgCECAEIAIgBSgCCBEBAEUEQCACQQFBqBJBABAPQQAMBgsgASkDOCEQIAgoAiQhDAJAIAAoAsgBIgUoAhgiBkEBaiIHIAUoAiAiBE0EQCAFKAIcIQQMAQsgBQJ/IASzQwAAyEKSIg9DAACAT10gD0MAAAAAYHEEQCAPqQwBC0EACyIENgIgIAUoAhwgBEEYbBAXIgRFDQUgBSAENgIcIAUoAhgiBkEBaiEHCyAEIAZBGGxqIgQgDEEEajYCECAEIBCnIAxrQQRrrDcDCCAEIAM7AQAgBSAHNgIYIAEgACgCEEECIAIQGkECRwRAIAJBAUGWEkEAEA9BAAwGC0EBIAogA0Hc/gNGGyEKQQEgCyADQdL+A0YbIQtBASANIANB0f4DRhshDSAAKAIQIAhBKGpBAhARIAgoAigiBEGQ/wNHDQELCyANDQELIAJBAUGYJEEAEA9BAAwCCyALRQRAIAJBAUHGJEEAEA9BAAwCCyAKRQRAIAJBAUH0JEEAEA9BAAwCC0EAIQNBACENIwBBEGsiBCQAQQEhBwJAIAAtALwBQQFxRQ0AAkAgACgCcCILRQ0AAkADQCAAKAJ0IA1BA3RqIgUoAgAiCgRAIAMgBSgCBCIGayIFQQAgAyAFTxshBSADIAZJBEAgBiADayELIAMgCmohCgNAIAtBBEkEQEGOKyEDDAULIAogBEEMakEEEBEgBCgCDCIDQX9zIAlJBEBB9CohAwwFCyADIAtBBGsiBmsgBSADIAZLIgwbIQUgAyAJaiEJIAYgA2shCyAKQQAgAyAMG2pBBGohCiADIAZJDQALIAAoAnAhCwsgBSEDCyANQQFqIg0gC0kNAAsgA0UNAUEAIQcgAkEBQekWQQAQDwwCC0EAIQcgAkEBIANBABAPDAELIAAgCRAUIgM2AogBIANFBEBBACEHIAJBAUG+IEEAEA8MAQsgACAJNgJ8IAAoAnQhBgJAIAAoAnAiCgRAQQAhCUEAIQNBACEFA0AgBiAFQQN0Ig1qIgwoAgAiCwRAIAAoAogBIANqIQoCfyAMKAIEIgYgCU0EQCAKIAsgBhASGiADIAZqIQMgCSAGawwBCyAKIAsgCRASGiADIAlqIQMgBiAJayIGBEAgCSALaiEJA0AgBkEESQ0GIAkgBEEIakEEEBEgCUEEaiEJIAAoAogBIANqIQogBkEEayIGIAQoAggiC0kEQCAKIAkgBhASGiADIAZqIQMgBCgCCCAGawwDCyAKIAkgCxASGiAEKAIIIgogA2ohAyAJIApqIQkgBiAKayIGDQALC0EACyEJIAAoAnQgDWooAgAQECAAKAJ0IgYgDWpCADcCACAAKAJwIQoLIAVBAWoiBSAKSQ0ACyAAKAJ8IQkgACgCiAEhAwsgACAJNgKQASAAIAM2AnggAEEANgJwIAYQECAAQQA2AnQMAQtBACEHIAJBAUGOK0EAEA8LIARBEGokACAHRQRAIAJBAUGPPUEAEA9BAAwCCyACQQRB99YAQQAQDyAAKALIASABKQM4Qv7///8PfEL/////D4M3AwggAEEINgIIQQEMAQsgBSgCHBAQIAVBADYCICAFQgA3AxggAkEBQakdQQAQD0EACyEOIAhBMGokACAOCxwAIAAoAghFIAAoAsABQQBHIAAoAsQBQQBHcXELBABBAAsPACAABEAgACABNgK4AQsLjwEBBH8gACgCGCIBBEAgACgCHCIDQTRuIQQgA0E0TwR/QQAhAwNAIAEoAgAiAgRAIAJBAWsQECABQQA2AgALIAEoAgQiAgRAIAIQECABQQA2AgQLIAEoAggiAgRAIAIQECABQQA2AggLIAFBNGohASADQQFqIgMgBEcNAAsgACgCGAUgAQsQECAAQQA2AhgLC4YBAQR/IAAoAhgiAQRAIAAoAhwiAkHAAE8EfyACQQZ2IQRBACECA0AgASgCACIDBEAgAxAQIAFBADYCAAsgASgCBCIDBEAgAxAQIAFBADYCBAsgASgCPBAQIAFBADYCPCABQUBrIQEgAkEBaiICIARHDQALIAAoAhgFIAELEBAgAEEANgIYCws/AQF/IAAEQCAAKAJ0IgEEQCABEBAgAEEANgJ0CyAAKAJ4IgEEQCABEBAgAEEANgJ4CyAAKAKUARAQIAAQEAsLwaYFBFx/AnsGfgF9IwBB4ABrIiMkACAAKAIIIRoCQAJAAkACQCAAKAIARQRAIBogGigCECAaKAIIayAaKAIUIBooAgxrbEECdCIGEBgiAzYCPCADRQRAIAAoAiQaIAAoAiBBAUHRPEEAEA8gACgCJBogAEEcaiEQDAMLIANBACAGEBUaDAELIBooAjwiA0UNACADEBAgGkEANgI8CyAAKAIQIjIoAhwgMigCGEGYAWxqIgNBmAFrKAIAITUgA0GQAWsoAgAhNiAAKAIUIS8gACgCDCEwIAAoAgQhNyAAKAIcKAIARQ0CIABBHGohEAJAAn9BACABKAIEIgNBAEwNABogASgCACEGAkADQCAGIAdBDGxqIgQoAgBFDQEgB0EBaiIHIANHDQALQQAMAQsgBCgCBAsiBA0AQQFBnAEQEyIERQRAIAAoAiBBAUGQMEEAEA8MAgsgBEEANgKMASABKAIEIgNB/////wdHBH8CfyABKAIAIQYgA0EASgRAA0AgBiAJQQxsaiIHKAIARQRAIAcoAggiAwR/IAcoAgQgAxECACABKAIABSAGCyAJQQxsaiIBQQ82AgggASAENgIEQQEMAwsgCUEBaiIJIANHDQALC0EAIAYgA0EMbEEMahAXIgNFDQAaIAEgAzYCACADIAEoAgQiBkEMbGoiA0EPNgIIIAMgBDYCBCADQQA2AgAgASAGQQFqNgIEQQELBUEACw0AIAAoAiBBAUGMP0EAEA8gBCgCdCIBBEAgARAQIARBADYCdAsgBCgCeCIBBEAgARAQIARBADYCeAsgBCgClAEQECAEEBAMAQsgBCAAKAIYNgKQASAAKAIoISsgACgCJCEhIAAoAiAhHSAvKAKoBiERIDAoAhAhAQJAAkAgLygCECIWQcAAcQRAIBYhCiMAQbACayIPJAACQCARBEAgIQRAQQAhByAdQQFBgRhBABAPDAILQQAhByAdQQFBgRhBABAPDAELIAQoAnQhBwJAAkAgGigCFCAaKAIMayIDIBooAhAgGigCCGsiBmwiASAEKAKEAUsEQCAHEBAgBCABQQJ0IhEQGCIHNgJ0IAdFBEBBACEHDAQLIAQgATYChAEMAQsgB0UNASABQQJ0IRELIAdBACAREBUaCyAEKAJ4IQcCQCAEKAKIAUHPFEsNACAHEBAgBEHA0gAQGCIHNgJ4IAcNAEEAIQcMAQsgBEHQFDYCiAEgB0EAQcDSABAVGiAEIAM2AoABIAQgBjYCfCAaKAIYIgJFBEBBASEHDAELIBooAhwhDUEBIQcCQAJAAkACQAJAIBooAjQiAwRAIBooAgQhCUEAIQdBACEBAkAgA0EETwRAIANBfHEhAQNAIAkgCEEDdGoiBkEcaiAGQRRqIAZBDGogBv0JAgT9VgIAAf1WAgAC/VYCAAMgXv2uASFeIAhBBGoiCCABRw0ACyBeIF4gXv0NCAkKCwwNDg8AAQIDAAECA/2uASJeIF4gXv0NBAUGBwABAgMAAQIDAAECA/2uAf0bACEHIAEgA0YNAQsDQCAJIAFBA3RqKAIEIAdqIQcgAUEBaiIBIANHDQALCyADQQFGBEAgBCgCkAFFDQULIAcgBCgCmAFNDQEgBCgClAEgBxAXIhENAkEAIQcMBgsgBCgCkAFFDQULIAQoApQBIhENAUEAIQcMBAsgBCAHNgKYASAEIBE2ApQBCyAaKAI0RQRAQQAhBwwCCyAaKAIEIQhBACEHQQAhAQNAIAcgEWogCCABQQN0IgNqIgYoAgAgBigCBBASGiAaKAIEIgggA2ooAgQgB2ohByABQQFqIgEgGigCNEkNAAsMAQsgGigCBCgCACERC0EAIQFBACEIAn9BACAaKAIoIgNFDQAaIBooAgAiBigCCCEIQQAgA0EBRg0AGiAGKAIgCyEDIAIgDWshRQJAIAMgCGoiCEUEQEEAIQkMAQtBASEBIBooAgAiAygCACEFQQAhCSAIQQFGBEBBACEBDAELIAMoAhghCQsgRUEBaiEWIAQoAnQhDiAEKAJ4IRQgGigCDCESIBooAhQhGCAaKAIIISQgGigCECErAkACQAJAAkACQAJAAkACQAJAIAFFDQAgCQ0AICFFDQEgHUECQaHQAEEAEA9BASEIDAILIAhBBEkNASAhBEAgDyAINgJwIB1BAUH8xgAgD0HwAGoQDwwICyAPIAg2AmAgHUEBQfzGACAPQeAAahAPQQAhBwwICyAdQQJBodAAQQAQDyAaKAIYIgFBHksNAUEBIQwgASAWTw0DDAULIBooAhgiAUEeTQ0BICFFDQAgDyABNgIgIB1BAUGb2wAgD0EgahAPDAULIA8gATYCACAdQQFBm9sAIA8QD0EAIQcMBQsgASAWSQ0BIAhBAkkEQCAIIQwMAQsgASAWRwRAIAghDAwBC0EBIQxBkMcBLQAADQAgIUUEQEGQxwFBAToAACAPIAg2AkAgHUECQabMACAPQUBrEA8MAQtBkMcBLQAARQRAQZDHAUEBOgAAIA8gCDYCUCAdQQJBpswAIA9B0ABqEA8LCwJAAkAgBUECSQ0AIAUgB0sNACAFIAlqIAdNDQELICEEQEEAIQcgHUEBQcLGAEEAEA8MBQtBACEHIB1BAUHCxgBBABAPDAQLAkACQCAFIBFqIhNBAWstAABBBHQgE0ECay0AAEEPcXIiBkECSQ0AIAUgBkgNACAGQfAfSQ0BCyAhBEBBACEHIB1BAUHW8gBBABAPDAULQQAhByAdQQFB1vIAQQAQDwwECyAaKAIcISYgD0EANgKQAiAPQQA2ApgCIA9CADcDiAIgD0IANwOoAiAPQgA3ApwCIA8gBkEBayIHNgKUAiAPIAUgEWogBmsiATYCgAJC/wEhYCAGQQJPBEAgATEAACFgC0EIIQMgD0EINgKQAiAPIAZBAmsiCDYClAIgDyBgQg+EIGAgB0EBRhsiYDcDiAIgDyABIAZBAUpqIgc2AoACIA8gYEL/AVEiDTYCmAICfwJAIAFBA3EiAkEDRg0AQv8BIWEgDQRAQQAgBy0AAEGPAUsNAhoLIAZBA04EQCAHMQAAIWELIA8gBkEDayINNgKUAiAPQQ9BECBgQv8BUSILGyIDNgKQAiAPIAcgBkECSmoiATYCgAIgDyBhQg+EIGEgCEEBRhsiYUL/AVE2ApgCIA8gYEIHQgggCxuGIGGEImA3A4gCIAJBAkYNACBhQv8BUQRAQQAgAS0AAEGPAUsNAhoLQv8BIWIgBkEETgRAIAExAAAhYgsgDyAGQQRrIgc2ApQCIA8gASAGQQNKaiIBNgKAAiAPIGJCD4QgYiANQQFGGyJiQv8BUTYCmAIgDyADQQdBCCBhQv8BUSIIG2oiAzYCkAIgDyBgQgdCCCAIG4YgYoQiYDcDiAIgAkEBRg0AQv8BIWEgYkL/AVEEQEEAIAEtAABBjwFLDQIaCyAGQQVOBEAgATEAACFhCyAPIAZBBWs2ApQCIA8gASAGQQRKajYCgAIgDyBhQg+EIGEgB0EBRhsiYUL/AVE2ApgCIA8gA0EHQQggYkL/AVEiARtqIgM2ApACIA8gYEIHQgggARuGIGGEImA3A4gCCyAPIGBBwAAgA2uthjcDiAJBAQtFBEAgIQRAQQAhByAdQQFBg9UAQQAQDwwFC0EAIQcgHUEBQYPVAEEAEA8MBAsgKyAkayEVIA8gBkECayILNgL0ASAPIAUgEWoiAkEDayIDNgLgASAPIAJBAmstAAAiGUGPAUsiDTYC+AEgDyAZQQR2rSJgNwPoASAPQQNBBCBgQgeDQgdRGyIBNgLwASADQQNxQQFqIgcgCyAHIAtIGyEIAkACQCAGQQJMBEAgDyALIAhrIgI2AvQBDAELIA8gAkEEayIHNgLgASAPIAMtAAAiF0GPAUsiDTYC+AEgDyAXrSJhIAGthiBghCJgNwPoASAPQQhBB0EIIGFC/wCDQv8AURsgGUGPAU0bIAFqIgE2AvABAkAgCEEBRgRAIAchAwwBCyAPIAJBBWsiAzYC4AEgDyAHLQAAIhlBjwFLIg02AvgBIA8gGa0iYSABrYYgYIQiYDcD6AEgD0EIQQdBCCBhQv8Ag0L/AFEbIBdBjwFNGyABaiIBNgLwASAIQQJGDQAgDyACQQZrIgc2AuABIA8gAy0AACIXQY8BSyINNgL4ASAPIBetImEgAa2GIGCEImA3A+gBIA9BCEEHQQggYUL/AINC/wBRGyAZQY8BTRsgAWoiATYC8AEgCEEDRgRAIAchAwwBCyAPIAJBB2siAzYC4AEgDyAHMQAAImFCjwFWIg02AvgBIA8gYSABrYYgYIQiYDcD6AEgD0EIQQdBCCBhQv8Ag0L/AFEbIBdBjwFNGyABaiIBNgLwAQsgDyALIAhrIgI2AvQBIAFBIEsNAQsCQCACQQROBEAgA0EDaygCACEHIA8gAkEEazYC9AEgDyADQQRrNgLgAQwBCyACQQBMBEBBACEHDAELIAJBAXEhRwJAIAJBAUYEQEEYIQhBACEHDAELIAJB/v///wdxIRdBGCEIQQAhB0EAIQsDQCAPIANBAWsiHzYC4AEgAy0AACFGIA8gA0ECayIDNgLgASAPIAJBAWs2AvQBIB8tAAAhHyAPIAJBAmsiAjYC9AEgRiAIdCAHciAfIAhBCGt0ciEHIAhBEGshCCALQQJqIgsgF0cNAAsLIEdFDQAgDyADQQFrNgLgASADLQAAIUggDyACQQFrNgL0ASBIIAh0IAdyIQcLIA8gB0H/AXEiA0GPAUs2AvgBIA9BB0EIIAdBgICA+AdxQYCAgPgHRhtBCCANGyICQQhBB0EIIAdBgID8A3FBgID8A0YbIAdB/////3hNG2oiCEEIQQdBCCAHQYD+AXFBgP4BRhsgB0EQdkH/AXEiDUGPAU0baiILQQhBB0EIIAdB/wBxQf8ARhsgB0EIdkH/AXEiGUGPAU0bIAFqajYC8AEgDyANIAJ0IAdBGHZyIBkgCHRyIAMgC3RyrSABrYYgYIQ3A+gBCyAPQcABaiARIAUgBmtB/wEQWwJ/QQAgDEECSQ0AGiAPQaABaiATIAlBABBbQQAgDEECRg0AGkIAIWBCACFiIA9BATYCmAEgD0EANgKQASAPQgA3A4gBIA8gCUEBayIGNgKUASAPIAUgEWogCWoiA0EBayIBNgKAASABQQNxIQUCQCAJQQBMBEAgASEDDAELIA8gA0ECayIDNgKAASABMQAAIWALIA8gYDcDiAEgDyBgQo8BViIRNgKYASAPQQdBCCBgQv8Ag0L/AFEbIg02ApABAkAgBUUNACAPIAlBAmsiAjYClAECQCAJQQJIBEAgAyEHDAELIA8gA0EBayIHNgKAASADMQAAIWILIA8gYkKPAVYiETYCmAEgDyBiIA2thiBghCJhNwOIASAPQQhBB0EIIGJC/wCDQv8AURsgYEKPAVgbIA1qIg02ApABIAVBAUYEQCAHIQMgYSFgIAYhCSACIQYMAQsgDyAJQQNrIgg2ApQBAkAgCUEDSARAIAchAQwBCyAPIAdBAWsiATYCgAEgBzEAACFjCyAPIGNCjwFWIhE2ApgBIA8gYyANrYYgYYQiYDcDiAEgD0EIQQdBCCBjQv8Ag0L/AFEbIGJCjwFYGyANaiINNgKQASAFQQJGBEAgASEDIAIhCSAIIQYMAQsgDyAJQQRrIgY2ApQBQgAhYgJAIAlBBEgEQCABIQMMAQsgDyABQQFrIgM2AoABIAExAAAhYgsgDyBiQo8BViIRNgKYASAPIGIgDa2GIGCEImA3A4gBIA9BCEEHQQggYkL/AINC/wBRGyBjQo8BWBsgDWoiDTYCkAEgCCEJCyANQSBNBEACQCAJQQVOBEAgA0EDaygCACEHIA8gCUEFazYClAEgDyADQQRrNgKAAQwBC0EAIQcgCUECSA0AQRghCQNAIA8gA0EBayIBNgKAASADLQAAIUkgDyAGQQFrIgI2ApQBIEkgCXQgB3IhByAGQQFLIUogASEDIAlBCGshCSACIQYgSg0ACwsgDyAHQf8BcSIBQY8BSzYCmAEgD0EHQQggB0GAgID4B3FBgICA+AdGG0EIIBEbIgNBCEEHQQggB0GAgPwDcUGAgPwDRhsgB0H/////eE0baiIGQQhBB0EIIAdBgP4BcUGA/gFGGyAHQRB2Qf8BcSIJQY8BTRtqIgJBCEEHQQggB0H/AHFB/wBGGyAHQQh2Qf8BcSIIQY8BTRsgDWpqNgKQASAPIAkgA3QgB0EYdnIgCCAGdHIgASACdHKtIA2thiBghDcDiAELQQELITEgGCASayEfIBZBAWohLCAUQQA6AMAQIBRBwBBqIQsgD0GAAmoQKCECIBVBAEoEQCAmQQFrIRMgFCEDIAshCEEAIREgDiEGQQAhDQNAIA0hBSARQQh0IA9B4AFqEC9B/wBxQQF0ckGg/QBqLwEAIQECQCARDQAgAUEAIAJBAmsiB0F/RhshASACQQFKBEAgByECDAELIA9BgAJqECghAgsgDykD6AEhZCAPKALwASFLIAMgAygCACABQQR2IhhBA3EgAUECdkEwcXIgInRyIhY2AgAgAUEFdkEHcSABQRBxIh5BBHZyIREgSyABQQdxIgdrIQ0gZCAHrYgiYKchCUEAIQcgFSAFQQJySgRAIBFBCHQgCUH/AHFBAXRyQaD9AGovAQAhBwJAIBENACAHQQAgAkECayIJQX9GGyEHIAJBAUoEQCAJIQIMAQsgD0GAAmoQKCECCyAHQQR2QQFxIAdBBXZBB3FyIREgDSAHQQdxIglrIQ0gYCAJrYgiYKchCQsgAyAHQQJ0QYAGcSAHQTBxciAiQQRqdCAWcjYCAAJAIAdBAnZBAnEgAUEDdkEBcXIiF0EDRw0AQQRBAyACQQJrIhZBf0YbIRcgAkEBSgRAIBYhAgwBCyAPQYACahAoIQILAn8gF0UEQCAPQoGAgIAQNwJ4QQAMAQsgF0ECTQRAIA9BASAJQQdxQdSdAWotAAAiFkEFdkF/IBZBAnZBB3EiGXRBf3MgCSAWQQNxIgl2cWpBAWoiFiAXQQFGIhcbNgJ8IA8gFkEBIBcbNgJ4IAkgGWoMAQsgCSAJQQdxQdSdAWotAAAiFkEDcSIZdiEJIBdBA0YEQCAWQQV2QQFqIRcgGUEDRgRAIA8gCUEBcUECcjYCfCAPIBdBfyAWQQJ2QQdxIhZ0QX9zIAlBAXZxajYCeCAWQQRqDAILIA8gFyAJIAlBB3FB1J0Bai0AACIJQQNxIhJ2IiBBfyAWQQJ2QQdxIhZ0QX9zcWo2AnggD0F/IAlBAnZBB3EiF3RBf3MgICAWdnEgCUEFdmpBAWo2AnwgFiAZaiASaiAXagwBCyAPIAkgCUEHcUHUnQFqLQAAIglBA3EiEnYiIEF/IBZBAnZBB3EiF3RBf3NxIBZBBXZqQQNqNgJ4IA9BfyAJQQJ2QQdxIhZ0QX9zICAgF3ZxIAlBBXZqQQNqNgJ8IBIgGWogF2ogFmoLIQkCQCAsIA8oAngiGU8EQCAPKAJ8IhIgLE0NAQsgIQRAQQAhByAdQQFBmfYAQQAQDwwHC0EAIQcgHUEBQZn2AEEAEA8MBgsgDyANIAlrNgLwASAPIGAgCa2INwPoASAHQfABcSAYQQ9xckH/AUH/ASAFQQRqIg0gFWtBAXR2IA0gFUwbIgkgCUHVAHEgH0EBShsiCUF/c3EEQCAhBEBBACEHIB1BAUGv2gBBABAPDAcLQQAhByAdQQFBr9oAQQAQDwwGCwJAAkAgHgRAIA9BwAFqEBshFyAPIA8oAtABIBkgAUETdEEfdWoiFms2AtABIA8gDykDyAEgFq2INwPIASAXQX8gFnRBf3NxIAFBCHZBAXEgFnRyQQFyQQJqIBN0IBdBH3RyIRYMAQtBACEWIAlBAXFFDQELIAYgFjYCAAsCQCABQSBxBEAgD0HAAWoQGyEXIA8gDygC0AEgGSABQRJ0QR91aiIWazYC0AEgDyAPKQPIASAWrYg3A8gBIAYgFUECdGogF0F/IBZ0QX9zcSABQQl2QQFxIBZ0ckEBciIWQQJqIBN0IBdBH3RyNgIAIAhBICAWZ2siFiAILQAAQf8AcSIXIBYgF0sbQYABcjoAAAwBCyAJQQJxRQ0AIAYgFUECdGpBADYCAAsgBkEEaiEXAkACQCABQcAAcQRAIA9BwAFqEBshGCAPIA8oAtABIBkgAUERdEEfdWoiFms2AtABIA8gDykDyAEgFq2INwPIASAYQX8gFnRBf3NxIAFBCnZBAXEgFnRyQQFyQQJqIBN0IBhBH3RyIRYMAQtBACEWIAlBBHFFDQELIBcgFjYCAAsgCEEAOgABAkAgAUGAAXEEQCAPQcABahAbIRggDyAPKALQASAZIAFBEHRBH3VqIhZrNgLQASAPIA8pA8gBIBatiDcDyAEgFyAVQQJ0aiAYQX8gFnRBf3NxIAFBC3ZBAXEgFnRyQQFyIgFBAmogE3QgGEEfdHI2AgAgCEGgfyABZ2s6AAEMAQsgCUEIcUUNACAXIBVBAnRqQQA2AgALIAZBCGohAQJAAkAgB0EQcQRAIA9BwAFqEBshGSAPIA8oAtABIBIgB0ETdEEfdWoiFms2AtABIA8gDykDyAEgFq2INwPIASAZQX8gFnRBf3NxIAdBCHZBAXEgFnRyQQFyQQJqIBN0IBlBH3RyIRcMAQtBACEXIAlBEHFFDQELIAEgFzYCAAsCQCAHQSBxBEAgD0HAAWoQGyEZIA8gDygC0AEgEiAHQRJ0QR91aiIWazYC0AEgDyAPKQPIASAWrYg3A8gBIAEgFUECdGogGUF/IBZ0QX9zcSAHQQl2QQFxIBZ0ckEBciIBQQJqIBN0IBlBH3RyNgIAIAhBICABZ2siASAILQABQf8AcSIWIAEgFksbQYABcjoAAQwBCyAJQSBxRQ0AIAEgFUECdGpBADYCAAsgBkEMaiEBAkACQCAHQcAAcQRAIA9BwAFqEBshGSAPIA8oAtABIBIgB0ERdEEfdWoiFms2AtABIA8gDykDyAEgFq2INwPIASAZQX8gFnRBf3NxIAdBCnZBAXEgFnRyQQFyQQJqIBN0IBlBH3RyIRcMAQtBACEXIAlBwABxRQ0BCyABIBc2AgALIAhBAmoiCEEAOgAAAkAgB0GAAXEEQCAPQcABahAbIRYgDyAPKALQASASIAdBEHRBH3VqIglrNgLQASAPIA8pA8gBIAmtiDcDyAEgASAVQQJ0aiAWQX8gCXRBf3NxIAdBC3ZBAXEgCXRyQQFyIgFBAmogE3QgFkEfdHI2AgAgCEGgfyABZ2s6AAAMAQsgCUGAAUkNACABIBVBAnRqQQA2AgALICJBEHMhIiADIAVBBHFqIQMgBkEQaiEGIA0gFUgNAAsLIApBCHEhOCAUQbAMaiEoIBRBoAhqISkgFEGQBGohJSAfQQNOBEAgFUEDbCE5IBVBAXQhOiAmQQFrISBBAyAmQQJrIgF0IS1BASABdCEuIBVBB2pBAXZB/P///wdxQQRqIT0gKyAkQX9zaiIBQQN2IgNBAnQiPkEEaiE7IANBAWoiP0H8////A3EiHEECdCE8IBxBA3QhEiABQRhJIUBBAiEZA0AgGSETIAstAAAhFiALQQA6AAAgIkFvcUECcyEiAkAgFUEATARAIBNBAmohGQwBCyAlIBQgE0EEcRshESATQQJqIRkgDiATIBVsQQJ0aiEIQQAhCiALIQZBACENA0AgDSEFIAYtAAFBBXZBBHEgCiAWQQd2cnIiA0EIdCAPQeABahAvQf8AcUEBdHJBoI0Bai8BACEBAkAgAw0AIAFBACACQQJrIgNBf0YbIQEgAkEBSgRAIAMhAgwBCyAPQYACahAoIQILIA8pA+gBIWUgDygC8AEhTCARIBEoAgAgAUEEdkEDcSABQQJ2QTBxciAidHIiCTYCACABQcAAcSIqQQV2IAFBgAFxIidBBnZyIQogTCABQQdxIgNrIRcgZSADrYgiYKchDUEAIRgCQCAVIAVBAnJMBEBBACEHDAELIAogBi0AAkEFdkEEcSAGLQABQQd2cnIiA0EIdCANQf8AcUEBdHJBoI0Bai8BACEHAkAgAw0AIAdBACACQQJrIgNBf0YbIQcgAkEBSgRAIAMhAgwBCyAPQYACahAoIQILIAdBBXYgB0EGdnJBAnEhCiAXIAdBB3EiA2shFyBgIAOtiCJgpyENCyARIAdBAnRBgAZxIAdBMHFyICJBBGp0IAlyNgIAQQEhCUEBIQMCQCAHQQJ2QQJxIAFBA3ZBAXFyIh5FDQAgDSANQQdxQdSdAWotAAAiA0EDcSINdiEJIB5BA0cEQEEBIAlBfyADQQJ2QQdxIhh0QX9zcSADQQV2akEBaiIDIB5BAUYiHhshCSADQQEgHhshAyANIBhqIRgMAQsgCUEHcUHUnQFqLQAAIh5BA3EiMyANIANBAnZBB3EiG2pqIB5BAnZBB3EiDWohGCAJIDN2IglBfyAbdEF/c3EgA0EFdmpBAWohA0F/IA10QX9zIAkgG3ZxIB5BBXZqQQFqIQkLIA8gFyAYazYC8AEgDyBgIBitiDcD6AEgAUHwAXEiDSANQQFrcQRAIAMgFkH/AHEiFiAGLQABQf8AcSIXIBYgF0sbIhZBAmsiF0EAIBYgF08baiEDCyAHQfABcSIXIBdBAWtxBEAgCSAGLQABQf8AcSIWIAYtAAJB/wBxIhggFiAYSxsiFkECa0EAIBZBAksbaiEJCyADICxNIAkgLE1xRQRAICEEQEEAIQcgHUEBQf32AEEAEA8MCQtBACEHIB1BAUH99gBBABAPDAgLIAYtAAIhFiAGQQA7AAEgFyANQQR2ckH/AUH/ASAFQQRqIg0gFWtBAXR2IA0gFUwbIhdB1QBxIBcgGSAfShsiGEF/c3EEQCAhBEBBACEHIB1BAUGv2gBBABAPDAkLQQAhByAdQQFBr9oAQQAQDwwICwJAAkAgAUEQcQRAIA9BwAFqEBshHiAPIA8oAtABIAMgAUETdEEfdWoiF2s2AtABIA8gDykDyAEgF62INwPIASAeQX8gF3RBf3NxIAFBCHZBAXEgF3RyQQFyQQJqICB0IB5BH3RyIRcMAQtBACEXIBhBAXFFDQELIAggFzYCAAsCQCABQSBxBEAgD0HAAWoQGyEeIA8gDygC0AEgAyABQRJ0QR91aiIXazYC0AEgDyAPKQPIASAXrYg3A8gBIAggFUECdGogHkF/IBd0QX9zcSABQQl2QQFxIBd0ckEBciIXQQJqICB0IB5BH3RyNgIAIAZBICAXZ2siFyAGLQAAQf8AcSIeIBcgHksbQYABcjoAAAwBCyAYQQJxRQ0AIAggFUECdGpBADYCAAsgCEEEaiEeAkACQCAqBEAgD0HAAWoQGyEbIA8gDygC0AEgAyABQRF0QR91aiIXazYC0AEgDyAPKQPIASAXrYg3A8gBIBtBfyAXdEF/c3EgAUEKdkEBcSAXdHJBAXJBAmogIHQgG0EfdHIhFwwBC0EAIRcgGEEEcUUNAQsgHiAXNgIACwJAICcEQCAPQcABahAbIRcgDyAPKALQASADIAFBEHRBH3VqIgNrNgLQASAPIA8pA8gBIAOtiDcDyAEgHiAVQQJ0aiAXQX8gA3RBf3NxIAFBC3ZBAXEgA3RyQQFyIgFBAmogIHQgF0EfdHI2AgAgBkGgfyABZ2s6AAEMAQsgGEEIcUUNACAeIBVBAnRqQQA2AgALIAhBCGohAQJAAkAgB0EQcQRAIA9BwAFqEBshFyAPIA8oAtABIAkgB0ETdEEfdWoiA2s2AtABIA8gDykDyAEgA62INwPIASAXQX8gA3RBf3NxIAdBCHZBAXEgA3RyQQFyQQJqICB0IBdBH3RyIQMMAQtBACEDIBhBEHFFDQELIAEgAzYCAAsCQCAHQSBxBEAgD0HAAWoQGyEXIA8gDygC0AEgCSAHQRJ0QR91aiIDazYC0AEgDyAPKQPIASADrYg3A8gBIAEgFUECdGogF0F/IAN0QX9zcSAHQQl2QQFxIAN0ckEBciIBQQJqICB0IBdBH3RyNgIAIAZBICABZ2siASAGLQABQf8AcSIDIAEgA0sbQYABcjoAAQwBCyAYQSBxRQ0AIAEgFUECdGpBADYCAAsgCEEMaiEBAkACQCAHQcAAcQRAIA9BwAFqEBshFyAPIA8oAtABIAkgB0ERdEEfdWoiA2s2AtABIA8gDykDyAEgA62INwPIASAXQX8gA3RBf3NxIAdBCnZBAXEgA3RyQQFyQQJqICB0IBdBH3RyIQMMAQtBACEDIBhBwABxRQ0BCyABIAM2AgALIAZBAmohBgJAIAdBgAFxBEAgD0HAAWoQGyEXIA8gDygC0AEgCSAHQRB0QR91aiIDazYC0AEgDyAPKQPIASADrYg3A8gBIAEgFUECdGogF0F/IAN0QX9zcSAHQQt2QQFxIAN0ckEBciIBQQJqICB0IBdBH3RyNgIAIAZBoH8gAWdrOgAADAELIBhBgAFJDQAgASAVQQJ0akEANgIACyAiQRBzISIgESAFQQRxaiERIAhBEGohCCANIBVIDQALCwJAIAxBAkkNACATQQJxRQ0AIBlBBHEhAwJAAn8CQAJAIDEEQCAUICUgAxshFkEAIRggFUEATA0BIA4gE0ECayAVbEECdGohEQNAIA9BgAFqEC8hB0EAIQEgFigCACIIBEAgESAYQQJ0aiEBQQAhCUEPIQYDQAJAIAYgCHFFDQAgBkGRosSIAXEiDSAIcQRAIAEgASgCACAHQX9zQQFxICB0cyAucjYCACAHQQF2IQcLIA1BAXQgCHEEQCABIBVBAnRqIgUgBSgCACAHQX9zQQFxICB0cyAucjYCACAHQQF2IQcLIA1BAnQgCHEEQCABIDpBAnRqIgUgBSgCACAHQX9zQQFxICB0cyAucjYCACAHQQF2IQcLIA1BA3QgCHFFDQAgASA5QQJ0aiINIA0oAgAgB0F/c0EBcSAgdHMgLnI2AgAgB0EBdiEHCyABQQRqIQEgBkEEdCEGIAlBAWoiCUEIRw0ACyAIaSEBCyAWQQRqIRYgDyAPKAKQASABazYCkAEgDyAPKQOIASABrYg3A4gBIBhBCGoiGCAVSA0ACwsgKSAoIAMbIQUgFCAlIAMbIRYgA0UhGCAVQQBMDQNBACEDIEANASAFIBYgO2pJIBYgBSA7aiIHSXENAUEAIAUiASAWIgYgPmpBCGpJIAZBBGogB0lxDQIaIAYgPGohBiABIDxqIQH9DAAAAAAAAAAAAAAAAAAAAAAhXkEAIQcDQCAFIAdBAnQiA2oiCSADIBZqIgP9AAIAIl9BBP2tASBfQQT9qwEgXiBf/Q0MDQ4PEBESExQVFhcYGRobQRz9rQH9UP1QIF/9UCJe/QsCACAJIF4gA/0AAgRBHP2rAf1QIl5BAf2tAf0Md3d3d3d3d3d3d3d3d3d3d/1OIF5BAf2rAf0M7u7u7u7u7u7u7u7u7u7u7v1O/VAgXv1QIF/9T/0LAgAgXyFeIAdBBGoiByAcRw0ACyAcID9GDQMgEiEDIF79GwMMAgsgA0UhGCApICggAxshBQwCCyAFIQEgFiEGQQALIQcDQCAHQRx2IQkgASAGKAIAIgdBBHYgCSAHQQR0cnIgB3IiCTYCACABIAkgBigCBEEcdHIiCUEBdkH37t27B3EgCUEBdEHu3bv3fnFyIAlyIAdBf3NxNgIAIAFBBGohASAGQQRqIQYgA0EIaiIDIBVIDQALCyATQQZJDQBBACEJQQAhESAWIQEgKSAoIBgbIhshByAUICUgGBsiFyEGAkAgFUEATCINDQADQCABQQRqIQMgBygCACEIIAEoAgAhASAHIDgEfyAIBSABQQR0IBFBHHZyIAFBBHZyIAMoAgBBHHRyIAFyQQN0QYiRosR4cSAIcgsgBigCAEF/c3E2AgAgBkEEaiEGIAdBBGohByABIREgAyEBIAlBCGoiCSAVSA0ACyANDQAgDiATQQZrIBVsQQJ0aiFBQQAhHiAXIREDQEEAIQMgGygCACIBBEAgFSAeayFCQQAhB0EAIQoDQCAHIU0gD0GgAWoQGyEHAkAgCiAKQQRqIgYgQiAGIB5qIBVIGyIzTiJDBEBBACEGDAELIBEoAgBBf3MhKiBBIAogHnJBAnRqIRhBACEGQQ8gCiIJQQJ0IkR0Ig0hCANAAkAgASAIcUUNACAIQZGixIgBcSInIAFxBEAgB0EBcQRAIAMgJ3IhA0EyIAlBAnR0ICpxIAFyIQELIAdBAXYhByAGQQFqIQYLIAEgJ0EBdCI0cQRAIAdBAXEEQCADIDRyIQMgAUH0ACAJQQJ0dCAqcXIhAQsgB0EBdiEHIAZBAWohBgsgASAnQQJ0IjRxBEAgB0EBcQRAIAMgNHIhAyABQegBIAlBAnR0ICpxciEBCyAHQQF2IQcgBkEBaiEGCyABICdBA3QiJ3FFDQAgB0EBcQRAIAMgJ3IhAyABQcABIAlBAnR0ICpxciEBCyAGQQFqIQYgB0EBdiEHCyAIQQR0IQggCUEBaiIJIDNIDQALIAMgRHZB//8DcUUNACBDDQADQAJAIAMgDXFFDQAgDUGRosSIAXEiCSADcQRAIBggGCgCACAHQR90ciAtcjYCACAHQQF2IQcgBkEBaiEGCyAJQQF0IANxBEAgGCAVQQJ0aiIIIAgoAgAgB0EfdHIgLXI2AgAgB0EBdiEHIAZBAWohBgsgCUECdCADcQRAIBggOkECdGoiCCAIKAIAIAdBH3RyIC1yNgIAIAdBAXYhByAGQQFqIQYLIAlBA3QgA3FFDQAgGCA5QQJ0aiIJIAkoAgAgB0EfdHIgLXI2AgAgBkEBaiEGIAdBAXYhBwsgDUEEdCENIBhBBGohGCAKQQFqIgogM0gNAAsLIA8gDygCsAEgBms2ArABIA8gDykDqAEgBq2INwOoAUEBIQdBBCEKIE1BAXFFDQALIBsgGygCBCADQRt2QQ5xIANBHXZyIANBHHZyIBEoAgRBf3NxcjYCBAsgESgCACADciIDQQN2QZGixIgBcSIBQQR2IAFBBHRyIAFyIQYgHgRAIAVBBGsiByAHKAIAIBZBBGsoAgBBf3MgAUEcdHFyNgIACyAFIAUoAgAgBiAWKAIAQX9zcXI2AgAgBSAFKAIEIBYoAgRBf3MgA0EfdnFyNgIEIBtBBGohGyARQQRqIREgBUEEaiEFIBZBBGohFiAeQQhqIh4gFUgNAAsLIBdBACA9EBUaCyAZIB9IDQALCwJAIAxBAkkNAAJAIB9BA3FBAWsiFkECSSAxcQRAIBVBAEwNAUEBICZBAmt0IQIgDiAfQfz//wdxIBVsQQJ0aiERICUgFCAfQQRxGyEFICZBAWshCEEAIQogFUEMbCEMIBVBA3QhCwNAIA9BgAFqEC8hB0EAIQEgBSgCACIDBEAgESAKQQJ0aiEBQQ8hBkEAIQkDQAJAIAMgBnFFDQAgBkGRosSIAXEiDSADcQRAIAEgASgCACAHQX9zQQFxIAh0cyACcjYCACAHQQF2IQcLIA1BAXQgA3EEQCABIBVBAnRqIh0gHSgCACAHQX9zQQFxIAh0cyACcjYCACAHQQF2IQcLIA1BAnQgA3EEQCABIAtqIh0gHSgCACAHQX9zQQFxIAh0cyACcjYCACAHQQF2IQcLIA1BA3QgA3FFDQAgASAMaiINIA0oAgAgB0F/c0EBcSAIdHMgAnI2AgAgB0EBdiEHCyABQQRqIQEgBkEEdCEGIAlBAWoiCUEIRw0ACyADaSEBCyAFQQRqIQUgDyAPKAKQASABazYCkAEgDyAPKQOIASABrYg3A4gBIApBCGoiCiAVSA0ACwsgFkEBSw0AIBVBAEwNACAlIBQgH0EEcSIBGyEJICggKSABGyECQQAhAwJ/AkAgKyAkQX9zaiIBQThJDQAgAiAJIAFBAXZB/P///wdxIgZBBGoiB2pJIAkgAiAHaiIHSXENACACIAYgCWpBCGpJIAlBBGogB0lxDQAgAUEDdkEBaiINQfz///8DcSIIQQN0IQMgCSAIQQJ0IgFqIQYgASACaiEB/QwAAAAAAAAAAAAAAAAAAAAAIV5BACEHA0AgAiAHQQJ0IhZqIhEgCSAWaiIW/QACACJfQQT9rQEgX0EE/asBIF4gX/0NDA0ODxAREhMUFRYXGBkaG0Ec/a0B/VD9UCBf/VAiXv0LAgAgESBeIBb9AAIEQRz9qwH9UCJeQQH9rQH9DHd3d3d3d3d3d3d3d3d3d3f9TiBeQQH9qwH9DO7u7u7u7u7u7u7u7u7u7u79Tv1QIF79UCBf/U/9CwIAIF8hXiAHQQRqIgcgCEcNAAsgCCANRg0CIF79GwMMAQsgAiEBIAkhBkEACyEHA0AgB0EcdiEJIAEgBigCACIHQQR2IAkgB0EEdHJyIAdyIgk2AgAgASAJIAYoAgRBHHRyIglBAXZB9+7duwdxIAlBAXRB7t27935xciAJciAHQX9zcTYCACABQQRqIQEgBkEEaiEGIANBCGoiAyAVSA0ACwsgHyAfQQFqQQNxa0EDa0EAIB9BBkobIhEgH04NAEEDICZBAmt0IRkgKyAkQX9zaiIBQQN2IgNBAnQiK0EEaiEdIANBAWoiA0H8////A3EiEkECdCEhIBJBA3QhFiAVQQxsISwgFUEDdCEtIAFBGEkhJiADIBJGIRsDQAJAAkACQAJAAn8CQCAfIBFrIgFBAWsiA0EDTwRAQX8hFyABQQVIDQUgFUEATA0GICUgFCARQQRxIgEbIQIgKCApIAEbIQkgOARAQQAhBiAmDQQgAiAJIB1qSSACIB1qIAlLcQ0EIAIgIWohASAJICFqIQcDQCAJIAZBAnQiA2oiCCAI/QACACACIANq/QACAP1P/QsCACAGQQRqIgYgEkcNAAsgFiEGIBsNBgwFCyAUICUgARshDUEAIQMgJg0BIAkgDSAdakkgDSAJIB1qIgFJcQ0BIAkgDSArakEIakkgDUEEaiABSXENASAJIAIgHWpJIAEgAktxDQEgAiAhaiEIIAkgIWohASANICFqIQf9DAAAAAAAAAAAAAAAAAAAAAAhXkEAIQYDQCAJIAZBAnQiA2oiBSADIA1qIgz9AAIAIl9BBP2tASBfQQT9qwEgXiBf/Q0MDQ4PEBESExQVFhcYGRobQRz9rQH9UP1QIAz9AAIEQRz9qwH9UCBf/VBBA/2rAf0MiIiIiIiIiIiIiIiIiIiIiP1OIAX9AAIA/VAgAiADav0AAgD9T/0LAgAgXyFeIAZBBGoiBiASRw0ACyAbDQUgFiEDIF79GwMMAgsgA0ECdEHcnQFqKAIAIRcMBAsgDSEHIAkhASACIQhBAAshBgNAIAZBHHYhCSABIAEoAgAgBygCACIGQQR2IAkgBkEEdHJyIAcoAgRBHHRyIAZyQQN0QYiRosR4cXIgCCgCAEF/c3E2AgAgCEEEaiEIIAFBBGohASAHQQRqIQcgA0EIaiIDIBVIDQALDAILIAkhByACIQELA0AgByAHKAIAIAEoAgBBf3NxNgIAIAFBBGohASAHQQRqIQcgBkEIaiIGIBVIDQALCyAVQQBMDQAgJSAUIBFBBHEiARshCiAoICkgARshAiAUICUgARshEyApICggARshHiAOIBEgFWxBAnRqIS5BACEFA0BBACEDIAIoAgAgF3EiAQRAIBUgBWshKkEAIQdBACENA0AgByFOIA9BoAFqEBshBwJAIA0gDUEEaiIGICogBSAGaiAVSBsiJE4iJwRAQQAhBgwBCyAXIAooAgBBf3NxIRggLiAFIA1yQQJ0aiELQQAhBkEPIA0iCUECdCIcdCIgIQgDQAJAIAEgCHFFDQAgCEGRosSIAXEiIiABcQRAIAdBAXEEQCADICJyIQNBMiAJQQJ0dCAYcSABciEBCyAHQQF2IQcgBkEBaiEGCyABICJBAXQiMXEEQCAHQQFxBEAgAyAxciEDIAFB9AAgCUECdHQgGHFyIQELIAdBAXYhByAGQQFqIQYLIAEgIkECdCIxcQRAIAdBAXEEQCADIDFyIQMgAUHoASAJQQJ0dCAYcXIhAQsgB0EBdiEHIAZBAWohBgsgASAiQQN0IiJxRQ0AIAdBAXEEQCADICJyIQMgAUHAASAJQQJ0dCAYcXIhAQsgBkEBaiEGIAdBAXYhBwsgCEEEdCEIIAlBAWoiCSAkSA0ACyADIBx2Qf//A3FFDQAgJw0AA0ACQCADICBxRQ0AICBBkaLEiAFxIgkgA3EEQCALIAsoAgAgB0EfdHIgGXI2AgAgB0EBdiEHIAZBAWohBgsgCUEBdCADcQRAIAsgFUECdGoiCCAIKAIAIAdBH3RyIBlyNgIAIAdBAXYhByAGQQFqIQYLIAlBAnQgA3EEQCALIC1qIgggCCgCACAHQR90ciAZcjYCACAHQQF2IQcgBkEBaiEGCyAJQQN0IANxRQ0AIAsgLGoiCSAJKAIAIAdBH3RyIBlyNgIAIAZBAWohBiAHQQF2IQcLICBBBHQhICALQQRqIQsgDUEBaiINICRIDQALCyAPIA8oArABIAZrNgKwASAPIA8pA6gBIAatiDcDqAFBASEHQQQhDSBOQQFxRQ0ACyACIAIoAgQgA0EbdkEOcSADQR12ciADQRx2ciAKKAIEQX9zcXI2AgQLIAooAgAgA3IiA0EDdkGRosSIAXEiAUEEdiABQQR0ciABciEGIAUEQCAeQQRrIgcgBygCACATQQRrKAIAQX9zIAFBHHRxcjYCAAsgHiAeKAIAIAYgEygCAEF/c3FyNgIAIB4gHigCBCATKAIEQX9zIANBH3ZxcjYCBCACQQRqIQIgCkEEaiEKIB5BBGohHiATQQRqIRMgBUEIaiIFIBVIDQALCyARQQRqIhEgH0gNAAsLQQEhByAfQQBMDQMgFUEATA0DIBVB/P///wdxIgZBAnQhAiAVQQRJIQhBACEJA0AgDiAJIBVsQQJ0aiEDAkACQCAIBEAgAyEHQQAhAQwBCyACIANqIQdBACEBA0AgAyABQQJ0aiINIA39AAIAIl79DP///3////9/////f////3/9TiJf/aEBIF8gXv0MAAAAAAAAAAAAAAAAAAAAAP05/VL9CwIAIAFBBGoiASAGRw0ACyAGIgEgFUYNAQsDQCAHQQAgBygCACIDQf////8HcSINayANIANBAEgbNgIAIAdBBGohByABQQFqIgEgFUcNAAsLQQEhByAJQQFqIgkgH0cNAAsMAwsgIUUNACAPIBooAhg2AjQgDyAWNgIwIB1BAUHcxwAgD0EwahAPDAELIA8gATYCFCAPIBY2AhAgHUEBQdzHACAPQRBqEA9BACEHDAELQQAhBwsgD0GwAmokACAHDQEMAwsgBCABQQl0QdCpAWo2AmwCfyAEKAJ0IQECQAJAIBooAhAgGigCCGsiBSAaKAIUIBooAgxrIglsIgMgBCgChAFLBEAgARAQIAQgA0ECdBAYIgE2AnRBACABRQ0DGiAEIAM2AoQBDAELIAFFDQELIAFBACADQQJ0EBUaCyAEKAJ4IQECQCAFQQJqIgYgCUEDakECdiIMQQJqbCIDIAQoAogBTQRAIANBAnQhCAwBCyABEBAgBCADQQJ0IggQGCIBNgJ4IAENAEEADAELIAQgAzYCiAEgAUEAIAgQFRoCQCAGRQ0AIAQoAngiByEBAkAgBkEETwRAIAcgBkF8cSINQQJ0aiEBQQAhCANAIAcgCEECdGr9DAAAIEkAACBJAAAgSQAAIEn9CwIAIAhBBGoiCCANRw0ACyAGIA1GDQELA0AgAUGAgIDJBDYCACABQQRqIQEgDUEBaiINIAZHDQALCyAHIAxBAWogBmxBAnRqIQNBACENAkACQCAGQQRJBEAgAyEBDAELIAMgBkF8cSINQQJ0aiEBQQAhCANAIAMgCEECdGr9DAAAIEkAACBJAAAgSQAAIEn9CwIAIAhBBGoiCCANRw0ACyAGIA1GDQELA0AgAUGAgIDJBDYCACABQQRqIQEgDUEBaiINIAZHDQALCyAJQQNxIgFFDQAgBkUNAEGAgIDIBEGAgIDABEGAgICABCABQQJGGyABQQFGGyELIAcgBiAMbEECdGohA0EAIQ0CQCAGQQRJBEAgAyEBDAELIAMgBkF8cSINQQJ0aiEBIAv9ESFfQQAhCANAIAMgCEECdGogX/0LAgAgCEEEaiIIIA1HDQALIAYgDUYNAQsDQCABIAs2AgAgAUEEaiEBIA1BAWoiDSAGRw0ACwsgBCAJNgKAASAEIAU2AnxBAQtFDQIgGigCHCARaiIZQR9OBEAgIUUNAiAjIBk2AhAgHUECQdXBACAjQRBqEA8MAwsgBBBaQQAhASAEQbCpATYCZCAEQdCeATYCYCAEQfCeATYCHAJAAkACQAJAIBooAjQiB0EBSw0AIAQoApABRQ0CIAcNAAwBCyAaKAIEIQMgB0EETwRAIAdBfHEhAkEAIQYDQCADIAZBA3RqIgFBHGogAUEUaiABQQxqIAH9CQIE/VYCAAH9VgIAAv1WAgADIF79rgEhXiAGQQRqIgYgAkcNAAsgXiBeIF79DQgJCgsMDQ4PAAECAwABAgP9rgEiXiBeIF79DQQFBgcAAQIDAAECAwABAgP9rgH9GwAhASACIAdGDQELA0AgAyACQQN0aigCBCABaiEBIAJBAWoiAiAHRw0ACwsgAUECaiIDIAQoApgBSwRAIAQoApQBIAMQFyIGRQ0FIAQgBjYClAEgASAGakEAOwAAIAQgAzYCmAEgGigCNCEHCyAEKAKUASEeIAdFDQEgGigCBCEGQQAhAkEAIQEDQCACIB5qIAYgAUEDdCIDaiIGKAIAIAYoAgQQEhogGigCBCIGIANqKAIEIAJqIQIgAUEBaiIBIBooAjRJDQALDAELIAdBAUcNASAaKAIEKAIAIR4LIBooAjwiAQRAIAQoAnQhLCAEIAE2AnQLIBooAiwEQCAWQQhxISUgBEEcaiEPIBZBAXEhLSAWQQJxRSEuQQIhHwNAIB4gKGohASAaKAIAIClBGGxqIiAoAgAhAwJAIC0gH0ECSSAZIBooAhxBBGtMcXEiIgRAIAQgATYCFCAEIAEgA2oiAzYCGCAEIAMvAAA7AXAgA0H/AToAACAEKAIYQf8BOgABIARBADYCCCAEQQA2AgAgBCABNgIQDAELIAQgATYCFCAEIAEgA2oiBjYCGCAEIAYvAAA7AXAgBkH/AToAACAEKAIYQf8BOgABIAQgBEEcajYCaCAEIAE2AhAgBEEANgIMIAQgAwR/IAEtAABBEHQFQYCA/AcLIgM2AgBBASEGIAFBAWohCSABLQABIQcCfyABLQAAQf8BRgRAIAdBkAFPBEAgBEEBNgIMIANBgP4DcgwCCyAEIAk2AhBBACEGIAdBCXQgA2oMAQsgBCAJNgIQIAdBCHQgA3ILIQEgBCAGNgIIIARBgIACNgIEIAQgAUEHdDYCAAsgICgCACEqAkAgGUEATA0AICAoAghFDQAgIiAuciEnQQAhJgNAAkACQAJAAkACQCAfQQFrDgIBAgALICIEQEEBIBl0IgFBAXYgAXIhESAEKAJ8IgVBAnQiDSAEKAJ4akEMaiEBIAQoAnQhBkEAIQggBCgCgAEiA0EETwRAIAVFDQUgBUEDbCECIAVBAXQhDEEAIBFrIQkDQCAMQQJ0IQtBACEDA0ACQCABIgcoAgAiAUUNAAJAIAFBkICAAXENACABQe8DcUUNACAEKAIAIQECQCAEKAIIIhANACABQf8BRiEKIAQoAhAiEC0AACEBAkAgCkUEQCAEIAE2AgAgBCAQQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgEEEBajYCEEEHIRAMAgtB/wEhASAEQf8BNgIAC0EIIRALIAQgEEEBayIQNgIIAkAgASAQdkEBcUUNAAJAIBANACABQf8BRiEKIAQoAhAiEC0AACEBAkAgCkUEQCAEIAE2AgAgBCAQQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgEEEBajYCEEEHIRAMAgtB/wEhASAEQf8BNgIAC0EIIRALIAQgEEEBayIQNgIIIAYgCSARIAEgEHZBAXEiEBs2AgAgBCgCfCEBIAdBBGsiCiAKKAIAQSByNgIAIAcgBygCBEEIcjYCBCAHIAcoAgAgEEETdHJBEHI2AgAgJQ0AIAdBfiABa0ECdGoiASABKAIEQYCAAnI2AgQgASABKAIAIBBBH3RyQYCABHI2AgAgAUEEayIBIAEoAgBBgIAIcjYCAAsgByAHKAIAQYCAgAFyIgE2AgALAkAgAUGAgYAIcQ0AIAFB+B5xRQ0AIAQoAgAhAQJAIAQoAggiEA0AIAFB/wFGIQogBCgCECIQLQAAIQECQCAKRQRAIAQgATYCACAEIBBBAWo2AhAMAQsgAUGPAU0EQCAEIAE2AgAgBCAQQQFqNgIQQQchEAwCC0H/ASEBIARB/wE2AgALQQghEAsgBCAQQQFrIhA2AgggBwJ/IAEgEHZBAXFFBEAgBygCAAwBCwJAIBANACABQf8BRiEKIAQoAhAiEC0AACEBAkAgCkUEQCAEIAE2AgAgBCAQQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgEEEBajYCEEEHIRAMAgtB/wEhASAEQf8BNgIAC0EIIRALIAQgEEEBayIQNgIIIAYgDWogCSARIAEgEHZBAXEiARs2AgAgB0EEayIQIBAoAgBBgAJyNgIAIAcgBygCBEHAAHI2AgQgBygCACABQRZ0ckGAAXILQYCAgAhyIgE2AgALAkAgAUGAiIDAAHENACABQcD3AXFFDQAgBCgCACEBAkAgBCgCCCIQDQAgAUH/AUYhCiAEKAIQIhAtAAAhAQJAIApFBEAgBCABNgIAIAQgEEEBajYCEAwBCyABQY8BTQRAIAQgATYCACAEIBBBAWo2AhBBByEQDAILQf8BIQEgBEH/ATYCAAtBCCEQCyAEIBBBAWsiEDYCCCAHAn8gASAQdkEBcUUEQCAHKAIADAELAkAgEA0AIAFB/wFGIQogBCgCECIQLQAAIQECQCAKRQRAIAQgATYCACAEIBBBAWo2AhAMAQsgAUGPAU0EQCAEIAE2AgAgBCAQQQFqNgIQQQchEAwCC0H/ASEBIARB/wE2AgALQQghEAsgBCAQQQFrIhA2AgggBiALaiAJIBEgASAQdkEBcSIBGzYCACAHQQRrIhAgECgCAEGAEHI2AgAgByAHKAIEQYAEcjYCBCAHKAIAIAFBGXRyQYAIcgtBgICAwAByIgE2AgALIAFBgMCAgARxDQAgAUGAvA9xRQ0AIAQoAgAhAQJAIAQoAggiEA0AIAFB/wFGIQogBCgCECIQLQAAIQECQCAKRQRAIAQgATYCACAEIBBBAWo2AhAMAQsgAUGPAU0EQCAEIAE2AgAgBCAQQQFqNgIQQQchEAwCC0H/ASEBIARB/wE2AgALQQghEAsgBCAQQQFrIhA2AgggASAQdkEBcQRAIAYgAkECdGohTwJAIBANACABQf8BRiEUIAQoAhAiEC0AACEBAkAgFEUEQCAEIAE2AgAgBCAQQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgEEEBajYCEEEHIRAMAgtB/wEhASAEQf8BNgIAC0EIIRALIAQgEEEBayIQNgIIIE8gCSARIAEgEHZBAXEiEBs2AgAgBCgCfCEBIAdBBGsiCiAKKAIAQYCAAXI2AgAgByAHKAIEQYAgcjYCBCAHIAcoAgAgEEEcdHJBgMAAcjYCACAHIAFBAnRqIgEgASgCBEEEcjYCBCABIAEoAgxBAXI2AgwgASABKAIIIBBBEnRyQQJyNgIICyAHIAcoAgBBgICAgARyNgIACyAGQQRqIQYgB0EEaiEBIANBAWoiAyAFRw0ACyAHQQxqIQEgBiACQQJ0aiEGIAhBBGoiCCAEKAKAASIDQXxxSQ0ACwsgAyAITQ0DIAVFDQNBACETQQAgEWshCyADIRADQAJAIAggEEYEQCAIIRAMAQsgAUEEayEMIAEoAgAhDUEAIQIDQAJAIA0gAkEDbCIHdiIJQZCAgAFxDQAgCUHvA3FFDQAgBCgCACEDAkAgBCgCCCIJDQAgA0H/AUchECAEKAIQIgktAAAhAwJAIBBFBEAgA0GQAU8EQEH/ASEDIARB/wE2AgAMAgsgBCADNgIAIAQgCUEBajYCEEEHIQkMAgsgBCADNgIAIAQgCUEBajYCEAtBCCEJCyAEIAlBAWsiCTYCCAJAIAMgCXZBAXFFDQAgBiACIAVsQQJ0aiFQAkAgCQ0AIANB/wFHIQ0gBCgCECIJLQAAIQMCQCANRQRAIANBkAFPBEBB/wEhAyAEQf8BNgIADAILIAQgAzYCACAEIAlBAWo2AhBBByEJDAILIAQgAzYCACAEIAlBAWo2AhALQQghCQsgBCAJQQFrIgk2AgggUCALIBEgAyAJdkEBcSIJGzYCACAEKAJ8IRAgDCAMKAIAQSAgB3RyNgIAIAEgASgCACAJQRN0QRByIAd0cjYCACABIAEoAgRBCCAHdHI2AgQgAiAlckUEQCABQX4gEGtBAnRqIgMgAygCBEGAgAJyNgIEIAMgAygCACAJQR90ckGAgARyNgIAIANBBGsiAyADKAIAQYCACHI2AgALIAJBA0cNACABIBBBAnRqIgMgAygCBEEEcjYCBCADIAMoAgxBAXI2AgwgAyADKAIIIAlBEnRyQQJyNgIICyABIAEoAgBBgICAASAHdHIiDTYCACAEKAKAASEDCyADIRAgAkEBaiICIAMgCGtJDQALCyAGQQRqIQYgAUEEaiEBIBNBAWoiEyAFRw0ACwwDC0EAIQdBACENQQAhFwJAAkACQAJAIAQoAnwiEEHAAEcNACAEKAKAAUHAAEcNAEEAQQEgGXQiAUEBdiABciIRayEFIARBHGohECAEKAJ4QYwCaiEGIAQoAgghCCAEKAIEIQMgBCgCACECIAQoAmghDCAEKAJ0IQEgFkEIcQ0BA0BBACEXA0AgASEJIAYiBygCACIGBEACQCAGQZCAgAFxDQAgBkHvA3EiAUUNACADIBAgBCgCbCABai0AAEECdGoiDCgCACILKAIAIgFrIQMCfyABIAJBEHZLBEAgCygCBCEKIAwgC0EIQQwgASADSyIUG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQMgCC0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIANBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCADQQh0IAJqIQILIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIAogCkUgFBsMAQsgAiABQRB0ayECIANBgIACcUUEQCALKAIEIQogDCALQQxBCCABIANLIhQbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhASAILQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgAUEJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIAFBCHQgAmohAgsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyAKRSAKIBQbDAELIAsoAgQLBH8gAyAQIAcoAgRBEXZBBHEgB0EEayIKKAIAQRN2QQFxIAZBDnZBEHEgBkEQdkHAAHEgBkGqAXFycnJyIhRB0LkBai0AAEECdGoiDCgCACILKAIAIgFrIQMgFEHQuwFqLQAAIRMgCSAFIBECfyABIAJBEHZLBEAgCygCBCEUIAwgC0EIQQwgASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQMgCC0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIANBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCADQQh0IAJqIQILIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIBQgFEUgDhsMAQsgAiABQRB0ayECIANBgIACcUUEQCALKAIEIRQgDCALQQxBCCABIANLIg4baigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhASAILQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgAUEJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIAFBCHQgAmohAgsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyAURSAUIA4bDAELIAsoAgQLIBNzIgEbNgIAIAogCigCAEEgcjYCACAHIAcoAgRBCHI2AgQgB0GMAmsiCyALKAIAQYCACHI2AgAgB0GEAmsiCyALKAIAQYCAAnI2AgAgB0GIAmsiCyALKAIAIAFBH3RyQYCABHI2AgAgBiABQRN0ckEQcgUgBgtBgICAAXIhBgsCQCAGQYCBgAhxDQAgBkH4HnFFDQAgAyAQIAQoAmwgBkEDdiIUQe8DcWotAABBAnRqIgwoAgAiCygCACIBayEDAn8gASACQRB2SwRAIAsoAgQhCiAMIAtBCEEMIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAKIApFIBMbDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEKIAwgC0EMQQggASADSyITG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgCkUgCiATGwwBCyALKAIECwR/IAMgECAHKAIEQRR2QQRxIAdBBGsiCigCAEEWdkEBcSAGQQ92QRBxIAZBE3ZBwABxIBRBqgFxcnJyciIUQdC5AWotAABBAnRqIgwoAgAiCygCACIBayEDIBRB0LsBai0AACETIAkgBSARAn8gASACQRB2SwRAIAsoAgQhFCAMIAtBCEEMIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAUIBRFIA4bDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEUIAwgC0EMQQggASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgFEUgFCAOGwwBCyALKAIECyATcyIBGzYCgAIgCiAKKAIAQYACcjYCACAHIAcoAgRBwAByNgIEIAYgAUEWdHJBgAFyBSAGC0GAgIAIciEGCwJAIAZBgIiAwABxDQAgBkHA9wFxRQ0AIAMgECAEKAJsIAZBBnYiFEHvA3FqLQAAQQJ0aiIMKAIAIgsoAgAiAWshAwJ/IAEgAkEQdksEQCALKAIEIQogDCALQQhBDCABIANLIhMbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhAyAILQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgA0EJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIANBCHQgAmohAgsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgCiAKRSATGwwBCyACIAFBEHRrIQIgA0GAgAJxRQRAIAsoAgQhCiAMIAtBDEEIIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEBIAgtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECABQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggAUEIdCACaiECCyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIApFIAogExsMAQsgCygCBAsEfyADIBAgBygCBEEXdkEEcSAHQQRrIgooAgBBGXZBAXEgBkESdkEQcSAGQRZ2QcAAcSAUQaoBcXJycnIiFEHQuQFqLQAAQQJ0aiIMKAIAIgsoAgAiAWshAyAUQdC7AWotAAAhEyAJIAUgEQJ/IAEgAkEQdksEQCALKAIEIRQgDCALQQhBDCABIANLIg4baigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhAyAILQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgA0EJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIANBCHQgAmohAgsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgFCAURSAOGwwBCyACIAFBEHRrIQIgA0GAgAJxRQRAIAsoAgQhFCAMIAtBDEEIIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEBIAgtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECABQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggAUEIdCACaiECCyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIBRFIBQgDhsMAQsgCygCBAsgE3MiARs2AoAEIAogCigCAEGAEHI2AgAgByAHKAIEQYAEcjYCBCAGIAFBGXRyQYAIcgUgBgtBgICAwAByIQYLAkAgBkGAwICABHENACAGQYC8D3FFDQAgAyAQIAQoAmwgBkEJdiIUQe8DcWotAABBAnRqIgwoAgAiCygCACIBayEDAn8gASACQRB2SwRAIAsoAgQhCiAMIAtBCEEMIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAKIApFIBMbDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEKIAwgC0EMQQggASADSyITG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgCkUgCiATGwwBCyALKAIECwR/IAMgECAHKAIEQRp2QQRxIAdBBGsiCigCAEEcdkEBcSAGQRV2QRBxIAZBGXZBwABxIBRBqgFxcnJyciIUQdC5AWotAABBAnRqIgwoAgAiCygCACIBayEDIBRB0LsBai0AACETIAkgBSARAn8gASACQRB2SwRAIAsoAgQhFCAMIAtBCEEMIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAUIBRFIA4bDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEUIAwgC0EMQQggASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgFEUgFCAOGwwBCyALKAIECyATcyIBGzYCgAYgCiAKKAIAQYCAAXI2AgAgByAHKAIEQYAgcjYCBCAHIAcoAoQCQQRyNgKEAiAHIAcoAowCQQFyNgKMAiAHIAcoAogCIAFBEnRyQQJyNgKIAiAGIAFBHHRyQYDAAHIFIAYLQYCAgIAEciEGCyAHIAY2AgALIAdBBGohBiAJQQRqIQEgF0EBaiIXQcAARw0ACyAHQQxqIQYgCUGEBmohASANQTxJIVEgDUEEaiENIFENAAsMAgtBASAZdCIBQQF2IAFyIQ0gBCgCeCIJIBBBAnRqQQxqIQYgBCgCgAEhASAEKAIIIQggBCgCBCEDIAQoAgAhAiAEKAJoIQwgBCgCdCERAkAgFkEIcQRAAkAgAUEESQ0AIBAEQEEAIA1rIRQgBEEcaiEFIBBBDGwhEyAQQQN0IRUDQEEAIQsDQCAGIgkoAgAiBgRAAkAgBkGQgIABcQ0AIAZB7wNxIgFFDQAgAyAFIAQoAmwgAWotAABBAnRqIgwoAgAiCigCACIBayEDAn8gASACQRB2TQRAIAIgAUEQdGshAiADQYCAAnEEQCAKKAIEDAILIAooAgQhDiAMIApBDEEIIAEgA0siEhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEBIAgtAABB/wFHBEAgBCAKNgIQQQghCCABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAo2AhAgAUEJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIA5FIA4gEhsMAQsgCigCBCEOIAwgCkEIQQwgASADSyISG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQMgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIANBCHQgAmohAgwBCyADQY8BTQRAIAQgCjYCECADQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIA4gDkUgEhsLBH8gAyAFIAkoAgRBEXZBBHEgCUEEayIOKAIAQRN2QQFxIAZBDnZBEHEgBkEQdkHAAHEgBkGqAXFycnJyIhJB0LkBai0AAEECdGoiDCgCACIKKAIAIgFrIQMgEkHQuwFqLQAAIRggESAUIA0CfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCESIAwgCkEMQQggASADSyIbG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgEkUgEiAbGwwBCyAKKAIEIRIgDCAKQQhBDCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgEiASRSAbGwsgGHMiARs2AgAgDiAOKAIAQSByNgIAIAkgCSgCBEEIcjYCBCAGIAFBE3RyQRByBSAGC0GAgIABciEGCwJAIAZBgIGACHENACAGQfgecUUNACADIAUgBCgCbCAGQQN2IhJB7wNxai0AAEECdGoiDCgCACIKKAIAIgFrIQMCfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCEOIAwgCkEMQQggASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgDkUgDiAYGwwBCyAKKAIEIQ4gDCAKQQhBDCABIANLIhgbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgDiAORSAYGwsEfyADIAUgCSgCBEEUdkEEcSAJQQRrIg4oAgBBFnZBAXEgBkEPdkEQcSAGQRN2QcAAcSASQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIMKAIAIgooAgAiAWshAyASQdC7AWotAAAhGCARIBBBAnRqIBQgDQJ/IAEgAkEQdk0EQCACIAFBEHRrIQIgA0GAgAJxBEAgCigCBAwCCyAKKAIEIRIgDCAKQQxBCCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhASAILQAAQf8BRwRAIAQgCjYCEEEIIQggAUEIdCACaiECDAELIAFBjwFNBEAgBCAKNgIQIAFBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyASRSASIBsbDAELIAooAgQhEiAMIApBCEEMIAEgA0siGxtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEDIAgtAABB/wFHBEAgBCAKNgIQQQghCCADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAo2AhAgA0EJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyASIBJFIBsbCyAYcyIBGzYCACAOIA4oAgBBgAJyNgIAIAkgCSgCBEHAAHI2AgQgBiABQRZ0ckGAAXIFIAYLQYCAgAhyIQYLAkAgBkGAiIDAAHENACAGQcD3AXFFDQAgAyAFIAQoAmwgBkEGdiISQe8DcWotAABBAnRqIgwoAgAiCigCACIBayEDAn8gASACQRB2TQRAIAIgAUEQdGshAiADQYCAAnEEQCAKKAIEDAILIAooAgQhDiAMIApBDEEIIAEgA0siGBtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEBIAgtAABB/wFHBEAgBCAKNgIQQQghCCABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAo2AhAgAUEJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIA5FIA4gGBsMAQsgCigCBCEOIAwgCkEIQQwgASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQMgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIANBCHQgAmohAgwBCyADQY8BTQRAIAQgCjYCECADQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIA4gDkUgGBsLBH8gAyAFIAkoAgRBF3ZBBHEgCUEEayIOKAIAQRl2QQFxIAZBEnZBEHEgBkEWdkHAAHEgEkGqAXFycnJyIhJB0LkBai0AAEECdGoiDCgCACIKKAIAIgFrIQMgEkHQuwFqLQAAIRggESAVaiAUIA0CfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCESIAwgCkEMQQggASADSyIbG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgEkUgEiAbGwwBCyAKKAIEIRIgDCAKQQhBDCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgEiASRSAbGwsgGHMiARs2AgAgDiAOKAIAQYAQcjYCACAJIAkoAgRBgARyNgIEIAYgAUEZdHJBgAhyBSAGC0GAgIDAAHIhBgsCQCAGQYDAgIAEcQ0AIAZBgLwPcUUNACADIAUgBCgCbCAGQQl2IhJB7wNxai0AAEECdGoiDCgCACIKKAIAIgFrIQMCfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCEOIAwgCkEMQQggASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgDkUgDiAYGwwBCyAKKAIEIQ4gDCAKQQhBDCABIANLIhgbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgDiAORSAYGwsEfyADIAUgCSgCBEEadkEEcSAJQQRrIg4oAgBBHHZBAXEgBkEVdkEQcSAGQRl2QcAAcSASQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIMKAIAIgooAgAiAWshAyASQdC7AWotAAAhGCARIBNqIBQgDQJ/IAEgAkEQdk0EQCACIAFBEHRrIQIgA0GAgAJxBEAgCigCBAwCCyAKKAIEIRIgDCAKQQxBCCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhASAILQAAQf8BRwRAIAQgCjYCEEEIIQggAUEIdCACaiECDAELIAFBjwFNBEAgBCAKNgIQIAFBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyASRSASIBsbDAELIAooAgQhEiAMIApBCEEMIAEgA0siGxtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEDIAgtAABB/wFHBEAgBCAKNgIQQQghCCADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAo2AhAgA0EJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyASIBJFIBsbCyAYcyIKGzYCACAOIA4oAgBBgIABcjYCACAJIAkoAgRBgCByNgIEIAQoAnxBAnQgCWoiASABKAIEQQRyNgIEIAEgASgCDEEBcjYCDCABIAEoAgggCkESdHJBAnI2AgggBiAKQRx0ckGAwAByBSAGC0GAgICABHIhBgsgCSAGNgIACyAJQQRqIQYgEUEEaiERIAtBAWoiCyAQRw0ACyAJQQxqIQYgESATaiERIAdBBGoiByAEKAKAASIBQXxxSQ0ACwwBC0EEIAFBfHEiBiAGQQRNG0EBayIGQXxxQQRqIQcgCSAGQQF0QXhxakEUaiEGCyAEIAg2AgggBCADNgIEIAQgAjYCACAEIAw2AmggEEUNASABIAdNDQEDQCABIAdGIVJBACEIIAchASBSRQRAA0AgBCAGIBEgCCAQbEECdGogDSAIIAQoAnxBAmpBARBZIAhBAWoiCCAEKAKAASIBIAdrSQ0ACwsgBkEEaiEGIBFBBGohESAXQQFqIhcgEEcNAAsMAQsCQCABQQRJDQAgEARAQQAgDWshFCAEQRxqIQUgEEEMbCETIBBBA3QhFQNAQQAhCwNAIAYiCSgCACIGBEACQCAGQZCAgAFxDQAgBkHvA3EiAUUNACADIAUgBCgCbCABai0AAEECdGoiDCgCACIKKAIAIgFrIQMCfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCEOIAwgCkEMQQggASADSyISG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgDkUgDiASGwwBCyAKKAIEIQ4gDCAKQQhBDCABIANLIhIbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgDiAORSASGwsEfyADIAUgCSgCBEERdkEEcSAJQQRrIg4oAgBBE3ZBAXEgBkEOdkEQcSAGQRB2QcAAcSAGQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIMKAIAIgooAgAiAWshAyASQdC7AWotAAAhGCARIBQgDQJ/IAEgAkEQdk0EQCACIAFBEHRrIQIgA0GAgAJxBEAgCigCBAwCCyAKKAIEIRIgDCAKQQxBCCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhASAILQAAQf8BRwRAIAQgCjYCEEEIIQggAUEIdCACaiECDAELIAFBjwFNBEAgBCAKNgIQIAFBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyASRSASIBsbDAELIAooAgQhEiAMIApBCEEMIAEgA0siGxtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEDIAgtAABB/wFHBEAgBCAKNgIQQQghCCADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAo2AhAgA0EJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyASIBJFIBsbCyAYcyIKGzYCACAOIA4oAgBBIHI2AgAgCSAJKAIEQQhyNgIEIAlBfiAEKAJ8a0ECdGoiASABKAIEQYCAAnI2AgQgASABKAIAIApBH3RyQYCABHI2AgAgAUEEayIBIAEoAgBBgIAIcjYCACAGIApBE3RyQRByBSAGC0GAgIABciEGCwJAIAZBgIGACHENACAGQfgecUUNACADIAUgBCgCbCAGQQN2IhJB7wNxai0AAEECdGoiDCgCACIKKAIAIgFrIQMCfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCEOIAwgCkEMQQggASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgDkUgDiAYGwwBCyAKKAIEIQ4gDCAKQQhBDCABIANLIhgbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgDiAORSAYGwsEfyADIAUgCSgCBEEUdkEEcSAJQQRrIg4oAgBBFnZBAXEgBkEPdkEQcSAGQRN2QcAAcSASQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIMKAIAIgooAgAiAWshAyASQdC7AWotAAAhGCARIBBBAnRqIBQgDQJ/IAEgAkEQdk0EQCACIAFBEHRrIQIgA0GAgAJxBEAgCigCBAwCCyAKKAIEIRIgDCAKQQxBCCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhASAILQAAQf8BRwRAIAQgCjYCEEEIIQggAUEIdCACaiECDAELIAFBjwFNBEAgBCAKNgIQIAFBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyASRSASIBsbDAELIAooAgQhEiAMIApBCEEMIAEgA0siGxtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEDIAgtAABB/wFHBEAgBCAKNgIQQQghCCADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAo2AhAgA0EJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyASIBJFIBsbCyAYcyIBGzYCACAOIA4oAgBBgAJyNgIAIAkgCSgCBEHAAHI2AgQgBiABQRZ0ckGAAXIFIAYLQYCAgAhyIQYLAkAgBkGAiIDAAHENACAGQcD3AXFFDQAgAyAFIAQoAmwgBkEGdiISQe8DcWotAABBAnRqIgwoAgAiCigCACIBayEDAn8gASACQRB2TQRAIAIgAUEQdGshAiADQYCAAnEEQCAKKAIEDAILIAooAgQhDiAMIApBDEEIIAEgA0siGBtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEBIAgtAABB/wFHBEAgBCAKNgIQQQghCCABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAo2AhAgAUEJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIA5FIA4gGBsMAQsgCigCBCEOIAwgCkEIQQwgASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQMgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIANBCHQgAmohAgwBCyADQY8BTQRAIAQgCjYCECADQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIA4gDkUgGBsLBH8gAyAFIAkoAgRBF3ZBBHEgCUEEayIOKAIAQRl2QQFxIAZBEnZBEHEgBkEWdkHAAHEgEkGqAXFycnJyIhJB0LkBai0AAEECdGoiDCgCACIKKAIAIgFrIQMgEkHQuwFqLQAAIRggESAVaiAUIA0CfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCESIAwgCkEMQQggASADSyIbG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgEkUgEiAbGwwBCyAKKAIEIRIgDCAKQQhBDCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgEiASRSAbGwsgGHMiARs2AgAgDiAOKAIAQYAQcjYCACAJIAkoAgRBgARyNgIEIAYgAUEZdHJBgAhyBSAGC0GAgIDAAHIhBgsCQCAGQYDAgIAEcQ0AIAZBgLwPcUUNACADIAUgBCgCbCAGQQl2IhJB7wNxai0AAEECdGoiDCgCACIKKAIAIgFrIQMCfyABIAJBEHZNBEAgAiABQRB0ayECIANBgIACcQRAIAooAgQMAgsgCigCBCEOIAwgCkEMQQggASADSyIYG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCiAILQABIQEgCC0AAEH/AUcEQCAEIAo2AhBBCCEIIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEIDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgLIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgDkUgDiAYGwwBCyAKKAIEIQ4gDCAKQQhBDCABIANLIhgbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhAyAILQAAQf8BRwRAIAQgCjYCEEEIIQggA0EIdCACaiECDAELIANBjwFNBEAgBCAKNgIQIANBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgDiAORSAYGwsEfyADIAUgCSgCBEEadkEEcSAJQQRrIg4oAgBBHHZBAXEgBkEVdkEQcSAGQRl2QcAAcSASQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIMKAIAIgooAgAiAWshAyASQdC7AWotAAAhGCARIBNqIBQgDQJ/IAEgAkEQdk0EQCACIAFBEHRrIQIgA0GAgAJxBEAgCigCBAwCCyAKKAIEIRIgDCAKQQxBCCABIANLIhsbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiEKIAgtAAEhASAILQAAQf8BRwRAIAQgCjYCEEEIIQggAUEIdCACaiECDAELIAFBjwFNBEAgBCAKNgIQIAFBCXQgAmohAkEHIQgMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyASRSASIBsbDAELIAooAgQhEiAMIApBCEEMIAEgA0siGxtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQogCC0AASEDIAgtAABB/wFHBEAgBCAKNgIQQQghCCADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAo2AhAgA0EJdCACaiECQQchCAwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEICyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyASIBJFIBsbCyAYcyIKGzYCACAOIA4oAgBBgIABcjYCACAJIAkoAgRBgCByNgIEIAQoAnxBAnQgCWoiASABKAIEQQRyNgIEIAEgASgCDEEBcjYCDCABIAEoAgggCkESdHJBAnI2AgggBiAKQRx0ckGAwAByBSAGC0GAgICABHIhBgsgCSAGNgIACyAJQQRqIQYgEUEEaiERIAtBAWoiCyAQRw0ACyAJQQxqIQYgESATaiERIAdBBGoiByAEKAKAASIBQXxxSQ0ACwwBC0EEIAFBfHEiBiAGQQRNG0EBayIGQXxxQQRqIQcgCSAGQQF0QXhxakEUaiEGCyAEIAg2AgggBCADNgIEIAQgAjYCACAEIAw2AmggEEUNACABIAdNDQADQCABIAdGIVNBACEIIAchASBTRQRAA0AgBCAGIBEgCCAQbEECdGogDSAIIAQoAnxBAmpBABBZIAhBAWoiCCAEKAKAASIBIAdrSQ0ACwsgBkEEaiEGIBFBBGohESAXQQFqIhcgEEcNAAsLDAILA0BBACEXA0AgASEJIAYiBygCACIGBEACQCAGQZCAgAFxDQAgBkHvA3EiAUUNACADIBAgBCgCbCABai0AAEECdGoiDCgCACILKAIAIgFrIQMCfyABIAJBEHZLBEAgCygCBCEKIAwgC0EIQQwgASADSyIUG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQMgCC0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIANBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCADQQh0IAJqIQILIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIAogCkUgFBsMAQsgAiABQRB0ayECIANBgIACcUUEQCALKAIEIQogDCALQQxBCCABIANLIhQbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhASAILQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgAUEJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIAFBCHQgAmohAgsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyAKRSAKIBQbDAELIAsoAgQLBH8gAyAQIAcoAgRBEXZBBHEgB0EEayIKKAIAQRN2QQFxIAZBDnZBEHEgBkEQdkHAAHEgBkGqAXFycnJyIhRB0LkBai0AAEECdGoiDCgCACILKAIAIgFrIQMgFEHQuwFqLQAAIRMgCSAFIBECfyABIAJBEHZLBEAgCygCBCEUIAwgC0EIQQwgASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQMgCC0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIANBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCADQQh0IAJqIQILIAhBAWshCCACQQF0IQIgAUEBdCIBQYCAAkkNAAsgASEDIBQgFEUgDhsMAQsgAiABQRB0ayECIANBgIACcUUEQCALKAIEIRQgDCALQQxBCCABIANLIg4baigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhASAILQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgAUEJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIAFBCHQgAmohAgsgCEEBayEIIAJBAXQhAiADQQF0IgNBgIACSQ0ACyAURSAUIA4bDAELIAsoAgQLIBNzIgEbNgIAIAogCigCAEEgcjYCACAHIAcoAgRBCHI2AgQgBiABQRN0ckEQcgUgBgtBgICAAXIhBgsCQCAGQYCBgAhxDQAgBkH4HnFFDQAgAyAQIAQoAmwgBkEDdiIUQe8DcWotAABBAnRqIgwoAgAiCygCACIBayEDAn8gASACQRB2SwRAIAsoAgQhCiAMIAtBCEEMIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAKIApFIBMbDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEKIAwgC0EMQQggASADSyITG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgCkUgCiATGwwBCyALKAIECwR/IAMgECAHKAIEQRR2QQRxIAdBBGsiCigCAEEWdkEBcSAGQQ92QRBxIAZBE3ZBwABxIBRBqgFxcnJyciIUQdC5AWotAABBAnRqIgwoAgAiCygCACIBayEDIBRB0LsBai0AACETIAkgBSARAn8gASACQRB2SwRAIAsoAgQhFCAMIAtBCEEMIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAUIBRFIA4bDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEUIAwgC0EMQQggASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgFEUgFCAOGwwBCyALKAIECyATcyIBGzYCgAIgCiAKKAIAQYACcjYCACAHIAcoAgRBwAByNgIEIAYgAUEWdHJBgAFyBSAGC0GAgIAIciEGCwJAIAZBgIiAwABxDQAgBkHA9wFxRQ0AIAMgECAEKAJsIAZBBnYiFEHvA3FqLQAAQQJ0aiIMKAIAIgsoAgAiAWshAwJ/IAEgAkEQdksEQCALKAIEIQogDCALQQhBDCABIANLIhMbaigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhAyAILQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgA0EJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIANBCHQgAmohAgsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgCiAKRSATGwwBCyACIAFBEHRrIQIgA0GAgAJxRQRAIAsoAgQhCiAMIAtBDEEIIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEBIAgtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECABQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggAUEIdCACaiECCyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIApFIAogExsMAQsgCygCBAsEfyADIBAgBygCBEEXdkEEcSAHQQRrIgooAgBBGXZBAXEgBkESdkEQcSAGQRZ2QcAAcSAUQaoBcXJycnIiFEHQuQFqLQAAQQJ0aiIMKAIAIgsoAgAiAWshAyAUQdC7AWotAAAhEyAJIAUgEQJ/IAEgAkEQdksEQCALKAIEIRQgDCALQQhBDCABIANLIg4baigCADYCAANAAkAgCA0AIAQoAhAiCEEBaiELIAgtAAEhAyAILQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghCAwCCyAEIAs2AhAgA0EJdCACaiECQQchCAwBCyAEIAs2AhBBCCEIIANBCHQgAmohAgsgCEEBayEIIAJBAXQhAiABQQF0IgFBgIACSQ0ACyABIQMgFCAURSAOGwwBCyACIAFBEHRrIQIgA0GAgAJxRQRAIAsoAgQhFCAMIAtBDEEIIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEBIAgtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECABQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggAUEIdCACaiECCyAIQQFrIQggAkEBdCECIANBAXQiA0GAgAJJDQALIBRFIBQgDhsMAQsgCygCBAsgE3MiARs2AoAEIAogCigCAEGAEHI2AgAgByAHKAIEQYAEcjYCBCAGIAFBGXRyQYAIcgUgBgtBgICAwAByIQYLAkAgBkGAwICABHENACAGQYC8D3FFDQAgAyAQIAQoAmwgBkEJdiIUQe8DcWotAABBAnRqIgwoAgAiCygCACIBayEDAn8gASACQRB2SwRAIAsoAgQhCiAMIAtBCEEMIAEgA0siExtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAKIApFIBMbDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEKIAwgC0EMQQggASADSyITG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgCkUgCiATGwwBCyALKAIECwR/IAMgECAHKAIEQRp2QQRxIAdBBGsiCigCAEEcdkEBcSAGQRV2QRBxIAZBGXZBwABxIBRBqgFxcnJyciIUQdC5AWotAABBAnRqIgwoAgAiCygCACIBayEDIBRB0LsBai0AACETIAkgBSARAn8gASACQRB2SwRAIAsoAgQhFCAMIAtBCEEMIAEgA0siDhtqKAIANgIAA0ACQCAIDQAgBCgCECIIQQFqIQsgCC0AASEDIAgtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEIDAILIAQgCzYCECADQQl0IAJqIQJBByEIDAELIAQgCzYCEEEIIQggA0EIdCACaiECCyAIQQFrIQggAkEBdCECIAFBAXQiAUGAgAJJDQALIAEhAyAUIBRFIA4bDAELIAIgAUEQdGshAiADQYCAAnFFBEAgCygCBCEUIAwgC0EMQQggASADSyIOG2ooAgA2AgADQAJAIAgNACAEKAIQIghBAWohCyAILQABIQEgCC0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQgMAgsgBCALNgIQIAFBCXQgAmohAkEHIQgMAQsgBCALNgIQQQghCCABQQh0IAJqIQILIAhBAWshCCACQQF0IQIgA0EBdCIDQYCAAkkNAAsgFEUgFCAOGwwBCyALKAIECyATcyIBGzYCgAYgCiAKKAIAQYCAAXI2AgAgByAHKAIEQYAgcjYCBCAHIAcoAoQCQQRyNgKEAiAHIAcoAowCQQFyNgKMAiAHIAcoAogCIAFBEnRyQQJyNgKIAiAGIAFBHHRyQYDAAHIFIAYLQYCAgIAEciEGCyAHIAY2AgALIAdBBGohBiAJQQRqIQEgF0EBaiIXQcAARw0ACyAHQQxqIQYgCUGEBmohASANQTxJIVQgDUEEaiENIFQNAAsLIAQgCDYCCCAEIAM2AgQgBCACNgIAIAQgDDYCaAsMAgsgIgRAQQEgGXRBAXYhCSAEKAJ8IhFBAnQiDCAEKAJ4akEMaiEBIAQoAnQhBkEAIQ0gBCgCgAEiA0EETwRAIBFFDQQgEUEDbCEFIBFBAXQhC0EAIAlrIQIDQCALQQJ0IQpBACEDA0ACQCABIgcoAgAiAUUNACABQZCAgAFxQRBGBEAgBCgCACEBAkAgBCgCCCIQDQAgAUH/AUYhECAEKAIQIggtAAAhAQJAIBBFBEAgBCABNgIAIAQgCEEBajYCEAwBCyABQY8BTQRAIAQgATYCACAEIAhBAWo2AhBBByEQDAILQf8BIQEgBEH/ATYCAAtBCCEQCyAEIBBBAWsiCDYCCCAGIAIgCSABIAh2QQFxIAYoAgAiAUEfdkYbIAFqNgIAIAcgBygCAEGAgMAAciIBNgIACyABQYCBgAhxQYABRgRAIAQoAgAhAQJAIAQoAggiEA0AIAFB/wFGIRAgBCgCECIILQAAIQECQCAQRQRAIAQgATYCACAEIAhBAWo2AhAMAQsgAUGPAU0EQCAEIAE2AgAgBCAIQQFqNgIQQQchEAwCC0H/ASEBIARB/wE2AgALQQghEAsgBCAQQQFrIgg2AgggBiAMaiIQIAIgCSABIAh2QQFxIBAoAgAiAUEfdkYbIAFqNgIAIAcgBygCAEGAgIAEciIBNgIACyABQYCIgMAAcUGACEYEQCAEKAIAIQECQCAEKAIIIhANACABQf8BRiEQIAQoAhAiCC0AACEBAkAgEEUEQCAEIAE2AgAgBCAIQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgCEEBajYCEEEHIRAMAgtB/wEhASAEQf8BNgIAC0EIIRALIAQgEEEBayIINgIIIAYgCmoiECACIAkgASAIdkEBcSAQKAIAIgFBH3ZGGyABajYCACAHIAcoAgBBgICAIHIiATYCAAsgAUGAwICABHFBgMAARw0AIAYgBUECdGohECAEKAIAIQECQCAEKAIIIggNACABQf8BRiEUIAQoAhAiCC0AACEBAkAgFEUEQCAEIAE2AgAgBCAIQQFqNgIQDAELIAFBjwFNBEAgBCABNgIAIAQgCEEBajYCEEEHIQgMAgtB/wEhASAEQf8BNgIAC0EIIQgLIAQgCEEBayIINgIIIBAgAiAJIAEgCHZBAXEgECgCACIBQR92RhsgAWo2AgAgByAHKAIAQYCAgIACcjYCAAsgBkEEaiEGIAdBBGohASADQQFqIgMgEUcNAAsgB0EMaiEBIAYgBUECdGohBiANQQRqIg0gBCgCgAEiA0F8cUkNAAsLIAMgDU0NAiARRQ0CQQAhE0EAIAlrIQUgAyEHA0ACQCAHIA1GBEAgDSEHDAELIAEoAgAhEEEAIQIDQEGQgIABIAJBA2wiB3QgEHFBECAHdEYEQCAGIAIgEWxBAnRqIRAgBCgCACEDAkAgBCgCCCIIDQAgA0H/AUchDCAEKAIQIggtAAAhAwJAIAxFBEAgA0GQAU8EQEH/ASEDIARB/wE2AgAMAgsgBCADNgIAIAQgCEEBajYCEEEHIQgMAgsgBCADNgIAIAQgCEEBajYCEAtBCCEICyAEIAhBAWsiCDYCCCAQIAUgCSADIAh2QQFxIBAoAgAiA0EfdkYbIANqNgIAIAEgASgCAEGAgMAAIAd0ciIQNgIAIAQoAoABIQMLIAMhByACQQFqIgIgAyANa0kNAAsLIAZBBGohBiABQQRqIQEgE0EBaiITIBFHDQALDAILIAQoAnghCCAEKAJ0IQcgBCgCgAEhAwJAIAQoAnwiDEHAAEcNACADQcAARw0AIAhBjAJqIQNBACETQQBBASAZdEEBdiIFayEMIAQoAgghAiAEKAIEIQYgBCgCACEBIAQoAmghDQNAQQAhCANAIAchCSADIhAoAgAiBwRAIAMhVSAHQZCAgAFxQRBGBEAgBiAPQRBBD0EOIAdB7wNxGyAHQYCAwABxG0ECdGoiDSgCACIRKAIAIgNrIQYCfyADIAFBEHZLBEAgESgCBCELIA0gEUEIQQwgAyAGSyIKG2ooAgA2AgADQAJAIAINACAEKAIQIgJBAWohESACLQABIQYgAi0AAEH/AUYEQCAGQZABTwRAIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQIMAgsgBCARNgIQIAZBCXQgAWohAUEHIQIMAQsgBCARNgIQQQghAiAGQQh0IAFqIQELIAJBAWshAiABQQF0IQEgA0EBdCIDQYCAAkkNAAsgAyEGIAsgC0UgChsMAQsgASADQRB0ayEBIAZBgIACcUUEQCARKAIEIQsgDSARQQxBCCADIAZLIgobaigCADYCAANAAkAgAg0AIAQoAhAiAkEBaiERIAItAAEhAyACLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAFBgP4DaiEBQQghAgwCCyAEIBE2AhAgA0EJdCABaiEBQQchAgwBCyAEIBE2AhBBCCECIANBCHQgAWohAQsgAkEBayECIAFBAXQhASAGQQF0IgZBgIACSQ0ACyALRSALIAobDAELIBEoAgQLIQMgCSAMIAUgAyAJKAIAIhFBH3ZGGyARajYCACAHQYCAwAByIQcLIAdBgIGACHFBgAFGBEAgBiAPQRBBD0EOIAdB+B5xGyAHQYCAgARxG0ECdGoiDSgCACIRKAIAIgNrIQYCfyADIAFBEHZLBEAgESgCBCELIA0gEUEIQQwgAyAGSyIKG2ooAgA2AgADQAJAIAINACAEKAIQIgJBAWohESACLQABIQYgAi0AAEH/AUYEQCAGQZABTwRAIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQIMAgsgBCARNgIQIAZBCXQgAWohAUEHIQIMAQsgBCARNgIQQQghAiAGQQh0IAFqIQELIAJBAWshAiABQQF0IQEgA0EBdCIDQYCAAkkNAAsgAyEGIAsgC0UgChsMAQsgASADQRB0ayEBIAZBgIACcUUEQCARKAIEIQsgDSARQQxBCCADIAZLIgobaigCADYCAANAAkAgAg0AIAQoAhAiAkEBaiERIAItAAEhAyACLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAFBgP4DaiEBQQghAgwCCyAEIBE2AhAgA0EJdCABaiEBQQchAgwBCyAEIBE2AhBBCCECIANBCHQgAWohAQsgAkEBayECIAFBAXQhASAGQQF0IgZBgIACSQ0ACyALRSALIAobDAELIBEoAgQLIQMgCSAMIAUgAyAJKAKAAiIRQR92RhsgEWo2AoACIAdBgICABHIhBwsgB0GAiIDAAHFBgAhGBEAgBiAPQRBBD0EOIAdBwPcBcRsgB0GAgIAgcRtBAnRqIg0oAgAiESgCACIDayEGAn8gAyABQRB2SwRAIBEoAgQhCyANIBFBCEEMIAMgBksiChtqKAIANgIAA0ACQCACDQAgBCgCECICQQFqIREgAi0AASEGIAItAABB/wFGBEAgBkGQAU8EQCAEIAQoAgxBAWo2AgwgAUGA/gNqIQFBCCECDAILIAQgETYCECAGQQl0IAFqIQFBByECDAELIAQgETYCEEEIIQIgBkEIdCABaiEBCyACQQFrIQIgAUEBdCEBIANBAXQiA0GAgAJJDQALIAMhBiALIAtFIAobDAELIAEgA0EQdGshASAGQYCAAnFFBEAgESgCBCELIA0gEUEMQQggAyAGSyIKG2ooAgA2AgADQAJAIAINACAEKAIQIgJBAWohESACLQABIQMgAi0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQIMAgsgBCARNgIQIANBCXQgAWohAUEHIQIMAQsgBCARNgIQQQghAiADQQh0IAFqIQELIAJBAWshAiABQQF0IQEgBkEBdCIGQYCAAkkNAAsgC0UgCyAKGwwBCyARKAIECyEDIAkgDCAFIAMgCSgCgAQiEUEfdkYbIBFqNgKABCAHQYCAgCByIQcLIFUgB0GAwICABHFBgMAARgR/IAYgD0EQQQ9BDiAHQYC8D3EbIAdBgICAgAJxG0ECdGoiDSgCACIRKAIAIgNrIQYCfyADIAFBEHZLBEAgESgCBCELIA0gEUEIQQwgAyAGSyIKG2ooAgA2AgADQAJAIAINACAEKAIQIgJBAWohESACLQABIQYgAi0AAEH/AUYEQCAGQZABTwRAIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQIMAgsgBCARNgIQIAZBCXQgAWohAUEHIQIMAQsgBCARNgIQQQghAiAGQQh0IAFqIQELIAJBAWshAiABQQF0IQEgA0EBdCIDQYCAAkkNAAsgAyEGIAsgC0UgChsMAQsgASADQRB0ayEBIAZBgIACcUUEQCARKAIEIQsgDSARQQxBCCADIAZLIgobaigCADYCAANAAkAgAg0AIAQoAhAiAkEBaiERIAItAAEhAyACLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAFBgP4DaiEBQQghAgwCCyAEIBE2AhAgA0EJdCABaiEBQQchAgwBCyAEIBE2AhBBCCECIANBCHQgAWohAQsgAkEBayECIAFBAXQhASAGQQF0IgZBgIACSQ0ACyALRSALIAobDAELIBEoAgQLIQMgCSAMIAUgAyAJKAKABiIRQR92RhsgEWo2AoAGIAdBgICAgAJyBSAHCzYCAAsgEEEEaiEDIAlBBGohByAIQQFqIghBwABHDQALIBBBDGohAyAJQYQGaiEHIBNBPEkhViATQQRqIRMgVg0ACyAEIAI2AgggBCAGNgIEIAQgATYCACAEIA02AmgMAgtBASAZdEEBdiELIAggDEECdCIOakEMaiEJIAQoAgghAiAEKAIEIQYgBCgCACEBIAQoAmghDUEAIRECQCADQQRJDQAgDARAIAxBA2whFCAMQQF0IRdBACALayEKA0AgF0ECdCESQQAhCANAIAkiBSgCACIQBEAgEEGQgIABcUEQRgRAIAYgD0EQQQ9BDiAQQe8DcRsgEEGAgMAAcRtBAnRqIg0oAgAiCSgCACIDayEGAn8gAyABQRB2TQRAIAEgA0EQdGshASAGQYCAAnEEQCAJKAIEDAILIAkoAgQhEyANIAlBDEEIIAMgBksiFRtqKAIANgIAA0ACQCACDQAgBCgCECIJQQFqIQIgCS0AASEDIAktAABB/wFHBEAgBCACNgIQQQghAiADQQh0IAFqIQEMAQsgA0GPAU0EQCAEIAI2AhAgA0EJdCABaiEBQQchAgwBCyAEIAQoAgxBAWo2AgwgAUGA/gNqIQFBCCECCyACQQFrIQIgAUEBdCEBIAZBAXQiBkGAgAJJDQALIBNFIBMgFRsMAQsgCSgCBCETIA0gCUEIQQwgAyAGSyIVG2ooAgA2AgADQAJAIAINACAEKAIQIglBAWohAiAJLQABIQYgCS0AAEH/AUcEQCAEIAI2AhBBCCECIAZBCHQgAWohAQwBCyAGQY8BTQRAIAQgAjYCECAGQQl0IAFqIQFBByECDAELIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQILIAJBAWshAiABQQF0IQEgA0EBdCIDQYCAAkkNAAsgAyEGIBMgE0UgFRsLIQMgByAKIAsgAyAHKAIAIglBH3ZGGyAJajYCACAQQYCAwAByIRALIBBBgIGACHFBgAFGBEAgBiAPQRBBD0EOIBBB+B5xGyAQQYCAgARxG0ECdGoiDSgCACIJKAIAIgNrIQYCfyADIAFBEHZNBEAgASADQRB0ayEBIAZBgIACcQRAIAkoAgQMAgsgCSgCBCETIA0gCUEMQQggAyAGSyIVG2ooAgA2AgADQAJAIAINACAEKAIQIglBAWohAiAJLQABIQMgCS0AAEH/AUcEQCAEIAI2AhBBCCECIANBCHQgAWohAQwBCyADQY8BTQRAIAQgAjYCECADQQl0IAFqIQFBByECDAELIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQILIAJBAWshAiABQQF0IQEgBkEBdCIGQYCAAkkNAAsgE0UgEyAVGwwBCyAJKAIEIRMgDSAJQQhBDCADIAZLIhUbaigCADYCAANAAkAgAg0AIAQoAhAiCUEBaiECIAktAAEhBiAJLQAAQf8BRwRAIAQgAjYCEEEIIQIgBkEIdCABaiEBDAELIAZBjwFNBEAgBCACNgIQIAZBCXQgAWohAUEHIQIMAQsgBCAEKAIMQQFqNgIMIAFBgP4DaiEBQQghAgsgAkEBayECIAFBAXQhASADQQF0IgNBgIACSQ0ACyADIQYgEyATRSAVGwshAyAHIA5qIgkgCiALIAMgCSgCACIJQR92RhsgCWo2AgAgEEGAgIAEciEQCyAQQYCIgMAAcUGACEYEQCAGIA9BEEEPQQ4gEEHA9wFxGyAQQYCAgCBxG0ECdGoiDSgCACIJKAIAIgNrIQYCfyADIAFBEHZNBEAgASADQRB0ayEBIAZBgIACcQRAIAkoAgQMAgsgCSgCBCETIA0gCUEMQQggAyAGSyIVG2ooAgA2AgADQAJAIAINACAEKAIQIglBAWohAiAJLQABIQMgCS0AAEH/AUcEQCAEIAI2AhBBCCECIANBCHQgAWohAQwBCyADQY8BTQRAIAQgAjYCECADQQl0IAFqIQFBByECDAELIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQILIAJBAWshAiABQQF0IQEgBkEBdCIGQYCAAkkNAAsgE0UgEyAVGwwBCyAJKAIEIRMgDSAJQQhBDCADIAZLIhUbaigCADYCAANAAkAgAg0AIAQoAhAiCUEBaiECIAktAAEhBiAJLQAAQf8BRwRAIAQgAjYCEEEIIQIgBkEIdCABaiEBDAELIAZBjwFNBEAgBCACNgIQIAZBCXQgAWohAUEHIQIMAQsgBCAEKAIMQQFqNgIMIAFBgP4DaiEBQQghAgsgAkEBayECIAFBAXQhASADQQF0IgNBgIACSQ0ACyADIQYgEyATRSAVGwshAyAHIBJqIgkgCiALIAMgCSgCACIJQR92RhsgCWo2AgAgEEGAgIAgciEQCyAFIBBBgMCAgARxQYDAAEYEfyAGIA9BEEEPQQ4gEEGAvA9xGyAQQYCAgIACcRtBAnRqIg0oAgAiCSgCACIDayEGAn8gAyABQRB2TQRAIAEgA0EQdGshASAGQYCAAnEEQCAJKAIEDAILIAkoAgQhEyANIAlBDEEIIAMgBksiFRtqKAIANgIAA0ACQCACDQAgBCgCECIJQQFqIQIgCS0AASEDIAktAABB/wFHBEAgBCACNgIQQQghAiADQQh0IAFqIQEMAQsgA0GPAU0EQCAEIAI2AhAgA0EJdCABaiEBQQchAgwBCyAEIAQoAgxBAWo2AgwgAUGA/gNqIQFBCCECCyACQQFrIQIgAUEBdCEBIAZBAXQiBkGAgAJJDQALIBNFIBMgFRsMAQsgCSgCBCETIA0gCUEIQQwgAyAGSyIVG2ooAgA2AgADQAJAIAINACAEKAIQIglBAWohAiAJLQABIQYgCS0AAEH/AUcEQCAEIAI2AhBBCCECIAZBCHQgAWohAQwBCyAGQY8BTQRAIAQgAjYCECAGQQl0IAFqIQFBByECDAELIAQgBCgCDEEBajYCDCABQYD+A2ohAUEIIQILIAJBAWshAiABQQF0IQEgA0EBdCIDQYCAAkkNAAsgAyEGIBMgE0UgFRsLIQMgByAUQQJ0aiIJIAogCyADIAkoAgAiCUEfdkYbIAlqNgIAIBBBgICAgAJyBSAQCzYCAAsgBUEEaiEJIAdBBGohByAIQQFqIgggDEcNAAsgBUEMaiEJIAcgFEECdGohByARQQRqIhEgBCgCgAEiA0F8cUkNAAsMAQtBBCADQXxxIgkgCUEETRtBAWsiCUF8cUEEaiERIAggCUEBdEF4cWpBFGohCQsgBCACNgIIIAQgBjYCBCAEIAE2AgAgBCANNgJoIAxFDQEgAyARTQ0BQQAhE0EAIAtrIRQgAyEBA0ACQCABIBFGBEAgESEBDAELIAkoAgAhAkEAIRADQEGQgIABIBBBA2wiCHQgAnFBECAIdEYEQCAHIAwgEGxBAnRqIQUgBCAPQRBBD0EOIAIgCHYiAUHvA3EbIAFBgIDAAHEbQQJ0aiINNgJoIAQgBCgCBCANKAIAIgIoAgAiAWsiAzYCBAJ/IAEgBCgCACIGQRB2SwRAIAIoAgQhCiAEIAE2AgQgDSACQQhBDCABIANLIg4baigCADYCACAEKAIIIQIDQAJAIAINACAEKAIQIgJBAWohDSACLQABIQMgAi0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAGQYD+A2ohBkEIIQIMAgsgBCANNgIQIANBCXQgBmohBkEHIQIMAQsgBCANNgIQQQghAiADQQh0IAZqIQYLIAQgAkEBayICNgIIIAQgBkEBdCIGNgIAIAQgAUEBdCIBNgIEIAFBgIACSQ0ACyAKIApFIA4bDAELIAQgBiABQRB0ayIGNgIAIANBgIACcUUEQCACKAIEIQogDSACQQxBCCABIANLIg4baigCADYCACAEKAIIIQIDQAJAIAINACAEKAIQIgJBAWohDSACLQABIQEgAi0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCAGQYD+A2ohBkEIIQIMAgsgBCANNgIQIAFBCXQgBmohBkEHIQIMAQsgBCANNgIQQQghAiABQQh0IAZqIQYLIAQgAkEBayICNgIIIAQgBkEBdCIGNgIAIAQgA0EBdCIDNgIEIANBgIACSQ0ACyAKRSAKIA4bDAELIAIoAgQLIQEgBSAUIAsgASAFKAIAIgNBH3ZGGyADajYCACAJIAkoAgBBgIDAACAIdHIiAjYCACAEKAKAASEDCyAQQQFqIhAgAyIBIBFrSQ0ACwsgCUEEaiEJIAdBBGohByATQQFqIhMgDEcNAAsMAQtBACERQQAhFwJAAkACQAJAIAQoAnwiFEHAAEcNACAEKAKAAUHAAEcNAEEAQQEgGXQiAUEBdiABciIUayETIARB5ABqIQggBEHgAGohECAEQRxqIQsgBCgCeEGMAmohBiAEKAIIIQUgBCgCBCEBIAQoAgAhAiAEKAJoIQkgBCgCdCEDIBZBCHENAQNAQQAhDANAIAMhEQJAAkACfwJAAkAgBiINKAIAIgZFBEAgASAQKAIAIgMoAgAiBmshAQJ/IAYgAkEQdksEQCADKAIEIQcgECADQQhBDCABIAZJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiA0EBaiEJIAMtAAEhASADLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgAUEJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgByAHRSAKGwwBCyACIAZBEHRrIQIgAUGAgAJxRQRAIAMoAgQhByAQIANBDEEIIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgCTYCECADQQl0IAJqIQJBByEFDAELIAQgCTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgChsMAQsgAygCBAtFBEAgECEJDAYLIAEgCCgCACIDKAIAIgZrIQECfyAGIAJBEHZLBEAgAygCBCEHIAggA0EIQQwgASAGSSIKG2ooAgAiAzYCAANAAkAgBQ0AIAQoAhAiCUEBaiEFIAktAAEhASAJLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgByAHRSAKGwwBCyACIAZBEHRrIQIgAUGAgAJxRQRAIAMoAgQhByAIIANBDEEIIAEgBkkiChtqKAIAIgM2AgADQAJAIAUNACAEKAIQIglBAWohBSAJLQABIQYgCS0AAEH/AUYEQCAGQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSAGQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgB0UgByAKGwwBCyADKAIECyEKIAEgAygCACIGayEBAn8gBiACQRB2SwRAIAMoAgQhByAIIANBCEEMIAEgBkkiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIDQQFqIQkgAy0AASEBIAMtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgCTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAHIAdFIA4bDAELIAIgBkEQdGshAiABQYCAAnFFBEAgAygCBCEHIAggA0EMQQggASAGSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQMgBi0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAJNgIQIANBCXQgAmohAkEHIQUMAQsgBCAJNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgB0UgByAOGwwBCyADKAIECyEDQQAhBiAIIQkCQAJAAkACfwJAAkAgAyAKQQF0cg4EAAEDBQoLIAEgCyANKAIEQRF2QQRxIA1BBGsiBygCAEETdkEBcXIiDkHQuQFqLQAAQQJ0aiIJKAIAIgMoAgAiBmshAQJ/IAYgAkEQdksEQCADKAIEIQogCSADQQhBDCABIAZJIhIbaigCADYCAANAAkAgBQ0AIAQoAhAiA0EBaiEJIAMtAAEhASADLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgAUEJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgCiAKRSASGwwBCyACIAZBEHRrIQIgAUGAgAJxRQRAIAMoAgQhCiAJIANBDEEIIAEgBkkiEhtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgCTYCECADQQl0IAJqIQJBByEFDAELIAQgCTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogEhsMAQsgAygCBAshAyARIBMgFCADIA5B0LsBai0AAHMiAxs2AgAgByAHKAIAQSByNgIAIA0gDSgCBEEIcjYCBCANQYwCayIGIAYoAgBBgIAIcjYCACANQYQCayIGIAYoAgBBgIACcjYCACANQYgCayIGIAYoAgAgA0EfdHJBgIAEcjYCACADQRN0IVcgASALIAQoAmwtAAJBAnRqIgcoAgAiAygCACIGayEBAn8gBiACQRB2SwRAIAMoAgQhCSAHIANBCEEMIAEgBkkiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIDQQFqIQcgAy0AASEBIAMtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBzYCECABQQl0IAJqIQJBByEFDAELIAQgBzYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAJIAlFIA4bDAELIAIgBkEQdGshAiABQYCAAnFFBEAgAygCBCEJIAcgA0EMQQggASAGSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohByAGLQABIQMgBi0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAHNgIQIANBCXQgAmohAkEHIQUMAQsgBCAHNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCUUgCSAOGwwBCyADKAIECyEDIFdBEHIiBiADRQ0BGgsgASALIA0oAgRBFHZBBHEgDUEEayIJKAIAQRZ2QQFxIAZBD3ZBEHEgBkETdkHAAHEgBkEDdkGqAXFycnJyIhJB0LkBai0AAEECdGoiCigCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEOIAogB0EIQQwgASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIA4gDkUgChsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQ4gCiAHQQxBCCABIANJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAORSAOIAobDAELIAcoAgQLIQMgESATIBQgAyASQdC7AWotAABzIgMbNgKAAiAJIAkoAgBBgAJyNgIAIA0gDSgCBEHAAHI2AgQgBiADQRZ0ckGAAXILIQYgASALIAQoAmwgBkEGdkHvA3FqLQAAQQJ0aiIJKAIAIgcoAgAiA2shAQJ/IAMgAkEQdksEQCAHKAIEIQogCSAHQQhBDCABIANJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEJIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgAUEJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgCiAKRSAOGwwBCyACIANBEHRrIQIgAUGAgAJxRQRAIAcoAgQhCiAJIAdBDEEIIAEgA0kiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQkgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgCTYCECADQQl0IAJqIQJBByEFDAELIAQgCTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogDhsMAQsgBygCBAtFDQELIAEgCyANKAIEQRd2QQRxIA1BBGsiCSgCAEEZdkEBcSAGQRJ2QRBxIAZBFnZBwABxIAZBBnZBqgFxcnJyciISQdC5AWotAABBAnRqIgooAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhDiAKIAdBCEEMIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAOIA5FIAobDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEOIAogB0EMQQggASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDkUgDiAKGwwBCyAHKAIECyEDIBEgEyAUIAMgEkHQuwFqLQAAcyIDGzYCgAQgCSAJKAIAQYAQcjYCACANIA0oAgRBgARyNgIEIAYgA0EZdHJBgAhyIQYLIAEgCyAEKAJsIAZBCXZB7wNxai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEKIAkgB0EIQQwgASADSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAogCkUgDhsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQogCSAHQQxBCCABIANJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIA4bDAELIAcoAgQLRQ0FCyABIAsgDSgCBEEadkEEcSANQQRrIg4oAgBBHHZBAXEgBkEVdkEQcSAGQRl2QcAAcSAGQQl2QaoBcXJycnIiCkHQuQFqLQAAQQJ0aiIJKAIAIgcoAgAiA2shASADIAJBEHZLBEAgBygCBCESIAkgB0EIQQwgASADSSIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIBIgEkUgFRsMBAsgAiADQRB0ayECIAFBgIACcQ0BIAcoAgQhEiAJIAdBDEEIIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIBJFIBIgFRsMAwsCQCAGQZCAgAFxDQAgASALIAQoAmwgBkHvA3FqLQAAQQJ0aiIJKAIAIgcoAgAiA2shAQJ/IAMgAkEQdksEQCAHKAIEIQogCSAHQQhBDCABIANJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgCiAKRSAOGwwBCyACIANBEHRrIQIgAUGAgAJxRQRAIAcoAgQhCiAJIAdBDEEIIAEgA0kiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogDhsMAQsgBygCBAtFDQAgASALIA0oAgRBEXZBBHEgDUEEayIKKAIAQRN2QQFxIAZBDnZBEHEgBkEQdkHAAHEgBkGqAXFycnJyIhJB0LkBai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEOIAkgB0EIQQwgASADSSIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIA4gDkUgFRsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQ4gCSAHQQxBCCABIANJIhUbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAORSAOIBUbDAELIAcoAgQLIQMgESATIBQgAyASQdC7AWotAABzIgMbNgIAIAogCigCAEEgcjYCACANIA0oAgRBCHI2AgQgDUGMAmsiByAHKAIAQYCACHI2AgAgDUGEAmsiByAHKAIAQYCAAnI2AgAgDUGIAmsiByAHKAIAIANBH3RyQYCABHI2AgAgBiADQRN0ckEQciEGCwJAIAZBgIGACHENACABIAsgBCgCbCAGQQN2Ig5B7wNxai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEKIAkgB0EIQQwgASADSSISG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAogCkUgEhsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQogCSAHQQxBCCABIANJIhIbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIBIbDAELIAcoAgQLRQ0AIAEgCyANKAIEQRR2QQRxIA1BBGsiCigCAEEWdkEBcSAGQQ92QRBxIAZBE3ZBwABxIA5BqgFxcnJyciISQdC5AWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhDiAJIAdBCEEMIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAOIA5FIBUbDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEOIAkgB0EMQQggASADSSIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDkUgDiAVGwwBCyAHKAIECyEDIBEgEyAUIAMgEkHQuwFqLQAAcyIDGzYCgAIgCiAKKAIAQYACcjYCACANIA0oAgRBwAByNgIEIAYgA0EWdHJBgAFyIQYLAkAgBkGAiIDAAHENACABIAsgBCgCbCAGQQZ2Ig5B7wNxai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEKIAkgB0EIQQwgASADSSISG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAogCkUgEhsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQogCSAHQQxBCCABIANJIhIbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIBIbDAELIAcoAgQLRQ0AIAEgCyANKAIEQRd2QQRxIA1BBGsiCigCAEEZdkEBcSAGQRJ2QRBxIAZBFnZBwABxIA5BqgFxcnJyciISQdC5AWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhDiAJIAdBCEEMIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAOIA5FIBUbDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEOIAkgB0EMQQggASADSSIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDkUgDiAVGwwBCyAHKAIECyEDIBEgEyAUIAMgEkHQuwFqLQAAcyIDGzYCgAQgCiAKKAIAQYAQcjYCACANIA0oAgRBgARyNgIEIAYgA0EZdHJBgAhyIQYLIAZBgMCAgARxDQMgASALIAQoAmwgBkEJdiISQe8DcWotAABBAnRqIgkoAgAiASgCACIDayEHAn8gAyACQRB2SwRAIAEoAgQhCiAJIAFBCEEMIAMgB0siDhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhByAKIApFIA4bDAELIAIgA0EQdGshAiAHQYCAAnFFBEAgASgCBCEKIAkgAUEMQQggAyAHSyIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgNBAWohBSADLQABIQEgAy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgB0EBdCIHQYCAAkkNAAsgCkUgCiAOGwwBCyABKAIEC0UEQCAHIQEMBAsgByALIA0oAgRBGnZBBHEgDUEEayIOKAIAQRx2QQFxIAZBFXZBEHEgBkEZdkHAAHEgEkGqAXFycnJyIgpB0LkBai0AAEECdGoiCSgCACIHKAIAIgFrIQMgASACQRB2SwRAIAcoAgQhEiAJIAdBCEEMIAEgA0siFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIBIgEkUgFRsMAwsgAiABQRB0ayECIANBgIACcUUNASADIQELIAcoAgQMAQsgBygCBCESIAkgB0EMQQggASADSyIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIBJFIBIgFRsLIQMgESATIBQgAyAKQdC7AWotAABzIgMbNgKABiAOIA4oAgBBgIABcjYCACANIA0oAgRBgCByNgIEIA0gDSgChAJBBHI2AoQCIA0gDSgCjAJBAXI2AowCIA0gDSgCiAIgA0ESdHJBAnI2AogCIAYgA0EcdHJBgMAAciEGCyANIAZB////tntxNgIACyANQQRqIQYgEUEEaiEDIAxBAWoiDEHAAEcNAAsgDUEMaiEGIBFBhAZqIQMgF0E8SSFYIBdBBGohFyBYDQALDAILQQEgGXQiAUEBdiABciEOIAQoAngiByAUQQJ0akEMaiEDIAQoAoABIQYgBCgCCCEFIAQoAgQhASAEKAIAIQIgBCgCaCEJIAQoAnQhCwJAAkAgFkEIcQRAIAZBBEkNAiAURQ0BIARB5ABqIRAgBEHgAGohDSAUQQNsIRsgFEEBdCEkQQAgDmshFSAEQRxqIRIDQEEAIRgDQAJAAkACfwJAIAMiCCgCACIDBEACQCADQZCAgAFxDQAgASASIAQoAmwgA0HvA3FqLQAAQQJ0aiIJKAIAIgcoAgAiBmshAQJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgAUGAgAJxBEAgBygCBAwCCyAHKAIEIQwgCSAHQQxBCCABIAZJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhBiAHLQAAQf8BRwRAIAQgBTYCEEEIIQUgBkEIdCACaiECDAELIAZBjwFNBEAgBCAFNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAMRSAMIAobDAELIAcoAgQhDCAJIAdBCEEMIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAMIAxFIAobC0UNACABIBIgCCgCBEERdkEEcSAIQQRrIgwoAgBBE3ZBAXEgA0EOdkEQcSADQRB2QcAAcSADQaoBcXJycnIiE0HQuQFqLQAAQQJ0aiIJKAIAIgcoAgAiBmshAQJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgAUGAgAJxBEAgBygCBAwCCyAHKAIEIQogCSAHQQxBCCABIAZJIhwbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhBiAHLQAAQf8BRwRAIAQgBTYCEEEIIQUgBkEIdCACaiECDAELIAZBjwFNBEAgBCAFNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIBwbDAELIAcoAgQhCiAJIAdBCEEMIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAKIApFIBwbCyEGIAsgFSAOIAYgE0HQuwFqLQAAcyIGGzYCACAMIAwoAgBBIHI2AgAgCCAIKAIEQQhyNgIEIAMgBkETdHJBEHIhAwsCQCADQYCBgAhxDQAgASASIAQoAmwgA0EDdiIKQe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgExsLRQ0AIAEgEiAIKAIEQRR2QQRxIAhBBGsiDCgCAEEWdkEBcSADQQ92QRBxIANBE3ZBwABxIApBqgFxcnJyciITQdC5AWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAJIAdBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogHBsMAQsgBygCBCEKIAkgB0EIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgHBsLIQYgCyAUQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAwgDCgCAEGAAnI2AgAgCCAIKAIEQcAAcjYCBCADIAZBFnRyQYABciEDCwJAIANBgIiAwABxDQAgASASIAQoAmwgA0EGdiIKQe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgExsLRQ0AIAEgEiAIKAIEQRd2QQRxIAhBBGsiDCgCAEEZdkEBcSADQRJ2QRBxIANBFnZBwABxIApBqgFxcnJyciITQdC5AWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAJIAdBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogHBsMAQsgBygCBCEKIAkgB0EIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgHBsLIQYgCyAkQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAwgDCgCAEGAEHI2AgAgCCAIKAIEQYAEcjYCBCADIAZBGXRyQYAIciEDCyADQYDAgIAEcQ0DIAEgEiAEKAJsIANBCXYiCkHvA3FqLQAAQQJ0aiIJKAIAIgEoAgAiBmshBwJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgB0GAgAJxBEAgASgCBAwCCyABKAIEIQwgCSABQQxBCCAGIAdLIhMbaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEFIAYtAAEhASAGLQAAQf8BRwRAIAQgBTYCEEEIIQUgAUEIdCACaiECDAELIAFBjwFNBEAgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiAHQQF0IgdBgIACSQ0ACyAMRSAMIBMbDAELIAEoAgQhDCAJIAFBCEEMIAYgB0siExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhByAMIAxFIBMbC0UEQCAHIQEMBAsgByASIAgoAgRBGnZBBHEgCEEEayIMKAIAQRx2QQFxIANBFXZBEHEgA0EZdkHAAHEgCkGqAXFycnJyIhNB0LkBai0AAEECdGoiCSgCACIKKAIAIgFrIQYgASACQRB2TQRAIAIgAUEQdGshAiAGQYCAAnEEQCAGIQEMAwsgCigCBCEHIAkgCkEMQQggASAGSyIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgVBAWohCiAFLQABIQEgBS0AAEH/AUcEQCAEIAo2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAdFIAcgHBsMAwsgCigCBCEHIAkgCkEIQQwgASAGSyIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgVBAWohCiAFLQABIQYgBS0AAEH/AUcEQCAEIAo2AhBBCCEFIAZBCHQgAmohAgwBCyAGQY8BTQRAIAQgCjYCECAGQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgByAHRSAcGwwCCyABIA0oAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByANIAZBDEEIIAEgA0kiDBtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgDBsMAQsgBigCBCEHIA0gBkEIQQwgASADSSIMG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAcgB0UgDBsLRQRAIA0hCQwECyABIBAoAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByAQIAZBDEEIIAEgA0kiDBtqKAIAIgY2AgADQAJAIAUNACAEKAIQIglBAWohBSAJLQABIQMgCS0AAEH/AUcEQCAEIAU2AhBBCCEFIANBCHQgAmohAgwBCyADQY8BTQRAIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgB0UgByAMGwwBCyAGKAIEIQcgECAGQQhBDCABIANJIgwbaigCACIGNgIAA0ACQCAFDQAgBCgCECIJQQFqIQUgCS0AASEBIAktAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAHIAdFIAwbCyEMIAEgBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByAQIAZBDEEIIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgChsMAQsgBigCBCEHIBAgBkEIQQwgASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAcgB0UgChsLIQZBACEDIBAhCQJAAkACQAJ/AkACQCAGIAxBAXRyDgQAAQMFCAsgASASIAgoAgRBEXZBBHEgCEEEayIHKAIAQRN2QQFxciIKQdC5AWotAABBAnRqIgkoAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhDCAJIAZBDEEIIAEgA0kiExtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBigCBCEMIAkgBkEIQQwgASADSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAwgDEUgExsLIQMgCyAVIA4gAyAKQdC7AWotAABzIgMbNgIAIAcgBygCAEEgcjYCACAIIAgoAgRBCHI2AgQgA0ETdCFZIAEgEiAEKAJsLQACQQJ0aiIHKAIAIgYoAgAiA2shAQJ/IAMgAkEQdk0EQCACIANBEHRrIQIgAUGAgAJxBEAgBigCBAwCCyAGKAIEIQkgByAGQQxBCCABIANJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEHIAYtAAEhAyAGLQAAQf8BRwRAIAQgBzYCEEEIIQUgA0EIdCACaiECDAELIANBjwFNBEAgBCAHNgIQIANBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAJRSAJIAobDAELIAYoAgQhCSAHIAZBCEEMIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQcgBi0AASEBIAYtAABB/wFHBEAgBCAHNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAc2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAJIAlFIAobCyEGIFlBEHIiAyAGRQ0BGgsgASASIAgoAgRBFHZBBHEgCEEEayIJKAIAQRZ2QQFxIANBD3ZBEHEgA0ETdkHAAHEgA0EDdkGqAXFycnJyIhNB0LkBai0AAEECdGoiDCgCACIHKAIAIgZrIQECfyAGIAJBEHZNBEAgAiAGQRB0ayECIAFBgIACcQRAIAcoAgQMAgsgBygCBCEKIAwgB0EMQQggASAGSSIMG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQYgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAZBCHQgAmohAgwBCyAGQY8BTQRAIAQgBTYCECAGQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCkUgCiAMGwwBCyAHKAIEIQogDCAHQQhBDCABIAZJIgwbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRwRAIAQgBTYCEEEIIQUgAUEIdCACaiECDAELIAFBjwFNBEAgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgCiAKRSAMGwshBiALIBRBAnRqIBUgDiAGIBNB0LsBai0AAHMiBhs2AgAgCSAJKAIAQYACcjYCACAIIAgoAgRBwAByNgIEIAMgBkEWdHJBgAFyCyEDIAEgEiAEKAJsIANBBnZB7wNxai0AAEECdGoiCSgCACIHKAIAIgZrIQECfyAGIAJBEHZNBEAgAiAGQRB0ayECIAFBgIACcQRAIAcoAgQMAgsgBygCBCEMIAkgB0EMQQggASAGSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohCSAHLQABIQYgBy0AAEH/AUcEQCAEIAk2AhBBCCEFIAZBCHQgAmohAgwBCyAGQY8BTQRAIAQgCTYCECAGQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDEUgDCAKGwwBCyAHKAIEIQwgCSAHQQhBDCABIAZJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEJIActAAEhASAHLQAAQf8BRwRAIAQgCTYCEEEIIQUgAUEIdCACaiECDAELIAFBjwFNBEAgBCAJNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgDCAMRSAKGwtFDQELIAEgEiAIKAIEQRd2QQRxIAhBBGsiCSgCAEEZdkEBcSADQRJ2QRBxIANBFnZBwABxIANBBnZBqgFxcnJyciITQdC5AWotAABBAnRqIgwoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAMIAdBDEEIIAEgBkkiDBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogDBsMAQsgBygCBCEKIAwgB0EIQQwgASAGSSIMG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgDBsLIQYgCyAkQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAkgCSgCAEGAEHI2AgAgCCAIKAIEQYAEcjYCBCADIAZBGXRyQYAIciEDCyABIBIgBCgCbCADQQl2Qe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgChsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgChsLRQ0DCyABIBIgCCgCBEEadkEEcSAIQQRrIgwoAgBBHHZBAXEgA0EVdkEQcSADQRl2QcAAcSADQQl2QaoBcXJycnIiE0HQuQFqLQAAQQJ0aiIJKAIAIgooAgAiBmshASAGIAJBEHZNBEAgAiAGQRB0ayECIAFBgIACcQ0BIAooAgQhByAJIApBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIFQQFqIQogBS0AASEGIAUtAABB/wFHBEAgBCAKNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAo2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgHBsMAgsgCigCBCEHIAkgCkEIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgVBAWohCiAFLQABIQEgBS0AAEH/AUcEQCAEIAo2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAcgB0UgHBsMAQsgCigCBAshBiALIBtBAnRqIBUgDiAGIBNB0LsBai0AAHMiBxs2AgAgDCAMKAIAQYCAAXI2AgAgCCAIKAIEQYAgcjYCBCAEKAJ8QQJ0IAhqIgYgBigCBEEEcjYCBCAGIAYoAgxBAXI2AgwgBiAGKAIIIAdBEnRyQQJyNgIIIAMgB0EcdHJBgMAAciEDCyAIIANB////tntxNgIACyAIQQRqIQMgC0EEaiELIBhBAWoiGCAURw0ACyAIQQxqIQMgCyAbQQJ0aiELIBFBBGoiESAEKAKAASIGQXxxSQ0ACwwCCwJAIAZBBEkNACAUBEAgBEHkAGohECAEQeAAaiENIBRBA2whGyAUQQF0ISRBACAOayEVIARBHGohEgNAQQAhGANAAkACQAJ/AkAgAyIIKAIAIgMEQAJAIANBkICAAXENACABIBIgBCgCbCADQe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgChsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgChsLRQ0AIAEgEiAIKAIEQRF2QQRxIAhBBGsiDCgCAEETdkEBcSADQQ52QRBxIANBEHZBwABxIANBqgFxcnJyciITQdC5AWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAJIAdBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogHBsMAQsgBygCBCEKIAkgB0EIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgHBsLIQYgCyAVIA4gBiATQdC7AWotAABzIgcbNgIAIAwgDCgCAEEgcjYCACAIIAgoAgRBCHI2AgQgCEF+IAQoAnxrQQJ0aiIGIAYoAgRBgIACcjYCBCAGIAYoAgAgB0EfdHJBgIAEcjYCACAGQQRrIgYgBigCAEGAgAhyNgIAIAMgB0ETdHJBEHIhAwsCQCADQYCBgAhxDQAgASASIAQoAmwgA0EDdiIKQe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgExsLRQ0AIAEgEiAIKAIEQRR2QQRxIAhBBGsiDCgCAEEWdkEBcSADQQ92QRBxIANBE3ZBwABxIApBqgFxcnJyciITQdC5AWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAJIAdBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogHBsMAQsgBygCBCEKIAkgB0EIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgHBsLIQYgCyAUQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAwgDCgCAEGAAnI2AgAgCCAIKAIEQcAAcjYCBCADIAZBFnRyQYABciEDCwJAIANBgIiAwABxDQAgASASIAQoAmwgA0EGdiIKQe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgExsLRQ0AIAEgEiAIKAIEQRd2QQRxIAhBBGsiDCgCAEEZdkEBcSADQRJ2QRBxIANBFnZBwABxIApBqgFxcnJyciITQdC5AWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAJIAdBDEEIIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogHBsMAQsgBygCBCEKIAkgB0EIQQwgASAGSSIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgHBsLIQYgCyAkQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAwgDCgCAEGAEHI2AgAgCCAIKAIEQYAEcjYCBCADIAZBGXRyQYAIciEDCyADQYDAgIAEcQ0DIAEgEiAEKAJsIANBCXYiCkHvA3FqLQAAQQJ0aiIJKAIAIgEoAgAiBmshBwJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgB0GAgAJxBEAgASgCBAwCCyABKAIEIQwgCSABQQxBCCAGIAdLIhMbaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEFIAYtAAEhASAGLQAAQf8BRwRAIAQgBTYCEEEIIQUgAUEIdCACaiECDAELIAFBjwFNBEAgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiAHQQF0IgdBgIACSQ0ACyAMRSAMIBMbDAELIAEoAgQhDCAJIAFBCEEMIAYgB0siExtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhByAMIAxFIBMbC0UEQCAHIQEMBAsgByASIAgoAgRBGnZBBHEgCEEEayIMKAIAQRx2QQFxIANBFXZBEHEgA0EZdkHAAHEgCkGqAXFycnJyIhNB0LkBai0AAEECdGoiCSgCACIKKAIAIgFrIQYgASACQRB2TQRAIAIgAUEQdGshAiAGQYCAAnEEQCAGIQEMAwsgCigCBCEHIAkgCkEMQQggASAGSyIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgVBAWohCiAFLQABIQEgBS0AAEH/AUcEQCAEIAo2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCjYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAdFIAcgHBsMAwsgCigCBCEHIAkgCkEIQQwgASAGSyIcG2ooAgA2AgADQAJAIAUNACAEKAIQIgVBAWohCiAFLQABIQYgBS0AAEH/AUcEQCAEIAo2AhBBCCEFIAZBCHQgAmohAgwBCyAGQY8BTQRAIAQgCjYCECAGQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgByAHRSAcGwwCCyABIA0oAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByANIAZBDEEIIAEgA0kiDBtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgDBsMAQsgBigCBCEHIA0gBkEIQQwgASADSSIMG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAcgB0UgDBsLRQRAIA0hCQwECyABIBAoAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByAQIAZBDEEIIAEgA0kiDBtqKAIAIgY2AgADQAJAIAUNACAEKAIQIglBAWohBSAJLQABIQMgCS0AAEH/AUcEQCAEIAU2AhBBCCEFIANBCHQgAmohAgwBCyADQY8BTQRAIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgB0UgByAMGwwBCyAGKAIEIQcgECAGQQhBDCABIANJIgwbaigCACIGNgIAA0ACQCAFDQAgBCgCECIJQQFqIQUgCS0AASEBIAktAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAHIAdFIAwbCyEMIAEgBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhByAQIAZBDEEIIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgChsMAQsgBigCBCEHIBAgBkEIQQwgASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAcgB0UgChsLIQZBACEDIBAhCQJAAkACQAJ/AkACQCAGIAxBAXRyDgQAAQMFCAsgASASIAgoAgRBEXZBBHEgCEEEayIHKAIAQRN2QQFxciIKQdC5AWotAABBAnRqIgkoAgAiBigCACIDayEBAn8gAyACQRB2TQRAIAIgA0EQdGshAiABQYCAAnEEQCAGKAIEDAILIAYoAgQhDCAJIAZBDEEIIAEgA0kiExtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFHBEAgBCAJNgIQQQghBSADQQh0IAJqIQIMAQsgA0GPAU0EQCAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgExsMAQsgBigCBCEMIAkgBkEIQQwgASADSSITG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohCSAGLQABIQEgBi0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAwgDEUgExsLIQMgCyAVIA4gAyAKQdC7AWotAABzIgYbNgIAIAcgBygCAEEgcjYCACAIIAgoAgRBCHI2AgQgCEF+IAQoAnxrQQJ0aiIDIAMoAgRBgIACcjYCBCADIAMoAgAgBkEfdHJBgIAEcjYCACADQQRrIgMgAygCAEGAgAhyNgIAIAZBE3QhWiABIBIgBCgCbC0AAkECdGoiBygCACIGKAIAIgNrIQECfyADIAJBEHZNBEAgAiADQRB0ayECIAFBgIACcQRAIAYoAgQMAgsgBigCBCEJIAcgBkEMQQggASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgZBAWohByAGLQABIQMgBi0AAEH/AUcEQCAEIAc2AhBBCCEFIANBCHQgAmohAgwBCyADQY8BTQRAIAQgBzYCECADQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCUUgCSAKGwwBCyAGKAIEIQkgByAGQQhBDCABIANJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEHIAYtAAEhASAGLQAAQf8BRwRAIAQgBzYCEEEIIQUgAUEIdCACaiECDAELIAFBjwFNBEAgBCAHNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgCSAJRSAKGwshBiBaQRByIgMgBkUNARoLIAEgEiAIKAIEQRR2QQRxIAhBBGsiCSgCAEEWdkEBcSADQQ92QRBxIANBE3ZBwABxIANBA3ZBqgFxcnJyciITQdC5AWotAABBAnRqIgwoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhCiAMIAdBDEEIIAEgBkkiDBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEGIActAABB/wFHBEAgBCAFNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAU2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIApFIAogDBsMAQsgBygCBCEKIAwgB0EIQQwgASAGSSIMG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUcEQCAEIAU2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgDBsLIQYgCyAUQQJ0aiAVIA4gBiATQdC7AWotAABzIgYbNgIAIAkgCSgCAEGAAnI2AgAgCCAIKAIEQcAAcjYCBCADIAZBFnRyQYABcgshAyABIBIgBCgCbCADQQZ2Qe8DcWotAABBAnRqIgkoAgAiBygCACIGayEBAn8gBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnEEQCAHKAIEDAILIAcoAgQhDCAJIAdBDEEIIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQkgBy0AASEGIActAABB/wFHBEAgBCAJNgIQQQghBSAGQQh0IAJqIQIMAQsgBkGPAU0EQCAEIAk2AhAgBkEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAxFIAwgChsMAQsgBygCBCEMIAkgB0EIQQwgASAGSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohCSAHLQABIQEgBy0AAEH/AUcEQCAEIAk2AhBBCCEFIAFBCHQgAmohAgwBCyABQY8BTQRAIAQgCTYCECABQQl0IAJqIQJBByEFDAELIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQULIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAwgDEUgChsLRQ0BCyABIBIgCCgCBEEXdkEEcSAIQQRrIgkoAgBBGXZBAXEgA0ESdkEQcSADQRZ2QcAAcSADQQZ2QaoBcXJycnIiE0HQuQFqLQAAQQJ0aiIMKAIAIgcoAgAiBmshAQJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgAUGAgAJxBEAgBygCBAwCCyAHKAIEIQogDCAHQQxBCCABIAZJIgwbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhBiAHLQAAQf8BRwRAIAQgBTYCEEEIIQUgBkEIdCACaiECDAELIAZBjwFNBEAgBCAFNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIAwbDAELIAcoAgQhCiAMIAdBCEEMIAEgBkkiDBtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAKIApFIAwbCyEGIAsgJEECdGogFSAOIAYgE0HQuwFqLQAAcyIGGzYCACAJIAkoAgBBgBByNgIAIAggCCgCBEGABHI2AgQgAyAGQRl0ckGACHIhAwsgASASIAQoAmwgA0EJdkHvA3FqLQAAQQJ0aiIJKAIAIgcoAgAiBmshAQJ/IAYgAkEQdk0EQCACIAZBEHRrIQIgAUGAgAJxBEAgBygCBAwCCyAHKAIEIQwgCSAHQQxBCCABIAZJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhBiAHLQAAQf8BRwRAIAQgBTYCEEEIIQUgBkEIdCACaiECDAELIAZBjwFNBEAgBCAFNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAMRSAMIAobDAELIAcoAgQhDCAJIAdBCEEMIAEgBkkiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFHBEAgBCAFNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAMIAxFIAobC0UNAwsgASASIAgoAgRBGnZBBHEgCEEEayIMKAIAQRx2QQFxIANBFXZBEHEgA0EZdkHAAHEgA0EJdkGqAXFycnJyIhNB0LkBai0AAEECdGoiCSgCACIKKAIAIgZrIQEgBiACQRB2TQRAIAIgBkEQdGshAiABQYCAAnENASAKKAIEIQcgCSAKQQxBCCABIAZJIhwbaigCADYCAANAAkAgBQ0AIAQoAhAiBUEBaiEKIAUtAAEhBiAFLQAAQf8BRwRAIAQgCjYCEEEIIQUgBkEIdCACaiECDAELIAZBjwFNBEAgBCAKNgIQIAZBCXQgAmohAkEHIQUMAQsgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAHRSAHIBwbDAILIAooAgQhByAJIApBCEEMIAEgBkkiHBtqKAIANgIAA0ACQCAFDQAgBCgCECIFQQFqIQogBS0AASEBIAUtAABB/wFHBEAgBCAKNgIQQQghBSABQQh0IAJqIQIMAQsgAUGPAU0EQCAEIAo2AhAgAUEJdCACaiECQQchBQwBCyAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFCyAFQQFrIQUgAkEBdCECIAZBAXQiBkGAgAJJDQALIAYhASAHIAdFIBwbDAELIAooAgQLIQYgCyAbQQJ0aiAVIA4gBiATQdC7AWotAABzIgcbNgIAIAwgDCgCAEGAgAFyNgIAIAggCCgCBEGAIHI2AgQgBCgCfEECdCAIaiIGIAYoAgRBBHI2AgQgBiAGKAIMQQFyNgIMIAYgBigCCCAHQRJ0ckECcjYCCCADIAdBHHRyQYDAAHIhAwsgCCADQf///7Z7cTYCAAsgCEEEaiEDIAtBBGohCyAYQQFqIhggFEcNAAsgCEEMaiEDIAsgG0ECdGohCyARQQRqIhEgBCgCgAEiBkF8cUkNAAsMAQtBBCAGQXxxIgMgA0EETRtBAWsiA0F8cUEEaiERIAcgA0EBdEF4cWpBFGohAwsgBCAFNgIIIAQgATYCBCAEIAI2AgAgBCAJNgJoIBRFDQQgBiARTQ0EA0BBACEFIBEgBCgCgAFHBEADQCAEIAMgCyAFIBRsQQJ0aiAOIAVBABBYIAVBAWoiBSAEKAKAASARa0kNAAsLIAMgAygCAEH///+2e3E2AgAgC0EEaiELIANBBGohAyAXQQFqIhcgFEcNAAsMBAtBBCAGQXxxIgMgA0EETRtBAWsiA0F8cUEEaiERIAcgA0EBdEF4cWpBFGohAwsgBCAFNgIIIAQgATYCBCAEIAI2AgAgBCAJNgJoIBRFDQIgBiARTQ0CA0BBACEFIBEgBCgCgAFHBEADQCAEIAMgCyAFIBRsQQJ0aiAOIAVBARBYIAVBAWoiBSAEKAKAASARa0kNAAsLIAMgAygCAEH///+2e3E2AgAgC0EEaiELIANBBGohAyAXQQFqIhcgFEcNAAsMAgsDQEEAIQwDQCADIRECQAJAAn8CQAJAIAYiDSgCACIGRQRAIAEgECgCACIDKAIAIgZrIQECfyAGIAJBEHZLBEAgAygCBCEHIBAgA0EIQQwgASAGSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgNBAWohCSADLQABIQEgAy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAJNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAJNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAcgB0UgChsMAQsgAiAGQRB0ayECIAFBgIACcUUEQCADKAIEIQcgECADQQxBCCABIAZJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEJIAYtAAEhAyAGLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAHRSAHIAobDAELIAMoAgQLRQRAIBAhCQwGCyABIAgoAgAiAygCACIGayEBAn8gBiACQRB2SwRAIAMoAgQhByAIIANBCEEMIAEgBkkiChtqKAIAIgM2AgADQAJAIAUNACAEKAIQIglBAWohBSAJLQABIQEgCS0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAcgB0UgChsMAQsgAiAGQRB0ayECIAFBgIACcUUEQCADKAIEIQcgCCADQQxBCCABIAZJIgobaigCACIDNgIAA0ACQCAFDQAgBCgCECIJQQFqIQUgCS0AASEGIAktAABB/wFGBEAgBkGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECAGQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgBkEIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgChsMAQsgAygCBAshCiABIAMoAgAiBmshAQJ/IAYgAkEQdksEQCADKAIEIQcgCCADQQhBDCABIAZJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiA0EBaiEJIAMtAAEhASADLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgAUEJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgByAHRSAOGwwBCyACIAZBEHRrIQIgAUGAgAJxRQRAIAMoAgQhByAIIANBDEEIIAEgBkkiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQkgBi0AASEDIAYtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgCTYCECADQQl0IAJqIQJBByEFDAELIAQgCTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAdFIAcgDhsMAQsgAygCBAshA0EAIQYgCCEJAkACQAJAAn8CQAJAIAMgCkEBdHIOBAABAwUKCyABIAsgDSgCBEERdkEEcSANQQRrIgcoAgBBE3ZBAXFyIg5B0LkBai0AAEECdGoiCSgCACIDKAIAIgZrIQECfyAGIAJBEHZLBEAgAygCBCEKIAkgA0EIQQwgASAGSSISG2ooAgA2AgADQAJAIAUNACAEKAIQIgNBAWohCSADLQABIQEgAy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAJNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAJNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgBkEBdCIGQYCAAkkNAAsgBiEBIAogCkUgEhsMAQsgAiAGQRB0ayECIAFBgIACcUUEQCADKAIEIQogCSADQQxBCCABIAZJIhIbaigCADYCAANAAkAgBQ0AIAQoAhAiBkEBaiEJIAYtAAEhAyAGLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIBIbDAELIAMoAgQLIQMgESATIBQgAyAOQdC7AWotAABzIgMbNgIAIAcgBygCAEEgcjYCACANIA0oAgRBCHI2AgQgA0ETdCFbIAEgCyAEKAJsLQACQQJ0aiIHKAIAIgMoAgAiBmshAQJ/IAYgAkEQdksEQCADKAIEIQkgByADQQhBDCABIAZJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiA0EBaiEHIAMtAAEhASADLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAc2AhAgAUEJdCACaiECQQchBQwBCyAEIAc2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiAGQQF0IgZBgIACSQ0ACyAGIQEgCSAJRSAOGwwBCyACIAZBEHRrIQIgAUGAgAJxRQRAIAMoAgQhCSAHIANBDEEIIAEgBkkiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIGQQFqIQcgBi0AASEDIAYtAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBzYCECADQQl0IAJqIQJBByEFDAELIAQgBzYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIAlFIAkgDhsMAQsgAygCBAshAyBbQRByIgYgA0UNARoLIAEgCyANKAIEQRR2QQRxIA1BBGsiCSgCAEEWdkEBcSAGQQ92QRBxIAZBE3ZBwABxIAZBA3ZBqgFxcnJyciISQdC5AWotAABBAnRqIgooAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhDiAKIAdBCEEMIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAOIA5FIAobDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEOIAogB0EMQQggASADSSIKG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDkUgDiAKGwwBCyAHKAIECyEDIBEgEyAUIAMgEkHQuwFqLQAAcyIDGzYCgAIgCSAJKAIAQYACcjYCACANIA0oAgRBwAByNgIEIAYgA0EWdHJBgAFyCyEGIAEgCyAEKAJsIAZBBnZB7wNxai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEKIAkgB0EIQQwgASADSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohCSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAJNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAJNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAogCkUgDhsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQogCSAHQQxBCCABIANJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEJIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAk2AhAgA0EJdCACaiECQQchBQwBCyAEIAk2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIA4bDAELIAcoAgQLRQ0BCyABIAsgDSgCBEEXdkEEcSANQQRrIgkoAgBBGXZBAXEgBkESdkEQcSAGQRZ2QcAAcSAGQQZ2QaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIKKAIAIgcoAgAiA2shAQJ/IAMgAkEQdksEQCAHKAIEIQ4gCiAHQQhBDCABIANJIgobaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgDiAORSAKGwwBCyACIANBEHRrIQIgAUGAgAJxRQRAIAcoAgQhDiAKIAdBDEEIIAEgA0kiChtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIA5FIA4gChsMAQsgBygCBAshAyARIBMgFCADIBJB0LsBai0AAHMiAxs2AoAEIAkgCSgCAEGAEHI2AgAgDSANKAIEQYAEcjYCBCAGIANBGXRyQYAIciEGCyABIAsgBCgCbCAGQQl2Qe8DcWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhCiAJIAdBCEEMIAEgA0kiDhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAKIApFIA4bDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEKIAkgB0EMQQggASADSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCkUgCiAOGwwBCyAHKAIEC0UNBQsgASALIA0oAgRBGnZBBHEgDUEEayIOKAIAQRx2QQFxIAZBFXZBEHEgBkEZdkHAAHEgBkEJdkGqAXFycnJyIgpB0LkBai0AAEECdGoiCSgCACIHKAIAIgNrIQEgAyACQRB2SwRAIAcoAgQhEiAJIAdBCEEMIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASASIBJFIBUbDAQLIAIgA0EQdGshAiABQYCAAnENASAHKAIEIRIgCSAHQQxBCCABIANJIhUbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyASRSASIBUbDAMLAkAgBkGQgIABcQ0AIAEgCyAEKAJsIAZB7wNxai0AAEECdGoiCSgCACIHKAIAIgNrIQECfyADIAJBEHZLBEAgBygCBCEKIAkgB0EIQQwgASADSSIOG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQEgBy0AAEH/AUYEQCABQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIAFBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSABQQh0IAJqIQILIAVBAWshBSACQQF0IQIgA0EBdCIDQYCAAkkNAAsgAyEBIAogCkUgDhsMAQsgAiADQRB0ayECIAFBgIACcUUEQCAHKAIEIQogCSAHQQxBCCABIANJIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyAKRSAKIA4bDAELIAcoAgQLRQ0AIAEgCyANKAIEQRF2QQRxIA1BBGsiCigCAEETdkEBcSAGQQ52QRBxIAZBEHZBwABxIAZBqgFxcnJyciISQdC5AWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhDiAJIAdBCEEMIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAOIA5FIBUbDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEOIAkgB0EMQQggASADSSIVG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgDkUgDiAVGwwBCyAHKAIECyEDIBEgEyAUIAMgEkHQuwFqLQAAcyIDGzYCACAKIAooAgBBIHI2AgAgDSANKAIEQQhyNgIEIAYgA0ETdHJBEHIhBgsCQCAGQYCBgAhxDQAgASALIAQoAmwgBkEDdiIOQe8DcWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhCiAJIAdBCEEMIAEgA0kiEhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAKIApFIBIbDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEKIAkgB0EMQQggASADSSISG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCkUgCiASGwwBCyAHKAIEC0UNACABIAsgDSgCBEEUdkEEcSANQQRrIgooAgBBFnZBAXEgBkEPdkEQcSAGQRN2QcAAcSAOQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIJKAIAIgcoAgAiA2shAQJ/IAMgAkEQdksEQCAHKAIEIQ4gCSAHQQhBDCABIANJIhUbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgDiAORSAVGwwBCyACIANBEHRrIQIgAUGAgAJxRQRAIAcoAgQhDiAJIAdBDEEIIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIA5FIA4gFRsMAQsgBygCBAshAyARIBMgFCADIBJB0LsBai0AAHMiAxs2AoACIAogCigCAEGAAnI2AgAgDSANKAIEQcAAcjYCBCAGIANBFnRyQYABciEGCwJAIAZBgIiAwABxDQAgASALIAQoAmwgBkEGdiIOQe8DcWotAABBAnRqIgkoAgAiBygCACIDayEBAn8gAyACQRB2SwRAIAcoAgQhCiAJIAdBCEEMIAEgA0kiEhtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASAKIApFIBIbDAELIAIgA0EQdGshAiABQYCAAnFFBEAgBygCBCEKIAkgB0EMQQggASADSSISG2ooAgA2AgADQAJAIAUNACAEKAIQIgdBAWohBSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCACQYD+A2ohAkEIIQUMAgsgBCAFNgIQIANBCXQgAmohAkEHIQUMAQsgBCAFNgIQQQghBSADQQh0IAJqIQILIAVBAWshBSACQQF0IQIgAUEBdCIBQYCAAkkNAAsgCkUgCiASGwwBCyAHKAIEC0UNACABIAsgDSgCBEEXdkEEcSANQQRrIgooAgBBGXZBAXEgBkESdkEQcSAGQRZ2QcAAcSAOQaoBcXJycnIiEkHQuQFqLQAAQQJ0aiIJKAIAIgcoAgAiA2shAQJ/IAMgAkEQdksEQCAHKAIEIQ4gCSAHQQhBDCABIANJIhUbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQEgDiAORSAVGwwBCyACIANBEHRrIQIgAUGAgAJxRQRAIAcoAgQhDiAJIAdBDEEIIAEgA0kiFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEDIActAABB/wFGBEAgA0GQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECADQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgA0EIdCACaiECCyAFQQFrIQUgAkEBdCECIAFBAXQiAUGAgAJJDQALIA5FIA4gFRsMAQsgBygCBAshAyARIBMgFCADIBJB0LsBai0AAHMiAxs2AoAEIAogCigCAEGAEHI2AgAgDSANKAIEQYAEcjYCBCAGIANBGXRyQYAIciEGCyAGQYDAgIAEcQ0DIAEgCyAEKAJsIAZBCXYiEkHvA3FqLQAAQQJ0aiIJKAIAIgEoAgAiA2shBwJ/IAMgAkEQdksEQCABKAIEIQogCSABQQhBDCADIAdLIg4baigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhASAHLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgAUEJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIAFBCHQgAmohAgsgBUEBayEFIAJBAXQhAiADQQF0IgNBgIACSQ0ACyADIQcgCiAKRSAOGwwBCyACIANBEHRrIQIgB0GAgAJxRQRAIAEoAgQhCiAJIAFBDEEIIAMgB0siDhtqKAIANgIAA0ACQCAFDQAgBCgCECIDQQFqIQUgAy0AASEBIAMtAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIAdBAXQiB0GAgAJJDQALIApFIAogDhsMAQsgASgCBAtFBEAgByEBDAQLIAcgCyANKAIEQRp2QQRxIA1BBGsiDigCAEEcdkEBcSAGQRV2QRBxIAZBGXZBwABxIBJBqgFxcnJyciIKQdC5AWotAABBAnRqIgkoAgAiBygCACIBayEDIAEgAkEQdksEQCAHKAIEIRIgCSAHQQhBDCABIANLIhUbaigCADYCAANAAkAgBQ0AIAQoAhAiB0EBaiEFIActAAEhAyAHLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAJBgP4DaiECQQghBQwCCyAEIAU2AhAgA0EJdCACaiECQQchBQwBCyAEIAU2AhBBCCEFIANBCHQgAmohAgsgBUEBayEFIAJBAXQhAiABQQF0IgFBgIACSQ0ACyASIBJFIBUbDAMLIAIgAUEQdGshAiADQYCAAnFFDQEgAyEBCyAHKAIEDAELIAcoAgQhEiAJIAdBDEEIIAEgA0siFRtqKAIANgIAA0ACQCAFDQAgBCgCECIHQQFqIQUgBy0AASEBIActAABB/wFGBEAgAUGQAU8EQCAEIAQoAgxBAWo2AgwgAkGA/gNqIQJBCCEFDAILIAQgBTYCECABQQl0IAJqIQJBByEFDAELIAQgBTYCEEEIIQUgAUEIdCACaiECCyAFQQFrIQUgAkEBdCECIANBAXQiA0GAgAJJDQALIAMhASASRSASIBUbCyEDIBEgEyAUIAMgCkHQuwFqLQAAcyIDGzYCgAYgDiAOKAIAQYCAAXI2AgAgDSANKAIEQYAgcjYCBCANIA0oAoQCQQRyNgKEAiANIA0oAowCQQFyNgKMAiANIA0oAogCIANBEnRyQQJyNgKIAiAGIANBHHRyQYDAAHIhBgsgDSAGQf///7Z7cTYCAAsgDUEEaiEGIBFBBGohAyAMQQFqIgxBwABHDQALIA1BDGohBiARQYQGaiEDIBdBPEkhXCAXQQRqIRcgXA0ACwsgBCAFNgIIIAQgATYCBCAEIAI2AgAgBCAJNgJoCwJAIBZBIHFFDQAgBCAEQeQAajYCaCAEIAQoAgQgBCgCZCIGKAIAIgFrIgI2AgQCQCABIAQoAgAiBUEQdksEQCAEIAE2AgQgBCAGQQhBDCABIAJLG2ooAgAiBjYCZCAEKAIIIQIDQAJAIAINACAEKAIQIgdBAWohCSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQIMAgsgBCAJNgIQIANBCXQgBWohBUEHIQIMAQsgBCAJNgIQQQghAiADQQh0IAVqIQULIAQgAkEBayICNgIIIAQgBUEBdCIFNgIAIAQgAUEBdCIBNgIEIAFBgIACSQ0ACyABIQIMAQsgBCAFIAFBEHRrIgU2AgAgAkGAgAJxDQAgBCAGQQxBCCABIAJLG2ooAgAiBjYCZCAEKAIIIQEDQAJAIAENACAEKAIQIgFBAWohByABLQABIQMgAS0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQEMAgsgBCAHNgIQIANBCXQgBWohBUEHIQEMAQsgBCAHNgIQQQghASADQQh0IAVqIQULIAQgAUEBayIBNgIIIAQgBUEBdCIFNgIAIAQgAkEBdCICNgIEIAJBgIACSQ0ACwsgBCACIAYoAgAiAWsiAjYCBAJAIAEgBUEQdksEQCAEIAE2AgQgBCAGQQhBDCABIAJLG2ooAgAiBjYCZCAEKAIIIQIDQAJAIAINACAEKAIQIgdBAWohCSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQIMAgsgBCAJNgIQIANBCXQgBWohBUEHIQIMAQsgBCAJNgIQQQghAiADQQh0IAVqIQULIAQgAkEBayICNgIIIAQgBUEBdCIFNgIAIAQgAUEBdCIBNgIEIAFBgIACSQ0ACyABIQIMAQsgBCAFIAFBEHRrIgU2AgAgAkGAgAJxDQAgBCAGQQxBCCABIAJLG2ooAgAiBjYCZCAEKAIIIQEDQAJAIAENACAEKAIQIgFBAWohByABLQABIQMgAS0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQEMAgsgBCAHNgIQIANBCXQgBWohBUEHIQEMAQsgBCAHNgIQQQghASADQQh0IAVqIQULIAQgAUEBayIBNgIIIAQgBUEBdCIFNgIAIAQgAkEBdCICNgIEIAJBgIACSQ0ACwsgBCACIAYoAgAiAWsiAjYCBAJAIAEgBUEQdksEQCAEIAE2AgQgBCAGQQhBDCABIAJLG2ooAgAiBjYCZCAEKAIIIQIDQAJAIAINACAEKAIQIgdBAWohCSAHLQABIQMgBy0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQIMAgsgBCAJNgIQIANBCXQgBWohBUEHIQIMAQsgBCAJNgIQQQghAiADQQh0IAVqIQULIAQgAkEBayICNgIIIAQgBUEBdCIFNgIAIAQgAUEBdCIBNgIEIAFBgIACSQ0ACyABIQIMAQsgBCAFIAFBEHRrIgU2AgAgAkGAgAJxDQAgBCAGQQxBCCABIAJLG2ooAgAiBjYCZCAEKAIIIQEDQAJAIAENACAEKAIQIgFBAWohByABLQABIQMgAS0AAEH/AUYEQCADQZABTwRAIAQgBCgCDEEBajYCDCAFQYD+A2ohBUEIIQEMAgsgBCAHNgIQIANBCXQgBWohBUEHIQEMAQsgBCAHNgIQQQghASADQQh0IAVqIQULIAQgAUEBayIBNgIIIAQgBUEBdCIFNgIAIAQgAkEBdCICNgIEIAJBgIACSQ0ACwsgBCACIAYoAgAiAWsiAjYCBCABIAVBEHZLBEAgBCABNgIEIAQgBkEIQQwgASACSxtqKAIANgJkIAQoAgghAgNAAkAgAg0AIAQoAhAiBkEBaiEHIAYtAAEhAyAGLQAAQf8BRgRAIANBkAFPBEAgBCAEKAIMQQFqNgIMIAVBgP4DaiEFQQghAgwCCyAEIAc2AhAgA0EJdCAFaiEFQQchAgwBCyAEIAc2AhBBCCECIANBCHQgBWohBQsgBCACQQFrIgI2AgggBCAFQQF0IgU2AgAgBCABQQF0IgE2AgQgAUGAgAJJDQALDAELIAQgBSABQRB0ayIHNgIAIAJBgIACcQ0AIAQgBkEMQQggASACSxtqKAIANgJkIAQoAgghBQNAAkAgBQ0AIAQoAhAiA0EBaiEGIAMtAAEhASADLQAAQf8BRgRAIAFBkAFPBEAgBCAEKAIMQQFqNgIMIAdBgP4DaiEHQQghBQwCCyAEIAY2AhAgAUEJdCAHaiEHQQchBQwBCyAEIAY2AhBBCCEFIAFBCHQgB2ohBwsgBCAFQQFrIgU2AgggBCAHQQF0Igc2AgAgBCACQQF0IgI2AgQgAkGAgAJJDQALCwsgJw0AIAQQWiAEQbCpATYCZCAEQdCeATYCYCAEQfCeATYCHAtBACAfQQFqIgEgAUEDRiIBGyEfIBkgAWshGSAmQQFqIiYgICgCCE8NASAZQQBKDQALCyAoICpqISggBCgCGCAELwFwOwAAIClBAWoiKSAaKAIsSQ0ACwsCQCArRQ0AAkAgBCgCGCIBIAQoAhAiA0ECaksEQCAhRQ0BICMgASAEKAIUIgZrNgI4ICMgAyAGazYCNCAjIAEgA2tBAms2AjAgHUECQZDyACAjQTBqEA8MAgsgBCgCDCIBQQNJDQEgIQRAICMgATYCUCAdQQJB6TUgI0HQAGoQDwwCCyAjIAE2AkAgHUECQek1ICNBQGsQDwwBCyAjIAEgBCgCFCIGazYCKCAjIAMgBms2AiQgIyABIANrQQJrNgIgIB1BAkGQ8gAgI0EgahAPCyAaKAI8RQ0AIAQgLDYCdAsgMCgCBCEBIBooAgwhXSAaKAIIIDAoAgBrIQggMCgCECIGQQFxBEAgMigCHCA3QZgBbGoiB0GQAWsoAgAgCGogB0GYAWsoAgBrIQgLIF0gAWshAyAGQQJxBEAgMigCHCA3QZgBbGoiAUGMAWsoAgAgA2ogAUGUAWsoAgBrIQMLIBooAjwiBiECIAZFBEAgBCgCdCECCyAEKAKAASEWIAQoAnwhDQJAIC8oAqgGIgdFDQAgFkUgDUVyIQEgB0EeTARAIAENAUEAIRADQCANIBBsIQRBACEBA0AgAiABIARqQQJ0aiIRKAIAIgkgCUEfdSIFcyAFayIFIAd2BEAgEUEAIAUgLygCqAZ2IhFrIBEgCUEASBs2AgALIAFBAWoiASANRw0ACyAQQQFqIhAgFkcNAAsMAQsgAQ0AIAJBACANIBZsQQJ0EBUaCyAGBEAgDSAWbCEGIC8oAhRBAUYEQCAGRQ0FQQAhASAGQQRPBEAgBkF8cSEBQQAhBANAIAIgBEECdGoiAyAD/QACACJe/RsAQQJt/REgXv0bAUECbf0cASBe/RsCQQJt/RwCIF79GwNBAm39HAP9CwIAIARBBGoiBCABRw0ACyABIAZGDQYLA0AgAiABQQJ0aiIDIAMoAgBBAm02AgAgAUEBaiIBIAZHDQALDAULIAZFDQQgMCoCIEMAAAA/lCFmQQAhBAJAIAZBBEkEQCACIQEMAQsgAiAGQXxxIgRBAnRqIQEgZv0TIV5BACEDA0AgAiADQQJ0aiIHIF4gB/0AAgD9+gH95gH9CwIAIANBBGoiAyAERw0ACyAEIAZGDQULA0AgASBmIAEoAgCylDgCACABQQRqIQEgBEEBaiIEIAZHDQALDAQLIDYgNWshESAvKAIUQQFHDQIgFkUNAyAyKAIkIgYgAyARbCIDQQJ0aiAIQQJ0aiEJIA1BfHEiDEEBayIBQQRxIQsgNiANIDVqa0ECdCEaIAFBAnZBAWpB/v///wdxIR0gAyAIakECdCAGaiACayEKQQAhCCABQQNHIRQDQEEAIQECQCAMRQ0AIAggDWwhAyAJIAggEWxBAnRqIQZBACEHIBQEQANAIAYgAUECdGogAiABIANqQQJ0av0AAgAiXv0bAEECbf0RIF79GwFBAm39HAEgXv0bAkECbf0cAiBe/RsDQQJt/RwD/QsCACAGIAFBBHIiBEECdGogAiADIARqQQJ0av0AAgAiXv0bAEECbf0RIF79GwFBAm39HAEgXv0bAkECbf0cAiBe/RsDQQJt/RwD/QsCACABQQhqIQEgB0ECaiIHIB1HDQALCyALDQAgBiABQQJ0aiACIAEgA2pBAnRq/QACACJe/RsAQQJt/REgXv0bAUECbf0cASBe/RsCQQJt/RwCIF79GwNBAm39HAP9CwIAIAFBBGohAQsCQCABIA1PDQAgCCANbCEDIAkgCCARbEECdGohBwJAIA0gAWsiEEEESQRAIAEhBAwBCyAKIAggGmxqQRBJBEAgASEEDAELIAEgEEF8cSIFaiEEQQAhBgNAIAcgASAGaiIhQQJ0aiACIAMgIWpBAnRq/QACACJe/RsAQQJt/REgXv0bAUECbf0cASBe/RsCQQJt/RwCIF79GwNBAm39HAP9CwIAIAZBBGoiBiAFRw0ACyAFIBBGDQELIARBAWohASANIARrQQFxBEAgByAEQQJ0aiACIAMgBGpBAnRqKAIAQQJtNgIAIAEhBAsgASANRg0AA0AgByAEQQJ0aiACIAMgBGpBAnRqKAIAQQJtNgIAIAcgBEEBaiIBQQJ0aiACIAEgA2pBAnRqKAIAQQJtNgIAIARBAmoiBCANRw0ACwsgCEEBaiIIIBZHDQALDAMLICMgGTYCACAdQQJB1cEAICMQDwsgECgCAEEANgIADAELIBZFDQAgDUUNACAyKAIkIAMgEWxBAnRqIAhBAnRqIQcgDUF8cSIDQQJ0IQYgMCoCIEMAAAA/lCJm/RMhXkEAIRAgDUEESSEIA0ACQAJAIAgEQCACIQkgByEBQQAhBAwBCyAGIAdqIQEgAiAGaiEJQQAhBANAIAcgBEECdCIFaiBeIAIgBWr9AAIA/foB/eYB/QsCACAEQQRqIgQgA0cNAAsgCSECIAMiBCANRg0BCyAJIQIDQCABIGYgAigCALKUOAIAIAFBBGohASACQQRqIQIgBEEBaiIEIA1HDQALCyAHIBFBAnRqIQcgEEEBaiIQIBZHDQALCyAAEBAgI0HgAGokAAvWBAEJfyAAKAIsQQhPBEAgACgCKCEFQQghCgNAIAAoAgxBBXQhCCAAKAIAIQQgACgCJCEDAkAgACgCFCIGIAAoAhAiAU0NACAEIAhqIQcgAUEBaiECIAYgAWtBAXEEQCAHIAFBBnRqIgkgBSABIANsQQJ0aiIB/QACAP0LAgAgCSAB/QACEP0LAhAgAiEBCyACIAZGDQADQCAHIAFBBnRqIgIgBSABIANsQQJ0aiIJ/QACAP0LAgAgAiAJ/QACEP0LAhAgByABQQFqIgJBBnRqIgkgBSACIANsQQJ0aiIC/QACEP0LAhAgCSAC/QACAP0LAgAgAUECaiIBIAZHDQALCwJAIAAoAhwiBiAAKAIYIgFNDQAgBCAIa0EgaiEHIAUgACgCCCADbEECdGohCCABQQFqIQIgBiABa0EBcQRAIAcgAUEGdGoiBCAIIAEgA2xBAnRqIgH9AAIA/QsCACAEIAH9AAIQ/QsCECACIQELIAIgBkYNAANAIAcgAUEGdGoiAiAIIAEgA2xBAnRqIgT9AAIA/QsCACACIAT9AAIQ/QsCECAHIAFBAWoiAkEGdGoiBCAIIAIgA2xBAnRqIgL9AAIQ/QsCECAEIAL9AAIA/QsCACABQQJqIgEgBkcNAAsLIAAQIkEAIQEgACgCIARAA0AgBSAAKAIkIAFsQQJ0aiICIAAoAgAgAUEFdGoiA/0AAgD9CwIAIAIgA/0AAhD9CwIQIAFBAWoiASAAKAIgSQ0ACwsgBUEgaiEFIApBCGoiCiAAKAIsTQ0ACwsgACgCABAQIAAQEAv3DQElfyAAKAIsQQhPBEAgACgCJCIKQQV0IR4gCkEHbCEWIApBBmwhFyAKQQVsIRggCkEDbCEZIApBAXQhGiAAKAIoIgEgCkEcbGohHyABIApBGGxqISAgASAKQRRsaiEhIAEgCkEEdGohIiABIApBDGxqISMgASAKQQN0IiRqISUgASAKQQJ0IhtqISZBCCEcA0AgACABIAAoAiRBCBA7IAAQIgJAIAAoAiAiC0UNACAdIB5sIQggACgCACEGQQAhBAJAAkAgC0HoAkkNACAGQQxqIg4gC0EBayICQQV0IgNqIA5JDQAgBkEIaiIPIANqIA9JDQAgAyAGaiAGSQ0AIAZBBGoiECADaiAQSQ0AIAJB////P0sNACABIAggJmoiAyALQQJ0IgVqIgxJIAMgASAFaiIHSXENACABIAggJWoiAiAFaiINSSACIAdJcQ0AIAEgBSAIICNqIglqIgVJIAcgCUtxDQAgBiAHSSABIAYgC0EFdGoiEUEcayISSXENACABIBFBGGsiE0kgByAQS3ENACABIBFBFGsiFEkgByAPS3ENACAHIA5LIAEgEUEQayIHSXENACADIA1JIAIgDElxDQAgAyAFSSAJIAxJcQ0AIAMgEkkgBiAMSXENACADIBNJIAwgEEtxDQAgAyAUSSAMIA9LcQ0AIAMgB0kgDCAOS3ENACACIAVJIAkgDUlxDQAgAiASSSAGIA1JcQ0AIAIgE0kgDSAQS3ENACACIBRJIA0gD0txDQAgAiAHSSANIA5LcQ0AIAkgEkkgBSAGS3ENACAJIBNJIAUgEEtxDQAgCSAUSSAFIA9LcQ0AIAcgCUsgBSAOS3ENACALQfz///8AcSEEQQAhAwNAIAEgA0ECdGogBiADQQV0aiIC/QkCACACKgIg/SABIAJBQGsqAgD9IAIgAioCYP0gA/0LAgAgASADIApqQQJ0aiAC/QkCBCACKgIk/SABIAIqAkT9IAIgAioCZP0gA/0LAgAgASADIBpqQQJ0aiAC/QkCCCACKgIo/SABIAIqAkj9IAIgAioCaP0gA/0LAgAgASADIBlqQQJ0aiAC/QkCDCACKgIs/SABIAIqAkz9IAIgAioCbP0gA/0LAgAgA0EEaiIDIARHDQALIAQgC0YNAQsDQCABIARBAnRqIAYgBEEFdGoiAyoCADgCACABIAQgCmpBAnRqIAMqAgQ4AgAgASAEIBpqQQJ0aiADKgIIOAIAIAEgBCAZakECdGogAyoCDDgCACAEQQFqIgQgC0cNAAsLIAAoAgAhBkEAIQQCQCALQdwASQ0AIAZBHGoiDyALQQFrIgJBBXQiA2ogD0kNACAGQRhqIhAgA2ogEEkNACAGQRBqIhEgA2ogEUkNACAGQRRqIhIgA2ogEkkNACACQf///z9LDQAgCCAiaiIDIAggIWoiAiALQQJ0IgVqIgxJIAIgAyAFaiIHSXENACADIAggIGoiCSAFaiINSSAHIAlLcQ0AIAMgCCAfaiIIIAVqIgVJIAcgCEtxDQAgAyAGIAtBBXRqIg5BDGsiE0kgByARS3ENACADIA5BCGsiFEkgByASS3ENACADIA5BBGsiFUkgByAQS3ENACADIA5JIAcgD0txDQAgAiANSSAJIAxJcQ0AIAIgBUkgCCAMSXENACACIBNJIAwgEUtxDQAgAiAUSSAMIBJLcQ0AIAIgFUkgDCAQS3ENACACIA5JIAwgD0txDQAgCCANSSAFIAlLcQ0AIAkgE0kgDSARS3ENACAJIBRJIA0gEktxDQAgCSAVSSANIBBLcQ0AIAkgDkkgDSAPS3ENACAIIBNJIAUgEUtxDQAgCCAUSSAFIBJLcQ0AIAggFUkgBSAQS3ENACAIIA5JIAUgD0txDQAgC0H8////AHEhBEEAIQMDQCABIAMgG2pBAnRqIAYgA0EFdGoiAv0JAhAgAioCMP0gASACKgJQ/SACIAIqAnD9IAP9CwIAIAEgAyAYakECdGogAv0JAhQgAioCNP0gASACKgJU/SACIAIqAnT9IAP9CwIAIAEgAyAXakECdGogAv0JAhggAioCOP0gASACKgJY/SACIAIqAnj9IAP9CwIAIAEgAyAWakECdGogAv0JAhwgAioCPP0gASACKgJc/SACIAIqAnz9IAP9CwIAIANBBGoiAyAERw0ACyAEIAtGDQELA0AgASAEIBtqQQJ0aiAGIARBBXRqIgMqAhA4AgAgASAEIBhqQQJ0aiADKgIUOAIAIAEgBCAXakECdGogAyoCGDgCACABIAQgFmpBAnRqIAMqAhw4AgAgBEEBaiIEIAtHDQALCyAdQQFqIR0gASAkQQJ0aiEBIBxBCGoiHCAAKAIsTQ0ACwsgACgCABAQIAAQEAtzAQJ/IAAoAhwiAUEIaiIDIAAoAiAiAk0EQANAIAAgACgCGCABQQJ0aiAAKAIUQQgQMCADIgFBCGoiAyAAKAIgIgJNDQALCyABIAJJBEAgACAAKAIYIAFBAnRqIAAoAhQgAiABaxAwCyAAKAIAEBAgABAQC0QAIAAoAhwiASAAKAIgSQRAA0AgACAAKAIYIAAoAhQgAWxBAnRqEF0gAUEBaiIBIAAoAiBJDQALCyAAKAIAEBAgABAQC6gBAQV/IAAoAlQiAygCACEFIAMoAgQiBCAAKAIUIAAoAhwiB2siBiAEIAZJGyIGBEAgBSAHIAYQEhogAyADKAIAIAZqIgU2AgAgAyADKAIEIAZrIgQ2AgQLIAQgAiACIARLGyIEBEAgBSABIAQQEhogAyADKAIAIARqIgU2AgAgAyADKAIEIARrNgIECyAFQQA6AAAgACAAKAIsIgE2AhwgACABNgIUIAILngUCBn4EfyABIAEoAgBBB2pBeHEiAUEQajYCACAAIQsgASkDACEDIAEpAwghByMAQSBrIggkACAHQv///////z+DIQQCfiAHQjCIQv//AYMiBaciCkGB+ABrQf0PTQRAIARCBIYgA0I8iIQhAiAKQYD4AGutIQUCQCADQv//////////D4MiA0KBgICAgICAgAhaBEAgAkIBfCECDAELIANCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgAbIQIgAK0gBXwMAQsCQCADIASEUA0AIAVC//8BUg0AIARCBIYgA0I8iIRCgICAgICAgASEIQJC/w8MAQtC/w8gCkH+hwFLDQAaQgBBgPgAQYH4ACAFUCIBGyIAIAprIglB8ABKDQAaIAMhAiAEIARCgICAgICAwACEIAEbIgYhBAJAQYABIAlrIgFBwABxBEAgAyABQUBqrYYhBEIAIQIMAQsgAUUNACAEIAGtIgWGIAJBwAAgAWutiIQhBCACIAWGIQILIAggAjcDECAIIAQ3AxgCQCAJQcAAcQRAIAYgCUFAaq2IIQNCACEGDAELIAlFDQAgBkHAACAJa62GIAMgCa0iAoiEIQMgBiACiCEGCyAIIAM3AwAgCCAGNwMIIAgpAwhCBIYgCCkDACICQjyIhCEDAkAgACAKRyAIKQMQIAgpAxiEQgBSca0gAkL//////////w+DhCICQoGAgICAgICACFoEQCADQgF8IQMMAQsgAkKAgICAgICAgAhSDQAgA0IBgyADfCEDCyADQoCAgICAgIAIhSADIANC/////////wdWIgAbIQIgAK0LIQMgCEEgaiQAIAsgB0KAgICAgICAgIB/gyADQjSGhCAChL85AwALhhgDE38BfAN+IwBBsARrIgwkACAMQQA2AiwCQCABvSIaQgBTBEBBASERQboIIRMgAZoiAb0hGgwBCyAEQYAQcQRAQQEhEUG9CCETDAELQcAIQbsIIARBAXEiERshEyARRSEVCwJAIBpCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiARQQNqIgMgBEH//3txEBwgACATIBEQGSAAQZIJQfYKIAVBIHEiBRtB+wlB+gogBRsgASABYhtBAxAZIABBICACIAMgBEGAwABzEBwgAyACIAIgA0gbIQoMAQsgDEEQaiESAkACfwJAIAEgDEEsahBlIgEgAaAiAUQAAAAAAAAAAGIEQCAMIAwoAiwiBkEBazYCLCAFQSByIg5B4QBHDQEMAwsgBUEgciIOQeEARg0CIAwoAiwhCUEGIAMgA0EASBsMAQsgDCAGQR1rIgk2AiwgAUQAAAAAAACwQaIhAUEGIAMgA0EASBsLIQsgDEEwakGgAkEAIAlBAE4baiINIQcDQCAHAn8gAUQAAAAAAADwQWMgAUQAAAAAAAAAAGZxBEAgAasMAQtBAAsiAzYCACAHQQRqIQcgASADuKFEAAAAAGXNzUGiIgFEAAAAAAAAAABiDQALAkAgCUEATARAIAkhAyAHIQYgDSEIDAELIA0hCCAJIQMDQEEdIAMgA0EdTxshAwJAIAdBBGsiBiAISQ0AIAOtIRxCACEaA0AgBiAaQv////8PgyAGNQIAIByGfCIbQoCU69wDgCIaQoDslKMMfiAbfD4CACAGQQRrIgYgCE8NAAsgG0KAlOvcA1QNACAIQQRrIgggGj4CAAsDQCAIIAciBkkEQCAGQQRrIgcoAgBFDQELCyAMIAwoAiwgA2siAzYCLCAGIQcgA0EASg0ACwsgA0EASARAIAtBGWpBCW5BAWohDyAOQeYARiEQA0BBCUEAIANrIgMgA0EJTxshCgJAIAYgCE0EQCAIKAIARUECdCEHDAELQYCU69wDIAp2IRRBfyAKdEF/cyEWQQAhAyAIIQcDQCAHIAMgBygCACIXIAp2ajYCACAWIBdxIBRsIQMgB0EEaiIHIAZJDQALIAgoAgBFQQJ0IQcgA0UNACAGIAM2AgAgBkEEaiEGCyAMIAwoAiwgCmoiAzYCLCANIAcgCGoiCCAQGyIHIA9BAnRqIAYgBiAHa0ECdSAPShshBiADQQBIDQALC0EAIQMCQCAGIAhNDQAgDSAIa0ECdUEJbCEDQQohByAIKAIAIgpBCkkNAANAIANBAWohAyAKIAdBCmwiB08NAAsLIAsgA0EAIA5B5gBHG2sgDkHnAEYgC0EAR3FrIgcgBiANa0ECdUEJbEEJa0gEQCAMQTBqQYRgQaRiIAlBAEgbaiAHQYDIAGoiCkEJbSIPQQJ0aiEJQQohByAPQXdsIApqIgpBB0wEQANAIAdBCmwhByAKQQFqIgpBCEcNAAsLAkAgCSgCACIQIBAgB24iDyAHbCIKRiAJQQRqIhQgBkZxDQAgECAKayEQAkAgD0EBcUUEQEQAAAAAAABAQyEBIAdBgJTr3ANHDQEgCCAJTw0BIAlBBGstAABBAXFFDQELRAEAAAAAAEBDIQELRAAAAAAAAOA/RAAAAAAAAPA/RAAAAAAAAPg/IAYgFEYbRAAAAAAAAPg/IBAgB0EBdiIURhsgECAUSRshGQJAIBUNACATLQAAQS1HDQAgGZohGSABmiEBCyAJIAo2AgAgASAZoCABYQ0AIAkgByAKaiIDNgIAIANBgJTr3ANPBEADQCAJQQA2AgAgCCAJQQRrIglLBEAgCEEEayIIQQA2AgALIAkgCSgCAEEBaiIDNgIAIANB/5Pr3ANLDQALCyANIAhrQQJ1QQlsIQNBCiEHIAgoAgAiCkEKSQ0AA0AgA0EBaiEDIAogB0EKbCIHTw0ACwsgCUEEaiIHIAYgBiAHSxshBgsDQCAGIgcgCE0iCkUEQCAGQQRrIgYoAgBFDQELCwJAIA5B5wBHBEAgBEEIcSEJDAELIANBf3NBfyALQQEgCxsiBiADSiADQXtKcSIJGyAGaiELQX9BfiAJGyAFaiEFIARBCHEiCQ0AQXchBgJAIAoNACAHQQRrKAIAIg5FDQBBCiEKQQAhBiAOQQpwDQADQCAGIglBAWohBiAOIApBCmwiCnBFDQALIAlBf3MhBgsgByANa0ECdUEJbCEKIAVBX3FBxgBGBEBBACEJIAsgBiAKakEJayIGQQAgBkEAShsiBiAGIAtKGyELDAELQQAhCSALIAMgCmogBmpBCWsiBkEAIAZBAEobIgYgBiALShshCwtBfyEKIAtB/f///wdB/v///wcgCSALciIQG0oNASALIBBBAEdqQQFqIQ4CQCAFQV9xIhVBxgBGBEAgAyAOQf////8Hc0oNAyADQQAgA0EAShshBgwBCyASIAMgA0EfdSIGcyAGa60gEhAqIgZrQQFMBEADQCAGQQFrIgZBMDoAACASIAZrQQJIDQALCyAGQQJrIg8gBToAACAGQQFrQS1BKyADQQBIGzoAACASIA9rIgYgDkH/////B3NKDQILIAYgDmoiAyARQf////8Hc0oNASAAQSAgAiADIBFqIgMgBBAcIAAgEyAREBkgAEEwIAIgAyAEQYCABHMQHAJAAkACQCAVQcYARgRAIAxBEGpBCXIhBSANIAggCCANSxsiCSEIA0AgCDUCACAFECohBgJAIAggCUcEQCAGIAxBEGpNDQEDQCAGQQFrIgZBMDoAACAGIAxBEGpLDQALDAELIAUgBkcNACAGQQFrIgZBMDoAAAsgACAGIAUgBmsQGSAIQQRqIgggDU0NAAsgEARAIABBggxBARAZCyAHIAhNDQEgC0EATA0BA0AgCDUCACAFECoiBiAMQRBqSwRAA0AgBkEBayIGQTA6AAAgBiAMQRBqSw0ACwsgACAGQQkgCyALQQlOGxAZIAtBCWshBiAIQQRqIgggB08NAyALQQlKIRggBiELIBgNAAsMAgsCQCALQQBIDQAgByAIQQRqIAcgCEsbIQ0gDEEQakEJciEFIAghBwNAIAUgBzUCACAFECoiBkYEQCAGQQFrIgZBMDoAAAsCQCAHIAhHBEAgBiAMQRBqTQ0BA0AgBkEBayIGQTA6AAAgBiAMQRBqSw0ACwwBCyAAIAZBARAZIAZBAWohBiAJIAtyRQ0AIABBggxBARAZCyAAIAYgBSAGayIGIAsgBiALSBsQGSALIAZrIQsgB0EEaiIHIA1PDQEgC0EATg0ACwsgAEEwIAtBEmpBEkEAEBwgACAPIBIgD2sQGQwCCyALIQYLIABBMCAGQQlqQQlBABAcCyAAQSAgAiADIARBgMAAcxAcIAMgAiACIANIGyEKDAELIBMgBUEadEEfdUEJcWohCAJAIANBC0sNAEEMIANrIQZEAAAAAAAAMEAhGQNAIBlEAAAAAAAAMECiIRkgBkEBayIGDQALIAgtAABBLUYEQCAZIAGaIBmhoJohAQwBCyABIBmgIBmhIQELIBIgDCgCLCIHIAdBH3UiBnMgBmutIBIQKiIGRgRAIAZBAWsiBkEwOgAACyARQQJyIQsgBUEgcSENIAZBAmsiCSAFQQ9qOgAAIAZBAWtBLUErIAdBAEgbOgAAIARBCHEhBiAMQRBqIQcDQCAHIgUCfyABmUQAAAAAAADgQWMEQCABqgwBC0GAgICAeAsiB0HQxAFqLQAAIA1yOgAAIAEgB7ehRAAAAAAAADBAoiEBAkAgBUEBaiIHIAxBEGprQQFHDQACQCAGDQAgA0EASg0AIAFEAAAAAAAAAABhDQELIAVBLjoAASAFQQJqIQcLIAFEAAAAAAAAAABiDQALQX8hCkH9////ByALIBIgCWsiBmoiDWsgA0gNACAAQSAgAiANIANBAmogByAMQRBqIgdrIgUgBUECayADSBsgBSADGyIKaiIDIAQQHCAAIAggCxAZIABBMCACIAMgBEGAgARzEBwgACAHIAUQGSAAQTAgCiAFa0EAQQAQHCAAIAkgBhAZIABBICACIAMgBEGAwABzEBwgAyACIAIgA0gbIQoLIAxBsARqJAAgCgsEAEIACwQAQQALnwMBCX9B5gohAAJAA0AgAC0AACIBRQ0BIAFBPUYNASAAQQFqIgBBA3ENAAsCQAJAQYCChAggACgCACICayACckGAgYKEeHFBgIGChHhHDQADQEGAgoQIIAJBvfr06QNzIgFrIAFyQYCBgoR4cUGAgYKEeEcNASAAKAIEIQIgAEEEaiIBIQAgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALDAELIAAhAQsDQCABIgAtAAAiAkUNASAAQQFqIQEgAkE9Rw0ACwsgACIBQeYKRgRAQQAPCwJAIAFB5gprIgBB5gpqLQAADQBBsM8BKAIAIgRFDQAgBCgCACIFRQ0AA0ACQAJ/IAUhAkHmCiEGQQAgACIBRQ0AGkHmCi0AACIDBH8CQANAIAMgAi0AACIHRw0BIAdFDQEgAUEBayIBRQ0BIAJBAWohAiAGLQABIQMgBkEBaiEGIAMNAAtBACEDCyADBUEACyACLQAAawtFBEAgACAFaiIBLQAAQT1GDQELIAQoAgQhBSAEQQRqIQQgBQ0BDAILCyABQQFqIQgLIAgLCQAgACgCPBANC84CAQh/IwBBIGsiAyQAIAMgACgCHCIENgIQIAAoAhQhBSADIAI2AhwgAyABNgIYIAMgBSAEayIBNgIUIAEgAmohBUECIQYgA0EQaiEBAn8DQAJAAkACQCAAKAI8IAEgBiADQQxqEAEiBAR/QZTHASAENgIAQX8FQQALRQRAIAUgAygCDCIHRg0BIAdBAE4NAgwDCyAFQX9HDQILIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwDCyABIAcgASgCBCIISyIJQQN0aiIEIAcgCEEAIAkbayIIIAQoAgBqNgIAIAFBDEEEIAkbaiIBIAEoAgAgCGs2AgAgBSAHayEFIAYgCWshBiAEIQEMAQsLIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgBkECRg0AGiACIAEoAgRrCyEKIANBIGokACAKC1YBAn8gACgCPCEEIwBBEGsiACQAIAQgAacgAUIgiKcgAkH/AXEgAEEIahAJIgIEf0GUxwEgAjYCAEF/BUEACyECIAApAwghASAAQRBqJABCfyABIAIbCwYAIAAQAAsGACAAEAML8n4FAnw2fwh7A34GfSMAQeDAAGsiGCQAIBhBADYCIEECIQwCQAJAIAAoAgAiB0GNlJzUAEYNACAHQf+f/Y8FRwRAAkAgB0GAgIDgAEcNACAAKAIEQeqggYECRw0AIAAoAghBjZSc1ABGDQILQc0IEABBASEMDAILQQAhDAsCf0EAQQFB4AAQEyIHRQ0AGiAHQQE2AkwCQAJAAkACQCAMDgMAAwEDCyAHQcMANgJYIAdBxAA2AlQgB0HFADYCUCAHQcYANgIQIAdBxwA2AgQgB0HIADYCHCAHQckANgIYIAdBygA2AhQgB0HLADYCACAHQcwANgJcIAdBzQA2AiwgB0HOADYCKCAHQc8ANgIkIAdB0AA2AiAgB0HRADYCDCAHQdIANgIIIAcQTSIINgIwIAgNAQwCCyAHQdMANgJYIAdB1AA2AlQgB0HVADYCUCAHQdYANgIQIAdB1wA2AgQgB0HYADYCXCAHQdkANgIsIAdB2gA2AiggB0HbADYCJCAHQdwANgIgIAdB3QA2AhwgB0HeADYCGCAHQd8ANgIUIAdB4AA2AgwgB0HhADYCCCAHQeIANgIAIAcCf0EBQYgBEBMiCARAIAgQTSIONgIAAkAgDkUNACAI/QwAAAAAAAAAAAAAAAAAAAAA/QsCbCAIQQA6AHwgCBAzIg42AgQgDkUNACAIEDMiDjYCCCAORQ0AIAgMAgsgCBBwC0EACyIINgIwIAhFDQELIAdBATYCSCAHQQE2AkAgB0EANgI8IAdCADcCNCAHQQE2AkQgBwwBCyAHEBBBAAsiCARAIAhBADYCPCAIQeMANgJICyAIBEAgCEEANgI4IAhB5AA2AkQLIAgEQCAIQQA2AjQgCEHlADYCQAsgGEEkaiIHBEAgB0EAQbjAABAVIgdBADYCuEAgB0J/NwKIQAsgAwRAIBggGCgC3EBBAXI2AtxACyAYIAE2AhwgGCAANgIYIBggADYCFEEBIQxBACEBAkAgGEEUaiIHRQ0AQQFByAAQEyIABH8CfyAAQYCAwAA2AkAgAEGAgMAAEBQiDjYCICAORQRAIAAQEEEADAELIAAgDjYCJCAAQQI2AhwgAEEDNgIYIABBBDYCFCAAQQU2AhAgAEEGNgIsIABBCDYCKCAAIAAoAkRBAnI2AkQgAAsFQQALIgBFDQAgAARAIABBADYCBCAAIAc2AgALIAc1AgghRSAABEAgACBFNwMICwJAIABFDQAgAC0AREECcUUNACAAQT82AhALIAAEQCAAQcEANgIYCyAABEAgAEHCADYCHAsgACEBCyABIQACfyAYQSRqIQECQCAIRQ0AIAFFDQAgCCgCTEUEQCAIQTRqQQFBtMkAQQAQD0EADAILIAgoAjAgASAIKAIYEQMAQQEhCwsgCwtFBEBB3AgQACAAEDQgCBA1DAELAn8gGEEgaiEBQQAhBwJAIABFDQAgCEUNACAIKAJMRQRAIAhBNGpBAUGFygBBABAPQQAMAgsgACAIKAIwIAEgCEE0aiAIKAIAEQEAIQcLIAcLRQRAQfgIEAAgABA0IAgQNSAYKAIgECEMAQsgGCgCICEBQQAhBwJAIAhFDQAgAEUNACAIKAJMRQ0AIAgoAjAgACABIAhBNGogCCgCBBEBACEHCwJAIAcEQEEAIQcCQCAIRQ0AIABFDQAgCCgCTEUNACAIKAIwIAAgCEE0aiAIKAIQEQAAIQcLIAcNAQtB/wkQACAIEDUgABA0IBgoAiAQIQwBCyAAEDQgCBA1IBgoAiAiDSgCHCIABEAgABAQIBgoAiAiDUIANwIcCyANKAIQISECQAJAIAJFBEACQCAERQ0AICFBBEcNAEEBIRlBBCEhDAMLAkACQCANKAIUIgFBA0YNACAhQQNHDQAgDSgCGCIAKAIAIAAoAgRHDQEgACgCNEEBRg0BIA1BAzYCFAwDCyAhQQJLDQAgDUECNgIUDAMLAkACQCABQQNrDgMDAQAECyMAQRBrIg4kAAJAAkACQCANKAIQQQRJDQAgDSgCGCIAKAIAIgEgACgCNEcNACABIAAoAmhHDQAgASAAKAKcAUcNACAAKAIEIgEgACgCOEcNACABIAAoAmxHDQAgASAAKAKgAUYNAQsgDkGHCDYCBCAOQbgKNgIAQejEAUHtPSAOEBYMAQsCQCAAKAIMIAAoAghsIghFBEAgACgCyAEhAQwBC0MAAIA/QX8gACgCtAF0QX9zs5UhSEMAAIA/QX8gACgCgAF0QX9zs5UhSkMAAIA/QX8gACgCTHRBf3OzlSFLQwAAgD9BfyAAKAIYdEF/c7OVIUkgACgCyAEhASAAKAKUASECIAAoAmAhCiAAKAIsIQdBACEAAkAgCEEISQ0AIAcgCiAIQQJ0IgtqIg9JIAogByALaiIXSXENACACIBdJIAcgAiALaiIJSXENACABIBdJIAcgASALaiILSXENACACIA9JIAkgCktxDQAgASAPSSAKIAtJcQ0AIAEgCUkgAiALSXENACAIQXxxIQAgSP0TIT0gSv0TIT4gS/0TIUMgSf0TIUBBACELA0AgAiALQQJ0Ig9qIhf9AAIAIUEgCiAPaiIJ/QACACFCIAcgD2oiEP0MAACAPwAAgD8AAIA/AACAPyBAIBD9AAIA/foB/eYB/eUB/QwAAH9DAAB/QwAAf0MAAH9D/eYB/QwAAIA/AACAPwAAgD8AAIA/ID0gASAPav0AAgD9+gH95gH95QEiP/3mAf34Af0LAgAgCf0MAACAPwAAgD8AAIA/AACAPyBDIEL9+gH95gH95QH9DAAAf0MAAH9DAAB/QwAAf0P95gEgP/3mAf34Af0LAgAgF/0MAACAPwAAgD8AAIA/AACAPyA+IEH9+gH95gH95QH9DAAAf0MAAH9DAAB/QwAAf0P95gEgP/3mAf34Af0LAgAgC0EEaiILIABHDQALIAAgCEYNAQsDQAJ/QwAAgD8gSSAHIABBAnQiC2oiDygCALKUk0MAAH9DlEMAAIA/IEggASALaigCALKUkyJMlCJNi0MAAABPXQRAIE2oDAELQYCAgIB4CyEXIAIgC2oiCSgCACEQIAogC2oiCygCACEMIA8gFzYCACALAn9DAACAPyBLIAyylJNDAAB/Q5QgTJQiTYtDAAAAT10EQCBNqAwBC0GAgICAeAs2AgAgCQJ/QwAAgD8gSiAQspSTQwAAf0OUIEyUIkyLQwAAAE9dBEAgTKgMAQtBgICAgHgLNgIAIABBAWoiACAIRw0ACwsgARAQIA0oAhgiAEEINgKAASAAQQg2AkwgAEEINgIYIABBADYCyAEgDUEBNgIUIA0gDSgCEEEBayIANgIQIABBBEkNAEEDIQADQCANKAIYIABBNGxqIgEgASgCZDYCMCABIAH9AAJU/QsCICABIAH9AAJE/QsCECABIAH9AAI0/QsCACAAQQFqIgAgDSgCEEkNAAsLIA5BEGokAAwDCyMAQRBrIgskAAJAAkACQCANKAIQQQNJDQAgDSgCGCIAKAIAIgEgACgCNEcNACABIAAoAmhHDQAgACgCBCIBIAAoAjhHDQAgASAAKAJsRg0BCyALQcUINgIEIAtBuAo2AgBB6MQBQZc+IAsQFgwBCwJAIAAoAgwgACgCCGwiAkUNAEF/IAAoAhgiCnRBf3MhAUEAQQEgCkEBa3QiCiAAKAKIARshD0EAIAogACgCVBshFyAAKAKUASEKIAAoAmAhByAAKAIsIQ5BACEAAkAgAkEESQ0AIA4gByACQQJ0IghqIglJIAcgCCAOaiIQSXENACAKIBBJIA4gCCAKaiIISXENACAHIAhJIAkgCktxDQAgAkF8cSEAIAH9ESE/IA/9ESFAIBf9ESFBQQAhCANAIA4gCEECdCIJaiIQID8gCSAKaiIM/QACACBA/bEB/foBIj39DGl0sz9pdLM/aXSzP2l0sz/95gEgByAJaiIJ/QACACBB/bEB/foBIj79DLNZGrizWRq4s1kauLNZGrj95gEgEP0AAgD9+gEiQ/3kAf3kAf0MAAAAPwAAAD8AAAA/AAAAP/3kAf34ASJC/QwAAAAAAAAAAAAAAAAAAAAA/bgBID8gQv05/VL9CwIAIAkgPyA9/QwZ0Da/GdA2vxnQNr8Z0Da//eYBIEP9DNUJgD/VCYA/1QmAP9UJgD/95gEgPv0MJzGwvicxsL4nMbC+JzGwvv3mAf3kAf3kAf0MAAAAPwAAAD8AAAA/AAAAP/3kAf34ASJC/QwAAAAAAAAAAAAAAAAAAAAA/bgBID8gQv05/VL9CwIAIAwgPyA9/Qy9Nwa3vTcGt703Bre9Nwa3/eYBIEP9DGb0fz9m9H8/ZvR/P2b0fz/95gEgPv0MNdLiPzXS4j810uI/NdLiP/3mAf3kAf3kAf0MAAAAPwAAAD8AAAA/AAAAP/3kAf34ASI9/QwAAAAAAAAAAAAAAAAAAAAA/bgBID8gPf05/VL9CwIAIAhBBGoiCCAARw0ACyAAIAJGDQELA0ACfyAKIABBAnQiCGoiCSgCACAPa7IiSENpdLM/lCAHIAhqIhAoAgAgF2uyIkpDs1kauJQgCCAOaiIMKAIAsiJLkpJDAAAAP5IiSYtDAAAAT10EQCBJqAwBC0GAgICAeAshCCAMIAEgCEEAIAhBAEobIAEgCEgbNgIAIBAgAQJ/IEhDGdA2v5QgS0PVCYA/lCBKQycxsL6UkpJDAAAAP5IiSYtDAAAAT10EQCBJqAwBC0GAgICAeAsiCEEAIAhBAEobIAEgCEgbNgIAIAkgAQJ/IEhDvTcGt5QgS0Nm9H8/lCBKQzXS4j+UkpJDAAAAP5IiSItDAAAAT10EQCBIqAwBC0GAgICAeAsiCEEAIAhBAEobIAEgCEgbNgIAIABBAWoiACACRw0ACwsgDUEBNgIUCyALQRBqJAAMAgsgISACIAIgIUsbISFBASEZDAELAkACQAJ/AkACQCANKAIYIgEoAgBBAUcNAAJAAkAgASgCNEEBaw4CAQACCyABKAJoQQJHDQECQCABKAIEQQFHDQAgASgCOEECRw0AIAEoAmxBAkcNAEEAIQsgDSIXKAIYIgAoAhghASAAKAKUASERIAAoAmAhCiAAKAIsIRAgACgCCCINIAAoAgwiAmxBAnQiABAYIQcgABAYIQggABAYIQ4CQAJAAkACQAJAAkAgB0UNACAIRQ0AIA5FDQBBfyABdEF/cyEJQQEgAUEBa3QhDCACIBcoAgRBAXEiAGshHiAXKAIAQQFxIRsgAEUNAyANRQ0DAn9BACAMa7K7IgVEarx0kxgE1j+iIAVEDAIrhxbZ5j+ioCIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAshFAJ/IAVEJzEIrBxa/D+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyEaIA1BCEkhOAJ/IAVEO99PjZdu9j+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyEdIDgNASAIIAdrQRBJDQEgDiAHa0EQSQ0BIAcgEGtBEEkNASAOIAhrQRBJDQEgCCAQa0EQSQ0BIA4gEGtBEEkNASAOIA1BfHEiC0ECdCICaiEBIAIgB2ohACAa/REhPiAU/REhQyAJ/REhPyAd/REhQANAIAcgD0ECdCITav0MAAAAAAAAAAAAAAAAAAAAACAQIBNq/QACACI9IED9rgEiQSA//bYBIEH9DAAAAAAAAAAAAAAAAAAAAAD9Of1S/QsCACAIIBNq/QwAAAAAAAAAAAAAAAAAAAAAID0gQ/2xASJBID/9tgEgQf0MAAAAAAAAAAAAAAAAAAAAAP05/VL9CwIAIA4gE2r9DAAAAAAAAAAAAAAAAAAAAAAgPSA+/a4BIj0gP/22ASA9/QwAAAAAAAAAAAAAAAAAAAAA/Tn9Uv0LAgAgD0EEaiIPIAtHDQALIAIgEGohECACIAhqIQIgCyANRg0EDAILIAcQECAIEBAgDhAQDAQLIAchACAIIQIgDiEBCwNAIAAgECgCACIPIB1qIhMgCSAJIBNKG0EAIBNBAE4bNgIAIAIgDyAUayITIAkgCSATShtBACATQQBOGzYCACABIA8gGmoiDyAJIAkgD0obQQAgD0EAThs2AgAgAUEEaiEBIAJBBGohAiAAQQRqIQAgEEEEaiEQIAtBAWoiCyANRw0ACwwBCyAOIQEgCCECIAchAAsgDSAbayEaAkAgHkF+cSIdBH8Cf0EAIAxrsrsiBURqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyEiIBpBfnEiHEEBayE5An8gBUQnMQisHFr8P6IiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLISMgOUF+cSE6An8gBUQ730+Nl272P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLISQgHUEBayElIDpBAmohJiANQQJ0IQ0DQCABIA1qIQ8gAiANaiETIAAgDWohCyANIBBqIRQgGwRAIAAgECgCACIVICRqIhIgCSAJIBJKG0EAIBJBAE4bNgIAIAIgFSAiayISIAkgCSASShtBACASQQBOGzYCACABIBUgI2oiFSAJIAkgFUobQQAgFUEAThs2AgAgCigCACEWIAsCfyARKAIAIAxrsrsiBUQ730+Nl272P6IiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLIBQoAgAiFWoiEiAJIAkgEkobQQAgEkEAThs2AgAgEyAVAn8gFiAMa7K7IgZEarx0kxgE1j+iIAVEDAIrhxbZ5j+ioCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAtrIhIgCSAJIBJKG0EAIBJBAE4bNgIAIA8CfyAGRCcxCKwcWvw/oiIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAsgFWoiFSAJIAkgFUobQQAgFUEAThs2AgAgD0EEaiEPIBNBBGohEyALQQRqIQsgFEEEaiEUIAJBBGohAiAQQQRqIRAgAUEEaiEBIABBBGohAAtBACEVIBwEfwNAIAooAgAhHyAAAn8gESgCACAMa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAQKAIAIhJqIhYgCSAJIBZKG0EAIBZBAE4bNgIAIAIgEgJ/IB8gDGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIWIAkgCSAWShtBACAWQQBOGzYCACABAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIBJqIhIgCSAJIBJKG0EAIBJBAE4bNgIAIAooAgAhHyAAAn8gESgCACAMa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAQKAIEIhJqIhYgCSAJIBZKG0EAIBZBAE4bNgIEIAIgEgJ/IB8gDGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIWIAkgCSAWShtBACAWQQBOGzYCBCABAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIBJqIhIgCSAJIBJKG0EAIBJBAE4bNgIEIAooAgAhHyALAn8gESgCACAMa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAUKAIAIhJqIhYgCSAJIBZKG0EAIBZBAE4bNgIAIBMgEgJ/IB8gDGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIWIAkgCSAWShtBACAWQQBOGzYCACAPAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIBJqIhIgCSAJIBJKG0EAIBJBAE4bNgIAIAooAgAhHyALAn8gESgCACAMa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAUKAIEIhJqIhYgCSAJIBZKG0EAIBZBAE4bNgIEIBMgEgJ/IB8gDGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIWIAkgCSAWShtBACAWQQBOGzYCBCAPAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIBJqIhIgCSAJIBJKG0EAIBJBAE4bNgIEIBFBBGohESAKQQRqIQogD0EIaiEPIBNBCGohEyALQQhqIQsgFEEIaiEUIAFBCGohASACQQhqIQIgAEEIaiEAIBBBCGohECAVQQJqIhUgHEkNAAsgJgVBAAsgGkkEfyAKKAIAIRYgAAJ/IBEoAgAgDGuyuyIFRDvfT42XbvY/oiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgECgCACIVaiISIAkgCSASShtBACASQQBOGzYCACACIBUCfyAWIAxrsrsiBkRqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C2siEiAJIAkgEkobQQAgEkEAThs2AgAgAQJ/IAZEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyAVaiIVIAkgCSAVShtBACAVQQBOGzYCACAKKAIAIRUgCwJ/IBEoAgAgDGuyuyIFRDvfT42XbvY/oiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgFCgCACILaiIUIAkgCSAUShtBACAUQQBOGzYCACATIAsCfyAVIAxrsrsiBkRqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C2siEyAJIAkgE0obQQAgE0EAThs2AgAgDwJ/IAZEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyALaiILIAkgCSALShtBACALQQBOGzYCACARQQRqIREgCkEEaiEKIAJBBGohAiAQQQRqIRAgAEEEaiEAIAFBBGoFIAELIA1qIQEgAiANaiECIAAgDWohACANIBBqIRAgIEECaiIgIB1JDQALICVBfnFBAmoFQQALIB5PDQAgGwRAIAACf0EAIAxrsrsiBUQ730+Nl272P6IiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLIBAoAgAiC2oiDSAJIAkgDUobQQAgDUEAThs2AgAgAiALAn8gBURqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4C2siDSAJIAkgDUobQQAgDUEAThs2AgAgAQJ/IAVEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyALaiILIAkgCSALShtBACALQQBOGzYCACACQQRqIQIgEEEEaiEQIAFBBGohASAAQQRqIQALIBpBfnEiIAR/ICBBAWsiC0F+cSE7AkACf0EAICBBD0kNABpBACAAIAIgC0EBdiIUQQN0QQhqIhNqIgtJIAIgACATaiINSXENABpBACABIA1JIAAgASATaiIPSXENABpBACAAIBAgE2oiE0kgDSAQS3ENABpBACAKIA1JIAAgCiAUQQJ0QQRqIh5qIhtJcQ0AGkEAIA0gEUsgACARIB5qIg1JcQ0AGkEAIAIgD0kgASALSXENABpBACACIBNJIAsgEEtxDQAaQQAgCiALSSACIBtJcQ0AGkEAIAIgDUkgCyARS3ENABpBACABIBNJIA8gEEtxDQAaQQAgCiAPSSABIBtJcQ0AGkEAIAEgDUkgDyARS3ENABogCiAUQQFqIhZB/P///wdxIhtBAnQiImohCyABIBtBA3QiHmohDSAAIB5qIQ8gCf0RIT8gDP0RIUNBACETA0AgECATQQN0IhRBGHIiHWoiIyAQIBRBEHIiHGoiJCAQIBRBCHIiFWoiJSAQIBRqIib9CQIA/VYCAAH9VgIAAv1WAgADIT0CfyARIBNBAnQiH2r9AAIAIEP9sQH9+gEiPv1fIkD9DDvfT42XbvY/O99PjZdu9j/98gEiQf0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshJyAKIB9q/QACACFCIAAgFGoiH/0MAAAAAAAAAAAAAAAAAAAAACA9An8gQf0hACIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9ESAn/RwBAn8gPiA+/Q0ICQoLDA0ODwABAgMAAQID/V8iQf0MO99PjZdu9j8730+Nl272P/3yASI+/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0cAgJ/ID79IQEiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwDIkT9rgEiPiA//bYBID79DAAAAAAAAAAAAAAAAAAAAAD9Of1SIj79WgIAACAAIBVqIicgPv1aAgABIAAgHGoiKSA+/VoCAAIgACAdaiIqID79WgIAAwJ/IEIgQ/2xAf36ASI+/V8iQv0Marx0kxgE1j9qvHSTGATWP/3yASBA/QwMAiuHFtnmPwwCK4cW2eY//fIB/fABIkD9IQEiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLISggAiAUaiIr/QwAAAAAAAAAAAAAAAAAAAAAID0CfyBA/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0RICj9HAECfyA+/QwAAAAAAAAAAAAAAAAAAAAA/Q0ICQoLDA0ODwABAgMAAQID/V8iQP0Marx0kxgE1j9qvHSTGATWP/3yASBB/QwMAiuHFtnmPwwCK4cW2eY//fIB/fABIj79IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwCAn8gPv0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAMiQf2xASI+ID/9tgEgPv0MAAAAAAAAAAAAAAAAAAAAAP05/VIiPv1aAgAAIAIgFWoiKCA+/VoCAAEgAiAcaiIsID79WgIAAiACIB1qIi0gPv1aAgADAn8gQv0MJzEIrBxa/D8nMQisHFr8P/3yASI+/SEBIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyEuIAEgFGoiFP0MAAAAAAAAAAAAAAAAAAAAACA9An8gPv0hACIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9ESAu/RwBAn8gQP0MJzEIrBxa/D8nMQisHFr8P/3yASI9/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0cAgJ/ID39IQEiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwDIkD9rgEiPSA//bYBID39DAAAAAAAAAAAAAAAAAAAAAD9Of1SIj39WgIAACABIBVqIhUgPf1aAgABIAEgHGoiHCA9/VoCAAIgASAdaiIdID39WgIAAyAf/QwAAAAAAAAAAAAAAAAAAAAAICNBBGogJEEEaiAlQQRqICb9CQIE/VYCAAH9VgIAAv1WAgADIj4gRP2uASI9ID/9tgEgPf0MAAAAAAAAAAAAAAAAAAAAAP05/VIiPf1aAgQAICcgPf1aAgQBICkgPf1aAgQCICogPf1aAgQDICv9DAAAAAAAAAAAAAAAAAAAAAAgPiBB/bEBIj0gP/22ASA9/QwAAAAAAAAAAAAAAAAAAAAA/Tn9UiI9/VoCBAAgKCA9/VoCBAEgLCA9/VoCBAIgLSA9/VoCBAMgFP0MAAAAAAAAAAAAAAAAAAAAACA+IED9rgEiPSA//bYBID39DAAAAAAAAAAAAAAAAAAAAAD9Of1SIj39WgIEACAVID39WgIEASAcID39WgIEAiAdID39WgIEAyATQQRqIhMgG0cNAAsgESAiaiERIBAgHmohECACIB5qIQIgFiAbRgRAIA8hACANIQEgCyEKDAILIA8hACANIQEgCyEKIBtBAXQLIQsDQCAKKAIAIRMgAAJ/IBEoAgAgDGuyuyIFRDvfT42XbvY/oiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgECgCACINaiIPIAkgCSAPShtBACAPQQBOGzYCACACIA0CfyATIAxrsrsiBkRqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C2siDyAJIAkgD0obQQAgD0EAThs2AgAgAQJ/IAZEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyANaiINIAkgCSANShtBACANQQBOGzYCACAKKAIAIRMgAAJ/IBEoAgAgDGuyuyIFRDvfT42XbvY/oiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgECgCBCINaiIPIAkgCSAPShtBACAPQQBOGzYCBCACIA0CfyATIAxrsrsiBkRqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C2siDyAJIAkgD0obQQAgD0EAThs2AgQgAQJ/IAZEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyANaiINIAkgCSANShtBACANQQBOGzYCBCARQQRqIREgCkEEaiEKIAFBCGohASACQQhqIQIgAEEIaiEAIBBBCGohECALQQJqIgsgIEkNAAsLIDtBAmoFQQALIBpPDQAgCigCACELIAACfyARKAIAIAxrsrsiBUQ730+Nl272P6IiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLIBAoAgAiAGoiCiAJIAkgCkobQQAgCkEAThs2AgAgAiAAAn8gCyAMa7K7IgZEarx0kxgE1j+iIAVEDAIrhxbZ5j+ioCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAtrIgIgCSACIAlIG0EAIAJBAE4bNgIAIAECfyAGRCcxCKwcWvw/oiIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAsgAGoiACAJIAAgCUgbQQAgAEEAThs2AgALIBcoAhgoAiwQECAXKAIYIgAgBzYCLCAAKAJgEBAgFygCGCIAIAg2AmAgACgClAEQECAXKAIYIgAgDjYClAEgACAA/QACACI//QsCaCAAID/9CwI0IBdBATYCFAsMBwsgASgCBEEBRw0BIAEoAjhBAUcNASABKAJsQQFHDQEgASgCGCEAIAEoApQBIQIgASgCYCEHIAEoAiwhDCABKAIIIgogASgCDCIWbEECdCIBEBghDyABEBghFyABEBghCSAPRQ0FIBdFDQUgCUUNBSAWBEAgCiANKAIAQQFxIh9rISICf0EAQQEgAEEBa3QiFGuyuyIFRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLISdBfyAAdCE8ICJBfnEiHUEBayIKQQF2IgBBAWohIwJ/IAVEJzEIrBxa/D+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyEpIApBfnEhCiAAQQJ0IQggAEEDdCEAICNBfHEhGyA8QX9zIRECfyAFRDvfT42XbvY/oiIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshKiAKQQJqISQgCEEEaiElIABBCGohICAbQQJ0ISYgG0EDdCEeIBtBAXQhECAR/REhPyAU/REhQyAdQQdJISggDyEKIBchACAJIQ4DQCAfBEAgCiAMKAIAIgEgKmoiCCARIAggEUgbQQAgCEEAThs2AgAgACABICdrIgggESAIIBFIG0EAIAhBAE4bNgIAIA4gASApaiIBIBEgASARSBtBACABQQBOGzYCACAOQQRqIQ4gCkEEaiEKIAxBBGohDCAAQQRqIQALAn8CfyAdRQRAIAchASAOIQsgCiEIQQAMAQtBACEZAkACQCAoDQAgCiAAICBqIgFJIAAgCiAgaiIISXENACAKIA4gIGoiC0kgCCAOS3ENACAKIAwgIGoiGkkgCCAMS3ENACAHIAhJIAogByAlaiIcSXENACACIAhJIAogAiAlaiIISXENACAAIAtJIAEgDktxDQAgACAaSSABIAxLcQ0AIAAgHEkgASAHS3ENACAAIAhJIAEgAktxDQAgDiAaSSALIAxLcQ0AIA4gHEkgByALSXENACACIAtJIAggDktxDQAgByAmaiEBIA4gHmohCyAKIB5qIQgDQCAMIBlBA3QiGkEYciIcaiIrIAwgGkEQciIVaiIsIAwgGkEIciISaiItIAwgGmoiLv0JAgD9VgIAAf1WAgAC/VYCAAMhPQJ/IAIgGUECdCIvav0AAgAgQ/2xAf36ASI+/V8iQP0MO99PjZdu9j8730+Nl272P/3yASJB/SEBIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyEwIAcgL2r9AAIAIUIgCiAaaiIv/QwAAAAAAAAAAAAAAAAAAAAAID0CfyBB/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0RIDD9HAECfyA+ID79DQgJCgsMDQ4PAAECAwABAgP9XyJB/Qw730+Nl272PzvfT42XbvY//fIBIj79IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwCAn8gPv0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAMiRP2uASI+ID/9tgEgPv0MAAAAAAAAAAAAAAAAAAAAAP05/VIiPv1aAgAAIAogEmoiMCA+/VoCAAEgCiAVaiIyID79WgIAAiAKIBxqIjMgPv1aAgADAn8gQiBD/bEB/foBIj79XyJC/QxqvHSTGATWP2q8dJMYBNY//fIBIED9DAwCK4cW2eY/DAIrhxbZ5j/98gH98AEiQP0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshMSAAIBpqIjT9DAAAAAAAAAAAAAAAAAAAAAAgPQJ/IED9IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/REgMf0cAQJ/ID79DAAAAAAAAAAAAAAAAAAAAAD9DQgJCgsMDQ4PAAECAwABAgP9XyJA/QxqvHSTGATWP2q8dJMYBNY//fIBIEH9DAwCK4cW2eY/DAIrhxbZ5j/98gH98AEiPv0hACIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAICfyA+/SEBIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0cAyJB/bEBIj4gP/22ASA+/QwAAAAAAAAAAAAAAAAAAAAA/Tn9UiI+/VoCAAAgACASaiIxID79WgIAASAAIBVqIjUgPv1aAgACIAAgHGoiNiA+/VoCAAMCfyBC/QwnMQisHFr8PycxCKwcWvw//fIBIj79IQEiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLITcgDiAaaiIa/QwAAAAAAAAAAAAAAAAAAAAAID0CfyA+/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0RIDf9HAECfyBA/QwnMQisHFr8PycxCKwcWvw//fIBIj39IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwCAn8gPf0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAMiQP2uASI9ID/9tgEgPf0MAAAAAAAAAAAAAAAAAAAAAP05/VIiPf1aAgAAIA4gEmoiEiA9/VoCAAEgDiAVaiIVID39WgIAAiAOIBxqIhwgPf1aAgADIC/9DAAAAAAAAAAAAAAAAAAAAAAgK0EEaiAsQQRqIC1BBGogLv0JAgT9VgIAAf1WAgAC/VYCAAMiPiBE/a4BIj0gP/22ASA9/QwAAAAAAAAAAAAAAAAAAAAA/Tn9UiI9/VoCBAAgMCA9/VoCBAEgMiA9/VoCBAIgMyA9/VoCBAMgNP0MAAAAAAAAAAAAAAAAAAAAACA+IEH9sQEiPSA//bYBID39DAAAAAAAAAAAAAAAAAAAAAD9Of1SIj39WgIEACAxID39WgIEASA1ID39WgIEAiA2ID39WgIEAyAa/QwAAAAAAAAAAAAAAAAAAAAAID4gQP2uASI9ID/9tgEgPf0MAAAAAAAAAAAAAAAAAAAAAP05/VIiPf1aAgQAIBIgPf1aAgQBIBUgPf1aAgQCIBwgPf1aAgQDIBlBBGoiGSAbRw0ACyACICZqIQIgDCAeaiEMIAAgHmohACAQIRkgJCAbICNGDQIaDAELIAohCCAOIQsgByEBCwNAIAEoAgAhDiAIAn8gAigCACAUa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAMKAIAIgpqIgcgESAHIBFIG0EAIAdBAE4bNgIAIAAgCgJ/IA4gFGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIHIBEgByARSBtBACAHQQBOGzYCACALAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIApqIgogESAKIBFIG0EAIApBAE4bNgIAIAEoAgAhDiAIAn8gAigCACAUa7K7IgVEO99PjZdu9j+iIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyAMKAIEIgpqIgcgESAHIBFIG0EAIAdBAE4bNgIEIAAgCgJ/IA4gFGuyuyIGRGq8dJMYBNY/oiAFRAwCK4cW2eY/oqAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLayIHIBEgByARSBtBACAHQQBOGzYCBCALAn8gBkQnMQisHFr8P6IiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgLIApqIgogESAKIBFIG0EAIApBAE4bNgIEIAJBBGohAiABQQRqIQEgC0EIaiELIABBCGohACAIQQhqIQggDEEIaiEMIBlBAmoiGSAdSQ0ACyAkCyAiTwRAIAEhByAIIQogCwwBCyABKAIAIQ4gCAJ/IAIoAgAgFGuyuyIFRDvfT42XbvY/oiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgDCgCACIKaiIHIBEgByARSBtBACAHQQBOGzYCACAAIAoCfyAOIBRrsrsiBkRqvHSTGATWP6IgBUQMAiuHFtnmP6KgIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C2siByARIAcgEUgbQQAgB0EAThs2AgAgCwJ/IAZEJzEIrBxa/D+iIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyAKaiIKIBEgCiARSBtBACAKQQBOGzYCACACQQRqIQIgAUEEaiEHIABBBGohACAIQQRqIQogDEEEaiEMIAtBBGoLIQ4gE0EBaiITIBZHDQALCyANKAIYKAIsEBAgDSgCGCIAIA82AiwgACgCYBAQIA0oAhgiACAXNgJgIAAoApQBEBAgDSgCGCIAIAk2ApQBIAAgAP0AAgAiP/0LAmggACA//QsCNCANQQE2AhRBACEZDAYLIAEoAmhBAUcNACABKAIEQQFHDQAgASgCOEEBRw0AIAEoAmxBAUcNACABKAIYIQIgASgClAEhCCABKAJgIQwgASgCLCEAIAEoAgwgASgCCGwiF0ECdCIBEBghByABEBghDyABEBghDgJAIAdFDQAgD0UNACAORQ0AIBdFDQRBfyACdEF/cyEZQQEgAkEBa3QhESAXQQhJDQIgDyAHa0EQSQ0CIA4gB2tBEEkNAiAHIABrQRBJDQIgByAMa0EQSQ0CIAcgCGtBEEkNAiAOIA9rQRBJDQIgDyAAa0EQSQ0CIA8gDGtBEEkNAiAPIAhrQRBJDQIgDiAAa0EQSQ0CIA4gDGtBEEkNAiAOIAhrQRBJDQIgCCAXQXxxIgpBAnQiCWohCyAJIA5qIQEgByAJaiECIBn9ESE/IBH9ESE9A0ACfyAIIBNBAnQiEGr9AAIAID39sQH9+gEiPv1fIkD9DDvfT42XbvY/O99PjZdu9j/98gEiQf0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshFCAMIBBq/QACACFCIAcgEGr9DAAAAAAAAAAAAAAAAAAAAAAgACAQav0AAgAiQwJ/IEH9IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/REgFP0cAQJ/ID4gPv0NCAkKCwwNDg8AAQIDAAECA/1fIj79DDvfT42XbvY/O99PjZdu9j/98gEiQf0hACIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAICfyBB/SEBIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0cA/2uASJBID/9tgEgQf0MAAAAAAAAAAAAAAAAAAAAAP05/VL9CwIAAn8gQiA9/bEB/foBIkH9XyJC/QxqvHSTGATWP2q8dJMYBNY//fIBIED9DAwCK4cW2eY/DAIrhxbZ5j/98gH98AEiQP0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshFCAPIBBq/QwAAAAAAAAAAAAAAAAAAAAAIEMCfyBA/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0RIBT9HAECfyBB/QwAAAAAAAAAAAAAAAAAAAAA/Q0ICQoLDA0ODwABAgMAAQID/V8iQP0Marx0kxgE1j9qvHSTGATWP/3yASA+/QwMAiuHFtnmPwwCK4cW2eY//fIB/fABIj79IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwCAn8gPv0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAP9sQEiPiA//bYBID79DAAAAAAAAAAAAAAAAAAAAAD9Of1S/QsCAAJ/IEL9DCcxCKwcWvw/JzEIrBxa/D/98gEiPv0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAshFCAOIBBq/QwAAAAAAAAAAAAAAAAAAAAAIEMCfyA+/SEAIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4C/0RIBT9HAECfyBA/QwnMQisHFr8PycxCKwcWvw//fIBIj79IQAiBZlEAAAAAAAA4EFjBEAgBaoMAQtBgICAgHgL/RwCAn8gPv0hASIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAv9HAP9rgEiPiA//bYBID79DAAAAAAAAAAAAAAAAAAAAAD9Of1S/QsCACATQQRqIhMgCkcNAAsgCiAXRg0EIAkgDGohDCAAIAlqIQAgCSAPagwDCyAHEBAgDxAQIA4QEAwFCyAYQbkDNgIEIBhBuAo2AgBB6MQBQcI+IBgQFgwECyAHIQIgDiEBIAghCyAPCyEIA0AgDCgCACETIAICfyALKAIAIBFrsrsiBUQ730+Nl272P6IiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLIAAoAgAiCWoiECAZIBAgGUgbQQAgEEEAThs2AgAgCCAJAn8gEyARa7K7IgZEarx0kxgE1j+iIAVEDAIrhxbZ5j+ioCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAtrIhAgGSAQIBlIG0EAIBBBAE4bNgIAIAECfyAGRCcxCKwcWvw/oiIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAsgCWoiCSAZIAkgGUgbQQAgCUEAThs2AgAgAUEEaiEBIAhBBGohCCACQQRqIQIgC0EEaiELIAxBBGohDCAAQQRqIQAgCkEBaiIKIBdHDQALCyANKAIYKAIsEBAgDSgCGCIAIAc2AiwgACgCYBAQIA0oAhgiACAPNgJgIAAoApQBEBAgDSgCGCAONgKUASANQQE2AhRBACEZDAELIA8QECAXEBAgCRAQCyAYKAIgIQACQCADDQAgIUUNACAAKAIYIQ5BACETA0AgDiATQTRsaiIDKAIYIgJBCEcEQAJAIAJBB00EQCADKAIMIAMoAghsIQEgAygCLCEKIAMoAiAEQCABRQ0CQQEgAkEBa3StIUVBACEHIAFBBE8EQCABQXxxIQcgRf0SIT9BACEMA0AgCiAMQQJ0aiICIAL9AAIAIj39xwFBB/3LASI+/R0AID/9HQAiRn/9EiA+/R0BID/9HQEiR3/9HgEgPSA//Q0ICQoLDA0ODwABAgMAAQID/ccBQQf9ywEiPf0dACBGf/0SID39HQEgR3/9HgH9DQABAgMICQoLEBESExgZGhv9CwIAIAxBBGoiDCAHRw0ACyABIAdGDQMLA0AgCiAHQQJ0aiICIAI0AgBCB4YgRX8+AgAgB0EBaiIHIAFHDQALDAILIAFFDQFBfyACdEF/c60hRUEAIQcgAUEETwRAIAFBfHEhByBF/RIhP0EAIQwDQCAKIAxBAnRqIgIgAv0AAgAiPf3JAf0M/wAAAAAAAAD/AAAAAAAAAP3VASI+/R0AID/9HQAiRoD9EiA+/R0BID/9HQEiR4D9HgEgPSA//Q0ICQoLDA0ODwABAgMAAQID/ckB/Qz/AAAAAAAAAP8AAAAAAAAA/dUBIj39HQAgRoD9EiA9/R0BIEeA/R4B/Q0AAQIDCAkKCxAREhMYGRob/QsCACAMQQRqIgwgB0cNAAsgASAHRg0CCwNAIAogB0ECdGoiAiACNQIAQv8BfiBFgD4CACAHQQFqIgcgAUcNAAsMAQsgAkEIayEKIAMoAgwgAygCCGwhASADKAIsIQggAygCIARAIAFFDQFBACEHIAFBBE8EQCABQXxxIQdBACECA0AgCCACQQJ0aiILIAv9AAIAIAr9rAH9CwIAIAJBBGoiAiAHRw0ACyABIAdGDQILA0AgCCAHQQJ0aiICIAIoAgAgCnU2AgAgB0EBaiIHIAFHDQALDAELIAFFDQBBACEHIAFBBE8EQCABQXxxIQdBACECA0AgCCACQQJ0aiILIAv9AAIAIAr9rQH9CwIAIAJBBGoiAiAHRw0ACyABIAdGDQELA0AgCCAHQQJ0aiICIAIoAgAgCnY2AgAgB0EBaiIHIAFHDQALCyADQQg2AhgLIBNBAWoiEyAhRw0ACwsgACgCDCAAKAIIbCEBAkAgGUUEQCAAKAIUQQJGBEAgACgCEEEBRgRAIAAoAhgoAiwgARAODAMLIARFDQIgACgCGCIAKAIsIAAoAmAgARAIDAILIAAoAhgiACgCLCAAKAJgIAAoApQBIAEQBwwBCwJAAkACQCAhQQFrDgQAAwECAwsgACgCGCgCLCABEAYMAgsgACgCGCIAKAIsIAAoAmAgACgClAEgARAFDAELIAAoAhgiACgCLCAAKAJgIAAoApQBIAAoAsgBIAEQBAsgGCgCIBAhQQAhDAsgGEHgwABqJAAgDAsIAEEIIAAQJQurAgICfgJ/Qn8hAyAALQBEQQhxRQRAIAAgACgCICIGNgIkAkACQAJAIAAgACgCMCIFBH8DQCAGIAUgACgCACAAKAIUEQAAIgVBf0YNAiAAIAAoAiQgBWoiBjYCJCAAIAAoAjAgBWsiBTYCMCAFDQALIAAoAiAFIAYLNgIkIAFCAFUNAUIAIQMMAgsgACAAKAJEQQhyNgJEIAJBBEGB9QBBABAPIABBADYCMCAAIAAoAkRBCHI2AkRCfw8LQgAhAwNAIAEgACgCACAAKAIYEQsAIgRCf1EEQCACQQRB8vQAQQAQDyAAIAAoAkRBCHI2AkQgACAAKQM4IAN8NwM4Qn8gAyADUBsPCyADIAR8IQMgASAEfSIBQgBVDQALCyAAIAApAzggA3w3AzgLIAMLIwEBfyABIAEoAgAgASgCCCIBIACnIgIgASACSRtqNgIEQQELPAICfwF+IAEoAgAgASgCCGoiAyABKAIEIgJGBEBCfw8LIAEgAiAAp2o2AgQgAyACa6wiBCAAIAAgBFUbC5gDAgJ+An8gACgCMCIFIAGnIgZPBEAgACAFIAZrNgIwIAAgACgCJCAGajYCJCAAIAApAzggAXw3AzggAQ8LIAAtAERBBHEEQCAAQQA2AjAgACAAKAIkIAVqNgIkIAAgBa0iASAAKQM4fDcDOCABQn8gBRsPCwJAIAVFBEAMAQsgAEEANgIwIAAgACgCIDYCJCABIAWtIgN9IQELIAFCAFUEQANAIAApAwggACkDOCABIAN8fFQEQCACQQRBm/UAQQAQDyAAQQA2AjAgACAAKAIgNgIkIAAgACkDOCADfCIDNwM4IAApAwgiASADfSEEIAEgACgCACAAKAIcEQoAIQUgACgCRCECIAAgBQR/IAAgATcDOCACQXtxBSACC0EEcjYCREJ/IAQgASADURsPCyABIAAoAgAgACgCGBELACIEQn9RBEAgAkEEQZv1AEEAEA8gACAAKAJEQQRyNgJEIAAgACkDOCADfDcDOEJ/IAMgA1AbDwsgAyAEfCEDIAEgBH0iAUIAVQ0ACwsgACAAKQM4IAN8NwM4IAMLmwEBBX9BASACKAIIIgcgB0EBTRshBCACKAIEIgMgAigCAGshBgNAIAQiBUEBdCEEIAUgBmsgAUkNAAsgBSAHRwRAIAUQFCIDRQRAQX8PCyACKAIAIgQEQCADIAQgBhASGiACKAIAEBALIAIgBTYCCCACIAM2AgAgAiADIAZqIgM2AgQLIAMgACABEBIaIAIgAigCBCABajYCBCABC0YBAn8gAigCACACKAIIaiIEIAIoAgQiA0YEQEF/DwsgACADIAQgA2siACABIAAgAUkbIgAQEhogAiACKAIEIABqNgIEIAALqgIBBH8jAEEQayIEJAACQCAAKAJ0DQAgAkEBTQRAIANBAUH7wgBBABAPDAELIAEgBEEMakECEBEgBCgCDCIGQf//A3EiB0UEQCADQQFBnMMAQQAQDwwBCyACIAdBBmxBAmpJBEAgA0EBQfvCAEEAEA8MAQsgBkEGbBAUIgNFDQAgAEEIEBQiAjYCdCACRQRAIAMQEAwBCyACIAM2AgAgAiAELwEMIgI7AQQgAkUEQEEBIQUMAQtBACECA0AgAUECaiAEQQxqIgVBAhARIAMgAkEGbGoiBiAEKAIMOwEAIAFBBGogBUECEBEgBiAEKAIMOwECIAFBBmoiASAFQQIQESAGIAQoAgw7AQRBASEFIAJBAWoiAiAAKAJ0LwEESQ0ACwsgBEEQaiQAIAUL8AEBBX8jAEEQayIEJAACfyAAKAJ4IgVFBEAgA0EBQc3CAEEAEA9BAAwBCyAFKAIMBEAgA0EBQdvVAEEAEA9BAAwBCyACIAUtABIiBUECdCIGSQRAIANBAUGswgBBABAPQQAMAQtBACAGEBQiAkUNABogBQRAQQAhAwNAIAEgBEEMaiIHQQIQESACIANBAnRqIgYgBCgCDDsBACABQQJqIAdBARARIAYgBCgCDDoAAiABQQNqIAdBARARIAYgBCgCDDoAAyABQQRqIQEgA0EBaiIDIAVHDQALCyAAKAJ4IAI2AgxBAQshCCAEQRBqJAAgCAvwAwEJfyMAQRBrIgUkAAJAIAJBA0kNACAAKAJ4DQAgASAFQQxqQQIQESAFLwEMIglBgQhrQf93TQRAIAUgCTYCACADQQFBtBogBRAPDAELIAFBAmogBUEMakEBEBEgBS8BDCIIRQRAIANBAUHUF0EAEA8MAQsgCEEDaiACSw0AIAggCWxBAnQQFCIHRQ0AIAgQFCIKRQRAIAcQEAwBCyAIEBQiC0UEQCAHEBAgChAQDAELQRQQFCIGRQRAIAcQECAKEBAgCxAQDAELIAFBA2ohAyAGIAo2AgggBiALNgIEIAYgCTsBECAGIAc2AgAgBSgCDCEMIAZBADYCDCAGIAw6ABIgACAGNgJ4A0AgAyAFQQxqQQEQESAEIApqIAUtAAxB/wBxQQFqOgAAIAQgC2ogBSgCDEGAAXFBB3Y6AAAgA0EBaiEDIARBAWoiBCAIRw0ACyAJRQRAQQEhBAwBC0EAIQYDQEEAIQRBACEAA0AgAkEEIAQgCmotAABBB2pBA3YiBCAEQQRPGyIEIAMgAWtqSARAQQAhBAwDCyADIAVBDGogBBARIAcgBSgCDDYCACAHQQRqIQcgAyAEaiEDIABBAWoiAEH//wNxIgQgCEkNAAtBASEEIAZBAWoiBkH//wNxIAlJDQALCyAFQRBqJAAgBAuYAQECfyMAQRBrIgUkACAAKAIYIgRB/wFHBEAgBSAENgIAIANBAkHkEyAFEA8LAkACQCACIAAoAhRGBEAgAg0BQQEhBAwCC0EAIQQgA0EBQbvsAEEAEA8MAQtBACECA0BBASEEIAEgACgCSCACQQxsakEIakEBEBEgAUEBaiEBIAJBAWoiAiAAKAIUSQ0ACwsgBUEQaiQAIAQLjgYBBn8jAEHQAGsiBCQAAkAgAkECTQRAIANBAUGb7ABBABAPDAELIAAtAHwEQCADQQRB7tIAQQAQD0EBIQYMAQtBASEGIAEgAEEoakEBEBEgAUEBaiAAQTRqQQEQESABQQJqIABBLGpBARARIAFBA2ohBQJAAkACQAJAAkAgACgCKCIHQQFrDgIAAQILIAJBBk0EQCAEIAI2AhAgA0EBQcDxACAEQRBqEA9BACEGDAULAkAgAkEHRg0AIAAoAjBBDkYNACAEIAI2AjAgA0ECQcDxACAEQTBqEA8LIAUgAEEwakEEEBEgACgCMEEORw0DQSQQFCIFRQRAQQAhBiADQQFBszxBABAPDAULIAVBDjYCACAEQQA2AkAgBEEANgI4IARBADYCSCAEQQA2AjwgBEEANgJEIARBADYCTEGw6pACIQYgBEGw6pACNgI0IAVBgIyVogQ2AgQCfyACQQdHBEAgAkEjRgRAIAFBB2ogBEHMAGpBBBARIAFBC2ogBEHIAGpBBBARIAFBD2ogBEHEAGpBBBARIAFBE2ogBEFAa0EEEBEgAUEXaiAEQTxqQQQQESABQRtqIARBOGpBBBARIAFBH2ogBEE0akEEEBEgBUEANgIEIAQoAjQhBiAEKAI4IQIgBCgCQCEDIAQoAjwhByAEKAJEIQggBCgCTCEJIAQoAkgMAgsgBCACNgIgIANBAkHk8QAgBEEgahAPC0EAIQJBACEDQQAhB0EACyEBIAUgBzYCGCAFIAg2AhAgBSAJNgIIIAUgBjYCICAFIAI2AhwgBSADNgIUIAUgATYCDCAAQQA2AnAgACAFNgJsDAMLIAAgAkEDayIBNgJwIABBASABEBMiAzYCbCADRQ0BIAJBA0wNAkEAIQIDQCAFIARBzABqQQEQESAAKAJsIAJqIAQoAkw6AAAgBUEBaiEFIAJBAWoiAiABRw0ACwwCCyAHQQNJDQIgBCAHNgIAIANBBEHb9wAgBBAPDAILQQAhBiAAQQA2AnAMAQtBASEGIABBAToAfAsgBEHQAGokACAGC7QDAQN/IwBBIGsiBCQAAkAgACgCSARAIANBAkGNNUEAEA9BASECDAELIAJBDkcEQEEAIQIgA0EBQfrrAEEAEA8MAQsgASAAQRBqQQQQESABQQRqIABBDGpBBBARIAFBCGogAEEUakECEBEgACgCDCEFAkAgBAJ/IAAoAhAiBkUEQCAAKAIUDAELIAAoAhQiAiAFRQ0AGiACDQFBAAs2AgggBCAGNgIEIAQgBTYCACADQQFB3uoAIAQQD0EAIQIMAQsgAkGBgAFrQf//fk0EQEEAIQIgA0EBQYjqAEEAEA8MAQsgACACQQwQEyICNgJIIAJFBEBBACECIANBAUGt6gBBABAPDAELQQEhAiABQQpqIABBGGpBARARIAFBC2ogAEEcakEBEBEgACgCHCIFQQdHBEAgBCAFNgIQIANBBEGd+gAgBEEQahAPCyABQQxqIABBIGpBARARIAFBDWogAEEkakEBEBEgACgCACIBIAEtALwBQfsBcSAAKAIYQf8BRkECdHI6ALwBIAAoAgAiASAAKAIMNgLYASABIAAoAhA2AtwBIABBAToAhQELIARBIGokACACC7oEAQZ/IwBBEGsiBiQAAn8gAC0AZEECcUUEQCADQQFBkdQAQQAQD0EADAELIABBADYCaAJAAkACQCACBEADQCACQQdNBEAgA0EBQbkZQQAQDwwFCyABIAZBDGoiBUEEEBEgBigCDCEEIAFBBGogBUEEEBFBCCEHIAYoAgwhBQJAAkACQAJAIAQOAgEAAwsgAkEQSQRAQeEZIQQMBwsgAUEIaiAGQQhqQQQQESAGKAIIBEBByj8hBAwHCyABQQxqIAZBDGpBBBARIAYoAgwiBA0BQbIYIQQMBgsgA0EBQbIYQQAQDwwGC0EQIQcLIAQgB0kEQCADQQFBhcUAQQAQDwwFCyACIARJBEAgA0EBQb3EAEEAEA9BAAwGCwJAAkAgACABIAdqIAQgB2sgAwJ/AkACQAJAIAVB8di9mwZMBEAgBUHjxsGTBkYNASAFQebKkZsGRg0DIAVB8MK1mwZHDQVB4MABDAQLIAVB8tiNgwdGDQFBwMABIAVB8sihywZGDQMaIAVB8ti9mwZHDQRByMABDAMLQdDAAQwCC0HYwAEMAQtB6MABCygCBBEBAA0BQQAMBwsgACAAKAJoQf////8HcjYCaAtBASAIIAVB8sihywZGGyEIIAEgBGohASACIARrIgINAAsgCA0BCyADQQFB2cMAQQAQD0EADAMLIABBAToAhAEgACAAKAJkQQRyNgJkQQEMAgsgA0EBIARBABAPCyADQQFBng5BABAPQQALIQkgBkEQaiQAIAkL4gEBAX8gACgCZEEBRwRAIANBAUG+1ABBABAPQQAPCwJAIAJBB00EQAwBCyABIABBOGpBBBARIAFBBGogAEE8akEEEBEgAkEDcQRADAELIAAgAkEIayICQQJ2IgQ2AkACQCACRQ0AIAAgBEEEEBMiAjYCRCACRQRAIANBAUGpEEEAEA9BAA8LIAAoAkBFDQAgAUEIaiEDQQAhAgNAIAMgACgCRCACQQJ0akEEEBEgA0EEaiEDIAJBAWoiAiAAKAJASQ0ACwsgACAAKAJkQQJyNgJkQQEPCyADQQFBqi1BABAPQQALxAEBAn8gACAAKAIgIgQ2AiQCQCAAKAIwIgMEQANAIAQgAyAAKAIAIAAoAhQRAAAiA0F/Rg0CIAAgACgCJCADaiIENgIkIAAgACgCMCADayIDNgIwIAMNAAsgACgCICEECyAAQQA2AjAgACAENgIkIAEgACgCACAAKAIcEQoARQRAIAAgACgCREEIcjYCREEADwsgACABNwM4QQEPCyAAIAAoAkRBCHI2AkQgAkEEQYH1AEEAEA8gACAAKAJEQQhyNgJEQQALggEBAn8jAEEQayIEJAACfyAAKAJkBEAgA0EBQdvTAEEAEA9BAAwBCyACQQRHBEAgA0EBQc4tQQAQD0EADAELIAEgBEEMakEEEBEgBCgCDEGKjqroAEcEQCADQQFB9iVBABAPQQAMAQsgACAAKAJkQQFyNgJkQQELIQUgBEEQaiQAIAULDQAgACgCACABIAIQRQsJACAAKAIAEEoLCQAgACgCABBJCw0AIAAoAgAgASACEEwLQQEBfyACBH8gA0ECQdvLAEEAEA8gACgCACABIAIgAyAEEEZFBEAgA0EBQakvQQAQD0EADwsgACACIAMQcQVBAAsLFQAgACgCACABIAIgAyAEIAUgBhBOCw8AIAAoAgAgASACIAMQTwsTACAAKAIAIAEgAiADIAQgBRArCx0AIAAoAgAgASACIAMgBCAFIAYgByAIIAkgChAnC+oEAQd/AkAgASgCCEE1IAMQJEUNACABKAIEIgcoAgAhBSAHKAIIIQQCQCAFBEBBASEGIAVBAUcEQCAFQX5xIQoDQAJ/QQAgBkUNABpBACABIAAgAyAEKAIAEQAARQ0AGiABIAAgAyAEKAIEEQAAQQBHCyEGIARBCGohBCAJQQJqIgkgCkcNAAsLAkAgBUEBcQRAIAZFDQEgASAAIAMgBCgCABEAAEEARyEGCyAHQQA2AgAgBkUNAwwCCyAHQQA2AgBBAA8LIAdBADYCAAsgASgCCCIHKAIAIQUgBygCCCEEAkACQAJ/AkAgBQRAQQEhBiAFQQFxIQggBUEBRw0BQQAMAgsgB0EANgIADAILIAVBfnEhBUEAIQkDQAJ/QQAgBkUNABpBACABIAAgAyAEKAIAEQAARQ0AGiABIAAgAyAEKAIEEQAAQQBHCyEGIARBCGohBCAJQQJqIgkgBUcNAAsgBkULIQUgCARAIAUNAiABIAAgAyAEKAIAEQAAQQBHIQYLIAdBADYCAEEAIQggBkUNAgsgAS0AhAFFBEAgA0EBQb3WAEEAEA9BAA8LIAEtAIUBRQRAIANBAUGg1gBBABAPQQAPCyAAIAEoAgAgAiADEFAhCCACRQ0BIAIoAgAiAEUNAUEBIQQCQAJAAkACQAJAAkAgASgCMEEMaw4NAwQEBAUAAQQEBAQEAgQLQQIhBAwEC0EDIQQMAwtBBCEEDAILQQUhBAwBC0F/IQQLIAAgBDYCFCABKAJsIgNFDQEgACADNgIcIAIoAgAgASgCcDYCICABQQA2AmwgCA8LIAdBADYCAEEAIQgLIAgL5AkCCn8BfiMAQfAAayIDJABBgAghCAJ/AkBBAUGACBATIgYEQCADQdwAaiELIANB7ABqIQkDQAJAAkACQCABIANB6ABqIgRBCCACEBpBCEcNACAEIANB2ABqQQQQESAJIAtBBBARQQghBQJAAkACQAJAAkAgAygCWA4CAAEECyABKQMIIg1QBH5CAAUgDSABKQM4fQsiDUL4////D1MNASACQQFByj9BABAPDAQLIAEgA0HoAGoiBEEIIAIQGkEIRw0DIAQgA0HkAGpBBBARIAMoAmRFDQEgAkEBQco/QQAQDwwDCyADIA2nQQhqNgJYDAELIAkgA0HYAGpBBBARQRAhBQsgAygCXCIEQePkwNMGRgRAIAAoAmQiAUEEcQRAIAAgAUEIcjYCZAwCCyACQQFBrStBABAPIAYQEEEADAcLIAMoAlgiB0UEQCACQQFBshhBABAPIAYQEEEADAcLIAUgB0sEQCADIAQ2AgQgAyAHNgIAIAJBAUH65wAgAxAPDAYLAkACfwJ/AkACfwJAAkACQAJAAkAgBEHx2L2bBkwEQCAEQePGwZMGRg0CIARB5sqRmwZGDQQgBEHwwrWbBkcNAUHgwAEMBgsgBEGfwMDSBkwEQCAEQfLYvZsGRg0FQcDAASAEQfLIocsGRg0GGiAEQfDy0bMGRw0BQajAAQwICyAEQfLYjYMHRg0CIARBoMDA0gZGDQZBsMABIARB6OTA0wZGDQcaCyAAKAJkIgRBAXENCCACQQFB/A5BABAPIAYQEEEADA8LQdDAAQwDC0HYwAEMAgtB6MABDAELQcjAAQshCiADIARB/wFxNgJMIAMgBEEYdjYCQCADIARBCHZB/wFxNgJIIAMgBEEQdkH/AXE2AkQgAkECQckOIANBQGsQDyAHIAVrIgUgAC0AZEEEcQ0CGiADIAMoAlwiBEEYdjYCMCADIARB/wFxNgI8IAMgBEEQdkH/AXE2AjQgAyAEQQh2Qf8BcTYCOCACQQJB2jMgA0EwahAPIAAgACgCZEH/////B3I2AmQgASAFrSINIAIgASgCKBEIACANUQ0HIAJBAUGSHEEAEA8gBhAQQQAMCgtBoMABCyEKIAcgBWsLIQUgASkDCCINUAR+QgAFIA0gASkDOH0LIAWtUwRAIAMoAlghBCADKAJcIQAgAyABKQMIIg1QBH5CAAUgDSABKQM4fQs+AiggAyAFNgIkIAMgAEH/AXE2AiAgAyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQgKCVkKQpNb2RpZnkgdGhlIGNwX3JlZHVjZSBwYXJhbWV0ZXIuCgoASW1hZ2UgZGF0YSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGlsZSAlZC4KCgBBoP0AC4AgIwClAEMAZgCDAO6oFADf2CMAvhBDAP/1gwB+IFUAX1EjADUAQwBORIMAzsQUAM/MIwD+4kMA/5mDAJYAxQA/MSMApQBDAF5EgwDOyBQA3xEjAP70QwD//IMAngBVAHcAIwA1AEMA//GDAK6IFAC3ACMA/vhDAO/kgwCOiMUAHxEjAKUAQwBmAIMA7qgUAN9UIwC+EEMA7yKDAH4gVQB/IiMANQBDAE5EgwDOxBQAvxEjAP7iQwD3AIMAlgDFAD8iIwClAEMAXkSDAM7IFADXACMA/vRDAP+6gwCeAFUAbwAjADUAQwD/5oMArogUAK+iIwD++EMA5wCDAI6IxQAvIgIAxQCEAH4gAgDOxCQA9wACAP6iRABWAAIAngAUANcAAgC+EIQAZgACAK6IJADfEQIA7qhEADYAAgCOiBQAHxECAMUAhABuAAIAzogkAP+IAgD+uEQATkQCAJYAFAC3AAIA/uSEAF5EAgCmACQA5wACAN5URAAuIgIAPgAUAHcAAgDFAIQAfiACAM7EJAD/8QIA/qJEAFYAAgCeABQAvxECAL4QhABmAAIArogkAO8iAgDuqEQANgACAI6IFAB/IgIAxQCEAG4AAgDOiCQA7+QCAP64RABORAIAlgAUAK+iAgD+5IQAXkQCAKYAJADf2AIA3lREAC4iAgA+ABQAX1ECAFUAhABmAAIA3ogkAP8yAgD+EUQATkQCAK4AFAC3AAIAfjGEAF5RAgDGACQA1wACAO4gRAAeEQIAngAUAHcAAgBVAIQAXlQCAM5EJADnAAIA/vFEADYAAgCmABQAX1UCAP50hAA+EQIAviAkAH90AgDexEQA//gCAJYAFAAvIgIAVQCEAGYAAgDeiCQA9wACAP4RRABORAIArgAUAI+IAgB+MYQAXlECAMYAJADPyAIA7iBEAB4RAgCeABQAbwACAFUAhABeVAIAzkQkAN/RAgD+8UQANgACAKYAFAB/IgIA/nSEAD4RAgC+ICQAvyICAN7ERADvIgIAlgAUAD8yAwDe1P30//wUAD4RVQCPiAMAvjKFAOcAJQBeUf6qf3IDAM5E/fjvRBQAfmRFAK+iAwCmAF1V35n98TYA/vVvYgMA3tH99P/mFAB+cVUAv7EDAK6IhQDf1SUATkT+8n9mAwDGAP347+IUAF5URQCfEQMAlgBdVc/I/fEeEe7IZwADAN7U/fT/8xQAPhFVAL8RAwC+MoUA39glAF5R/qovIgMAzkT9+PcAFAB+ZEUAn5gDAKYAXVXXAP3xNgD+9W9EAwDe0f30/7kUAH5xVQC3AAMAroiFAN/cJQBORP7ydwADAMYA/fjv5BQAXlRFAH9zAwCWAF1Vv7j98R4R7sg/MgIApQCEAH5AAgDeECQA3xECAP5yRABWAAIArqgUAL+yAgCWAIQAZgACAMYAJADnAAIA7shEAC4iAgCOiBQAdwACAKUAhABuAAIAzogkAPcAAgD+kUQANgACAK6iFACvqgIA/riEAF4AAgC+ACQAz8QCAO5ERAD/9AIAPiIUAB8RAgClAIQAfkACAN4QJAD/mQIA/nJEAFYAAgCuqBQAtwACAJYAhABmAAIAxgAkANcAAgDuyEQALiICAI6IFABPRAIApQCEAG4AAgDOiCQA7+ICAP6RRAA2AAIArqIUAH9EAgD+uIQAXgACAL4AJACfAAIA7kREAP92AgA+IhQAPzEDAMYAhQD/2f3yfmT+8b+ZAwCuoiUA72b99FYA7uJ/cwMAvphFAPcA/fhmAP52n4gDAI6IFQDf1aUALiLemE9EAwC+soUA//z98m4ilgC3AAMArqolAN/R/fQ2AN7Ub2QDAK6oRQDv6v34XkTu6H9xAwA+MhUAz8SlAP/6zog/MQMAxgCFAP93/fJ+ZP7xv7MDAK6iJQDnAP30VgDu4ncAAwC+mEUA7+T9+GYA/nZ/ZgMAjogVANcApQAuIt6YPzMDAL6yhQD/df3ybiKWAJ+RAwCuqiUA35n99DYA3tRfUQMArqhFAO/s/fheRO7of3IDAD4yFQC/saUA//POiB8RAwDeVP3yHhEUAH5k/vjPzAMAvpFFAO8iJQAuIv7zj4gDAMYAhQD3ABQAXhH+/K+oAwCmADUA38j98T4x/mZvZAMAzsj98v/1FABmAP70v7oDAK4iRQDnACUAPjL+6n9zAwC+soUA31UUAFYAfnGfEQMAlgA1AM/E/fE+M+7oT0QDAN5U/fIeERQAfmT++L+ZAwC+kUUA7+IlAC4i/vN/ZgMAxgCFAO/kFABeEf78n5gDAKYANQDXAP3xPjH+Zm8iAwDOyP3y/7kUAGYA/vS3AAMAriJFAN/RJQA+Mv7qdwADAL6yhQDv7BQAVgB+cX9yAwCWADUAv7j98T4z7uhfVPzx3tH9+tcA/PgWAP3/f3T89H5x/fO/s/zy7+ru6E9E/PGuIgUAv7j8+PcA/vx3APz0XhH99X91/PLf2O7iPzP88b6y/frPiPz4//v9/39z/PRuAP3ztwD88u9m/vk/MfzxngAFAL+6/Pj//f72ZwD89CYA/fWPiPzy39ze1C8i/PHe0f36z8T8+BYA/f9/cvz0fnH987+Z/PLv7O7oRwD88a4iBQCnAPz4//f+/FcA/PReEf31lwD88t/V7uI3APzxvrL9+scA/Pj//v3/f2b89G4A/fOvqPzy5wD++T8y/PGeAAUAv7H8+O/k/vZfVPz0JgD99YcA/PLfmd7UHxETAGUAQwDeAIMAjYgjAE5EEwClAEMAroiDADUAIwDXABMAxQBDAJ4AgwBVACMALiITAJUAQwB+AIMA/hAjAHcAEwBlAEMAzoiDAI2IIwAeERMApQBDAF4AgwA1ACMA5wATAMUAQwC+AIMAVQAjAP8REwCVAEMAPgCDAO5AIwCvohMAZQBDAN4AgwCNiCMATkQTAKUAQwCuiIMANQAjAO9EEwDFAEMAngCDAFUAIwAuIhMAlQBDAH4AgwD+ECMAtwATAGUAQwDOiIMAjYgjAB4REwClAEMAXgCDADUAIwDPxBMAxQBDAL4AgwBVACMA9wATAJUAQwA+AIMA7kAjAG8AAQCEAAEAVgABABQAAQDXAAEAJAABAJYAAQBFAAEAdwABAIQAAQDGAAEAFAABAI+IAQAkAAEA9wABADUAAQAvIgEAhAABAP5AAQAUAAEAtwABACQAAQC/AAEARQABAGcAAQCEAAEApgABABQAAQBPRAEAJAABAOcAAQA1AAEAPxEBAIQAAQBWAAEAFAABAM8AAQAkAAEAlgABAEUAAQBvAAEAhAABAMYAAQAUAAEAnwABACQAAQDvAAEANQABAD8yAQCEAAEA/kABABQAAQCvAAEAJAABAP9EAQBFAAEAXwABAIQAAQCmAAEAFAABAH8AAQAkAAEA3wABADUAAQAfEQEAJAABAFYAAQCFAAEAvwABABQAAQD3AAEAxgABAHcAAQAkAAEA//gBAEUAAQB/AAEAFAABAN8AAQCmAAEAPzEBACQAAQAuIgEAhQABALcAAQAUAAEA70QBAK6iAQBnAAEAJAABAP9RAQBFAAEAlwABABQAAQDPAAEANgABAD8iAQAkAAEAVgABAIUAAQC/sgEAFAABAO9AAQDGAAEAbwABACQAAQD/cgEARQABAJ8AAQAUAAEA1wABAKYAAQBPRAEAJAABAC4iAQCFAAEAr6gBABQAAQDnAAEArqIBAF8AAQAkAAEA/0QBAEUAAQCPiAEAFAABAK+qAQA2AAEAHxECAP74JABWAAIAtgCFAP9mAgDOABQAHhECAJYANQCvqAIA9gAkAD4xAgCmAEUAv7MCAL6yFAD/9QIAZgB+UV9UAgD+8iQALiICAK4ihQDvRAIAxgAUAP/0AgB2ADUAf0QCAN5AJAA+MgIAngBFANcAAgC+iBQA//oCAF4R/vFPRAIA/vgkAFYAAgC2AIUA78gCAM4AFAAeEQIAlgA1AI+IAgD2ACQAPjECAKYARQDfRAIAvrIUAP+oAgBmAH5RbwACAP7yJAAuIgIAriKFAOcAAgDGABQA7+ICAHYANQB/cgIA3kAkAD4yAgCeAEUAv7ECAL6IFAD/cwIAXhH+8T8zAQCEAAEA7iABAMUAAQDPxAEARAABAP8yAQAVAAEAj4gBAIQAAQBmAAEAJQABAK8AAQBEAAEA7yIBAKYAAQBfAAEAhAABAE5EAQDFAAEAz8wBAEQAAQD3AAEAFQABAG8AAQCEAAEAVgABACUAAQCfAAEARAABAN8AAQD+MAEALyIBAIQAAQDuIAEAxQABAM/IAQBEAAEA/xEBABUAAQB3AAEAhAABAGYAAQAlAAEAfwABAEQAAQDnAAEApgABADcAAQCEAAEATkQBAMUAAQC3AAEARAABAL8AAQAVAAEAPwABAIQAAQBWAAEAJQABAJcAAQBEAAEA1wABAP4wAQAfEQIA7qhEAI6IAgDWAMUA//MCAP78JQA+AAIAtgBVAN/YAgD++EQAZgACAH4ghQD/mQIA5gD1ADYAAgCmABUAnwACAP7yRAB2AAIAzkTFAP92AgD+8SUATkQCAK4AVQDPyAIA/vREAF5EAgC+EIUA7+QCAN5U9QAeEQIAlgAVAC8iAgDuqEQAjogCANYAxQD/+gIA/vwlAD4AAgC2AFUAvxECAP74RABmAAIAfiCFAO8iAgDmAPUANgACAKYAFQB/IgIA/vJEAHYAAgDORMUA/9UCAP7xJQBORAIArgBVAG8AAgD+9EQAXkQCAL4QhQDfEQIA3lT1AB4RAgCWABUAX1EDAPYAFAAeEUQAjoilAN/UAwCuolUA/3YkAD4itgCvqgMA5gAUAP/1RABmAIUAz8wDAJ4AxQDvRCQANgD++H8xAwDu6BQA//FEAHYApQDPxAMAfiJVAN/RJABORP70X1EDANYAFADv4kQAXkSFAL8iAwCWAMUA38gkAC4i/vJvIgMA9gAUAB4RRACOiKUAv7EDAK6iVQD/MyQAPiK2AK+oAwDmABQA/7lEAGYAhQC/qAMAngDFAO/kJAA2AP74b2QDAO7oFAD//EQAdgClAM/IAwB+IlUA7+okAE5E/vR/dAMA1gAUAP/6RABeRIUAv7IDAJYAxQDfRCQALiL+8j8x8wD++v3xNgAEAL4ydQDfEfMA3lT98u/k1QB+cf78f3PzAP7z/fgeEQQAlgBVAL+x8wDOALUA39j99GYA/rlfVPMA/nb98SYABACmAHUAnwDzAK4A/fL/99UARgD+9X908wDmAP34FgAEAIYAVQCPiPMAxgC1AO/i/fReEe6oPxHzAP76/fE2AAQAvjJ1AN/R8wDeVP3y//vVAH5x/vx/RPMA/vP9+B4RBACWAFUAf3LzAM4AtQDvIv30ZgD+uU9E8wD+dv3xJgAEAKYAdQC/EfMArgD98v//1QBGAP71PzLzAOYA/fgWAAQAhgBVAG8A8wDGALUAv7j99F4R7qgvIgBBrJ0BC6QeAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAAAAMAAAAEAAAABQAAALchQiFnIUIhERERETMzMzN3d3d3AAAAAAAAAAABVgAAAAAAABBPAAAgTwAAAVYAAAEAAAAgTwAAEE8AAAE0AAAAAAAAME8AALBPAAABNAAAAQAAAEBPAADATwAAARgAAAAAAABQTwAAEFAAAAEYAAABAAAAYE8AACBQAADBCgAAAAAAAHBPAABwUAAAwQoAAAEAAACATwAAgFAAACEFAAAAAAAAkE8AAJBSAAAhBQAAAQAAAKBPAACgUgAAIQIAAAAAAACwUwAAEFMAACECAAABAAAAwFMAACBTAAABVgAAAAAAANBPAADATwAAAVYAAAEAAADgTwAAsE8AAAFUAAAAAAAA8E8AALBQAAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo=";return z}var uA;function bA(z){if(z==uA&&d)return new Uint8Array(d);var rA=p(z);if(rA)return rA;if(E)return E(z);throw\'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)\'}function iA(z,rA){var xA,RA=bA(z);xA=new WebAssembly.Module(RA);var YA=new WebAssembly.Instance(xA,rA);return[YA,xA]}function wA(){return{a:du}}function FA(){var z=wA();function rA(RA,YA){return wi=RA.exports,m=wi.p,R(),CA(wi.q),X("wasm-instantiate"),wi}if($("wasm-instantiate"),s.instantiateWasm)try{return s.instantiateWasm(z,rA)}catch(RA){u(`Module.instantiateWasm callback failed with error: ${RA}`),n(RA)}uA||(uA=BA());var xA=iA(uA,z);return rA(xA[0])}var cA=z=>{for(;z.length>0;)z.shift()(s)},yA=s.noExitRuntime||!0,aA=(z,rA,xA)=>w.copyWithin(z,rA,rA+xA);function DA(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA),RA=s.HEAP32.subarray(z,z+rA);xA.set(RA)}function UA(z,rA,xA,RA){z>>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*3),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te>=2,rA>>=2,xA>>=2,RA>>=2;let ae=s.imageData=new Uint8ClampedArray(YA*4),ee=s.HEAP32.subarray(z,z+YA),Oe=s.HEAP32.subarray(rA,rA+YA),te=s.HEAP32.subarray(xA,xA+YA),yi=s.HEAP32.subarray(RA,RA+YA);for(let Xt=0;Xt2147483648,TA=z=>{var rA=m.buffer,xA=(z-rA.byteLength+65535)/65536;try{return m.grow(xA),R(),1}catch(RA){}},LA=z=>{var rA=w.length;z>>>=0;var xA=pA();if(z>xA)return!1;for(var RA=(te,yi)=>te+(yi-te%yi)%yi,YA=1;YA<=4;YA*=2){var ae=rA*(1+.2/YA);ae=Math.min(ae,z+100663296);var ee=Math.min(xA,RA(Math.max(z,ae),65536)),Oe=TA(ee);if(Oe)return!0}return!1},WA={},re=()=>l||"./this.program",De=()=>{if(!De.strings){var z=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",rA={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:z,_:re()};for(var xA in WA)WA[xA]===void 0?delete rA[xA]:rA[xA]=WA[xA];var RA=[];for(var xA in rA)RA.push(`${xA}=${rA[xA]}`);De.strings=RA}return De.strings},Dn=(z,rA)=>{for(var xA=0;xA{var xA=0;return De().forEach((RA,YA)=>{var ae=rA+xA;Z[z+YA*4>>2]=ae,Dn(RA,ae),xA+=RA.length+1}),0},Sn=(z,rA)=>{var xA=De();Z[z>>2]=xA.length;var RA=0;return xA.forEach(YA=>RA+=YA.length+1),Z[rA>>2]=RA,0},co=z=>52,Iu=(z,rA)=>rA+2097152>>>0<4194305-!!z?(z>>>0)+rA*4294967296:NaN;function cu(z,rA,xA,RA,YA){var ae=Iu(rA,xA);return 70}var lu=[null,[],[]],D1=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0,k1=(z,rA,xA)=>{for(var RA=rA+xA,YA=rA;z[YA]&&!(YA>=RA);)++YA;if(YA-rA>16&&z.buffer&&D1)return D1.decode(z.subarray(rA,YA));for(var ae="";rA>10,56320|yi&1023)}}return ae},hu=(z,rA)=>{var xA=lu[z];rA===0||rA===10?((z===1?f:u)(k1(xA,0)),xA.length=0):xA.push(rA)},S1=(z,rA)=>z?k1(w,z,rA):"",Cu=(z,rA,xA,RA)=>{for(var YA=0,ae=0;ae>2],Oe=Z[rA+4>>2];rA+=8;for(var te=0;te>2]=YA,0};function Bu(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA*4),RA=s.HEAP32.subarray(z,z+rA);for(let YA=0;YA>=2,rA>>=2;let RA=s.imageData=new Uint8ClampedArray(xA*4),YA=s.HEAP32.subarray(z,z+xA),ae=s.HEAP32.subarray(rA,rA+xA);for(let ee=0;ee>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*4),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te0||(V(),H>0))return;function z(){Fn||(Fn=!0,s.calledRun=!0,!D&&(lA(),a(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),EA()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),z()},1)):z()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();return F1(),i=s,i}})(),Sd=kd,br=class extends At{constructor(A){super(A,"JpxError")}},ms,hs=class{static decode(A,t){t||(t={}),ne(this,ms)||_s(this,ms,Sd({warn:k}));let i=ne(this,ms).decode(A,t);if(typeof i=="string")throw new br(i);return i}static cleanup(){_s(this,ms,null)}static parseImageProperties(A){let t=A.getByte();for(;t>=0;){let i=t;if(t=A.getByte(),(i<<8|t)===65361){A.skip(4);let a=A.getInt32()>>>0,n=A.getInt32()>>>0,r=A.getInt32()>>>0,g=A.getInt32()>>>0;A.skip(16);let o=A.getUint16();return{width:a-r,height:n-g,bitsPerComponent:8,componentsCount:o}}}throw new br("No size marker found in JPX stream")}};ms=new WeakMap,HA(hs,ms,null);var dI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(A){this.decodeImage(null,A)}decodeImage(A,t){return this.eof?this.buffer:(A||(A=this.bytes),this.buffer=hs.decode(A,t),this.bufferLength=this.buffer.length,this.eof=!0,this.buffer)}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}},Dr=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.cachedData=0,this.bitsCached=0;let s=4096,a={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(s),dictionaryLengths:new Uint16Array(s),dictionaryPrevCodes:new Uint16Array(s),currentSequence:new Uint8Array(s),currentSequenceLength:0};for(let n=0;n<256;++n)a.dictionaryValues[n]=n,a.dictionaryLengths[n]=1;this.lzwState=a}readBits(A){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(d<256)B[0]=d,Q=1;else if(d>=258)if(d=0;a--)B[a]=I[n],n=l[n];else B[Q++]=B[0];else if(d===256){h=9,o=258,Q=0;continue}else{this.eof=!0,delete this.lzwState;break}if(x&&(l[o]=C,c[o]=c[C]+1,I[o]=B[0],o++,h=o+g&o+g-1?h:Math.min(Math.log(o+g)/.6931471805599453+1,12)|0),C=d,E+=Q,i15))throw new v(`Unsupported predictor: ${s}`);this.readBlock=s===2?this.readBlockTiff:this.readBlockPng,this.str=A,this.dict=A.dict;let a=this.colors=i.get("Colors")||1,n=this.bits=i.get("BPC","BitsPerComponent")||8,r=this.columns=i.get("Columns")||1;return this.pixBytes=a*n+7>>3,this.rowBytes=r*a*n+7>>3,this}readBlockTiff(){let A=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+A),s=this.bits,a=this.colors,n=this.str.getBytes(A);if(this.eof=!n.length,this.eof)return;let r=0,g=0,o=0,I=0,c=t,l;if(s===1&&a===1)for(l=0;l>1,h^=h>>2,h^=h>>4,r=(h&1)<<7,i[c++]=h}else if(s===8){for(l=0;l>8&255,i[c++]=C&255}}else{let h=new Uint8Array(a+1),C=(1<>o-s)&C,o-=s,g=g<=8&&(i[Q++]=g>>I-8&255,I-=8);I>0&&(i[Q++]=(g<<8-I)+(r&(1<<8-I)-1))}this.bufferLength+=A}readBlockPng(){let A=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),s=this.str.getBytes(A);if(this.eof=!s.length,this.eof)return;let a=this.bufferLength,n=this.ensureBuffer(a+A),r=n.subarray(a-A,a);r.length===0&&(r=new Uint8Array(A));let g,o=a,I,c;switch(i){case 0:for(g=0;g>1)+s[g];for(;g>1)+s[g]&255,o++;break;case 4:for(g=0;g0){let a=this.str.getBytes(s);t.set(a,i),i+=s}}else{s=257-s;let a=A[1];t=this.ensureBuffer(i+s+1);for(let n=0;n>")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M)){PA("Malformed dictionary: key must be a name object"),this.shift();continue}let a=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s.set(a,this.getObj(A))}if(this.buf1===Ge){if(this.recoveryMode)return s;throw new Sa("End of file inside dictionary.")}return Ne(this.buf2,"stream")?this.allowStreams?this.makeStream(s,A):s:(this.shift(),s);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&Ne(this.buf2,"R")){let i=oA.get(t,this.buf1);return this.shift(),this.shift(),i}return t}return typeof t=="string"&&A?A.decryptString(t):t}findDefaultInlineStreamEnd(A){let{knownCommands:g}=this.lexer,o=A.pos,I=15,c=0,l,h;for(;(l=A.getByte())!==-1;)if(c===0)c=l===69?1:0;else if(c===1)c=l===73?2:0;else if(l===32||l===10||l===13){h=A.pos;let B=A.peekBytes(I),Q=B.length;if(Q===0)break;for(let u=0;u127)){c=0;break}if(c!==2)continue;if(!g){k("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}let E=new dt(new Ie(B.slice()),g);E._hexStringWarn=()=>{};let f=0;for(;;){let u=E.getObj();if(u===Ge){c=0;break}if(u instanceof fe){let d=g[u.cmd];if(d){if(d.variableArgs?f<=d.numArgs:f===d.numArgs)break}else{c=0;break}f=0;continue}f++}if(c===2)break}else c=0;l===-1&&(k("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),h&&(k(\'... trying to recover by using the last "EI" occurrence.\'),A.skip(-(A.pos-h))));let C=4;return A.skip(-C),l=A.peekByte(),A.skip(C),pt(l)||C--,A.pos-C-o}findDCTDecodeInlineStreamEnd(A){let t=A.pos,i=!1,s,a;for(;(s=A.getByte())!==-1;)if(s===255){switch(A.getByte()){case 0:break;case 255:A.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=A.getUint16(),a>2?A.skip(a-2):A.skip(-2);break}if(i)break}let n=A.pos-t;return s===-1?(k("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCII85DecodeInlineStreamEnd(A){let s=A.pos,a;for(;(a=A.getByte())!==-1;)if(a===126){let r=A.pos;for(a=A.peekByte();pt(a);)A.skip(),a=A.peekByte();if(a===62){A.skip();break}if(A.pos>r){let g=A.peekBytes(2);if(g[0]===69&&g[1]===73)break}}let n=A.pos-s;return a===-1?(k("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCIIHexDecodeInlineStreamEnd(A){let i=A.pos,s;for(;(s=A.getByte())!==-1&&s!==62;);let a=A.pos-i;return s===-1?(k("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-a),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),a)}inlineStreamSkipEI(A){let s=0,a;for(;(a=A.getByte())!==-1;)if(s===0)s=a===69?1:0;else if(s===1)s=a===73?2:0;else if(s===2)break}makeInlineImage(A){let t=this.lexer,i=t.stream,s=Object.create(null),a;for(;!Ne(this.buf1,"ID")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M))throw new v("Dictionary key must be a name object");let h=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s[h]=this.getObj(A)}t.beginInlineImagePos!==-1&&(a=i.pos-t.beginInlineImagePos);let n=this.xref.fetchIfRef(s.F||s.Filter),r;if(n instanceof M)r=n.name;else if(Array.isArray(n)){let h=this.xref.fetchIfRef(n[0]);h instanceof M&&(r=h.name)}let g=i.pos,o;switch(r){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}let I;if(o0){let h=i.pos;i.pos=t.beginInlineImagePos,I=Rd(i.getBytes(a+o)),i.pos=h;let C=this.imageCache[I];if(C!==void 0)return this.buf2=fe.get("EI"),this.shift(),C.reset(),C}let c=new F(this.xref);for(let h in s)c.set(h,s[h]);let l=i.makeSubStream(g,o,c);return A&&(l=A.createStream(l,o)),l=this.filter(l,c,o),l.dict=c,I!==void 0&&(l.cacheKey=`inline_img_${++this._imageId}`,this.imageCache[I]=l),this.buf2=fe.get("EI"),this.shift(),l}makeStream(A,t){let i=this.lexer,s=i.stream;i.skipToNextLine();let a=s.pos-1,n=A.get("Length");if(Number.isInteger(n)||(PA(`Bad length "${n&&n.toString()}" in stream.`),n=0),s.pos=a+n,i.nextChar(),this.tryShift()&&Ne(this.buf2,"endstream"))this.shift();else{if(n=mA(this,Ug,lf).call(this,a),n<0)throw new v("Missing endstream command.");i.nextChar(),this.shift(),this.shift()}return this.shift(),s=s.makeSubStream(a,n,A),t&&(s=t.createStream(s,n)),s=this.filter(s,A,n),s.dict=A,s}filter(A,t,i){let s=t.get("F","Filter"),a=t.get("DP","DecodeParms");if(s instanceof M)return Array.isArray(a)&&k("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(A,s.name,i,a);let n=i;if(Array.isArray(s)){let r=s,g=a;for(let o=0,I=r.length;o=n){let h=!1;for(let C of r){let B=C.length,Q=0;for(;Q=g){h=!0;break}if(Q>=B){let E=o[c+l+Q];pt(E)&&(PA(`Found "${Qt([...a,...C])}" when searching for endstream command.`),h=!0);break}}if(h)return t.pos+=c,t.pos-A}c++}t.pos+=I}return-1};var q0=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,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,2,0,2,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,2,0,2,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,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];function Qo(e){return e>=48&&e<=57?e&15:e>=65&&e<=70||e>=97&&e<=102?(e&15)+9:-1}var dt=class{constructor(A,t=null){this.stream=A,this.nextChar(),this.strBuf=[],this.knownCommands=t,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let A=this.currentChar,t=!1,i=0,s=1;if(A===45?(s=-1,A=this.nextChar(),A===45&&(A=this.nextChar())):A===43&&(A=this.nextChar()),A===10||A===13)do A=this.nextChar();while(A===10||A===13);if(A===46&&(i=10,A=this.nextChar()),A<48||A>57){let g=`Invalid number: ${String.fromCharCode(A)} (charCode ${A})`;if(pt(A)||A===-1)return PA(`Lexer.getNumber - "${g}".`),0;throw new v(g)}let a=A-48,n=0,r=1;for(;(A=this.nextChar())>=0;)if(A>=48&&A<=57){let g=A-48;t?n=n*10+g:(i!==0&&(i*=10),a=a*10+g)}else if(A===46)if(i===0)i=1;else break;else if(A===45)k("Badly formatted number: minus sign in the middle");else if(A===69||A===101){if(A=this.peekChar(),A===43||A===45)r=A===45?-1:1,this.nextChar();else if(A<48||A>57)break;t=!0}else break;return i!==0&&(a/=i),t&&(a*=10**(r*n)),s*a}getString(){let A=1,t=!1,i=this.strBuf;i.length=0;let s=this.nextChar();for(;;){let a=!1;switch(s|0){case-1:k("Unterminated string"),t=!0;break;case 40:++A,i.push("(");break;case 41:--A===0?(this.nextChar(),t=!0):i.push(")");break;case 92:switch(s=this.nextChar(),s){case-1:k("Unterminated string"),t=!0;break;case 110:i.push(`\n`);break;case 114:i.push("\\r");break;case 116:i.push(" ");break;case 98:i.push("\\b");break;case 102:i.push("\\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(s));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let n=s&15;s=this.nextChar(),a=!0,s>=48&&s<=55&&(n=(n<<3)+(s&15),s=this.nextChar(),s>=48&&s<=55&&(a=!1,n=(n<<3)+(s&15))),i.push(String.fromCharCode(n));break;case 13:this.peekChar()===10&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(s));break}break;default:i.push(String.fromCharCode(s));break}if(t)break;a||(s=this.nextChar())}return i.join("")}getName(){let A,t,i=this.strBuf;for(i.length=0;(A=this.nextChar())>=0&&!q0[A];)if(A===35){if(A=this.nextChar(),q0[A]){k("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),i.push("#");break}let s=Qo(A);if(s!==-1){t=A,A=this.nextChar();let a=Qo(A);if(a===-1){if(k(`Lexer_getName: Illegal digit (${String.fromCharCode(A)}) in hexadecimal number.`),i.push("#",String.fromCharCode(t)),q0[A])break;i.push(String.fromCharCode(A));continue}i.push(String.fromCharCode(s<<4|a))}else i.push("#",String.fromCharCode(A))}else i.push(String.fromCharCode(A));return i.length>127&&k(`Name token is longer than allowed by the spec: ${i.length}`),M.get(i.join(""))}_hexStringWarn(A){if(this._hexStringNumWarn++===5){k("getHexString - ignoring additional invalid characters.");return}this._hexStringNumWarn>5||k(`getHexString - ignoring invalid character: ${A}`)}getHexString(){let A=this.strBuf;A.length=0;let t=this.currentChar,i=-1,s=-1;for(this._hexStringNumWarn=0;;)if(t<0){k("Unterminated hex string");break}else if(t===62){this.nextChar();break}else if(q0[t]===1){t=this.nextChar();continue}else s=Qo(t),s===-1?this._hexStringWarn(t):i===-1?i=s:(A.push(String.fromCharCode(i<<4|s)),i=-1),t=this.nextChar();return i!==-1&&A.push(String.fromCharCode(i<<4)),A.join("")}getObj(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(q0[t]!==1)break;t=this.nextChar()}switch(t|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),fe.get("[");case 93:return this.nextChar(),fe.get("]");case 60:return t=this.nextChar(),t===60?(this.nextChar(),fe.get("<<")):this.getHexString();case 62:return t=this.nextChar(),t===62?(this.nextChar(),fe.get(">>")):fe.get(">");case 123:return this.nextChar(),fe.get("{");case 125:return this.nextChar(),fe.get("}");case 41:throw this.nextChar(),new v(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){let n=this.peekChar();if(n>=32&&n<=127)return this.nextChar(),fe.get(i)}let s=this.knownCommands,a=(s==null?void 0:s[i])!==void 0;for(;(t=this.nextChar())>=0&&!q0[t];){let n=i+String.fromCharCode(t);if(a&&s[n]===void 0)break;if(i.length===128)throw new v(`Command token too long: ${i.length}`);i=n,a=(s==null?void 0:s[i])!==void 0}return i==="true"?!0:i==="false"?!1:i==="null"?null:(i==="BI"&&(this.beginInlineImagePos=this.stream.pos),fe.get(i))}skipToNextLine(){let A=this.currentChar;for(;A>=0;){if(A===13){A=this.nextChar(),A===10&&this.nextChar();break}else if(A===10){this.nextChar();break}A=this.nextChar()}}},mI=class{static create(A){function t(c,l,h=!1){let C=c.get(l);if(Number.isInteger(C)&&(h?C>=0:C>0))return C;throw new Error(`The "${l}" parameter in the linearization dictionary is invalid.`)}function i(c){let l=c.get("H"),h;if(Array.isArray(l)&&((h=l.length)===2||h===4)){for(let C=0;C0))throw new Error(`Hint (${C}) in the linearization dictionary is invalid.`)}return l}throw new Error("Hint array in the linearization dictionary is invalid.")}let s=new zt({lexer:new dt(A),xref:null}),a=s.getObj(),n=s.getObj(),r=s.getObj(),g=s.getObj(),o,I;if(Number.isInteger(a)&&Number.isInteger(n)&&Ne(r,"obj")&&g instanceof F&&typeof(o=g.get("Linearized"))=="number"&&o>0){if((I=t(g,"L"))!==A.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\')}else return null;return{length:I,hints:i(g),objectNumberFirst:t(g,"O"),endFirst:t(g,"E"),numPages:t(g,"N"),mainXRefEntriesOffset:t(g,"T"),pageFirst:g.has("P")?t(g,"P",!0):0}}},Nd=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],Eo=2**24-1,Na=class{constructor(A=!1){this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=A}addCodespaceRange(A,t,i){this.codespaceRanges[A-1].push(t,i),this.numCodespaceRanges++}mapCidRange(A,t,i){if(t-A>Eo)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;A<=t;)this._map[A++]=i++}mapBfRange(A,t,i){if(t-A>Eo)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");let s=i.length-1;for(;A<=t;){this._map[A++]=i;let a=i.charCodeAt(s)+1;if(a>255){i=i.substring(0,s-1)+String.fromCharCode(i.charCodeAt(s-1)+1)+"\\0";continue}i=i.substring(0,s)+String.fromCharCode(a)}}mapBfRangeToArray(A,t,i){if(t-A>Eo)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");let s=i.length,a=0;for(;A<=t&&a>>0;let g=a[n];for(let o=0,I=g.length;o=c&&s<=l){i.charcode=s,i.length=n+1;return}}}i.charcode=0,i.length=1}getCharCodeLength(A){let t=this.codespaceRanges;for(let i=0,s=t.length;i=g&&A<=o)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if(!(this.name==="Identity-H"||this.name==="Identity-V")||this._map.length!==65536)return!1;for(let A=0;A<65536;A++)if(this._map[A]!==A)return!1;return!0}},Wi=class extends Na{constructor(A,t){super(),this.vertical=A,this.addCodespaceRange(t,0,65535)}mapCidRange(A,t,i){OA("should not call mapCidRange")}mapBfRange(A,t,i){OA("should not call mapBfRange")}mapBfRangeToArray(A,t,i){OA("should not call mapBfRangeToArray")}mapOne(A,t){OA("should not call mapCidOne")}lookup(A){return Number.isInteger(A)&&A<=65535?A:void 0}contains(A){return Number.isInteger(A)&&A<=65535}forEach(A){for(let t=0;t<=65535;t++)A(t,t)}charCodeOf(A){return Number.isInteger(A)&&A<=65535?A:-1}getMap(){let A=new Array(65536);for(let t=0;t<=65535;t++)A[t]=t;return A}get length(){return 65536}get isIdentityCMap(){OA("should not access .isIdentityCMap")}};function ji(e){let A=0;for(let t=0;t>>0}function y0(e){if(typeof e!="string")throw new v("Malformed CMap: expected string.")}function hf(e){if(!Number.isInteger(e))throw new v("Malformed CMap: expected int.")}function Gd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfchar"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=t;e.mapOne(i,s)}}function Ud(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);if(t=A.getObj(),Number.isInteger(t)||typeof t=="string"){let a=Number.isInteger(t)?String.fromCharCode(t):t;e.mapBfRange(i,s,a)}else if(Ne(t,"[")){t=A.getObj();let a=[];for(;!Ne(t,"]")&&t!==Ge;)a.push(t),t=A.getObj();e.mapBfRangeToArray(i,s,a)}else break}throw new v("Invalid bf range.")}function Md(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidchar"))return;y0(t);let i=ji(t);t=A.getObj(),hf(t);let s=t;e.mapOne(i,s)}}function Ld(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);t=A.getObj(),hf(t);let a=t;e.mapCidRange(i,s,a)}}function Hd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcodespacerange"))return;if(typeof t!="string")break;let i=ji(t);if(t=A.getObj(),typeof t!="string")break;let s=ji(t);e.addCodespaceRange(t.length,i,s)}throw new v("Invalid codespace range.")}function Jd(e,A){let t=A.getObj();Number.isInteger(t)&&(e.vertical=!!t)}function Yd(e,A){let t=A.getObj();t instanceof M&&(e.name=t.name)}async function Cf(e,A,t,i){let s,a;A:for(;;)try{let n=A.getObj();if(n===Ge)break;if(n instanceof M)n.name==="WMode"?Jd(e,A):n.name==="CMapName"&&Yd(e,A),s=n;else if(n instanceof fe)switch(n.cmd){case"endcmap":break A;case"usecmap":s instanceof M&&(a=s.name);break;case"begincodespacerange":Hd(e,A);break;case"beginbfchar":Gd(e,A);break;case"begincidchar":Md(e,A);break;case"beginbfrange":Ud(e,A);break;case"begincidrange":Ld(e,A);break}}catch(n){if(n instanceof ge)throw n;k("Invalid cMap data: "+n);continue}return!i&&a&&(i=a),i?Bf(e,t,i):e}async function Bf(e,A,t){if(e.useCMap=await pI(t,A),e.numCodespaceRanges===0){let i=e.useCMap.codespaceRanges;for(let s=0;sBf(s,A,a));if(i===Br.NONE){let a=new dt(new Ie(t));return Cf(s,a,A,null)}throw new Error(`Invalid CMap "compressionType" value: ${i}`)}var es=class{static async create({encoding:A,fetchBuiltInCMap:t,useCMap:i}){if(A instanceof M)return pI(A.name,t);if(A instanceof KA){let s=await Cf(new Na,new dt(A),t,i);return s.isIdentityCMap?pI(s.name,t):s}throw new Error("Encoding required.")}},Kd=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],vd=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],qd=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Qf=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Td=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],c1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],Ga=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],l1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],h1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function Ua(e){switch(e){case"WinAnsiEncoding":return Ga;case"StandardEncoding":return fi;case"MacRomanEncoding":return c1;case"SymbolSetEncoding":return l1;case"ZapfDingbatsEncoding":return h1;case"ExpertEncoding":return Qf;case"MacExpertEncoding":return Td;default:return null}}var Pd=10,nr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Kn=391,T0=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Wd=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]+e[A-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]-e[A-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]/e[A-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,A){e[A-1]=-e[A-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]*e[A-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}],Ma=class{constructor(A,t,i){this.bytes=A.getBytes(),this.properties=t,this.seacAnalysisEnabled=!!i}parse(){let A=this.properties,t=new Sr;this.cff=t;let i=this.parseHeader(),s=this.parseIndex(i.endPos),a=this.parseIndex(s.endPos),n=this.parseIndex(a.endPos),r=this.parseIndex(n.endPos),g=this.parseDict(a.obj.get(0)),o=this.createDict(b0,g,t.strings);t.header=i.obj,t.names=this.parseNameIndex(s.obj),t.strings=this.parseStringIndex(n.obj),t.topDict=o,t.globalSubrIndex=r.obj,this.parsePrivateDict(t.topDict),t.isCIDFont=o.hasName("ROS");let I=o.getByName("CharStrings"),c=this.parseIndex(I).obj,l=o.getByName("FontMatrix");l&&(A.fontMatrix=l);let h=o.getByName("FontBBox");h&&(A.ascent=Math.max(h[3],h[1]),A.descent=Math.min(h[1],h[3]),A.ascentScaled=!0);let C,B;if(t.isCIDFont){let E=this.parseIndex(o.getByName("FDArray")).obj;for(let f=0,u=E.count;f=t)throw new v("Invalid CFF header");i!==0&&(PA("cff data is shifted"),A=A.subarray(i),this.bytes=A);let s=A[0],a=A[1],n=A[2],r=A[3];return{obj:new Fr(s,a,n,r),endPos:n}}parseDict(A){let t=0;function i(){let g=A[t++];return g===30?s():g===28?(g=A[t++],g=(g<<24|A[t++]<<16)>>16,g):g===29?(g=A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g):g>=32&&g<=246?g-139:g>=247&&g<=250?(g-247)*256+A[t++]+108:g>=251&&g<=254?-((g-251)*256)-A[t++]-108:(k(\'CFFParser_parseDict: "\'+g+\'" is a reserved command.\'),NaN)}function s(){let g="",I=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],c=A.length;for(;t>4,C=l&15;if(h===15||(g+=I[h],C===15))break;g+=I[C]}return parseFloat(g)}let a=[],n=[];t=0;let r=A.length;for(;tPd)return!1;let a=A.stackSize,n=A.stack,r=t.length;for(let g=0;g>16,g+=2,a++;else if(o===14){if(a>=4&&(a-=4,this.seacAnalysisEnabled))return A.seac=n.slice(a,a+4),!1;I=T0[o]}else if(o>=32&&o<=246)n[a]=o-139,a++;else if(o>=247&&o<=254)n[a]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108,g++,a++;else if(o===255)n[a]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536,g+=4,a++;else if(o===19||o===20){if(A.hints+=a>>1,A.hints===0){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}g+=A.hints+7>>3,a%=2,I=T0[o]}else if(o===10||o===29){let c=o===10?i:s;if(!c)return I=T0[o],k("Missing subrsIndex for "+I.id),!1;let l=32768;c.count<1240?l=107:c.count<33900&&(l=1131);let h=n[--a]+l;if(h<0||h>=c.count||isNaN(h))return I=T0[o],k("Out of bounds subrIndex for "+I.id),!1;if(A.stackSize=a,A.callDepth++,!this.parseCharString(A,c.get(h),i,s))return!1;A.callDepth--,a=A.stackSize;continue}else{if(o===11)return A.stackSize=a,!0;if(o===0&&g===t.length)t[g-1]=14,I=T0[14];else if(o===9){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}else I=T0[o]}if(I){if(I.stem&&(A.hints+=a>>1,o===3||o===23?A.hasVStems=!0:A.hasVStems&&(o===1||o===18)&&(k("CFF stem hints are in wrong order"),t[g-1]=o===1?3:23)),"min"in I&&!A.undefStack&&a=2&&I.stem?a%=2:a>1&&k("Found too many parameters for stack-clearing command"),a>0&&(A.width=n[a-1])),"stackDelta"in I?("stackFn"in I&&I.stackFn(n,a),a+=I.stackDelta):I.stackClearing?a=0:I.resetStack?(a=0,A.undefStack=!1):I.undefStack&&(a=0,A.undefStack=!0,A.firstStackClearing=!1)}}return r=a.length&&(k("Invalid fd index for glyph index."),h=!1),h&&(B=a[Q].privateDict,C=B.subrsIndex)}else t&&(C=t);if(h&&(h=this.parseCharString(l,c,C,i)),l.width!==null){let Q=B.getByName("nominalWidthX");g[I]=Q+l.width}else{let Q=B.getByName("defaultWidthX");g[I]=Q}l.seac!==null&&(r[I]=l.seac),h||A.set(I,new Uint8Array([14]))}return{charStrings:A,seacs:r,widths:g}}emptyPrivateDictionary(A){let t=this.createDict(D0,[],A.strings);A.setByKey(18,[0,0]),A.privateDict=t}parsePrivateDict(A){if(!A.hasName("Private")){this.emptyPrivateDictionary(A);return}let t=A.getByName("Private");if(!Array.isArray(t)||t.length!==2){A.removeByName("Private");return}let i=t[0],s=t[1];if(i===0||s>=this.bytes.length){this.emptyPrivateDictionary(A);return}let a=s+i,n=this.bytes.subarray(s,a),r=this.parseDict(n),g=this.createDict(D0,r,A.strings);if(A.privateDict=g,g.getByName("ExpansionFactor")===0&&g.setByName("ExpansionFactor",.06),!g.getByName("Subrs"))return;let o=g.getByName("Subrs"),I=s+o;if(o===0||I>=this.bytes.length){this.emptyPrivateDictionary(A);return}let c=this.parseIndex(I);g.subrsIndex=c.obj}parseCharsets(A,t,i,s){if(A===0)return new C0(!0,fo.ISO_ADOBE,Kd);if(A===1)return new C0(!0,fo.EXPERT,vd);if(A===2)return new C0(!0,fo.EXPERT_SUBSET,qd);let a=this.bytes,n=A,r=a[A++],g=[s?0:".notdef"],o,I,c;switch(t-=1,r){case 0:for(c=0;c=65535){k("Not enough space in charstrings to duplicate first glyph.");return}let A=this.charStrings.get(0);this.charStrings.add(A),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(A){return A<0||A>=this.charStrings.count?!1:this.charStrings.get(A).length>0}},Fr=class{constructor(A,t,i,s){this.major=A,this.minor=t,this.hdrSize=i,this.offSize=s}},La=class{constructor(){this.strings=[]}get(A){return A>=0&&A<=Kn-1?nr[A]:A-Kn<=this.strings.length?this.strings[A-Kn]:nr[0]}getSID(A){let t=nr.indexOf(A);return t!==-1?t:(t=this.strings.indexOf(A),t!==-1?t+Kn:-1)}add(A){this.strings.push(A)}get count(){return this.strings.length}},ai=class{constructor(){this.objects=[],this.length=0}add(A){this.length+=A.length,this.objects.push(A)}set(A,t){this.length+=t.length-this.objects[A].length,this.objects[A]=t}get(A){return this.objects[A]}get count(){return this.objects.length}},Rr=class{constructor(A,t){this.keyToNameMap=A.keyToNameMap,this.nameToKeyMap=A.nameToKeyMap,this.defaults=A.defaults,this.types=A.types,this.opcodes=A.opcodes,this.order=A.order,this.strings=t,this.values=Object.create(null)}setByKey(A,t){if(!(A in this.keyToNameMap))return!1;if(t.length===0)return!0;for(let s of t)if(isNaN(s))return k(`Invalid CFFDict value: "${t}" for key "${A}".`),!0;let i=this.types[A];return(i==="num"||i==="sid"||i==="offset")&&(t=t[0]),this.values[A]=t,!0}setByName(A,t){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name "${A}"`);this.values[this.nameToKeyMap[A]]=t}hasName(A){return this.nameToKeyMap[A]in this.values}getByName(A){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name ${A}"`);let t=this.nameToKeyMap[A];return t in this.values?this.values[t]:this.defaults[t]}removeByName(A){delete this.values[this.nameToKeyMap[A]]}static createTables(A){let t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(let i of A){let s=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[s]=i[1],t.nameToKeyMap[i[1]]=s,t.types[s]=i[2],t.defaults[s]=i[3],t.opcodes[s]=Array.isArray(i[0])?i[0]:[i[0]],t.order.push(s)}return t}},Od=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],b0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Od))}constructor(A){super(b0.tables,A),this.privateDict=null}},Zd=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],D0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Zd))}constructor(A){super(D0.tables,A),this.subrsIndex=null}},fo={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},C0=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.charset=i,this.raw=s}},wI=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.encoding=i,this.raw=s}},yI=class{constructor(A,t){this.format=A,this.fdSelect=t}getFDIndex(A){return A<0||A>=this.fdSelect.length?-1:this.fdSelect[A]}},Nr=class{constructor(){this.offsets=Object.create(null)}isTracking(A){return A in this.offsets}track(A,t){if(A in this.offsets)throw new v(`Already tracking location of ${A}`);this.offsets[A]=t}offset(A){for(let t in this.offsets)this.offsets[t]+=A}setEntryLocation(A,t,i){if(!(A in this.offsets))throw new v(`Not tracking location of ${A}`);let s=i.data,a=this.offsets[A],n=5;for(let r=0,g=t.length;r>24&255,s[c]=C>>16&255,s[l]=C>>8&255,s[h]=C&255}}},k0=class{constructor(A){this.cff=A}compile(){let A=this.cff,t={data:[],length:0,add(l){try{this.data.push(...l)}catch(h){this.data=this.data.concat(l)}this.length=this.data.length}},i=this.compileHeader(A.header);t.add(i);let s=this.compileNameIndex(A.names);if(t.add(s),A.isCIDFont&&A.topDict.hasName("FontMatrix")){let l=A.topDict.getByName("FontMatrix");A.topDict.removeByName("FontMatrix");for(let h of A.fdArray){let C=l.slice(0);h.hasName("FontMatrix")&&(C=Ce.transform(C,h.getByName("FontMatrix"))),h.setByName("FontMatrix",C)}}let a=A.topDict.getByName("XUID");(a==null?void 0:a.length)>16&&A.topDict.removeByName("XUID"),A.topDict.setByName("charset",0);let n=this.compileTopDicts([A.topDict],t.length,A.isCIDFont);t.add(n.output);let r=n.trackers[0],g=this.compileStringIndex(A.strings.strings);t.add(g);let o=this.compileIndex(A.globalSubrIndex);if(t.add(o),A.encoding&&A.topDict.hasName("Encoding"))if(A.encoding.predefined)r.setEntryLocation("Encoding",[A.encoding.format],t);else{let l=this.compileEncoding(A.encoding);r.setEntryLocation("Encoding",[t.length],t),t.add(l)}let I=this.compileCharset(A.charset,A.charStrings.count,A.strings,A.isCIDFont);r.setEntryLocation("charset",[t.length],t),t.add(I);let c=this.compileCharStrings(A.charStrings);if(r.setEntryLocation("CharStrings",[t.length],t),t.add(c),A.isCIDFont){r.setEntryLocation("FDSelect",[t.length],t);let l=this.compileFDSelect(A.fdSelect);t.add(l),n=this.compileTopDicts(A.fdArray,t.length,!0),r.setEntryLocation("FDArray",[t.length],t),t.add(n.output);let h=n.trackers;this.compilePrivateDicts(A.fdArray,h,t)}return this.compilePrivateDicts([A.topDict],[r],t),t.add([0]),t.data}encodeNumber(A){return Number.isInteger(A)?this.encodeInteger(A):this.encodeFloat(A)}static get EncodeFloatRegExp(){return nA(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(A){let t=A.toString(),i=k0.EncodeFloatRegExp.exec(t);if(i){let g=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(A*g)/g).toString()}let s="",a,n;for(a=0,n=t.length;a=-107&&A<=107?t=[A+139]:A>=108&&A<=1131?(A-=108,t=[(A>>8)+247,A&255]):A>=-1131&&A<=-108?(A=-A-108,t=[(A>>8)+251,A&255]):A>=-32768&&A<=32767?t=[28,A>>8&255,A&255]:t=[29,A>>24&255,A>>16&255,A>>8&255,A&255],t}compileHeader(A){return[A.major,A.minor,4,A.offSize]}compileNameIndex(A){let t=new ai;for(let i of A){let s=Math.min(i.length,127),a=new Array(s);for(let n=0;n"~"||r==="["||r==="]"||r==="("||r===")"||r==="{"||r==="}"||r==="<"||r===">"||r==="/"||r==="%")&&(r="_"),a[n]=r}a=a.join(""),a===""&&(a="Bad_Font_Name"),t.add(Pe(a))}return this.compileIndex(t)}compileTopDicts(A,t,i){let s=[],a=new ai;for(let n of A){i&&(n.removeByName("CIDFontVersion"),n.removeByName("CIDFontRevision"),n.removeByName("CIDFontType"),n.removeByName("CIDCount"),n.removeByName("UIDBase"));let r=new Nr,g=this.compileDict(n,r);s.push(r),a.add(g),r.offset(t)}return a=this.compileIndex(a,s),{trackers:s,output:a}}compilePrivateDicts(A,t,i){for(let s=0,a=A.length;s>8&255,n&255]);else{let r=1+n*2;a=new Uint8Array(r),a[0]=0;let g=0,o=A.charset.length,I=!1;for(let c=1;c>8&255,a[c+1]=l&255}}return this.compileTypedArray(a)}compileEncoding(A){return this.compileTypedArray(A.raw)}compileFDSelect(A){let t=A.format,i,s;switch(t){case 0:for(i=new Uint8Array(1+A.fdSelect.length),i[0]=t,s=0;s>8&255,a&255,n];for(s=1;s>8&255,s&255,o),n=o)}let g=(r.length-3)/3;r[1]=g>>8&255,r[2]=g&255,r.push(s>>8&255,s&255),i=new Uint8Array(r);break}return this.compileTypedArray(i)}compileTypedArray(A){return Array.from(A)}compileIndex(A,t=[]){let i=A.objects,s=i.length;if(s===0)return[0,0];let a=[s>>8&255,s&255],n=1,r;for(r=0;r>8&255,o&255):g===3?a.push(o>>16&255,o>>8&255,o&255):a.push(o>>>24&255,o>>16&255,o>>8&255,o&255),i[r]&&(o+=i[r].length);for(r=0;r=65520&&e<=65535?0:e>=62976&&e<=63743?Xd()[e]||e:e===173?45:e}function Us(e,A){let t=A[e];if(t!==void 0)return t;if(!e)return-1;if(e[0]==="u"){let i=e.length,s;if(i===7&&e[1]==="n"&&e[2]==="i")s=e.substring(3);else if(i>=5&&i<=7)s=e.substring(1);else return-1;if(s===s.toUpperCase()&&(t=parseInt(s,16),t>=0))return t}return-1}var uo=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function _d(e,A=-1){if(A!==-1){let t=uo[A];for(let i=0,s=t.length;i=t[i]&&e<=t[i+1])return A}for(let t=0,i=uo.length;t=s[a]&&e<=s[a+1])return t}return-1}var zd=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),bI=new Map;function $d(e){let A=bI.get(e);if(A)return A;let t=e.match(zd),i={isWhitespace:!!(t!=null&&t[1]),isZeroWidthDiacritic:!!(t!=null&&t[2]),isInvisibleFormatMark:!!(t!=null&&t[3])};return bI.set(e,i),i}function A2(){bI.clear()}var Cs=!0,Ft={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},O1=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function Ef(e,A){if(A[e]!==void 0)return e;let t=Us(e,A);if(t!==-1){for(let i in A)if(A[i]===t)return i}return PA("Unable to recover a standard glyph name for: "+e),e}function ff(e,A,t){let i=Object.create(null),s,a,n,r=!!(e.flags&Ft.Symbolic);if(e.isInternalFont)for(n=A,a=0;a=0?s:0;else if(e.baseEncodingName)for(n=Ua(e.baseEncodingName),a=0;a=0?s:0;else if(r)for(a in A)i[a]=A[a];else for(n=fi,a=0;a=0?s:0;let g=e.differences,o;if(g)for(a in g){let I=g[a];if(s=t.indexOf(I),s===-1){o||(o=Ai());let c=Ef(I,o);c!==I&&(s=t.indexOf(c))}i[a]=s>=0?s:0}return i}function pn(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}var e2=he(e=>{e[8211]=65074,e[8212]=65073,e[8229]=65072,e[8230]=65049,e[12289]=65041,e[12290]=65042,e[12296]=65087,e[12297]=65088,e[12298]=65085,e[12299]=65086,e[12300]=65089,e[12301]=65090,e[12302]=65091,e[12303]=65092,e[12304]=65083,e[12305]=65084,e[12308]=65081,e[12309]=65082,e[12310]=65047,e[12311]=65048,e[65103]=65076,e[65281]=65045,e[65288]=65077,e[65289]=65078,e[65292]=65040,e[65306]=65043,e[65307]=65044,e[65311]=65046,e[65339]=65095,e[65341]=65096,e[65343]=65075,e[65371]=65079,e[65373]=65080}),zg=he(function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique",e["Arial-BoldMT-Bold"]="Helvetica-Bold",e["Arial-ItalicMT-Italic"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}),t2=he(function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="LiberationSans-Regular.ttf",e["Helvetica-Bold"]="LiberationSans-Bold.ttf",e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf",e["Helvetica-Oblique"]="LiberationSans-Italic.ttf",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}),uf=he(function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e.Impact="Helvetica",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica"}),C1=he(function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e.Trinit\\u00E9=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}),DI=he(function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0,e.Wingdings=!0,e["Wingdings-Bold"]=!0,e["Wingdings-Regular"]=!0}),Z1=he(function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[207]=211,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}),i2=he(function(e){e[227]=322,e[264]=261,e[291]=346}),s2=he(function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45});function j1(e){let A=pn(e);return zg()[A]}function X1(e){let A=pn(e);return!!(zg()[A]||uf()[A]||C1()[A]||DI()[A])}var B0=class{constructor(A=[]){this._map=A}get length(){return this._map.length}forEach(A){for(let t in this._map)A(t,this._map[t].charCodeAt(0))}has(A){return this._map[A]!==void 0}get(A){return this._map[A]}charCodeOf(A){let t=this._map;if(t.length<=65536)return t.indexOf(A);for(let i in t)if(t[i]===A)return i|0;return-1}amend(A){for(let t in A)this._map[t]=A[t]}},Ct=class{constructor(A,t){this.firstChar=A,this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(A){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)A(t,t)}has(A){return this.firstChar<=A&&A<=this.lastChar}get(A){if(this.firstChar<=A&&A<=this.lastChar)return String.fromCharCode(A)}charCodeOf(A){return Number.isInteger(A)&&A>=this.firstChar&&A<=this.lastChar?A:-1}amend(A){OA("Should not call amend()")}},Ea=class{constructor(A,t){this.properties=t;let i=new Ma(A,t,Cs);this.cff=i.parse(),this.cff.duplicateFirstGlyph();let s=new k0(this.cff);this.seacs=this.cff.seacs;try{this.data=s.compile()}catch(a){k("Failed to compile font "+t.loadedName),this.data=A}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){let A=this.cff,t=this.properties,{cidToGidMap:i,cMap:s}=t,a=A.charset.charset,n,r;if(t.composite){let o;if((i==null?void 0:i.length)>0){o=Object.create(null);for(let c=0,l=i.length;c=0){let g=i[r];g&&(a[n]=g)}}a.length>0&&(this.properties.builtInEncoding=a)}};function hi(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function Re(e,A){return e[A]<<8|e[A+1]}function V0(e,A){return(e[A]<<24|e[A+1]<<16)>>16}function V1(e,A){return e[A]<<24>>24}function t0(e,A){return V0(e,A)/16384}function kI(e){let A=e.length,t=32768;return A<1240?t=107:A<33900&&(t=1131),t}function a2(e,A,t){let i=Re(e,A+2)===1?hi(e,A+8):hi(e,A+16),s=Re(e,A+i),a,n,r;if(s===4){Re(e,A+i+2);let g=Re(e,A+i+6)>>1;for(n=A+i+14,a=[],r=0;r2*Re(r,g));let a=[],n=s(A,0);for(let r=i;r>1;t0;)Q.push({flags:g})}for(l=0;l>1,B=!0;break;case 3:I+=r.length>>1,B=!0;break;case 4:o+=r.pop(),s(g,o),B=!0;break;case 5:for(;r.length>0;)g+=r.shift(),o+=r.shift(),a(g,o);break;case 6:for(;r.length>0&&(g+=r.shift(),a(g,o),r.length!==0);)o+=r.shift(),a(g,o);break;case 7:for(;r.length>0&&(o+=r.shift(),a(g,o),r.length!==0);)g+=r.shift(),a(g,o);break;case 8:for(;r.length>0;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 10:if(D=r.pop(),S=null,t.isCFFCIDFont){let w=t.fdSelect.getFDIndex(i);if(w>=0&&wMath.abs(o-Y)?g+=r.shift():o+=r.shift(),n(E,u,f,d,g,o);break;default:throw new v(`unknown operator: 12 ${Q}`)}break;case 14:if(r.length>=4){let w=r.pop(),Y=r.pop();o=r.pop(),g=r.pop(),A.add(_e.SAVE),A.add(_e.TRANSLATE,[g,o]);let U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[w]]));SI(t.glyphs[U.glyphId],A,t,U.glyphId),A.add(_e.RESTORE),U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[Y]])),SI(t.glyphs[U.glyphId],A,t,U.glyphId)}return;case 18:I+=r.length>>1,B=!0;break;case 19:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 20:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 21:o+=r.pop(),g+=r.pop(),s(g,o),B=!0;break;case 22:g+=r.pop(),s(g,o),B=!0;break;case 23:I+=r.length>>1,B=!0;break;case 24:for(;r.length>2;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);g+=r.shift(),o+=r.shift(),a(g,o);break;case 25:for(;r.length>6;)g+=r.shift(),o+=r.shift(),a(g,o);E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 26:for(r.length%2&&(g+=r.shift());r.length>0;)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f,o=d+r.shift(),n(E,u,f,d,g,o);break;case 27:for(r.length%2&&(o+=r.shift());r.length>0;)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d,n(E,u,f,d,g,o);break;case 28:r.push((l[h]<<24|l[h+1]<<16)>>16),h+=2;break;case 29:D=r.pop()+t.gsubrsBias,S=t.gsubrs[D],S&&c(S);break;case 30:for(;r.length>0&&(E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;case 31:for(;r.length>0&&(E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;default:if(Q<32)throw new v(`unknown operator: ${Q}`);Q<247?r.push(Q-139):Q<251?r.push((Q-247)*256+l[h++]+108):Q<255?r.push(-(Q-251)*256-l[h++]-108):(r.push((l[h]<<24|l[h+1]<<16|l[h+2]<<8|l[h+3])/65536),h+=4);break}B&&(r.length=0)}}c(e)}var _1=[],FI=class{constructor(){et(this,"cmds",[])}add(A,t){if(t)if(wt(t,null))this.cmds.push(A,...t);else{k(`Commands.add - "${A}" has at least one non-number arg: "${t}".`);let i=t.map(s=>typeof s=="number"?s:0);this.cmds.push(A,...i)}else this.cmds.push(A)}},Ur=class{constructor(A){this.fontMatrix=A,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(A){var n,r;let{charCode:t,glyphId:i}=Gr(this.cmap,A),s=this.compiledGlyphs[i],a;if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(g){s=_1,a=g}this.compiledGlyphs[i]=s}if((r=(n=this.compiledCharCodeToGlyphId)[t])!=null||(n[t]=i),a)throw a;return s}compileGlyph(A,t){if(!A||A.length===0||A[0]===14)return _1;let i=this.fontMatrix;if(this.isCFFCIDFont){let a=this.fdSelect.getFDIndex(t);a>=0&&a{let i=t.getSize();return A+(i+3&-4)},0)}write(){let A=this.getSize(),t=new DataView(new ArrayBuffer(A)),i=A>131070,s=i?4:2,a=new DataView(new ArrayBuffer((this.glyphs.length+1)*s));i?a.setUint32(0,0):a.setUint16(0,0);let n=0,r=0;for(let g of this.glyphs)n+=g.write(n,t),n=n+3&-4,r+=s,i?a.setUint32(r,n):a.setUint16(r,n>>1);return{isLocationLong:i,loca:new Uint8Array(a.buffer),glyf:new Uint8Array(t.buffer)}}scale(A){for(let t=0,i=this.glyphs.length;tt+i.getSize(),0);return this.header.getSize()+A}write(A,t){if(!this.header)return 0;let i=A;if(A+=this.header.write(A,t),this.simple)A+=this.simple.write(A,t);else for(let s of this.composites)A+=s.write(A,t);return A-i}scale(A){if(!this.header)return;let t=(this.header.xMin+this.header.xMax)/2;if(this.header.scale(t,A),this.simple)this.simple.scale(t,A);else for(let i of this.composites)i.scale(t,A)}},Ha=class{constructor({numberOfContours:A,xMin:t,yMin:i,xMax:s,yMax:a}){this.numberOfContours=A,this.xMin=t,this.yMin=i,this.xMax=s,this.yMax=a}static parse(A,t){return[10,new Ha({numberOfContours:t.getInt16(A),xMin:t.getInt16(A+2),yMin:t.getInt16(A+4),xMax:t.getInt16(A+6),yMax:t.getInt16(A+8)})]}getSize(){return 10}write(A,t){return t.setInt16(A,this.numberOfContours),t.setInt16(A+2,this.xMin),t.setInt16(A+4,this.yMin),t.setInt16(A+6,this.xMax),t.setInt16(A+8,this.yMax),10}scale(A,t){this.xMin=Math.round(A+(this.xMin-A)*t),this.xMax=Math.round(A+(this.xMax-A)*t)}},MI=class{constructor({flags:A,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t,this.yCoordinates=i,this.flags=A}},Ja=class{constructor({contours:A,instructions:t}){this.contours=A,this.instructions=t}static parse(A,t,i){let s=[];for(let Q=0;Q255?A+=2:o>0&&(A+=1),t=r,o=Math.abs(g-i),o>255?A+=2:o>0&&(A+=1),i=g}}return A}write(A,t){let i=A,s=[],a=[],n=[],r=0,g=0;for(let o of this.contours){for(let I=0,c=o.xCoordinates.length;I=0?vn|zs:vn,s.push(Q)):s.push(C)}r=h;let B=o.yCoordinates[I];if(C=B-g,C===0)l|=$s,a.push(0);else{let Q=Math.abs(C);Q<=255?(l|=C>=0?qn|$s:qn,a.push(Q)):a.push(C)}g=B,n.push(l)}t.setUint16(A,s.length-1),A+=2}t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length);for(let o of n)t.setUint8(A++,o);for(let o=0,I=s.length;o=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(A+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(A+=2),A}write(A,t){let i=A;return this.flags&Tn?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=Aa):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=Aa),t.setUint16(A,this.flags),t.setUint16(A+2,this.glyphIndex),A+=4,this.flags&Aa?(this.flags&Tn?(t.setInt16(A,this.argument1),t.setInt16(A+2,this.argument2)):(t.setUint16(A,this.argument1),t.setUint16(A+2,this.argument2)),A+=4):(t.setUint8(A,this.argument1),t.setUint8(A+1,this.argument2),A+=2),this.flags&xo&&(t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length)),A-i}scale(A,t){}};function Pn(e,A,t){e[A]=t>>8&255,e[A+1]=t&255}function mo(e,A,t){e[A]=t>>24&255,e[A+1]=t>>16&255,e[A+2]=t>>8&255,e[A+3]=t&255}function Q2(e,A,t){if(t instanceof Uint8Array)e.set(t,A);else if(typeof t=="string")for(let i=0,s=t.length;ii;)i<<=1,s++;let a=i*t;return{range:a,entry:s,rangeShift:t*A-a}}toArray(){let A=this.sfnt,t=this.tables,i=Object.keys(t);i.sort();let s=i.length,a,n,r,g,o,I=$1+s*AE,c=[I];for(a=0;a>>0;I+=C,c.push(I)}let l=new Uint8Array(I);for(a=0;a>>0}mo(l,I+4,C),mo(l,I+8,c[a]),mo(l,I+12,t[o].length),I+=AE}return l}addTable(A,t){if(A in this.tables)throw new Error("Table "+A+" already exists");this.tables[A]=t}},la=!1,Fe={hstem:[1],vstem:[3],vmoveto:[4],rlineto:[5],hlineto:[6],vlineto:[7],rrcurveto:[8],callsubr:[10],flex:[12,35],drop:[12,18],endchar:[14],rmoveto:[21],hmoveto:[22],vhcurveto:[30],hvcurveto:[31]},LI=class{constructor(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}convert(A,t,i){let s=A.length,a=!1,n,r,g;for(let o=0;os)return!0;let a=s-A;for(let n=a;n>8&255,r&255):(r=65536*r|0,this.output.push(255,r>>24&255,r>>16&255,r>>8&255,r&255))}return this.output.push(...t),i?this.stack.splice(a,A):this.stack.length=0,!1}},eE=55665,E2=4330;function _t(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function tE(e,A,t){if(t>=e.length)return new Uint8Array(0);let i=52845,s=22719,a=A|0,n,r;for(n=0;n>8,a=(I+a)*i+s&(1<<16)-1}return o}function f2(e,A,t){let a=A|0,n=e.length,r=n>>>1,g=new Uint8Array(r),o,I;for(o=0,I=0;o>8,a=(h+a)*52845+22719&(1<<16)-1}}return g.slice(t,I)}function iE(e){return e===47||e===91||e===93||e===123||e===125||e===40||e===41}var Mr=class{constructor(A,t,i){if(t){let s=A.getBytes(),a=!((_t(s[0])||pt(s[0]))&&_t(s[1])&&_t(s[2])&&_t(s[3])&&_t(s[4])&&_t(s[5])&&_t(s[6])&&_t(s[7]));A=new Ie(a?tE(s,eE,4):f2(s,eE,4))}this.seacAnalysisEnabled=!!i,this.stream=A,this.nextChar()}readNumberArray(){this.getToken();let A=[];for(;;){let t=this.getToken();if(t===null||t==="]"||t==="}")break;A.push(parseFloat(t||0))}return A}readNumber(){let A=this.getToken();return parseFloat(A||0)}readInt(){let A=this.getToken();return parseInt(A||0,10)|0}readBoolean(){return this.getToken()==="true"?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t===-1)return null;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}if(iE(t))return this.nextChar(),String.fromCharCode(t);let i="";do i+=String.fromCharCode(t),t=this.nextChar();while(t>=0&&!pt(t)&&!iE(t));return i}readCharStrings(A,t){return t===-1?A:tE(A,E2,t)}extractFontProgram(A){let t=this.stream,i=[],s=[],a=Object.create(null);a.lenIV=4;let n={subrs:[],charstrings:[],properties:{privateData:a}},r,g,o,I;for(;(r=this.getToken())!==null;)if(r==="/")switch(r=this.getToken(),r){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();r=this.getToken(),!(r===null||r==="end");){if(r!=="/")continue;let l=this.getToken();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"?this.getToken():r==="/"&&this.prevChar(),s.push({glyph:l,encoded:h})}break;case"Subrs":for(this.readInt(),this.getToken();this.getToken()==="dup";){let l=this.readInt();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"&&this.getToken(),i[l]=h}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":let c=this.readNumberArray();c.length>0&&c.length%2===0&&la&&(n.properties.privateData[r]=c);break;case"StemSnapH":case"StemSnapV":n.properties.privateData[r]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[r]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[r]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[r]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[r]=this.readBoolean();break}for(let{encoded:c,glyph:l}of s){let h=new LI,C=h.convert(c,i,this.seacAnalysisEnabled),B=h.output;C&&(B=[14]);let Q={glyphName:l,charstring:B,width:h.width,lsb:h.lsb,seac:h.seac};if(l===".notdef"?n.charstrings.unshift(Q):n.charstrings.push(Q),A.builtInEncoding){let E=A.builtInEncoding.indexOf(l);E>-1&&A.widths[E]===void 0&&E>=A.firstChar&&E<=A.lastChar&&(A.widths[E]=h.width)}}return n}extractFontHeader(A){let t;for(;(t=this.getToken())!==null;)if(t==="/")switch(t=this.getToken(),t){case"FontMatrix":let i=this.readNumberArray();A.fontMatrix=i;break;case"Encoding":let s=this.getToken(),a;if(!/^\\d+$/.test(s))a=Ua(s);else{a=[];let r=parseInt(s,10)|0;this.getToken();for(let g=0;g=s){for(n+=g;n=0&&(s[r]=a)}return ff(A,s,i)}hasGlyphId(A){return A<0||A>=this.numGlyphs?!1:A===0?!0:this.charstrings[A-1].charstring.length>0}getSeacs(A){let t=[];for(let i=0,s=A.length;i0;d--)u[d]-=u[d-1];C.setByName(f,u)}n.topDict.privateDict=C;let Q=new ai;for(c=0,l=s.length;c0&&e.toUnicode.amend(s)}function p2(e,A){if(e.isInternalFont||e.hasIncludedToUnicodeMap||A===e.defaultEncoding||e.toUnicode instanceof Ct)return;let t=[],i=Ai();for(let s in A){if(e.hasEncoding&&(e.baseEncodingName||e.differences[s]!==void 0))continue;let a=A[s],n=Us(a,i);n!==-1&&(t[s]=String.fromCharCode(n))}t.length>0&&e.toUnicode.amend(t)}function nE(e){if(!e.fallbackToUnicode||e.toUnicode instanceof Ct)return;let A=[];for(let t in e.fallbackToUnicode)e.toUnicode.has(t)||(A[t]=e.fallbackToUnicode[t]);A.length>0&&e.toUnicode.amend(A)}var JI=class{constructor(A,t,i,s,a,n,r,g,o){this.originalCharCode=A,this.fontChar=t,this.unicode=i,this.accent=s,this.width=a,this.vmetric=n,this.operatorListId=r,this.isSpace=g,this.isInFont=o}get category(){return nA(this,"category",$d(this.unicode),!0)}};function i0(e,A){return(e<<8)+A}function ea(e,A,t){e[A+1]=t,e[A]=t>>>8}function Dt(e,A){let t=(e<<8)+A;return t&1<<15?t-65536:t}function w2(e,A,t){e[A+3]=t&255,e[A+2]=t>>>8,e[A+1]=t>>>16,e[A]=t>>>24}function y2(e,A,t,i){return(e<<24)+(A<<16)+(t<<8)+i}function zA(e){return String.fromCharCode(e>>8&255,e&255)}function s0(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,e&255)}function b2(e){let A=e.peekBytes(4);return le(A,0)===65536||Qt(A)==="true"}function xf(e){let A=e.peekBytes(4);return Qt(A)==="ttcf"}function D2(e){let A=e.peekBytes(4);return Qt(A)==="OTTO"}function k2(e){let A=e.peekBytes(2);return A[0]===37&&A[1]===33||A[0]===128&&A[1]===1}function S2(e){let A=e.peekBytes(4);return A[0]>=1&&A[3]>=1&&A[3]<=4}function F2(e,{type:A,subtype:t,composite:i}){let s,a;return b2(e)||xf(e)?s=i?"CIDFontType2":"TrueType":D2(e)?s=i?"CIDFontType2":"OpenType":k2(e)?i?s="CIDFontType0":s=A==="MMType1"?"MMType1":"Type1":S2(e)?i?(s="CIDFontType0",a="CIDFontType0C"):(s=A==="MMType1"?"MMType1":"Type1",a="Type1C"):(k("getFontFileType: Unable to detect correct font file Type/Subtype."),s=A,a=t),[s,a]}function Wn(e,A){for(let t in A)e[+t]=A[t]}function wo(e,A,t){let i=[],s;for(let a=0,n=e.length;aoi[0][0]<=h&&h<=oi[0][1]||oi[1][0]<=h&&h<=oi[1][1];for(let h in e){let C=e[h];if(!A(C))continue;if(I>c){if(g++,g>=oi.length){k("Ran out of space in font private use area.");break}I=oi[g][0],c=oi[g][1]}let B=I++;C===0&&(C=t);let Q=i.get(h);typeof Q=="string"&&(Q=Q.codePointAt(0)),Q&&!l(Q)&&!r.has(C)&&(a.set(Q,C),r.add(C)),s[B]=C,n[h]=B}return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:a,nextAvailableFontCharCode:I}}function N2(e,A,t){let i=[];for(let n in e)e[n]>=t||i.push({fontCharCode:n|0,glyphId:e[n]});if(A)for(let[n,r]of A)r>=t||i.push({fontCharCode:n,glyphId:r});i.length===0&&i.push({fontCharCode:0,glyphId:0}),i.sort(function(r,g){return r.fontCharCode-g.fontCharCode});let s=[],a=i.length;for(let n=0;n65535?2:1,a="\\0\\0"+zA(s)+"\\0\\0"+qe(4+s*8),n,r,g,o;for(n=i.length-1;n>=0&&!(i[n][0]<=65535);--n);let I=n+1;i[n][0]<65535&&i[n][1]===65535&&(i[n][1]=65534);let c=i[n][1]<65535?1:0,l=I+c,h=F0.getSearchParams(l,2),C="",B="",Q="",E="",f="",u=0,d,x,p,m;for(n=0,r=I;n0&&(B+="\\xFF\\xFF",C+="\\xFF\\xFF",Q+="\\0",E+="\\0\\0");let D="\\0\\0"+zA(2*l)+zA(h.range)+zA(h.entry)+zA(h.rangeShift)+B+"\\0\\0"+C+Q+E+f,S="",w="";if(s>1){for(a+=`\\0\\0\n`+qe(4+s*8+4+D.length),S="",n=0,r=i.length;na||(A.skip(6),A.getUint16()===0)?!1:(e.data[8]=e.data[9]=0,!0)}function oE(e,A,t){t||(t={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0});let i=0,s=0,a=0,n=0,r=null,g=0,o=-1;if(A){for(let E in A)if(E|=0,(r>E||!r)&&(r=E),g 123 are reserved for internal usage");g>65535&&(g=65535)}else r=0,g=255;let I=e.bbox||[0,0,0,0],c=t.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:c/n0,h=t.ascent||Math.round(l*(e.ascent||I[3])),C=t.descent||Math.round(l*(e.descent||I[1]));C>0&&e.descent>0&&I[1]<0&&(C=-C);let B=t.yMax||h,Q=-t.yMin||-C;return"\\0$\\xF4\\0\\0\\0\\x8A\\xBB\\0\\0\\0\\x8C\\x8A\\xBB\\0\\0\\xDF\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+qe(i)+qe(s)+qe(a)+qe(n)+"*21*"+zA(e.italicAngle?1:0)+zA(r||e.firstChar)+zA(g||e.lastChar)+zA(h)+zA(C)+"\\0d"+zA(B)+zA(Q)+"\\0\\0\\0\\0\\0\\0\\0\\0"+zA(e.xHeight)+zA(e.capHeight)+zA(0)+zA(r||e.firstChar)+"\\0"}function IE(e){let A=Math.floor(e.italicAngle*65536);return"\\0\\0\\0"+qe(A)+"\\0\\0\\0\\0"+qe(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function U2(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function bo(e,A){A||(A=[[],[]]);let t=[A[0][0]||"Original licence",A[0][1]||e,A[0][2]||"Unknown",A[0][3]||"uniqueID",A[0][4]||e,A[0][5]||"Version 0.11",A[0][6]||U2(e),A[0][7]||"Unknown",A[0][8]||"Unknown",A[0][9]||"Unknown"],i=[],s,a,n,r,g;for(s=0,a=t.length;s0,(r||g)&&i==="CIDFontType2"&&this.cidEncoding.startsWith("Identity-")){let l=A.cidToGidMap,h=[];if(Wn(h,Z1()),/Arial-?Black/i.test(t)?Wn(h,i2()):/Calibri/i.test(t)&&Wn(h,s2()),l){for(let C in h){let B=h[C];l[B]!==void 0&&(h[+C]=l[B])}l.length!==this.toUnicode.length&&A.hasIncludedToUnicodeMap&&this.toUnicode instanceof Ct&&this.toUnicode.forEach(function(C,B){let Q=h[C];l[Q]===void 0&&(h[+C]=B)})}this.toUnicode instanceof Ct||this.toUnicode.forEach(function(C,B){h[+C]=B}),this.toFontChar=h,this.toUnicode=new B0(h)}else if(/Symbol/i.test(s))this.toFontChar=wo(l1,Ai(),this.differences);else if(/Dingbats/i.test(s))this.toFontChar=wo(h1,jd(),this.differences);else if(r||g){let l=wo(this.defaultEncoding,Ai(),this.differences);i==="CIDFontType2"&&!this.cidEncoding.startsWith("Identity-")&&!(this.toUnicode instanceof Ct)&&this.toUnicode.forEach(function(h,C){l[+h]=C}),this.toFontChar=l}else{let l=Ai(),h=[];this.toUnicode.forEach((C,B)=>{if(!this.composite){let Q=this.differences[C]||this.defaultEncoding[C],E=Us(Q,l);E!==-1&&(B=E)}h[+C]=B}),this.composite&&this.toUnicode instanceof Ct&&/Tahoma|Verdana/i.test(t)&&Wn(h,Z1()),this.toFontChar=h}nE(A),this.loadedName=s.split("-",1)[0]}checkAndRepair(A,t,i){var EA,fA,CA;let s=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function a(N,H){let q=Object.create(null);q["OS/2"]=null,q.cmap=null,q.head=null,q.hhea=null,q.hmtx=null,q.maxp=null,q.name=null,q.post=null;for(let T=0;T>>0,T=N.getInt32()>>>0,$=N.getInt32()>>>0,X=N.pos;N.pos=N.start||0,N.skip(T);let W=N.getBytes($);return N.pos=X,H==="head"&&(W[8]=W[9]=W[10]=W[11]=0,W[17]|=32),{tag:H,checksum:q,length:$,offset:T,data:W}}function r(N){return{version:N.getString(4),numTables:N.getUint16(),searchRange:N.getUint16(),entrySelector:N.getUint16(),rangeShift:N.getUint16()}}function g(N){let H=N.getString(4);gt(H==="ttcf","Must be a TrueType Collection font.");let q=N.getUint16(),T=N.getUint16(),$=N.getInt32()>>>0,X=[];for(let G=0;G<$;G++)X.push(N.getInt32()>>>0);let W={ttcTag:H,majorVersion:q,minorVersion:T,numFonts:$,offsetTable:X};switch(q){case 1:return W;case 2:return W.dsigTag=N.getInt32()>>>0,W.dsigLength=N.getInt32()>>>0,W.dsigOffset=N.getInt32()>>>0,W}throw new v(`Invalid TrueType Collection majorVersion: ${q}.`)}function o(N,H){var W;let{numFonts:q,offsetTable:T}=g(N),$=H.split("+"),X;for(let G=0;G>>0,UA=!1;if(!((G==null?void 0:G.platformId)===yA&&(G==null?void 0:G.encodingId)===aA)){if(yA===0&&(aA===0||aA===1||aA===3))UA=!0;else if(yA===1&&aA===0)UA=!0;else if(yA===3&&aA===1&&(T||!G))UA=!0,q||(BA=!0);else if(q&&yA===3&&aA===0){UA=!0;let Ee=!0;if(cA>3;cA.push(UA),yA=Math.max(UA,yA)}let aA=[];for(let DA=0;DA<=yA;DA++)aA.push({firstCode:H.getUint16(),entryCount:H.getUint16(),idDelta:Dt(H.getByte(),H.getByte()),idRangePos:H.pos+H.getUint16()});for(let DA=0;DA<256;DA++)if(cA[DA]===0)H.pos=aA[0].idRangePos+2*DA,FA=H.getUint16(),iA.push({charCode:DA,glyphId:FA});else{let UA=aA[cA[DA]];for(wA=0;wA>1;H.skip(6);let yA=[],aA;for(aA=0;aA>1)-(cA-aA),$.offsetIndex=UA,DA=Math.max(DA,UA+$.end-$.start+1)}let Ee=[];for(wA=0;wA>>0;for(wA=0;wA>>0,aA=H.getInt32()>>>0,DA=H.getInt32()>>>0;for(let UA=yA;UA<=aA;UA++)iA.push({charCode:UA,glyphId:DA++})}}else return k("cmap table has unsupported format: "+uA),{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1};iA.sort(function(cA,yA){return cA.charCode-yA.charCode});for(let cA=1;cA$&&(PA(`The numOfMetrics (${G}) should not be greater than the numGlyphs (${$}).`),G=$,H.data[34]=(G&65280)>>8,H.data[35]=G&255);let uA=$-G-(q.length-G*4>>1);if(uA>0){let bA=new Uint8Array(q.length+uA*2);bA.set(q.data),X&&(bA[q.length]=q.data[2],bA[q.length+1]=q.data[3]),q.data=bA}}function l(N,H,q,T,$,X){let W={length:0,sizeOfInstructions:0};if(H<0||H>=N.length||q>N.length||q-H<=12)return W;let G=N.subarray(H,q),BA=Dt(G[2],G[3]),uA=Dt(G[4],G[5]),bA=Dt(G[6],G[7]),iA=Dt(G[8],G[9]);BA>bA&&(ea(G,2,bA),ea(G,6,BA)),uA>iA&&(ea(G,4,iA),ea(G,8,uA));let wA=Dt(G[0],G[1]);if(wA<0)return wA<-1||(T.set(G,$),W.length=G.length),W;let FA,cA=10,yA=0;for(FA=0;FAG.length?W:!X&&DA>0?(T.set(G.subarray(0,aA),$),T.set([0,0],$+aA),T.set(G.subarray(UA,pA),$+aA+2),pA-=DA,G.length-pA>3&&(pA=pA+3&-4),W.length=pA,W):G.length-pA>3?(pA=pA+3&-4,T.set(G.subarray(0,pA),$),W.length=pA,W):(T.set(G,$),W.length=G.length,W)}function h(N,H,q){let T=N.data,$=y2(T[0],T[1],T[2],T[3]);$>>16!==1&&(PA("Attempting to fix invalid version in head table: "+$),T[0]=0,T[1]=1,T[2]=0,T[3]=0);let X=i0(T[50],T[51]);if(X<0||X>1){PA("Attempting to fix invalid indexToLocFormat in head table: "+X);let W=H+1;if(q===W<<1)T[50]=0,T[51]=0;else if(q===W<<2)T[50]=0,T[51]=1;else throw new v("Could not fix indexToLocFormat: "+X)}}function C(N,H,q,T,$,X,W){let G,BA,uA;T?(G=4,BA=function(WA,re){return WA[re]<<24|WA[re+1]<<16|WA[re+2]<<8|WA[re+3]},uA=function(WA,re,De){WA[re]=De>>>24&255,WA[re+1]=De>>16&255,WA[re+2]=De>>8&255,WA[re+3]=De&255}):(G=2,BA=function(WA,re){return WA[re]<<9|WA[re+1]<<1},uA=function(WA,re,De){WA[re]=De>>9&255,WA[re+1]=De>>1&255});let bA=X?q+1:q,iA=G*(1+bA),wA=new Uint8Array(iA);wA.set(N.data.subarray(0,iA)),N.data=wA;let FA=H.data,cA=FA.length,yA=new Uint8Array(cA),aA,DA,UA=[];for(aA=0,DA=0;aAcA&&(LA=cA),UA.push({index:aA,offset:LA,endOffset:0})}for(UA.sort((LA,WA)=>LA.offset-WA.offset),aA=0;aALA.index-WA.index),aA=0;aAW&&(W=LA.sizeOfInstructions),TA+=WA,uA(wA,DA,TA)}if(TA===0){let LA=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(aA=0,DA=G;aALA+TA?H.data=yA.subarray(0,LA+TA):(H.data=new Uint8Array(LA+TA),H.data.set(yA.subarray(0,TA))),H.data.set(yA.subarray(0,LA),TA),uA(N.data,wA.length-G,TA+LA)}else H.data=yA.subarray(0,TA);return{missingGlyphs:pA,maxSizeOfInstructions:W}}function B(N,H,q){let T=(t.start||0)+N.offset;t.pos=T;let $=N.length,X=T+$,W=t.getInt32();t.skip(28);let G,BA=!0,uA;switch(W){case 65536:G=O1;break;case 131072:let bA=t.getUint16();if(bA!==q){BA=!1;break}let iA=[];for(uA=0;uA=32768){BA=!1;break}iA.push(cA)}if(!BA)break;let wA=[],FA=[];for(;t.posX)continue;t.pos=cA;let yA=FA.name;if(FA.encoding){let aA="";for(let DA=0,UA=FA.length;DA0&&(T+=TA-1)}if(!yA&&!DA){let TA=0;for(pA<=142?TA=E[pA]:pA>=192&&pA<=223?TA=-1:pA>=224&&(TA=-2),pA>=113&&pA<=117&&(X=iA.pop(),isNaN(X)||(TA=-X*2));TA<0&&iA.length>0;)iA.pop(),TA++;for(;TA>0;)iA.push(NaN),TA--}}H.tooComplexToFollowFunctions=cA;let UA=[q];T>q.length&&UA.push(new Uint8Array(T-q.length)),bA>uA&&(k("TT: complementing a missing function tail"),UA.push(new Uint8Array([34,45]))),d(N,UA)}function u(N,H){if(!N.tooComplexToFollowFunctions){if(N.functionsDefined.length>H){k("TT: more functions defined than expected"),N.hintsValid=!1;return}for(let q=0,T=N.functionsUsed.length;qH){k("TT: invalid function id: "+q),N.hintsValid=!1;return}if(N.functionsUsed[q]&&!N.functionsDefined[q]){k("TT: undefined function: "+q),N.hintsValid=!1;return}}}}function d(N,H){if(H.length>1){let q=0,T,$;for(T=0,$=H.length;T<$;T++)q+=H[T].length;q=q+3&-4;let X=new Uint8Array(q),W=0;for(T=0,$=H.length;T<$;T++)X.set(H[T],W),W+=H[T].length;N.data=X,N.length=q}}function x(N,H,q,T){let $={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(N&&f(N,$),H&&f(H,$),N&&u($,T),q&&q.length&1){let X=new Uint8Array(q.length+1);X.set(q.data),q.data=X}return $.hintsValid}t=new Ie(new Uint8Array(t.getBytes()));let p,m;if(xf(t)){let N=o(t,this.name);p=N.header,m=N.tables}else p=r(t),m=a(t,p.numTables);let D,S,w=!m["CFF "];if(w){if(!m.loca)throw new v(\'Required "loca" table is not found\');m.glyf||(k(\'Required "glyf" table is not found -- trying to recover.\'),m.glyf={tag:"glyf",data:new Uint8Array(0)}),this.isOpenType=!1}else{let N=i.composite&&(((EA=i.cidToGidMap)==null?void 0:EA.length)>0||!(i.cMap instanceof Wi));if(p.version==="OTTO"&&!N||!m.head||!m.hhea||!m.maxp||!m.post)return S=new Ie(m["CFF "].data),D=new Ea(S,i),po(i),this.convert(A,D,i);delete m.glyf,delete m.loca,delete m.fpgm,delete m.prep,delete m["cvt "],this.isOpenType=!0}if(!m.maxp)throw new v(\'Required "maxp" table is not found\');t.pos=(t.start||0)+m.maxp.offset;let Y=t.getInt32(),U=t.getUint16();if(Y!==65536&&Y!==20480){if(m.maxp.length===6)Y=20480;else if(m.maxp.length>=32)Y=65536;else throw new v(\'"maxp" table has a wrong version number\');w2(m.maxp.data,0,Y)}if(((fA=i.scaleFactors)==null?void 0:fA.length)===U&&w){let{scaleFactors:N}=i,H=i0(m.head.data[50],m.head.data[51]),q=new UI({glyfTable:m.glyf.data,isGlyphLocationsLong:H,locaTable:m.loca.data,numGlyphs:U});q.scale(N);let{glyf:T,loca:$,isLocationLong:X}=q.write();m.glyf.data=T,m.loca.data=$,X!==!!H&&(m.head.data[50]=0,m.head.data[51]=X?1:0);let W=m.hmtx.data;for(let G=0;G>8&255,W[BA+1]=uA&255;let bA=Math.round(N[G]*Dt(W[BA+2],W[BA+3]));ea(W,BA+2,bA)}}let K=U+1,Z=!0;K>65535&&(Z=!1,K=U,k("Not enough space in glyfs to duplicate first glyph."));let AA=0,gA=0;Y>=65536&&m.maxp.length>=32&&(t.pos+=8,t.getUint16()>2&&(m.maxp.data[14]=0,m.maxp.data[15]=2),t.pos+=4,AA=t.getUint16(),t.pos+=4,gA=t.getUint16()),m.maxp.data[4]=K>>8,m.maxp.data[5]=K&255;let R=x(m.fpgm,m.prep,m["cvt "],AA);if(R||(delete m.fpgm,delete m.prep,delete m["cvt "]),c(t,m.hhea,m.hmtx,m.head,K,Z),!m.head)throw new v(\'Required "head" table is not found\');h(m.head,U,w?m.loca.length:0);let _=Object.create(null);if(w){let N=i0(m.head.data[50],m.head.data[51]),H=C(m.loca,m.glyf,U,N,R,Z,gA);_=H.missingGlyphs,Y>=65536&&m.maxp.length>=32&&(m.maxp.data[26]=H.maxSizeOfInstructions>>8,m.maxp.data[27]=H.maxSizeOfInstructions&255)}if(!m.hhea)throw new v(\'Required "hhea" table is not found\');m.hhea.data[10]===0&&m.hhea.data[11]===0&&(m.hhea.data[10]=255,m.hhea.data[11]=255);let tA={unitsPerEm:i0(m.head.data[18],m.head.data[19]),yMax:Dt(m.head.data[42],m.head.data[43]),yMin:Dt(m.head.data[38],m.head.data[39]),ascent:Dt(m.hhea.data[4],m.hhea.data[5]),descent:Dt(m.hhea.data[6],m.hhea.data[7]),lineGap:Dt(m.hhea.data[8],m.hhea.data[9])};this.ascent=tA.ascent/tA.unitsPerEm,this.descent=tA.descent/tA.unitsPerEm,this.lineGap=tA.lineGap/tA.unitsPerEm,(CA=this.cssFontInfo)!=null&&CA.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,m.post&&B(m.post,i,U),m.post={tag:"post",data:IE(i)};let IA=Object.create(null);function QA(N){return!_[N]}if(i.composite){let N=i.cidToGidMap||[],H=N.length===0;i.cMap.forEach(function(q,T){if(typeof T=="string"&&(T=yo(q,T,!0)),T>65535)throw new v("Max size of CID is 65,535");let $=-1;H?$=T:N[T]!==void 0&&($=N[T]),$>=0&&$=61440&&G<=61695&&(G&=255),IA[G]=W.glyphId}else for(let W of T)IA[W.charCode]=W.glyphId;if(i.glyphNames&&($.length||this.differences.length))for(let W=0;W<256;++W){if(!X&&IA[W]!==void 0)continue;let G=this.differences[W]||$[W];if(!G)continue;let BA=i.glyphNames.indexOf(G);BA>0&&QA(BA)&&(IA[W]=BA)}}IA.length===0&&(IA[0]=0);let V=K-1;if(Z||(V=0),!i.cssFontInfo){let N=rE(IA,QA,V,this.toUnicode);this.toFontChar=N.toFontChar,m.cmap={tag:"cmap",data:gE(N.charCodeToGlyphId,N.toUnicodeExtraMap,K)},(!m["OS/2"]||!G2(m["OS/2"],t))&&(m["OS/2"]={tag:"OS/2",data:oE(i,N.charCodeToGlyphId,tA)})}if(!w)try{S=new Ie(m["CFF "].data),D=new Ma(S,i,Cs).parse(),D.duplicateFirstGlyph();let H=new k0(D);m["CFF "].data=H.compile()}catch(N){k("Failed to compile font "+i.loadedName)}if(!m.name)m.name={tag:"name",data:bo(this.name)};else{let[N,H]=Q(m.name);m.name.data=bo(A,N),this.psName=N[0][6]||null,i.composite||m2(i,this.isSymbolicFont,H)}let lA=new F0(p.version);for(let N in m)lA.addTable(N,m[N].data);return lA.toArray()}convert(A,t,i){i.fixedPitch=!1,i.builtInEncoding&&p2(i,i.builtInEncoding);let s=1;t instanceof Ea&&(s=t.numGlyphs-1);let a=t.getGlyphMapping(i),n=null,r=a,g=null;i.cssFontInfo||(n=rE(a,t.hasGlyphId.bind(t),s,this.toUnicode),this.toFontChar=n.toFontChar,r=n.charCodeToGlyphId,g=n.toUnicodeExtraMap);let o=t.numGlyphs;function I(B,Q){let E=null;for(let f in B)Q===B[f]&&(E||(E=[])).push(f|0);return E}function c(B,Q){for(let E in B)if(Q===B[E])return E|0;return n.charCodeToGlyphId[n.nextAvailableFontCharCode]=Q,n.nextAvailableFontCharCode++}let l=t.seacs;if(n&&Cs&&(l!=null&&l.length)){let B=i.fontMatrix||E0,Q=t.getCharset(),E=Object.create(null);for(let f in l){f|=0;let u=l[f],d=fi[u[2]],x=fi[u[3]],p=Q.indexOf(d),m=Q.indexOf(x);if(p<0||m<0)continue;let D={x:u[0]*B[0]+u[1]*B[2]+B[4],y:u[0]*B[1]+u[1]*B[3]+B[5]},S=I(a,f);if(S)for(let w of S){let Y=n.charCodeToGlyphId,U=c(Y,p),K=c(Y,m);E[w]={baseFontCharCode:U,accentFontCharCode:K,accentOffset:D}}}i.seacMap=E}let h=i.fontMatrix?1/Math.max(...i.fontMatrix.slice(0,4).map(Math.abs)):1e3,C=new F0("OTTO");return C.addTable("CFF ",t.data),C.addTable("OS/2",oE(i,r)),C.addTable("cmap",gE(r,g,o)),C.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<\\xF5\\0\\0"+s0(h)+"\\0\\0\\0\\0\\x9E\\v~\'\\0\\0\\0\\0\\x9E\\v~\'\\0\\0"+s0(i.descent)+"\\xFF"+s0(i.ascent)+zA(i.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),C.addTable("hhea","\\0\\0\\0"+s0(i.ascent)+s0(i.descent)+"\\0\\0\\xFF\\xFF\\0\\0\\0\\0\\0\\0"+s0(i.capHeight)+s0(Math.tan(i.italicAngle)*i.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+zA(o)),C.addTable("hmtx",function(){let Q=t.charstrings,E=t.cff?t.cff.widths:null,f="\\0\\0\\0\\0";for(let u=1,d=o;ut.length%2===1,a=this.toUnicode instanceof Ct?n=>this.toUnicode.charCodeOf(n):n=>this.toUnicode.charCodeOf(String.fromCodePoint(n));for(let n=0,r=A.length;n55295&&(g<57344||g>65533)&&n++,this.toUnicode){let o=a(g);if(o!==-1){s()&&(t.push(i.join("")),i.length=0);let I=this.cMap?this.cMap.getCharCodeLength(o):1;for(let c=I-1;c>=0;c--)i.push(String.fromCharCode(o>>8*c&255));continue}}s()||(t.push(i.join("")),i.length=0),i.push(String.fromCodePoint(g))}return t.push(i.join("")),t}},fa=class{constructor(A){this.error=A,this.loadedName="g_font_error",this.missingFile=!0}charsToGlyphs(){return[]}encodeString(A){return[A]}exportData(A=!1){return{error:this.error}}},nt={FUNCTION_BASED:1,AXIAL:2,RADIAL:3,FREE_FORM_MESH:4,LATTICE_FORM_MESH:5,COONS_PATCH_MESH:6,TENSOR_PATCH_MESH:7},YI=class{constructor(){OA("Cannot initialize Pattern.")}static parseShading(A,t,i,s,a){let n=A instanceof KA?A.dict:A,r=n.get("ShadingType");try{switch(r){case nt.AXIAL:case nt.RADIAL:return new KI(n,t,i,s,a);case nt.FREE_FORM_MESH:case nt.LATTICE_FORM_MESH:case nt.COONS_PATCH_MESH:case nt.TENSOR_PATCH_MESH:return new _0(A,t,i,s,a);default:throw new v("Unsupported ShadingType: "+r)}}catch(g){if(g instanceof ge)throw g;return k(g),new qI}}},Oi=class{getIR(){OA("Abstract method `getIR` called.")}};et(Oi,"SMALL_NUMBER",1e-6);var KI=class extends Oi{constructor(A,t,i,s,a){super(),this.shadingType=A.get("ShadingType");let n=0;if(this.shadingType===nt.AXIAL?n=4:this.shadingType===nt.RADIAL&&(n=6),this.coordsArr=A.getArray("Coords"),!wt(this.coordsArr,n))throw new v("RadialAxialShading: Invalid /Coords array.");let r=JA.parse({cs:A.getRaw("CS")||A.getRaw("ColorSpace"),xref:t,resources:i,pdfFunctionFactory:s,localColorSpaceCache:a});this.bbox=Ei(A.getArray("BBox"),null);let g=0,o=1,I=A.getArray("Domain");wt(I,2)&&([g,o]=I);let c=!1,l=!1,h=A.getArray("Extend");if(Tu(h,2)&&([c,l]=h),this.shadingType===nt.RADIAL&&(!c||!l)){let[tA,IA,QA,V,lA,EA]=this.coordsArr,fA=Math.hypot(tA-V,IA-lA);QA<=EA+fA&&EA<=QA+fA&&k("Unsupported radial gradient.")}this.extendStart=c,this.extendEnd=l;let C=A.getRaw("Function"),B=s.createFromArray(C),Q=840,E=(o-g)/Q,f=this.colorStops=[];if(g>=o||E<=0){PA("Bad shading domain.");return}let u=new Float32Array(r.numComps),d=new Float32Array(1),x,p=0;d[0]=g,B(d,0,u,0);let m=r.getRgb(u,0),D=Ce.makeHexColor(m[0],m[1],m[2]);f.push([0,D]);let S=1;d[0]=g+E,B(d,0,u,0);let w=r.getRgb(u,0),Y=w[0]-m[0]+1,U=w[1]-m[1]+1,K=w[2]-m[2]+1,Z=w[0]-m[0]-1,AA=w[1]-m[1]-1,gA=w[2]-m[2]-1;for(let tA=2;tA0)return!0;let A=this.stream.getByte();return A<0?!1:(this.buffer=A,this.bufferLength=8,!0)}readBits(A){let t=this.buffer,i=this.bufferLength;if(A===32){if(i===0)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();let s=this.stream.getByte();return this.buffer=s&(1<>i)>>>0}if(A===8&&i===0)return this.stream.getByte();for(;i>i}align(){this.buffer=0,this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){let A=this.context.bitsPerCoordinate,t=this.readBits(A),i=this.readBits(A),s=this.context.decode,a=A<32?1/((1<r?r:A,t=t>g?g:t,i=io*s[I]):t,n=-2,r,g=[];for(let[o,I]of i.map((c,l)=>[c,l]).sort(([c],[l])=>c-l))o!==-1&&(o===n+1?(r.push(a[I]),n+=1):(n=o,r=[a[I]],g.push(o,r)));return g}function pf(e){let A=Q9(e),t=new F(null);t.set("BaseFont",M.get(e)),t.set("Type",M.get("Font")),t.set("Subtype",M.get("CIDFontType2")),t.set("Encoding",M.get("Identity-H")),t.set("CIDToGIDMap",M.get("Identity")),t.set("W",A),t.set("FirstChar",A[0]),t.set("LastChar",A.at(-2)+A.at(-1).length-1);let i=new F(null);t.set("FontDescriptor",i);let s=new F(null);return s.set("Ordering","Identity"),s.set("Registry","Adobe"),s.set("Supplement",0),t.set("CIDSystemInfo",s),t}var TI=class{constructor(A){this.lexer=A,this.operators=[],this.token=null,this.prev=null}nextToken(){this.prev=this.token,this.token=this.lexer.getToken()}accept(A){return this.token.type===A?(this.nextToken(),!0):!1}expect(A){if(this.accept(A))return!0;throw new v(`Unexpected symbol: found ${this.token.type} expected ${A}.`)}parse(){return this.nextToken(),this.expect(Ve.LBRACE),this.parseBlock(),this.expect(Ve.RBRACE),this.operators}parseBlock(){for(;;)if(this.accept(Ve.NUMBER))this.operators.push(this.prev.value);else if(this.accept(Ve.OPERATOR))this.operators.push(this.prev.value);else if(this.accept(Ve.LBRACE))this.parseCondition();else return}parseCondition(){let A=this.operators.length;if(this.operators.push(null,null),this.parseBlock(),this.expect(Ve.RBRACE),this.accept(Ve.IF))this.operators[A]=this.operators.length,this.operators[A+1]="jz";else if(this.accept(Ve.LBRACE)){let t=this.operators.length;this.operators.push(null,null);let i=this.operators.length;this.parseBlock(),this.expect(Ve.RBRACE),this.expect(Ve.IFELSE),this.operators[t]=this.operators.length,this.operators[t+1]="j",this.operators[A]=i,this.operators[A+1]="jz"}else throw new v("PS Function: error parsing conditional.")}},Ve={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5},rt=class{static get opCache(){return nA(this,"opCache",Object.create(null))}constructor(A,t){this.type=A,this.value=t}static getOperator(A){var t;return(t=rt.opCache)[A]||(t[A]=new rt(Ve.OPERATOR,A))}static get LBRACE(){return nA(this,"LBRACE",new rt(Ve.LBRACE,"{"))}static get RBRACE(){return nA(this,"RBRACE",new rt(Ve.RBRACE,"}"))}static get IF(){return nA(this,"IF",new rt(Ve.IF,"IF"))}static get IFELSE(){return nA(this,"IFELSE",new rt(Ve.IFELSE,"IFELSE"))}},PI=class{constructor(A){this.stream=A,this.nextChar(),this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}switch(t|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new rt(Ve.NUMBER,this.getNumber());case 123:return this.nextChar(),rt.LBRACE;case 125:return this.nextChar(),rt.RBRACE}let i=this.strBuf;for(i.length=0,i[0]=String.fromCharCode(t);(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)i.push(String.fromCharCode(t));let s=i.join("");switch(s.toLowerCase()){case"if":return rt.IF;case"ifelse":return rt.IFELSE;default:return rt.getOperator(s)}}getNumber(){let A=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(A);(A=this.nextChar())>=0&&(A>=48&&A<=57||A===45||A===46);)t.push(String.fromCharCode(A));let i=parseFloat(t.join(""));if(isNaN(i))throw new v(`Invalid floating point number: ${i}`);return i}},Xi=class{constructor(A){this._onlyRefs=(A==null?void 0:A.onlyRefs)===!0,this._onlyRefs||(this._nameRefMap=new Map,this._imageMap=new Map),this._imageCache=new mt}getByName(A){this._onlyRefs&&OA("Should not call `getByName` method.");let t=this._nameRefMap.get(A);return t?this.getByRef(t):this._imageMap.get(A)||null}getByRef(A){return this._imageCache.get(A)||null}set(A,t,i){OA("Abstract method `set` called.")}},Hr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalImageCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},Jr=class extends Xi{set(A=null,t=null,i){if(typeof A!="string"&&!t)throw new Error(\'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.\');if(t){if(this._imageCache.has(t))return;A!==null&&this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},WI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalFunctionCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},Yr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalGStateCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},OI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalTilingPatternCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ZI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'RegionalImageCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ps,Mg,wf,Bn,jI,os=class{constructor(){HA(this,Mg);HA(this,Bn);HA(this,ps,new be);this._refCache=new mt,this._imageCache=new mt}shouldCache(A,t){let i=this._refCache.get(A);return i||(i=new Set,this._refCache.put(A,i)),i.add(t),!(i.size+A):null}var vr=class{static getSampleArray(A,t,i,s){let a,n,r=1;for(a=0,n=A.length;a>o)*c,I&=(1<w?D=w:D0&&(u=r[f-1]);let d=s[1];f>1,c=a.length>>1,l=new XI(o),h=Object.create(null),B=2048*4,Q=new Float32Array(c);return function(f,u,d,x){let p,m,D="",S=Q;for(p=0;pZ&&(m=Z)),Y[p]=m}B>0&&(B--,h[D]=Y),d.set(Y,x)}}};function Do(e){let A;if(e instanceof F)A=e;else if(e instanceof KA)A=e.dict;else return!1;return A.has("FunctionType")}var Lg=class{constructor(A){this.stack=A?Array.from(A):[]}push(A){if(this.stack.length>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(A)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(A){if(this.stack.length+A>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");let t=this.stack;for(let i=t.length-A,s=A-1;s>=0;s--,i++)t.push(t[i])}index(A){this.push(this.stack[this.stack.length-A-1])}roll(A,t){let i=this.stack,s=i.length-A,a=i.length-1,n=s+(t-Math.floor(t/A)*A);for(let r=s,g=a;r0?t.push(r<>g);break;case"ceiling":r=t.pop(),t.push(Math.ceil(r));break;case"copy":r=t.pop(),t.copy(r);break;case"cos":r=t.pop(),t.push(Math.cos(r%360/180*Math.PI));break;case"cvi":r=t.pop()|0,t.push(r);break;case"cvr":break;case"div":g=t.pop(),r=t.pop(),t.push(r/g);break;case"dup":t.copy(1);break;case"eq":g=t.pop(),r=t.pop(),t.push(r===g);break;case"exch":t.roll(2,1);break;case"exp":g=t.pop(),r=t.pop(),t.push(r**g);break;case"false":t.push(!1);break;case"floor":r=t.pop(),t.push(Math.floor(r));break;case"ge":g=t.pop(),r=t.pop(),t.push(r>=g);break;case"gt":g=t.pop(),r=t.pop(),t.push(r>g);break;case"idiv":g=t.pop(),r=t.pop(),t.push(r/g|0);break;case"index":r=t.pop(),t.index(r);break;case"le":g=t.pop(),r=t.pop(),t.push(r<=g);break;case"ln":r=t.pop(),t.push(Math.log(r));break;case"log":r=t.pop(),t.push(Math.log10(r));break;case"lt":g=t.pop(),r=t.pop(),t.push(r=A?new ui(A):e.max<=A?e:new _I(e,A)}var zI=class{compile(A,t,i){let s=[],a=[],n=t.length>>1,r=i.length>>1,g=0,o,I,c,l,h,C,B,Q;for(let f=0;fd.min&&(D.unshift("Math.max(",p,", "),D.push(")")),m4?(i=!0,A=0):(i=!1,A=1));let g=[];for(n=0;n=0&&VA[E]==="ET";--E)VA[E]="EN";for(let E=n+1;E0&&(f=VA[n-1]);let u=c;E+1Q&&hE(Q)&&(B=Q);for(Q=C;Q>=B;--Q){let E=-1;for(n=0,r=g.length;n=0&&(CE(ki,E,n),E=-1):E<0&&(E=n);E>=0&&CE(ki,E,g.length)}for(n=0,r=ki.length;n")&&(ki[n]="")}return ko(ki.join(""),i)}var r0={style:"normal",weight:"normal"},o0={style:"normal",weight:"bold"},I0={style:"italic",weight:"normal"},c0={style:"italic",weight:"bold"},ua=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:r0,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:o0,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:I0,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:c0,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:r0,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:o0,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:I0,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:c0,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:r0,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:o0,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:I0,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:c0,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:r0,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:o0,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:I0,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:c0,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:r0,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:o0,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:I0,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:c0,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:r0}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),b9=new Map([["Arial-Black","ArialBlack"]]);function D9(e){switch(e){case o0:return"Bold";case I0:return"Italic";case c0:return"Bold Italic";default:if((e==null?void 0:e.weight)==="bold")return"Bold";if((e==null?void 0:e.style)==="italic")return"Italic"}return""}function BE(e){let A=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter(t=>!A.has(t.toLowerCase())).join(" ")}function $I({alias:e,local:A,path:t,fallback:i,style:s,ultimate:a},n,r,g=!0,o=!0,I=""){let c={style:null,ultimate:null};if(A){let l=I?` ${I}`:"";for(let h of A)n.push(`local(${h}${l})`)}if(e){let l=ua.get(e),h=I||D9(s);Object.assign(c,$I(l,n,r,g&&!i,o&&!t,h))}if(s&&(c.style=s),a&&(c.ultimate=a),g&&i){let l=ua.get(i),{ultimate:h}=$I(l,n,r,g,o&&!t,I);c.ultimate||(c.ultimate=h)}return o&&t&&r&&n.push(`url(${r}${t})`),c}function QE(e,A,t,i,s,a){if(i.startsWith("InvalidPDFjsFont_"))return null;(a==="TrueType"||a==="Type1")&&/^[A-Z]{6}\\+/.test(i)&&(i=i.slice(7)),i=pn(i);let n=i,r=e.get(n);if(r)return r;let g=ua.get(i);if(!g){for(let[Q,E]of b9)if(i.startsWith(Q)){i=`${E}${i.substring(Q.length)}`,g=ua.get(i);break}}let o=!1;g||(g=ua.get(s),o=!0);let I=`${A.getDocId()}_s${A.createFontId()}`;if(!g){if(!vo(i))return k(`Cannot substitute the font because of its name: ${i}`),e.set(n,null),null;let Q=/bold/gi.test(i),E=/oblique|italic/gi.test(i),f=Q&&E&&c0||Q&&o0||E&&I0||r0;return r={css:`"${BE(i)}",${I}`,guessFallback:!0,loadedName:I,baseFontName:i,src:`local(${i})`,style:f},e.set(n,r),r}let c=[];o&&vo(i)&&c.push(`local(${i})`);let{style:l,ultimate:h}=$I(g,c,t),C=h===null,B=C?"":`,${h}`;return r={css:`"${BE(i)}",${I}${B}`,guessFallback:C,loadedName:I,baseFontName:i,src:c.join(","),style:l},e.set(n,r),r}var bf=2048,k9=65537,EE=128,at=class{constructor(A,t){this._imgData=A,this._isMask=t}static needsToBeResized(A,t){if(A<=this._goodSquareLength&&t<=this._goodSquareLength)return!1;let{MAX_DIM:i}=this;if(A>i||t>i)return!0;let s=A*t;if(this._hasMaxArea)return s>this.MAX_AREA;if(sa}static get MAX_DIM(){return nA(this,"MAX_DIM",this._guessMax(bf,k9,0,1))}static get MAX_AREA(){return this._hasMaxArea=!0,nA(this,"MAX_AREA",this._guessMax(at._goodSquareLength,this.MAX_DIM,EE,0)**2)}static set MAX_AREA(A){A>=0&&(this._hasMaxArea=!0,nA(this,"MAX_AREA",A))}static setMaxArea(A){this._hasMaxArea||(this.MAX_AREA=A>>2)}static _areGoodDims(A,t){try{let i=new OffscreenCanvas(A,t),s=i.getContext("2d");s.fillRect(0,0,1,1);let a=s.getImageData(0,0,1,1).data[3];return i.width=i.height=1,a!==0}catch(i){return!1}}static _guessMax(A,t,i,s){for(;A+i+1>3,Q=B+3&-4;if(B!==Q){let E=new Uint8Array(Q*t),f=0;for(let u=0,d=t*B;u>>8,t[i++]=E&255)}}else if(ArrayBuffer.isView(A))t=A.slice(),i=t.byteLength;else throw new Error("Invalid data format, must be a string or TypedArray.");let s=i>>2,a=i-s*4,n=new Uint32Array(t.buffer,0,s),r=0,g=0,o=this.h1,I=this.h2,c=3432918353,l=461845907,h=c&Vt,C=l&Vt;for(let B=0;B>>17,r=r*l&St|r*C&Vt,o^=r,o=o<<13|o>>>19,o=o*5+3864292196):(g=n[B],g=g*c&St|g*h&Vt,g=g<<15|g>>>17,g=g*l&St|g*C&Vt,I^=g,I=I<<13|I>>>19,I=I*5+3864292196);switch(r=0,a){case 3:r^=t[s*4+2]<<16;case 2:r^=t[s*4+1]<<8;case 1:r^=t[s*4],r=r*c&St|r*h&Vt,r=r<<15|r>>>17,r=r*l&St|r*C&Vt,s&1?o^=r:I^=r}this.h1=o,this.h2=I}hexdigest(){let A=this.h1,t=this.h2;return A^=t>>>1,A=A*3981806797&St|A*36045&Vt,t=t*4283543511&St|((t<<16|A>>>16)*2950163797&St)>>>16,A^=t>>>1,A=A*444984403&St|A*60499&Vt,t=t*3301882366&St|((t<<16|A>>>16)*3120437893&St)>>>16,A^=t>>>1,(A>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}};function $g(e,A,t,i,s){let a=e;for(let n=0,r=A.length-1;n1e3&&(C=Math.max(C,E),f+=Q+2*1,E=0,Q=0),B.push({transform:S,x:E,y:f,w:w.width,h:w.height}),E+=w.width+2*1,Q=Math.max(Q,w.height)}let u=Math.max(C,E)+1,d=f+Q+1,x=new Uint8Array(u*d*4),p=u<<2;for(let D=0;D=0;)S[U-4]=S[U],S[U-3]=S[U+1],S[U-2]=S[U+2],S[U-1]=S[U+3],S[U+w]=S[U+w-4],S[U+w+1]=S[U+w-3],S[U+w+2]=S[U+w-2],S[U+w+3]=S[U+w-1],U-=p}let m={width:u,height:d};if(A.isOffscreenCanvasSupported){let D=new OffscreenCanvas(u,d);D.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(x.buffer),u,d),0,0),m.bitmap=D.transferToImageBitmap(),m.data=null}else m.kind=Ke.RGBA_32BPP,m.data=x;return r.splice(I,h*4,y.paintInlineImageXObjectGroup),g.splice(I,h*4,[m,B]),I+1});$g(Ms,[y.save,y.transform,y.paintImageMaskXObject,y.restore],null,function(A,t){let i=A.fnArray,s=A.iCurr-3,a=(t-s)%4;switch(a){case 0:return i[t]===y.save;case 1:return i[t]===y.transform;case 2:return i[t]===y.paintImageMaskXObject;case 3:return i[t]===y.restore}throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`)},function(A,t){let n=A.fnArray,r=A.argsArray,g=A.iCurr,o=g-3,I=g-2,c=g-1,l=Math.floor((t-o)/4);if(l<10)return t-(t-o)%4;let h=!1,C,B,Q=r[c][0],E=r[I][0],f=r[I][1],u=r[I][2],d=r[I][3];if(f===u){h=!0,C=I+4;let x=c+4;for(let p=1;p=4&&s[r-4]===s[g]&&s[r-3]===s[o]&&s[r-2]===s[I]&&s[r-1]===s[c]&&a[r-4][0]===l&&a[r-4][1]===h&&(C++,B-=5);let Q=B+4;for(let E=1;E=i)break}if(s=(s||Ms)[A[t]],!s||Array.isArray(s)){t++;continue}if(n.iCurr=t,t++,s.checkFn&&!(0,s.checkFn)(n)){s=null;continue}a=s,s=null}this.state=s,this.match=a,this.lastProcessed=t}flush(){for(;this.match;){let A=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,A),this.match=null,this.state=null,this._optimize()}}reset(){this.state=null,this.match=null,this.lastProcessed=0}},Is=class{constructor(A=0,t){this._streamSink=t,this.fnArray=[],this.argsArray=[],this.optimizer=t&&!(A&st.OPLIST)?new ec(this):new Wr(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(A){this.optimizer.isOffscreenCanvasSupported=A}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(A,t){this.optimizer.push(A,t),this.weight++,this._streamSink&&(this.weight>=Is.CHUNK_SIZE?this.flush():this.weight>=Is.CHUNK_SIZE_ABOUT&&(A===y.restore||A===y.endText)&&this.flush())}addImageOps(A,t,i){i!==void 0&&this.addOp(y.beginMarkedContentProps,["OC",i]),this.addOp(A,t),i!==void 0&&this.addOp(y.endMarkedContent,[])}addDependency(A){this.dependencies.has(A)||(this.dependencies.add(A),this.addOp(y.dependency,[A]))}addDependencies(A){for(let t of A)this.addDependency(t)}addOpList(A){if(!(A instanceof Is)){k(\'addOpList - ignoring invalid "opList" parameter.\');return}for(let t of A.dependencies)this.dependencies.add(t);for(let t=0,i=A.length;ti&&(e=i),e}function uE(e,A,t,i,s,a){let n=s*a,r;A<=8?r=new Uint8Array(n):A<=16?r=new Uint16Array(n):r=new Uint32Array(n);let g=t/s,o=i/a,I,c,l,h=0,C,B=new Uint16Array(s),Q=t;for(I=0;I0&&Number.isInteger(i.height)&&i.height>0&&(i.width!==h||i.height!==C)&&(k("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),h=i.width,C=i.height),h<1||C<1)throw new v(`Invalid image width: ${h} or height: ${C}`);this.width=h,this.height=C,this.interpolate=I.get("I","Interpolate"),this.imageMask=I.get("IM","ImageMask")||!1,this.matte=I.get("Matte")||!1;let B=i.bitsPerComponent;if(!B&&(B=I.get("BPC","BitsPerComponent"),!B))if(this.imageMask)B=1;else throw new v(`Bits per component missing in image: ${this.imageMask}`);if(this.bpc=B,!this.imageMask){let f=I.getRaw("CS")||I.getRaw("ColorSpace"),u=!!f;if(u)(Q=this.jpxDecoderOptions)!=null&&Q.smaskInData&&(f=M.get("DeviceRGBA"));else if(this.jpxDecoderOptions)f=M.get("DeviceRGBA");else switch(i.numComps){case 1:f=M.get("DeviceGray");break;case 3:f=M.get("DeviceRGB");break;case 4:f=M.get("DeviceCMYK");break;default:throw new Error(`Images with ${i.numComps} color components not supported.`)}this.colorSpace=JA.parse({cs:f,xref:A,resources:s?t:null,pdfFunctionFactory:g,localColorSpaceCache:o}),this.numComps=this.colorSpace.numComps,this.jpxDecoderOptions&&(this.jpxDecoderOptions.numComponents=u?this.numComp:0,this.jpxDecoderOptions.isIndexedColormap=this.colorSpace.name==="Indexed")}if(this.decode=I.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,B)||r&&!JA.isDefaultDecode(this.decode,1))){this.needsDecode=!0;let f=(1<>3)*i,g=A.byteLength,o=r===g,I,c;if(s&&(!a||o)?I=A:a?(I=new Uint8Array(r),I.set(A),I.fill(255,g)):I=new Uint8Array(A),a)for(c=0;c>7&1,g[c+1]=h>>6&1,g[c+2]=h>>5&1,g[c+3]=h>>4&1,g[c+4]=h>>3&1,g[c+5]=h>>2&1,g[c+6]=h>>1&1,g[c+7]=h&1,c+=8;if(c>=1}}else{let C=0;for(h=0,c=0,l=n;c>B;Q<0?Q=0:Q>I&&(Q=I),g[c]=Q,h&=(1<r[f+1]){B=255;break}}g[c]=B}}else throw new v("Unknown mask format.");if(g)for(c=0,h=3,l=t*s;c>3,c=t&&at.needsToBeResized(i,s);if(this.colorSpace.name==="DeviceRGBA"){a.kind=Ke.RGBA_32BPP;let x=a.data=await this.getImageBytes(g*r*4,{});return t?c?at.createImage(a,!1):this.createBitmap(Ke.RGBA_32BPP,i,s,x):a}if(!A){let x;if(this.colorSpace.name==="DeviceGray"&&o===1?x=Ke.GRAYSCALE_1BPP:this.colorSpace.name==="DeviceRGB"&&o===8&&!this.needsDecode&&(x=Ke.RGB_24BPP),x&&!this.smask&&!this.mask&&i===r&&s===g){let p=await this.getImageBytes(g*I,{});if(t)return c?at.createImage({data:p,kind:x,width:i,height:s,interpolate:this.interpolate},this.needsDecode):this.createBitmap(x,r,g,p);if(a.kind=x,a.data=p,this.needsDecode){gt(x===Ke.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");let m=a.data;for(let D=0,S=m.length;D>3,r=await this.getImageBytes(s*n,{internal:!0}),g=this.getComponents(r),o,I;if(a===1){if(I=i*s,this.needsDecode)for(o=0;o0&&A.args[0].count++}var Hg=class{constructor(){this.reset()}check(){return++this.checkedl){let d="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors){k(d);return}throw new Error(d)}let h;g.has("OC")&&(h=await this.parseMarkedContentProps(g.get("OC"),A));let C=g.get("IM","ImageMask")||!1,B,Q;if(C){let d=g.get("I","Interpolate"),x=I+7>>3,p=t.getBytes(x*c),m=g.getArray("D","Decode");if(this.parsingType3Font){if(B=Pt.createRawMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d}),B.cached=!!a,Q=[B],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}if(B=await Pt.createMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported}),B.isSingleOpaquePixel){if(s.addImageOps(y.paintSolidColorImageMask,[],h),a){let S={fn:y.paintSolidColorImageMask,args:[],optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let D=`mask_${this.idFactory.createObjId()}`;if(s.addDependency(D),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,this._sendImgData(D,B),Q=[{data:D,width:B.width,height:B.height,interpolate:B.interpolate,count:1}],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={objId:D,fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let E=200;if(i&&I+c25e4||g.has("SMask")||g.has("Mask")){let d=await this.handler.sendWithPromise("commonobj",[f,"CopyLocalImage",{imageRef:o}]);if(d){this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}),this.globalImageCache.addByteSize(o,d);return}}}if(Pt.buildImage({xref:this.xref,res:A,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:r}).then(async d=>(B=await d.createImageData(!1,this.options.isOffscreenCanvasSupported),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,B.ref=o,u&&this.globalImageCache.addByteSize(o,B.dataLen),this._sendImgData(f,B,u))).catch(d=>(k(`Unable to decode image "${f}": "${d}".`),o&&this.globalImageCache.addDecodeFailed(o),this._sendImgData(f,null,u))),a){let d={objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h};n.set(a,o,d),o&&(this._regionalImageCache.set(null,o,d),u&&this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}))}}handleSMask(A,t,i,s,a,n){let r=A.get("G"),g={subtype:A.get("S").name,backdrop:A.get("BC")},o=A.get("TR");if(Do(o)){let I=this._pdfFunctionFactory.create(o),c=new Uint8Array(256),l=new Float32Array(1);for(let h=0;h<256;h++)l[0]=h/255,I(l,0,l,0),c[h]=l[0]*255|0;g.transferMap=c}return this.buildFormXObject(t,r,g,i,s,a.state.clone(),n)}handleTransferFunction(A){let t;if(Array.isArray(A))t=A;else if(Do(A))t=[A];else return null;let i=[],s=0,a=0;for(let n of t){let r=this.xref.fetchIfRef(n);if(s++,ye(r,"Identity")){i.push(null);continue}else if(!Do(r))return null;let g=this._pdfFunctionFactory.create(r),o=new Uint8Array(256),I=new Float32Array(1);for(let c=0;c<256;c++)I[0]=c/255,g(I,0,I,0),o[c]=I[0]*255|0;i.push(o),a++}return!(s===1||s===4)||a===0?null:i}handleTilingType(A,t,i,s,a,n,r,g){let o=new ze,I=F.merge({xref:this.xref,dictArray:[a.get("Resources"),i]});return this.getOperatorList({stream:s,task:r,resources:I,operatorList:o}).then(function(){let c=o.getIR(),l=lE(c,a,t);n.addDependencies(o.dependencies),n.addOp(A,l),a.objId&&g.set(null,a.objId,{operatorListIR:c,dict:a})}).catch(c=>{if(!(c instanceof ve)){if(this.options.ignoreErrors){k(`handleTilingType - ignoring pattern: "${c}".`);return}throw c}})}async handleSetFont(A,t,i,s,a,n,r=null,g=null){let o=(t==null?void 0:t[0])instanceof M?t[0].name:null,I=await this.loadFont(o,i,A,r,g);if(I.font.isType3Font)try{await I.loadType3Data(this,A,a),s.addDependencies(I.type3Dependencies)}catch(c){I=new is({loadedName:"g_font_error",font:new fa(`Type3 font load error: ${c}`),dict:I.font,evaluatorOptions:this.options})}return n.font=I.font,I.send(this.handler),I.loadedName}handleText(A,t){let i=t.font,s=i.charsToGlyphs(A);return i.data&&(t.textRenderingMode&PE.ADD_TO_PATH_FLAG||t.fillColorSpace.name==="Pattern"||i.disableFontFace||this.options.disableFontFace)&&Lt.buildFontPaths(i,s,this.handler,this.options),s}ensureStateFont(A){if(A.font)return;let t=new v("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors){k(`ensureStateFont: "${t}".`);return}throw t}async setGState({resources:A,gState:t,operatorList:i,cacheKey:s,task:a,stateManager:n,localGStateCache:r,localColorSpaceCache:g}){let o=t.objId,I=!0,c=[],l=Promise.resolve();for(let h of t.getKeys()){let C=t.get(h);switch(h){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":c.push([h,C]);break;case"Font":I=!1,l=l.then(()=>this.handleSetFont(A,null,C[0],i,a,n.state).then(function(Q){i.addDependency(Q),c.push([h,[Q,C[1]]])}));break;case"BM":c.push([h,kf(C)]);break;case"SMask":if(ye(C,"None")){c.push([h,!1]);break}C instanceof F?(I=!1,l=l.then(()=>this.handleSMask(C,A,i,a,n,g)),c.push([h,!0])):k("Unsupported SMask type");break;case"TR":let B=this.handleTransferFunction(C);c.push([h,B]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":PA("graphic state operator "+h);break;default:PA("Unknown graphic state operator "+h);break}}await l,c.length>0&&i.addOp(y.setGState,[c]),I&&r.set(s,o,c)}loadFont(A,t,i,s=null,a=null){var B;let n=async()=>new is({loadedName:"g_font_error",font:new fa(`Font "${A}" is not available.`),dict:t,evaluatorOptions:this.options}),r;if(t)t instanceof oA&&(r=t);else{let Q=i.get("Font");Q&&(r=Q.getRaw(A))}if(r){if((B=this.type3FontRefs)!=null&&B.has(r))return n();if(this.fontCache.has(r))return this.fontCache.get(r);try{t=this.xref.fetchIfRef(r)}catch(Q){k(`loadFont - lookup failed: "${Q}".`)}}if(!(t instanceof F)){if(!this.options.ignoreErrors&&!this.parsingType3Font)return k(`Font "${A}" is not available.`),n();k(`Font "${A}" is not available -- attempting to fallback to a default font.`),t=s||Lt.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);let{promise:g,resolve:o}=Promise.withResolvers(),I;try{I=this.preEvaluateFont(t),I.cssFontInfo=a}catch(Q){return k(`loadFont - preEvaluateFont failed: "${Q}".`),n()}let{descriptor:c,hash:l}=I,h=r instanceof oA,C;if(l&&c instanceof F){let Q=c.fontAliases||(c.fontAliases=Object.create(null));if(Q[l]){let E=Q[l].aliasRef;if(h&&E&&this.fontCache.has(E))return this.fontCache.putAlias(r,E),this.fontCache.get(r)}else Q[l]={fontID:this.idFactory.createFontId()};h&&(Q[l].aliasRef=r),C=Q[l].fontID}else C=this.idFactory.createFontId();return gt(C==null?void 0:C.startsWith("f"),\'The "fontID" must be (correctly) defined.\'),h?this.fontCache.put(r,g):(t.cacheKey=`cacheKey_${C}`,this.fontCache.put(t.cacheKey,g)),t.loadedName=`${this.idFactory.getDocId()}_${C}`,this.translateFont(I).then(Q=>{o(new is({loadedName:t.loadedName,font:Q,dict:t,evaluatorOptions:this.options}))}).catch(Q=>{k(`loadFont - translateFont failed: "${Q}".`),o(new is({loadedName:t.loadedName,font:new fa(Q instanceof Error?Q.message:Q),dict:t,evaluatorOptions:this.options}))}),g}buildPath(A,t,i,s=!1){let a=A.length-1;if(i||(i=[]),a<0||A.fnArray[a]!==y.constructPath){s&&(k(`Encountered path operator "${t}" inside of a text object.`),A.addOp(y.save,null));let n;switch(t){case y.rectangle:let r=i[0]+i[2],g=i[1]+i[3];n=[Math.min(i[0],r),Math.min(i[1],g),Math.max(i[0],r),Math.max(i[1],g)];break;case y.moveTo:case y.lineTo:n=[i[0],i[1],i[0],i[1]];break;default:n=[1/0,1/0,-1/0,-1/0];break}A.addOp(y.constructPath,[[t],i,n]),s&&A.addOp(y.restore,null)}else{let n=A.argsArray[a];n[0].push(t),n[1].push(...i);let r=n[2];switch(t){case y.rectangle:let g=i[0]+i[2],o=i[1]+i[3];r[0]=Math.min(r[0],i[0],g),r[1]=Math.min(r[1],i[1],o),r[2]=Math.max(r[2],i[0],g),r[3]=Math.max(r[3],i[1],o);break;case y.moveTo:case y.lineTo:r[0]=Math.min(r[0],i[0]),r[1]=Math.min(r[1],i[1]),r[2]=Math.max(r[2],i[0]),r[3]=Math.max(r[3],i[1]);break}}}parseColorSpace({cs:A,resources:t,localColorSpaceCache:i}){return JA.parseAsync({cs:A,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch(s=>{if(s instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseColorSpace - ignoring ColorSpace: "${s}".`),null;throw s})}parseShading({shading:A,resources:t,localColorSpaceCache:i,localShadingPatternCache:s}){let a=s.get(A);if(a)return a;let n;try{n=YI.parseShading(A,this.xref,t,this._pdfFunctionFactory,i).getIR()}catch(r){if(r instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseShading - ignoring shading: "${r}".`),s.set(A,null),null;throw r}return a=`pattern_${this.idFactory.createObjId()}`,this.parsingType3Font&&(a=`${this.idFactory.getDocId()}_type3_${a}`),s.set(A,a),this.parsingType3Font?this.handler.send("commonobj",[a,"Pattern",n]):this.handler.send("obj",[a,this.pageIndex,"Pattern",n]),a}handleColorN(A,t,i,s,a,n,r,g,o,I){let c=i.pop();if(c instanceof M){let l=a.getRaw(c.name),h=l instanceof oA&&o.getByRef(l);if(h)try{let B=s.base?s.base.getRgb(i,0):null,Q=lE(h.operatorListIR,h.dict,B);A.addOp(t,Q);return}catch(B){}let C=this.xref.fetchIfRef(l);if(C){let B=C instanceof KA?C.dict:C,Q=B.get("PatternType");if(Q===dE.TILING){let E=s.base?s.base.getRgb(i,0):null;return this.handleTilingType(t,E,n,C,B,A,r,o)}else if(Q===dE.SHADING){let E=B.get("Shading"),f=this.parseShading({shading:E,resources:n,localColorSpaceCache:g,localShadingPatternCache:I});if(f){let u=Ki(B.getArray("Matrix"),null);A.addOp(t,["Shading",f,u])}return}throw new v(`Unknown PatternType: ${Q}`)}}throw new v(`Unknown PatternName: ${c}`)}_parseVisibilityExpression(A,t,i){if(++t>10){k("Visibility expression is too deeply nested");return}let a=A.length,n=this.xref.fetchIfRef(A[0]);if(a<2||!(n instanceof M)){k("Invalid visibility expression");return}switch(n.name){case"And":case"Or":case"Not":i.push(n.name);break;default:k(`Invalid operator ${n.name} in visibility expression`);return}for(let r=1;r0)return{type:"OCMD",expression:g}}let r=i.get("OCGs");if(Array.isArray(r)||r instanceof F){let g=[];if(Array.isArray(r))for(let o of r)g.push(o.toString());else g.push(r.objId);return{type:s,ids:g,policy:i.get("P")instanceof M?i.get("P").name:null,expression:null}}else if(r instanceof oA)return{type:s,id:r.toString()}}return null}getOperatorList({stream:A,task:t,resources:i,operatorList:s,initialState:a=null,fallbackFontDict:n=null}){if(i||(i=F.empty),a||(a=new Or),!s)throw new Error(\'getOperatorList: missing "operatorList" parameter\');let r=this,g=this.xref,o=!1,I=new Hr,c=new Jr,l=new Yr,h=new OI,C=new Map,B=i.get("XObject")||F.empty,Q=i.get("Pattern")||F.empty,E=new Bs(a),f=new f0(A,g,E),u=new ts;function d(x){for(let p=0,m=f.savedStatesDepth;p0&&s.addOp(y.setGState,[fA]),V=null;continue}}D(new Promise(function(fA,CA){if(!AA)throw new v("GState must be referred to by name.");let N=i.get("ExtGState");if(!(N instanceof F))throw new v("ExtGState should be a dictionary.");let H=N.get(Z);if(!(H instanceof F))throw new v("GState should be a dictionary.");r.setGState({resources:i,gState:H,operatorList:s,cacheKey:Z,task:t,stateManager:E,localGStateCache:l,localColorSpaceCache:c}).then(fA,CA)}).catch(function(fA){if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring ExtGState: "${fA}".`);return}throw fA}}));return;case y.moveTo:case y.lineTo:case y.curveTo:case y.curveTo2:case y.curveTo3:case y.closePath:case y.rectangle:r.buildPath(s,lA,V,o);continue;case y.markPoint:case y.markPointProps:case y.beginCompat:case y.endCompat:continue;case y.beginMarkedContentProps:if(!(V[0]instanceof M)){k(`Expected name for beginMarkedContentProps arg0=${V[0]}`),s.addOp(y.beginMarkedContentProps,["OC",null]);continue}if(V[0].name==="OC"){D(r.parseMarkedContentProps(V[1],i).then(fA=>{s.addOp(y.beginMarkedContentProps,["OC",fA])}).catch(fA=>{if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring beginMarkedContentProps: "${fA}".`),s.addOp(y.beginMarkedContentProps,["OC",null]);return}throw fA}}));return}V=[V[0].name,V[1]instanceof F?V[1].get("MCID"):null];break;case y.beginMarkedContent:case y.endMarkedContent:default:if(V!==null){for(Y=0,U=V.length;Y{if(!(x instanceof ve)){if(this.options.ignoreErrors){k(`getOperatorList - ignoring errors during "${t.name}" task: "${x}".`),d();return}throw x}})}getTextContent({stream:A,task:t,resources:i,stateManager:s=null,includeMarkedContent:a=!1,sink:n,seenStyles:r=new Set,viewBox:g,lang:o=null,markedContentData:I=null,disableNormalization:c=!1,keepWhiteSpace:l=!1}){i||(i=F.empty),s||(s=new Bs(new tc)),a&&(I||(I={level:0}));let h={items:[],styles:Object.create(null),lang:o},C={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},B=[" "," "],Q=0;function E(X){let W=(Q+1)%2,G=B[Q]!==" "&&B[W]===" ";return B[Q]=X,Q=W,!l&&G}function f(){return!l&&B[Q]!==" "&&B[(Q+1)%2]===" "}function u(){B[0]=B[1]=" ",Q=0}let d=.102,x=.03,p=-.2,m=.102,D=.6,S=.25,w=this,Y=this.xref,U=[],K=null,Z=new Hr,AA=new Yr,gA=new f0(A,Y,s),R;function _({width:X=0,height:W=0,transform:G=C.prevTransform,fontName:BA=C.fontName}){h.items.push({str:" ",dir:"ltr",width:X,height:W,transform:G,fontName:BA,hasEOL:!1})}function tA(){let X=R.font,W=[R.fontSize*R.textHScale,0,0,R.fontSize,0,R.textRise];if(X.isType3Font&&(R.fontSize<=1||X.isCharBBox)&&!Ss(R.fontMatrix,E0)){let G=X.bbox[3]-X.bbox[1];G>0&&(W[3]*=G*R.fontMatrix[3])}return Ce.transform(R.ctm,Ce.transform(R.textMatrix,W))}function IA(){if(C.initialized)return C;let{font:X,loadedName:W}=R;if(!r.has(W)&&(r.add(W),h.styles[W]={fontFamily:X.fallbackName,ascent:X.ascent,descent:X.descent,vertical:X.vertical},w.options.fontExtraProperties&&X.systemFontInfo)){let iA=h.styles[W];iA.fontSubstitution=X.systemFontInfo.css,iA.fontSubstitutionLoadedName=X.systemFontInfo.loadedName}C.fontName=W;let G=C.transform=tA();X.vertical?(C.width=C.totalWidth=Math.hypot(G[0],G[1]),C.height=C.totalHeight=0,C.vertical=!0):(C.width=C.totalWidth=0,C.height=C.totalHeight=Math.hypot(G[2],G[3]),C.vertical=!1);let BA=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),uA=Math.hypot(R.ctm[0],R.ctm[1]);C.textAdvanceScale=uA*BA;let{fontSize:bA}=R;return C.trackingSpaceMin=bA*d,C.notASpace=bA*x,C.negativeSpaceMax=bA*p,C.spaceInFlowMin=bA*m,C.spaceInFlowMax=bA*D,C.hasEOL=!1,C.initialized=!0,C}function QA(){if(!C.initialized)return;let X=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),G=Math.hypot(R.ctm[0],R.ctm[1])*X;G!==C.textAdvanceScale&&(C.vertical?(C.totalHeight+=C.height*C.textAdvanceScale,C.height=0):(C.totalWidth+=C.width*C.textAdvanceScale,C.width=0),C.textAdvanceScale=G)}function V(X){let W=X.str.join("");c||(W=Ju(W));let G=yf(W,-1,X.vertical);return{str:G.str,dir:G.dir,width:Math.abs(X.totalWidth),height:Math.abs(X.totalHeight),transform:X.transform,fontName:X.fontName,hasEOL:X.hasEOL}}async function lA(X,W){let G=await w.loadFont(X,W,i);if(G.font.isType3Font)try{await G.loadType3Data(w,i,t)}catch(BA){}R.loadedName=G.loadedName,R.font=G.font,R.fontMatrix=G.font.fontMatrix||E0}function EA(X,W,G){let BA=Math.hypot(G[0],G[1]);return[(G[0]*X+G[1]*W)/BA,(G[2]*X+G[3]*W)/BA]}function fA(X){var yA;let W=tA(),G=W[4],BA=W[5];if((yA=R.font)!=null&&yA.vertical){if(Gg[2]||BA+Xg[3])return!1}else if(G+Xg[2]||BAg[3])return!1;if(!R.font||!C.prevTransform)return!0;let uA=C.prevTransform[4],bA=C.prevTransform[5];if(uA===G&&bA===BA)return!0;let iA=-1;switch(W[0]&&W[1]===0&&W[2]===0?iA=W[0]>0?0:180:W[1]&&W[0]===0&&W[3]===0&&(iA=W[1]>0?90:270),iA){case 0:break;case 90:[G,BA]=[BA,G],[uA,bA]=[bA,uA];break;case 180:[G,BA,uA,bA]=[-G,-BA,-uA,-bA];break;case 270:[G,BA]=[-BA,-G],[uA,bA]=[-bA,-uA];break;default:[G,BA]=EA(G,BA,W),[uA,bA]=EA(uA,bA,C.prevTransform)}if(R.font.vertical){let aA=(bA-BA)/C.textAdvanceScale,DA=G-uA,UA=Math.sign(C.height);return aA.5*C.width?(N(),!0):(u(),q(),!0):Math.abs(DA)>C.width?(N(),!0):(aA<=UA*C.notASpace&&u(),aA<=UA*C.trackingSpaceMin?f()?(u(),q(),_({height:Math.abs(aA)})):C.height+=aA:H(aA,C.prevTransform,UA)||(C.str.length===0?(u(),_({height:Math.abs(aA)})):C.height+=aA),Math.abs(DA)>C.width*S&&q(),!0)}let wA=(G-uA)/C.textAdvanceScale,FA=BA-bA,cA=Math.sign(C.width);return wA.5*C.height?(N(),!0):(u(),q(),!0):Math.abs(FA)>C.height?(N(),!0):(wA<=cA*C.notASpace&&u(),wA<=cA*C.trackingSpaceMin?f()?(u(),q(),_({width:Math.abs(wA)})):C.width+=wA:H(wA,C.prevTransform,cA)||(C.str.length===0?(u(),_({width:Math.abs(wA)})):C.width+=wA),Math.abs(FA)>C.height*S&&q(),!0)}function CA({chars:X,extraSpacing:W}){let G=R.font;if(!X){let bA=R.charSpacing+W;bA&&(G.vertical?R.translateTextMatrix(0,-bA):R.translateTextMatrix(bA*R.textHScale,0)),l&&fA(0);return}let BA=G.charsToGlyphs(X),uA=R.fontMatrix[0]*R.fontSize;for(let bA=0,iA=BA.length;bA0){let pA=U.join("");U.length=0,CA({chars:pA,extraSpacing:0})}break;case y.showText:if(!s.state.font){w.ensureStateFont(s.state);continue}CA({chars:iA[0],extraSpacing:0});break;case y.nextLineShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.carriageReturn(),CA({chars:iA[0],extraSpacing:0});break;case y.nextLineSetSpacingShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.wordSpacing=iA[0],R.charSpacing=iA[1],R.carriageReturn(),CA({chars:iA[2],extraSpacing:0});break;case y.paintXObject:q(),K||(K=i.get("XObject")||F.empty);var cA=iA[0]instanceof M,yA=iA[0].name;if(cA&&Z.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("XObject must be referred to by name.");let LA=K.getRaw(yA);if(LA instanceof oA){if(Z.getByRef(LA)){pA();return}if(w.globalImageCache.getData(LA,w.pageIndex)){pA();return}LA=Y.fetch(LA)}if(!(LA instanceof KA))throw new v("XObject should be a stream");let WA=LA.dict.get("Subtype");if(!(WA instanceof M))throw new v("XObject should have a Name subtype");if(WA.name!=="Form"){Z.set(yA,LA.dict.objId,!0),pA();return}let re=s.state.clone(),De=new Bs(re),Dn=Ki(LA.dict.getArray("Matrix"),null);Dn&&De.transform(Dn),T();let kn={enqueueInvoked:!1,enqueue(Sn,co){this.enqueueInvoked=!0,n.enqueue(Sn,co)},get desiredSize(){return n.desiredSize},get ready(){return n.ready}};w.getTextContent({stream:LA,task:t,resources:LA.dict.get("Resources")||i,stateManager:De,includeMarkedContent:a,sink:kn,seenStyles:r,viewBox:g,lang:o,markedContentData:I,disableNormalization:c,keepWhiteSpace:l}).then(function(){kn.enqueueInvoked||Z.set(yA,LA.dict.objId,!0),pA()},TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring XObject: "${pA}".`);return}throw pA}}));return;case y.setGState:if(cA=iA[0]instanceof M,yA=iA[0].name,cA&&AA.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("GState must be referred to by name.");let LA=i.get("ExtGState");if(!(LA instanceof F))throw new v("ExtGState should be a dictionary.");let WA=LA.get(yA);if(!(WA instanceof F))throw new v("GState should be a dictionary.");let re=WA.get("Font");if(!re){AA.set(yA,WA.objId,!0),pA();return}q(),R.fontName=null,R.fontSize=re[1],lA(null,re[0]).then(pA,TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring ExtGState: "${pA}".`);return}throw pA}}));return;case y.beginMarkedContent:q(),a&&(I.level++,h.items.push({type:"beginMarkedContent",tag:iA[0]instanceof M?iA[0].name:null}));break;case y.beginMarkedContentProps:if(q(),a){I.level++;let pA=null;iA[1]instanceof F&&(pA=iA[1].get("MCID")),h.items.push({type:"beginMarkedContentProps",id:Number.isInteger(pA)?`${w.idFactory.getPageObjId()}_mc${pA}`:null,tag:iA[0]instanceof M?iA[0].name:null})}break;case y.endMarkedContent:if(q(),a){if(I.level===0)break;I.level--,h.items.push({type:"endMarkedContent"})}break;case y.restore:aA&&(aA.font!==R.font||aA.fontSize!==R.fontSize||aA.fontName!==R.fontName)&&q();break}if(h.items.length>=n.desiredSize){bA=!0;break}}if(bA){BA(xE);return}q(),T(),W()}).catch(X=>{if(!(X instanceof ve)){if(this.options.ignoreErrors){k(`getTextContent - ignoring errors during "${t.name}" task: "${X}".`),q(),T();return}throw X}})}async extractDataStructures(A,t){let i=this.xref,s,a=this.readToUnicode(t.toUnicode);if(t.composite){let l=A.get("CIDSystemInfo");l instanceof F&&(t.cidSystemInfo={registry:jA(l.get("Registry")),ordering:jA(l.get("Ordering")),supplement:l.get("Supplement")});try{let h=A.get("CIDToGIDMap");h instanceof KA&&(s=h.getBytes())}catch(h){if(!this.options.ignoreErrors)throw h;k(`extractDataStructures - ignoring CIDToGIDMap data: "${h}".`)}}let n=[],r=null,g;if(A.has("Encoding")){if(g=A.get("Encoding"),g instanceof F){if(r=g.get("BaseEncoding"),r=r instanceof M?r.name:null,g.has("Differences")){let l=g.get("Differences"),h=0;for(let C of l){let B=i.fetchIfRef(C);if(typeof B=="number")h=B;else if(B instanceof M)n[h++]=B.name;else throw new v(`Invalid entry in \'Differences\' array: ${B}`)}}}else if(g instanceof M)r=g.name;else{let l="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new v(l);k(l)}r!=="MacRomanEncoding"&&r!=="MacExpertEncoding"&&r!=="WinAnsiEncoding"&&(r=null)}let o=!t.file||t.isInternalFont,I=DI()[t.name];if(r&&o&&I&&(r=null),r)t.defaultEncoding=Ua(r);else{let l=!!(t.flags&Ft.Symbolic),h=!!(t.flags&Ft.Nonsymbolic);g=fi,t.type==="TrueType"&&!h&&(g=Ga),(l||I)&&(g=c1,o&&(/Symbol/i.test(t.name)?g=l1:/Dingbats/i.test(t.name)?g=h1:/Wingdings/i.test(t.name)&&(g=Ga))),t.defaultEncoding=g}t.differences=n,t.baseEncodingName=r,t.hasEncoding=!!r||n.length>0,t.dict=A,t.toUnicode=await a;let c=await this.buildToUnicode(t);return t.toUnicode=c,s&&(t.cidToGidMap=this.readCidToGidMap(s,c)),t}_simpleFontToUnicode(A,t=!1){gt(!A.composite,"Must be a simple font.");let i=[],s=A.defaultEncoding.slice(),a=A.baseEncodingName,n=A.differences;for(let g in n){let o=n[g];o!==".notdef"&&(s[g]=o)}let r=Ai();for(let g in s){let o=s[g];if(o==="")continue;let I=r[o];if(I!==void 0){i[g]=String.fromCharCode(I);continue}let c=0;switch(o[0]){case"G":o.length===3&&(c=parseInt(o.substring(1),16));break;case"g":o.length===5&&(c=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){let l=o.substring(1);if(t){c=parseInt(l,16);break}if(c=+l,Number.isNaN(c)&&Number.isInteger(parseInt(l,16)))return this._simpleFontToUnicode(A,!0)}break;case"u":I=Us(o,r),I!==-1&&(c=I);break;default:switch(o){case"f_h":case"f_t":case"T_h":i[g]=o.replaceAll("_","");continue}break}if(c>0&&c<=1114111&&Number.isInteger(c)){if(a&&c===+g){let l=Ua(a);if(l&&(o=l[g])){i[g]=String.fromCharCode(r[o]);continue}}i[g]=String.fromCodePoint(c)}}return i}async buildToUnicode(A){var t,i;if(A.hasIncludedToUnicodeMap=((t=A.toUnicode)==null?void 0:t.length)>0,A.hasIncludedToUnicodeMap)return!A.composite&&A.hasEncoding&&(A.fallbackToUnicode=this._simpleFontToUnicode(A)),A.toUnicode;if(!A.composite)return new B0(this._simpleFontToUnicode(A));if(A.composite&&(A.cMap.builtInCMap&&!(A.cMap instanceof Wi)||((i=A.cidSystemInfo)==null?void 0:i.registry)==="Adobe"&&(A.cidSystemInfo.ordering==="GB1"||A.cidSystemInfo.ordering==="CNS1"||A.cidSystemInfo.ordering==="Japan1"||A.cidSystemInfo.ordering==="Korea1"))){let{registry:s,ordering:a}=A.cidSystemInfo,n=M.get(`${s}-${a}-UCS2`),r=await es.create({encoding:n,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),g=[],o=[];return A.cMap.forEach(function(I,c){if(c>65535)throw new v("Max size of CID is 65,535");let l=r.lookup(c);if(l){o.length=0;for(let h=0,C=l.length;h>1;n===0&&!t.has(r)||(i[r]=n)}return i}extractWidths(A,t,i){let s=this.xref,a=[],n=0,r=[],g;if(i.composite){let c=A.get("DW");n=typeof c=="number"?Math.ceil(c):1e3;let l=A.get("W");if(Array.isArray(l))for(let h=0,C=l.length;h{let E=o.get(Q),f=new ze;return s.getOperatorList({stream:E,task:i,resources:I,operatorList:f}).then(()=>{f.fnArray[0]===y.setCharWidthAndBounds&&this._removeType3ColorOperators(f,B),c[Q]=f.getIR();for(let u of f.dependencies)r.add(u)}).catch(function(u){k(`Type3 font resource "${Q}" is not available.`);let d=new ze;c[Q]=d.getIR()})});return this.type3Loaded=g.then(()=>{n.charProcOperatorList=c,this._bbox&&(n.isCharBBox=!0,n.bbox=this._bbox)}),this.type3Loaded}_removeType3ColorOperators(A,t=NaN){let i=Ce.normalizeRect(A.argsArray[0].slice(2)),s=i[2]-i[0],a=i[3]-i[1],n=Math.hypot(s,a);s===0||a===0?(A.fnArray.splice(0,1),A.argsArray.splice(0,1)):(t===0||Math.round(n/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],i[0]),this._bbox[1]=Math.min(this._bbox[1],i[1]),this._bbox[2]=Math.max(this._bbox[2],i[2]),this._bbox[3]=Math.max(this._bbox[3],i[3]));let r=0,g=A.length;for(;r=y.moveTo&&n<=y.endPath,a.variableArgs)g>r&&PA(`Command ${s}: expected [0, ${r}] args, but received ${g} args.`);else{if(g!==r){let o=this.nonProcessedArgs;for(;g>r;)o.push(t.shift()),g--;for(;gba.MAX_INVALID_PATH_OPS)throw new v(`Invalid ${o}`);k(`Skipping ${o}`),t!==null&&(t.length=0);continue}}return this.preprocessCommand(n,t),A.fn=n,A.args=t,!0}if(i===Ge)return!1;if(i!==null&&(t===null&&(t=[]),t.push(i),t.length>33))throw new v("Too many arguments")}}preprocessCommand(A,t){switch(A|0){case y.save:this.stateManager.save();break;case y.restore:this.stateManager.restore();break;case y.transform:this.stateManager.transform(t);break}}},f0=ba;et(f0,"MAX_INVALID_PATH_OPS",10);var ic=class extends f0{constructor(A){super(new It(A))}parse(){let A={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;A.args.length=0,!!this.read(A);){if(this.savedStatesDepth!==0)continue;let{fn:i,args:s}=A;switch(i|0){case y.setFont:let[a,n]=s;a instanceof M&&(t.fontName=a.name),typeof n=="number"&&n>0&&(t.fontSize=n);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(s,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(s,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(s,0,t.fontColor,0);break}}}catch(i){k(`parseDefaultAppearance - ignoring errors: "${i}".`)}return t}};function Q1(e){return new ic(e).parse()}var sc=class extends f0{constructor(A,t,i){var s;super(A),this.stream=A,this.evaluatorOptions=t,this.xref=i,this.resources=(s=A.dict)==null?void 0:s.get("Resources")}parse(){let A={fn:0,args:[]},t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:JA.singletons.gray},i=!1,s=[];try{for(;A.args.length=0,!(i||!this.read(A));){let{fn:a,args:n}=A;switch(a|0){case y.save:s.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case y.restore:t=s.pop()||t;break;case y.setTextMatrix:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case y.setFont:let[r,g]=n;r instanceof M&&(t.fontName=r.name),typeof g=="number"&&g>0&&(t.fontSize=g*t.scaleFactor);break;case y.setFillColorSpace:t.fillColorSpace=JA.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case y.setFillColor:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(n,0,t.fontColor,0);break;case y.showText:case y.showSpacedText:case y.nextLineShowText:case y.nextLineSetSpacingShowText:i=!0;break}}}catch(a){k(`parseAppearanceStream - ignoring errors: "${a}".`)}return this.stream.reset(),delete t.scaleFactor,delete t.fillColorSpace,t}get _localColorSpaceCache(){return nA(this,"_localColorSpaceCache",new Jr)}get _pdfFunctionFactory(){let A=new Kr({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported});return nA(this,"_pdfFunctionFactory",A)}};function R9(e,A,t){return new sc(e,A,t).parse()}function mi(e,A){if(e[0]===e[1]&&e[1]===e[2]){let t=e[0]/255;return`${Ae(t)} ${A?"g":"G"}`}return Array.from(e,t=>Ae(t/255)).join(" ")+` ${A?"rg":"RG"}`}function N9({fontSize:e,fontName:A,fontColor:t}){return`/${o1(A)} ${e} Tf ${mi(t,!0)}`}var Ut=class{constructor(A,t){this.xref=A,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=t;let i=new OffscreenCanvas(1,1);this.ctxMeasure=i.getContext("2d",{willReadFrequently:!0}),Ut._fontNameId||(Ut._fontNameId=1),this.fontName=M.get(`InvalidPDFjsFont_${t}_${Ut._fontNameId++}`)}get fontDescriptorRef(){if(!Ut._fontDescriptorRef){let A=new F(this.xref);A.set("Type",M.get("FontDescriptor")),A.set("FontName",this.fontName),A.set("FontFamily","MyriadPro Regular"),A.set("FontBBox",[0,0,0,0]),A.set("FontStretch",M.get("Normal")),A.set("FontWeight",400),A.set("ItalicAngle",0),Ut._fontDescriptorRef=this.xref.getNewPersistentRef(A)}return Ut._fontDescriptorRef}get descendantFontRef(){let A=new F(this.xref);A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("CIDFontType0")),A.set("CIDToGIDMap",M.get("Identity")),A.set("FirstChar",this.firstChar),A.set("LastChar",this.lastChar),A.set("FontDescriptor",this.fontDescriptorRef),A.set("DW",1e3);let t=[],i=[...this.widths.entries()].sort(),s=null,a=null;for(let[r,g]of i){if(!s){s=r,a=[g];continue}r===s+a.length?a.push(g):(t.push(s,a),s=r,a=[g])}s&&t.push(s,a),A.set("W",t);let n=new F(this.xref);return n.set("Ordering","Identity"),n.set("Registry","Adobe"),n.set("Supplement",0),A.set("CIDSystemInfo",n),this.xref.getNewPersistentRef(A)}get baseFontRef(){let A=new F(this.xref);return A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("Type0")),A.set("Encoding",M.get("Identity-H")),A.set("DescendantFonts",[this.descendantFontRef]),A.set("ToUnicode",M.get("Identity-H")),this.xref.getNewPersistentRef(A)}get resources(){let A=new F(this.xref),t=new F(this.xref);return t.set(this.fontName.name,this.baseFontRef),A.set("Font",t),A}_createContext(){return this.widths=new Map,this.ctxMeasure.font=`1000px ${this.fontFamily}`,this.ctxMeasure}createFontResources(A){let t=this._createContext();for(let i of A.split(/\\r\\n?|\\n/))for(let s of i.split("")){let a=s.charCodeAt(0);if(this.widths.has(a))continue;let n=t.measureText(s),r=Math.ceil(n.width);this.widths.set(a,r),this.firstChar=Math.min(a,this.firstChar),this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(A,t,i){let[s,a,n,r]=A,g=n-s,o=r-a;t%180!==0&&([g,o]=[o,g]);let I=Qi*i,c=Cr*i;return{coords:[0,o+c-I],bbox:[0,0,g,o],matrix:t!==0?xr(t,o,I):void 0}}createAppearance(A,t,i,s,a,n){let r=this._createContext(),g=[],o=-1/0;for(let K of A.split(/\\r\\n?|\\n/)){g.push(K);let Z=r.measureText(K).width;o=Math.max(o,Z);for(let AA of Wu(K)){let gA=String.fromCodePoint(AA),R=this.widths.get(AA);if(R===void 0){let _=r.measureText(gA);R=Math.ceil(_.width),this.widths.set(AA,R),this.firstChar=Math.min(AA,this.firstChar),this.lastChar=Math.max(AA,this.lastChar)}}}o*=s/1e3;let[I,c,l,h]=t,C=l-I,B=h-c;i%180!==0&&([C,B]=[B,C]);let Q=1;o>C&&(Q=C/o);let E=1,f=Qi*s,u=Cr*s,d=f*g.length;d>B&&(E=B/d);let x=Math.min(Q,E),p=s*x,m=["q",`0 0 ${Ae(C)} ${Ae(B)} re W n`,"BT",`1 0 0 1 0 ${Ae(B+u)} Tm 0 Tc ${mi(a,!0)}`,`/${this.fontName.name} ${Ae(p)} Tf`],{resources:D}=this;if(n=typeof n=="number"&&n>=0&&n<=1?n:1,n!==1){m.push("/R0 gs");let K=new F(this.xref),Z=new F(this.xref);Z.set("ca",n),Z.set("CA",n),Z.set("Type",M.get("ExtGState")),K.set("R0",Z),D.set("ExtGState",K)}let S=Ae(f);for(let K of g)m.push(`0 -${S} Td <${ju(K)}> Tj`);m.push("ET","Q");let w=m.join(`\n`),Y=new F(this.xref);if(Y.set("Subtype",M.get("Form")),Y.set("Type",M.get("XObject")),Y.set("BBox",[0,0,C,B]),Y.set("Length",w.length),Y.set("Resources",D),i){let K=xr(i,C,B);Y.set("Matrix",K)}let U=new It(w);return U.dict=Y,U}},Zr=class{constructor(A,t,i){this.root=A,this.xref=t,this._type=i}getAll(){let A=new Map;if(!this.root)return A;let t=this.xref,i=new be;i.put(this.root);let s=[this.root];for(;s.length>0;){let a=t.fetchIfRef(s.shift());if(!(a instanceof F))continue;if(a.has("Kids")){let r=a.get("Kids");if(!Array.isArray(r))continue;for(let g of r){if(i.has(g))throw new v(`Duplicate entry in "${this._type}" tree.`);s.push(g),i.put(g)}continue}let n=a.get(this._type);if(Array.isArray(n))for(let r=0,g=n.length;ra)return k(`Search depth limit reached for "${this._type}" tree.`),null;let r=i.get("Kids");if(!Array.isArray(r))return null;let g=0,o=r.length-1;for(;g<=o;){let I=g+o>>1,c=t.fetchIfRef(r[I]),l=c.get("Limits");if(At.fetchIfRef(l[1]))g=I+1;else{i=c;break}}if(g>o)return null}let n=i.get(this._type);if(Array.isArray(n)){let r=0,g=n.length-2;for(;r<=g;){let o=r+g>>1,I=o+(o&1),c=t.fetchIfRef(n[I]);if(Ac)r=I+2;else return t.fetchIfRef(n[I+1])}}return null}},Fi=class extends Zr{constructor(A,t){super(A,t,"Names")}},va=class extends Zr{constructor(A,t){super(A,t,"Nums")}};function E1(){L2(),vu(),A2(),hs.cleanup()}function mE(e){return e instanceof F?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}function G9(e){return e.substring(e.lastIndexOf("/")+1)}var Qn,qa=class{constructor(A,t,i=!1){HA(this,Qn,!1);A instanceof F&&(this.xref=t,this.root=A,A.has("FS")&&(this.fs=A.get("FS")),A.has("RF")&&k("Related file specifications are not supported"),i||(A.has("EF")?_s(this,Qn,!0):k("Non-embedded file specifications are not supported")))}get filename(){let A="",t=mE(this.root);return t&&typeof t=="string"&&(A=jA(t).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/")),nA(this,"filename",A||"unnamed")}get content(){var t;if(!ne(this,Qn))return null;this._contentRef||(this._contentRef=mE((t=this.root)==null?void 0:t.get("EF")));let A=null;if(this._contentRef){let i=this.xref.fetchIfRef(this._contentRef);i instanceof KA?A=i.getBytes():k("Embedded file specification points to non-existing/invalid content")}else k("Embedded file specification does not have any content");return A}get description(){var i;let A="",t=(i=this.root)==null?void 0:i.get("Desc");return t&&typeof t=="string"&&(A=jA(t)),nA(this,"description",A)}get serializable(){return{rawFilename:this.filename,filename:G9(this.filename),content:this.content,description:this.description}}};Qn=new WeakMap;var ht={NoError:0,EndOfDocument:-1,UnterminatedCdat:-2,UnterminatedXmlDeclaration:-3,UnterminatedDoctypeDeclaration:-4,UnterminatedComment:-5,MalformedElement:-6,OutOfMemory:-7,UnterminatedAttributeValue:-8,UnterminatedElement:-9,ElementNeverBegun:-10};function $0(e,A){let t=e[A];return t===" "||t===`\n`||t==="\\r"||t===" "}function U9(e){for(let A=0,t=e.length;A{if(i.substring(0,2)==="#x")return String.fromCodePoint(parseInt(i.substring(2),16));if(i.substring(0,1)==="#")return String.fromCodePoint(parseInt(i.substring(1),10));switch(i){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return\'"\';case"apos":return"\'"}return this.onResolveEntity(i)})}_parseContent(A,t){let i=[],s=t;function a(){for(;s"&&A[s]!=="/";)++s;let n=A.substring(t,s);for(a();s"&&A[s]!=="/"&&A[s]!=="?";){a();let r="",g="";for(;s"&&A[i]!=="?"&&A[i]!=="/";)++i;let a=A.substring(t,i);s();let n=i;for(;i");)++i;let r=A.substring(n,i);return{name:a,value:r,parsed:i-t}}parseXml(A){let t=0;for(;t",s),n<0){this.onError(ht.UnterminatedElement);return}this.onEndElement(A.substring(s,n)),s=n+1;break;case"?":++s;let r=this._parseProcessingInstruction(A,s);if(A.substring(s+r.parsed,s+r.parsed+2)!=="?>"){this.onError(ht.UnterminatedXmlDeclaration);return}this.onPi(r.name,r.value),s+=r.parsed+2;break;case"!":if(A.substring(s+1,s+3)==="--"){if(n=A.indexOf("-->",s+3),n<0){this.onError(ht.UnterminatedComment);return}this.onComment(A.substring(s+3,n)),s=n+3}else if(A.substring(s+1,s+8)==="[CDATA["){if(n=A.indexOf("]]>",s+8),n<0){this.onError(ht.UnterminatedCdat);return}this.onCdata(A.substring(s+8,n)),s=n+3}else if(A.substring(s+1,s+8)==="DOCTYPE"){let I=A.indexOf("[",s+8),c=!1;if(n=A.indexOf(">",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}if(I>0&&n>I){if(n=A.indexOf("]>",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}c=!0}let l=A.substring(s+8,n+(c?1:0));this.onDoctype(l),s=n+(c?2:1)}else{this.onError(ht.MalformedElement);return}break;default:let g=this._parseContent(A,s);if(g===null){this.onError(ht.MalformedElement);return}let o=!1;if(A.substring(s+g.parsed,s+g.parsed+2)==="/>")o=!0;else if(A.substring(s+g.parsed,s+g.parsed+1)!==">"){this.onError(ht.UnterminatedElement);return}this.onBeginElement(g.name,g.attributes,o),s+=g.parsed+(o?2:1);break}}else{for(;s0}searchNode(A,t){var n;if(t>=A.length)return this;let i=A[t];if(i.name.startsWith("#")&&t0)s.push([a,0]),a=a.childNodes[0];else{if(s.length===0)return null;for(;s.length!==0;){let[r,g]=s.pop(),o=g+1;if(o");for(let t of this.childNodes)t.dump(A);A.push(``)}else this.nodeValue?A.push(`>${ls(this.nodeValue)}`):A.push("/>")}},Ls=class extends jr{constructor({hasAttributes:A=!1,lowerCaseName:t=!1}){super(),this._currentFragment=null,this._stack=null,this._errorCode=ht.NoError,this._hasAttributes=A,this._lowerCaseName=t}parseFromString(A){if(this._currentFragment=[],this._stack=[],this._errorCode=ht.NoError,this.parseXml(A),this._errorCode!==ht.NoError)return;let[t]=this._currentFragment;if(t)return{documentElement:t}}onText(A){if(U9(A))return;let t=new u0("#text",A);this._currentFragment.push(t)}onCdata(A){let t=new u0("#text",A);this._currentFragment.push(t)}onBeginElement(A,t,i){this._lowerCaseName&&(A=A.toLowerCase());let s=new u0(A);s.childNodes=[],this._hasAttributes&&(s.attributes=t),this._currentFragment.push(s),!i&&(this._stack.push(this._currentFragment),this._currentFragment=s.childNodes)}onEndElement(A){this._currentFragment=this._stack.pop()||[];let t=this._currentFragment.at(-1);if(!t)return null;for(let i of t.childNodes)i.parentNode=t;return t}onError(A){this._errorCode=A}},ac=class{constructor(A){A=this._repair(A);let i=new Ls({lowerCaseName:!0}).parseFromString(A);this._metadataMap=new Map,this._data=A,i&&this._parse(i)}_repair(A){return A.replace(/^[^<]+/,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,function(t,i){let s=i.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,function(n,r,g,o){return String.fromCharCode(r*64+g*8+o*1)}).replaceAll(/&(amp|apos|gt|lt|quot);/g,function(n,r){switch(r){case"amp":return"&";case"apos":return"\'";case"gt":return">";case"lt":return"<";case"quot":return\'"\'}throw new Error(`_repair: ${r} isn\'t defined.`)}),a=[">"];for(let n=0,r=s.length;n=32&&g<127&&g!==60&&g!==62&&g!==38?a.push(String.fromCharCode(g)):a.push("&#x"+(65536+g).toString(16).substring(1)+";")}return a.join("")})}_getSequence(A){let t=A.nodeName;return t!=="rdf:bag"&&t!=="rdf:seq"&&t!=="rdf:alt"?null:A.childNodes.filter(i=>i.nodeName==="rdf:li")}_parseArray(A){if(!A.hasChildNodes())return;let[t]=A.childNodes,i=this._getSequence(t)||[];this._metadataMap.set(A.nodeName,i.map(s=>s.textContent.trim()))}_parse(A){let t=A.documentElement;if(t.nodeName!=="rdf:rdf")for(t=t.firstChild;t&&t.nodeName!=="rdf:rdf";)t=t.nextSibling;if(!(!t||t.nodeName!=="rdf:rdf"||!t.hasChildNodes())){for(let i of t.childNodes)if(i.nodeName==="rdf:description")for(let s of i.childNodes){let a=s.nodeName;switch(a){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(s);continue}this._metadataMap.set(a,s.textContent.trim())}}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}},pE=512,nc=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.decrypt=i,this.nextChunk=null,this.initialized=!1}readBlock(){var r;let A;if(this.initialized?A=this.nextChunk:(A=this.str.getBytes(pE),this.initialized=!0),!A||A.length===0){this.eof=!0;return}this.nextChunk=this.str.getBytes(pE);let t=((r=this.nextChunk)==null?void 0:r.length)>0,i=this.decrypt;A=i(A,!t);let s=this.bufferLength,a=s+A.length;this.ensureBuffer(a).set(A,s),this.bufferLength=a}},ci=class{constructor(A){this.a=0,this.b=0;let t=new Uint8Array(256),i=A.length;for(let s=0;s<256;++s)t[s]=s;for(let s=0,a=0;s<256;++s){let n=t[s];a=a+n+A[s%i]&255,t[s]=t[a],t[a]=n}this.s=t}encryptBlock(A){let t=this.a,i=this.b,s=this.s,a=A.length,n=new Uint8Array(a);for(let r=0;r>5&255,l[h++]=n>>13&255,l[h++]=n>>21&255,l[h++]=n>>>29&255,l[h++]=0,l[h++]=0,l[h++]=0;let Q=new Int32Array(16);for(h=0;h>>32-S)|0,E=m}r=r+E|0,g=g+f|0,o=o+u|0,I=I+d|0}return new Uint8Array([r&255,r>>8&255,r>>16&255,r>>>24&255,g&255,g>>8&255,g>>16&255,g>>>24&255,o&255,o>>8&255,o>>16&255,o>>>24&255,I&255,I>>8&255,I>>16&255,I>>>24&255])}return i}(),sA=class{constructor(A,t){this.high=A|0,this.low=t|0}and(A){this.high&=A.high,this.low&=A.low}xor(A){this.high^=A.high,this.low^=A.low}or(A){this.high|=A.high,this.low|=A.low}shiftRight(A){A>=32?(this.low=this.high>>>A-32|0,this.high=0):(this.low=this.low>>>A|this.high<<32-A,this.high=this.high>>>A|0)}shiftLeft(A){A>=32?(this.high=this.low<>>32-A,this.low<<=A)}rotateRight(A){let t,i;A&32?(i=this.low,t=this.high):(t=this.low,i=this.high),A&=31,this.low=t>>>A|i<<32-A,this.high=i>>>A|t<<32-A}not(){this.high=~this.high,this.low=~this.low}add(A){let t=(this.low>>>0)+(A.low>>>0),i=(this.high>>>0)+(A.high>>>0);t>4294967295&&(i+=1),this.low=t|0,this.high=i|0}copyTo(A,t){A[t]=this.high>>>24&255,A[t+1]=this.high>>16&255,A[t+2]=this.high>>8&255,A[t+3]=this.high&255,A[t+4]=this.low>>>24&255,A[t+5]=this.low>>16&255,A[t+6]=this.low>>8&255,A[t+7]=this.low&255}assign(A){this.high=A.high,this.low=A.low}},ss=function(){function A(I,c){return I>>>c|I<<32-c}function t(I,c,l){return I&c^~I&l}function i(I,c,l){return I&c^I&l^c&l}function s(I){return A(I,2)^A(I,13)^A(I,22)}function a(I){return A(I,6)^A(I,11)^A(I,25)}function n(I){return A(I,7)^A(I,18)^I>>>3}function r(I){return A(I,17)^A(I,19)^I>>>10}let g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function o(I,c,l){let h=1779033703,C=3144134277,B=1013904242,Q=2773480762,E=1359893119,f=2600822924,u=528734635,d=1541459225,x=Math.ceil((l+9)/64)*64,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=l>>21&255,p[m++]=l>>13&255,p[m++]=l>>5&255,p[m++]=l<<3&255;let w=new Uint32Array(64);for(m=0;m>24&255,h>>16&255,h>>8&255,h&255,C>>24&255,C>>16&255,C>>8&255,C&255,B>>24&255,B>>16&255,B>>8&255,B&255,Q>>24&255,Q>>16&255,Q>>8&255,Q&255,E>>24&255,E>>16&255,E>>8&255,E&255,f>>24&255,f>>16&255,f>>8&255,f&255,u>>24&255,u>>16&255,u>>8&255,u&255,d>>24&255,d>>16&255,d>>8&255,d&255])}return o}(),Sf=function(){function A(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.not(),h.and(l),o.xor(h)}function t(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.and(l),o.xor(h),h.assign(c),h.and(l),o.xor(h)}function i(o,I,c){o.assign(I),o.rotateRight(28),c.assign(I),c.rotateRight(34),o.xor(c),c.assign(I),c.rotateRight(39),o.xor(c)}function s(o,I,c){o.assign(I),o.rotateRight(14),c.assign(I),c.rotateRight(18),o.xor(c),c.assign(I),c.rotateRight(41),o.xor(c)}function a(o,I,c){o.assign(I),o.rotateRight(1),c.assign(I),c.rotateRight(8),o.xor(c),c.assign(I),c.shiftRight(7),o.xor(c)}function n(o,I,c){o.assign(I),o.rotateRight(19),c.assign(I),c.rotateRight(61),o.xor(c),c.assign(I),c.shiftRight(6),o.xor(c)}let r=[new sA(1116352408,3609767458),new sA(1899447441,602891725),new sA(3049323471,3964484399),new sA(3921009573,2173295548),new sA(961987163,4081628472),new sA(1508970993,3053834265),new sA(2453635748,2937671579),new sA(2870763221,3664609560),new sA(3624381080,2734883394),new sA(310598401,1164996542),new sA(607225278,1323610764),new sA(1426881987,3590304994),new sA(1925078388,4068182383),new sA(2162078206,991336113),new sA(2614888103,633803317),new sA(3248222580,3479774868),new sA(3835390401,2666613458),new sA(4022224774,944711139),new sA(264347078,2341262773),new sA(604807628,2007800933),new sA(770255983,1495990901),new sA(1249150122,1856431235),new sA(1555081692,3175218132),new sA(1996064986,2198950837),new sA(2554220882,3999719339),new sA(2821834349,766784016),new sA(2952996808,2566594879),new sA(3210313671,3203337956),new sA(3336571891,1034457026),new sA(3584528711,2466948901),new sA(113926993,3758326383),new sA(338241895,168717936),new sA(666307205,1188179964),new sA(773529912,1546045734),new sA(1294757372,1522805485),new sA(1396182291,2643833823),new sA(1695183700,2343527390),new sA(1986661051,1014477480),new sA(2177026350,1206759142),new sA(2456956037,344077627),new sA(2730485921,1290863460),new sA(2820302411,3158454273),new sA(3259730800,3505952657),new sA(3345764771,106217008),new sA(3516065817,3606008344),new sA(3600352804,1432725776),new sA(4094571909,1467031594),new sA(275423344,851169720),new sA(430227734,3100823752),new sA(506948616,1363258195),new sA(659060556,3750685593),new sA(883997877,3785050280),new sA(958139571,3318307427),new sA(1322822218,3812723403),new sA(1537002063,2003034995),new sA(1747873779,3602036899),new sA(1955562222,1575990012),new sA(2024104815,1125592928),new sA(2227730452,2716904306),new sA(2361852424,442776044),new sA(2428436474,593698344),new sA(2756734187,3733110249),new sA(3204031479,2999351573),new sA(3329325298,3815920427),new sA(3391569614,3928383900),new sA(3515267271,566280711),new sA(3940187606,3454069534),new sA(4118630271,4000239992),new sA(116418474,1914138554),new sA(174292421,2731055270),new sA(289380356,3203993006),new sA(460393269,320620315),new sA(685471733,587496836),new sA(852142971,1086792851),new sA(1017036298,365543100),new sA(1126000580,2618297676),new sA(1288033470,3409855158),new sA(1501505948,4234509866),new sA(1607167915,987167468),new sA(1816402316,1246189591)];function g(o,I,c,l=!1){let h,C,B,Q,E,f,u,d;l?(h=new sA(3418070365,3238371032),C=new sA(1654270250,914150663),B=new sA(2438529370,812702999),Q=new sA(355462360,4144912697),E=new sA(1731405415,4290775857),f=new sA(2394180231,1750603025),u=new sA(3675008525,1694076839),d=new sA(1203062813,3204075428)):(h=new sA(1779033703,4089235720),C=new sA(3144134277,2227873595),B=new sA(1013904242,4271175723),Q=new sA(2773480762,1595750129),E=new sA(1359893119,2917565137),f=new sA(2600822924,725511199),u=new sA(528734635,4215389547),d=new sA(1541459225,327033209));let x=Math.ceil((c+17)/128)*128,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=c>>21&255,p[m++]=c>>13&255,p[m++]=c>>5&255,p[m++]=c<<3&255;let w=new Array(80);for(m=0;m<80;m++)w[m]=new sA(0,0);let Y=new sA(0,0),U=new sA(0,0),K=new sA(0,0),Z=new sA(0,0),AA=new sA(0,0),gA=new sA(0,0),R=new sA(0,0),_=new sA(0,0),tA=new sA(0,0),IA=new sA(0,0),QA=new sA(0,0),V=new sA(0,0),lA;for(m=0;m=1;--r){i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let g=0;g<16;++g)n[g]=this._inv_s[n[g]];for(let g=0,o=r*16;g<16;++g,++o)n[g]^=t[o];for(let g=0;g<16;g+=4){let o=this._mix[n[g]],I=this._mix[n[g+1]],c=this._mix[n[g+2]],l=this._mix[n[g+3]];i=o^I>>>8^I<<24^c>>>16^c<<16^l>>>24^l<<8,n[g]=i>>>24&255,n[g+1]=i>>16&255,n[g+2]=i>>8&255,n[g+3]=i&255}}i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let r=0;r<16;++r)n[r]=this._inv_s[n[r]],n[r]^=t[r];return n}_encrypt(A,t){let i=this._s,s,a,n,r=new Uint8Array(16);r.set(A);for(let g=0;g<16;++g)r[g]^=t[g];for(let g=1;g=h;--l)if(I[l]!==c){c=0;break}g-=c,n[n.length-1]=I.subarray(0,16-c)}}let o=new Uint8Array(g);for(let I=0,c=0,l=n.length;I=256&&(a=(a^27)&255));for(let l=0;l<4;++l)s[I]=n^=s[I-32],I++,s[I]=r^=s[I-32],I++,s[I]=g^=s[I-32],I++,s[I]=o^=s[I-32],I++}return s}},gc=class{checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},oc=class{_hash(A,t,i){let s=ss(t,0,t.length).subarray(0,32),a=[0],n=0;for(;n<64||a.at(-1)>n-32;){let r=A.length+s.length+i.length,g=new Uint8Array(r),o=0;g.set(A,o),o+=A.length,g.set(s,o),o+=s.length,g.set(i,o);let I=new Uint8Array(r*64);for(let h=0,C=0;h<64;h++,C+=r)I.set(g,C);a=new Xr(s.subarray(0,16)).encrypt(I,s.subarray(16,32));let l=a.slice(0,16).reduce((h,C)=>h+C,0)%3;l===0?s=ss(a,0,a.length):l===1?s=M9(a,0,a.length):l===2&&(s=Sf(a,0,a.length)),n++}return s.subarray(0,32)}checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},Vr=class{constructor(A,t){this.StringCipherConstructor=A,this.StreamCipherConstructor=t}createStream(A,t){let i=new this.StreamCipherConstructor;return new nc(A,t,function(a,n){return i.decryptBlock(a,n)})}decryptString(A){let t=new this.StringCipherConstructor,i=Pe(A);return i=t.decryptBlock(i,!0),Qt(i)}encryptString(A){let t=new this.StringCipherConstructor;if(t instanceof Ta){let a=16-A.length%16;A+=String.fromCharCode(a).repeat(a);let n=new Uint8Array(16);if(typeof crypto!="undefined")crypto.getRandomValues(n);else for(let o=0;o<16;o++)n[o]=Math.floor(256*Math.random());let r=Pe(A);r=t.encrypt(r,n);let g=new Uint8Array(16+r.length);return g.set(n),g.set(r,16),Qt(g)}let i=Pe(A);return i=t.encrypt(i),Qt(i)}},Q0,Jg,Ff,En,Ic,Yg,Rf,ws,Ir,fn,cc,cs=class{constructor(A,t,i){HA(this,Jg);HA(this,En);HA(this,Yg);HA(this,ws);HA(this,fn);let s=A.get("Filter");if(!ye(s,"Standard"))throw new v("unknown encryption method");this.filterName=s.name,this.dict=A;let a=A.get("V");if(!Number.isInteger(a)||a!==1&&a!==2&&a!==4&&a!==5)throw new v("unsupported encryption algorithm");this.algorithm=a;let n=A.get("Length");if(!n)if(a<=3)n=40;else{let E=A.get("CF"),f=A.get("StmF");if(E instanceof F&&f instanceof M){E.suppressEncryption=!0;let u=E.get(f.name);n=(u==null?void 0:u.get("Length"))||128,n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!==0)throw new v("invalid key length");let r=Pe(A.get("O")),g=Pe(A.get("U")),o=r.subarray(0,32),I=g.subarray(0,32),c=A.get("P"),l=A.get("R"),h=(a===4||a===5)&&A.get("EncryptMetadata")!==!1;this.encryptMetadata=h;let C=Pe(t),B;if(i){if(l===6)try{i=Yo(i)}catch(E){k("CipherTransformFactory: Unable to convert UTF8 encoded password.")}B=Pe(i)}let Q;if(a!==5)Q=mA(this,En,Ic).call(this,C,B,o,I,c,l,n,h);else{let E=r.subarray(32,40),f=r.subarray(40,48),u=g.subarray(0,48),d=g.subarray(32,40),x=g.subarray(40,48),p=Pe(A.get("OE")),m=Pe(A.get("UE")),D=Pe(A.get("Perms"));Q=mA(this,Jg,Ff).call(this,l,B,o,E,f,u,I,d,x,p,m,D)}if(!Q&&!i)throw new bs("No password given",G1.NEED_PASSWORD);if(!Q&&i){let E=mA(this,Yg,Rf).call(this,B,o,l,n);Q=mA(this,En,Ic).call(this,C,E,o,I,c,l,n,h)}if(!Q)throw new bs("Incorrect Password",G1.INCORRECT_PASSWORD);if(this.encryptionKey=Q,a>=4){let E=A.get("CF");E instanceof F&&(E.suppressEncryption=!0),this.cf=E,this.stmf=A.get("StmF")||M.get("Identity"),this.strf=A.get("StrF")||M.get("Identity"),this.eff=A.get("EFF")||this.stmf}}createCipherTransform(A,t){if(this.algorithm===4||this.algorithm===5)return new Vr(mA(this,fn,cc).call(this,this.cf,this.strf,A,t,this.encryptionKey),mA(this,fn,cc).call(this,this.cf,this.stmf,A,t,this.encryptionKey));let i=mA(this,ws,Ir).call(this,A,t,this.encryptionKey,!1),s=function(){return new ci(i)};return new Vr(s,s)}},or=cs;Q0=new WeakMap,Jg=new WeakSet,Ff=function(A,t,i,s,a,n,r,g,o,I,c,l){if(t){let C=Math.min(127,t.length);t=t.subarray(0,C)}else t=[];let h=A===6?new oc:new gc;return h.checkUserPassword(t,g,r)?h.getUserKey(t,o,c):t.length&&h.checkOwnerPassword(t,s,n,i)?h.getOwnerKey(t,a,n,I):null},En=new WeakSet,Ic=function(A,t,i,s,a,n,r,g){let o=40+i.length+A.length,I=new Uint8Array(o),c=0,l,h;if(t)for(h=Math.min(32,t.length);c>8&255,I[c++]=a>>16&255,I[c++]=a>>>24&255,l=0,h=A.length;l=4&&!g&&(I[c++]=255,I[c++]=255,I[c++]=255,I[c++]=255);let C=Ri(I,0,c),B=r>>3;if(n>=3)for(l=0;l<50;++l)C=Ri(C,0,B);let Q=C.subarray(0,B),E,f;if(n>=3){for(c=0;c<32;++c)I[c]=ne(cs,Q0)[c];for(l=0,h=A.length;l>3;if(i>=3)for(g=0;g<50;++g)o=Ri(o,0,o.length);let c,l;if(i>=3){l=t;let h=new Uint8Array(I);for(g=19;g>=0;g--){for(let C=0;C>8&255,a[r++]=A>>16&255,a[r++]=t&255,a[r++]=t>>8&255,s&&(a[r++]=115,a[r++]=65,a[r++]=108,a[r++]=84),Ri(a,0,r).subarray(0,Math.min(i.length+5,16))},fn=new WeakSet,cc=function(A,t,i,s,a){if(!(t instanceof M))throw new v("Invalid crypt filter name.");let n=this,r=A.get(t.name),g=r==null?void 0:r.get("CFM");if(!g||g.name==="None")return function(){return new rc};if(g.name==="V2")return function(){var o;return new ci(mA(o=n,ws,Ir).call(o,i,s,a,!1))};if(g.name==="AESV2")return function(){var o;return new Xr(mA(o=n,ws,Ir).call(o,i,s,a,!0))};if(g.name==="AESV3")return function(){return new R0(a)};throw new v("Unknown crypto method")},HA(or,Q0,new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]));async function ot(e,A,t,{encrypt:i=null}){let s=i==null?void 0:i.createCipherTransform(e.num,e.gen);t.push(`${e.num} ${e.gen} obj\n`),A instanceof F?await Ao(A,t,s):A instanceof KA?await Nf(A,t,s):(Array.isArray(A)||ArrayBuffer.isView(A))&&await Gf(A,t,s),t.push(`\nendobj\n`)}async function Ao(e,A,t){A.push("<<");for(let i of e.getKeys())A.push(` /${o1(i)} `),await Uf(e.getRaw(i),A,t);A.push(">>")}async function Nf(e,A,t){let i=e.getBytes(),{dict:s}=e,[a,n]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),r=Array.isArray(a)?await s.xref.fetchIfRefAsync(a[0]):a,g=ye(r,"FlateDecode"),o=256;if(i.length>=o||g)try{let c=new CompressionStream("deflate"),l=c.writable.getWriter();l.write(i),l.close();let h=await new Response(c.readable).arrayBuffer();i=new Uint8Array(h);let C,B;a?g||(C=Array.isArray(a)?[M.get("FlateDecode"),...a]:[M.get("FlateDecode"),a],n&&(B=Array.isArray(n)?[null,...n]:[null,n])):C=M.get("FlateDecode"),C&&s.set("Filter",C),B&&s.set("DecodeParms",B)}catch(c){PA(`writeStream - cannot compress data: "${c}".`)}let I=Qt(i);t&&(I=t.encryptString(I)),s.set("Length",I.length),await Ao(s,A,t),A.push(` stream\n`,I,`\nendstream`)}async function Gf(e,A,t){A.push("[");let i=!0;for(let s of e)i?i=!1:A.push(" "),await Uf(s,A,t);A.push("]")}async function Uf(e,A,t){e instanceof M?A.push(`/${o1(e.name)}`):e instanceof oA?A.push(`${e.num} ${e.gen} R`):Array.isArray(e)||ArrayBuffer.isView(e)?await Gf(e,A,t):typeof e=="string"?(t&&(e=t.encryptString(e)),A.push(`(${Fs(e)})`)):typeof e=="number"?A.push(Ae(e)):typeof e=="boolean"?A.push(e.toString()):e instanceof F?await Ao(e,A,t):e instanceof KA?await Nf(e,A,t):e===null?A.push("null"):k(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function Fo(e,A,t,i){for(let s=A+t-1;s>t-1;s--)i[s]=e&255,e>>=8;return t+A}function Mf(e,A,t){for(let i=0,s=e.length;ig+o.length,0);for(let g of Object.values(A.info))s.push(g),a+=g.length;let n=new Uint8Array(a),r=0;for(let g of s)Mf(g,r,n),r+=g.length;return Qt(Ri(n))}function H9(e,A){let t=new Ls({hasAttributes:!0}).parseFromString(e);for(let{xfa:s}of A){if(!s)continue;let{path:a,value:n}=s;if(!a)continue;let r=_E(a),g=t.documentElement.searchNode(r,0);!g&&r.length>1&&(g=t.documentElement.searchNode([r.at(-1)],0)),g?g.childNodes=Array.isArray(n)?n.map(o=>new u0("value",o)):[new u0("#text",n)]:k(`Node not found for path: ${a}`)}let i=[];return t.documentElement.dump(i),i.join("")}async function J9({xref:e,acroForm:A,acroFormRef:t,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:a,needAppearances:n,newRefs:r}){if(i&&!s&&!a&&k("XFA - Cannot save it"),!n&&(!i||!a||s))return;let g=A.clone();if(i&&!s){let I=A.get("XFA").slice();I.splice(2,0,"datasets"),I.splice(3,0,a),g.set("XFA",I)}n&&g.set("NeedAppearances",!0);let o=[];await ot(t,g,o,e),r.push({ref:t,data:o.join("")})}function Y9({xfaData:e,xfaDatasetsRef:A,newRefs:t,xref:i}){if(e===null){let n=i.fetchIfRef(A);e=H9(n.getString(),t)}let s=i.encrypt;s&&(e=s.createCipherTransform(A.num,A.gen).encryptString(e));let a=`${A.num} ${A.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n`+e+`\nendstream\nendobj\n`;t.push({ref:A,data:a})}async function K9(e,A,t,i,s){s.push(`xref\n`);let a=Lf(t),n=0;for(let{ref:r,data:g}of t)r.num===a[n]&&(s.push(`${a[n]} ${a[n+1]}\n`),n+=2),g!==null?(s.push(`${A.toString().padStart(10,"0")} ${Math.min(r.gen,65535).toString().padStart(5,"0")} n\\r\n`),A+=g.length):s.push(`0000000000 ${Math.min(r.gen+1,65535).toString().padStart(5,"0")} f\\r\n`);Hf(A,e,i),s.push(`trailer\n`),await Ao(i,s),s.push(`\nstartxref\n`,A.toString(),`\n%%EOF\n`)}function Lf(e){let A=[];for(let{ref:t}of e)t.num===A.at(-2)+A.at(-1)?A[A.length-1]+=1:A.push(t.num,1);return A}async function v9(e,A,t,i,s){let a=[],n=0,r=0;for(let{ref:B,data:Q}of t){let E;n=Math.max(n,A),Q!==null?(E=Math.min(B.gen,65535),a.push([1,A,E]),A+=Q.length):(E=Math.min(B.gen+1,65535),a.push([0,0,E])),r=Math.max(r,E)}i.set("Index",Lf(t));let g=M1(n),o=M1(r),I=[1,g,o];i.set("W",I),Hf(A,e,i);let c=I.reduce((B,Q)=>B+Q,0),l=new Uint8Array(c*a.length),h=new Ie(l);h.dict=i;let C=0;for(let[B,Q,E]of a)C=Fo(B,I[0],C,l),C=Fo(Q,I[1],C,l),C=Fo(E,I[2],C,l);await ot(e.newRef,h,s,{}),s.push(`startxref\n`,A.toString(),`\n%%EOF\n`)}function Hf(e,A,t){if(Array.isArray(A.fileIds)&&A.fileIds.length>0){let i=L9(e,A);t.set("ID",[A.fileIds[0],i])}}function q9(e,A,t){let i=new F(null);i.set("Prev",e.startXRef);let s=e.newRef;return t?(A.push({ref:s,data:""}),i.set("Size",s.num+1),i.set("Type",M.get("XRef"))):i.set("Size",s.num),e.rootRef!==null&&i.set("Root",e.rootRef),e.infoRef!==null&&i.set("Info",e.infoRef),e.encryptRef!==null&&i.set("Encrypt",e.encryptRef),i}async function T9({originalData:e,xrefInfo:A,newRefs:t,xref:i=null,hasXfa:s=!1,xfaDatasetsRef:a=null,hasXfaDatasetsEntry:n=!1,needAppearances:r,acroFormRef:g=null,acroForm:o=null,xfaData:I=null,useXrefStream:c=!1}){await J9({xref:i,acroForm:o,acroFormRef:g,hasXfa:s,hasXfaDatasetsEntry:n,xfaDatasetsRef:a,needAppearances:r,newRefs:t}),s&&Y9({xfaData:I,xfaDatasetsRef:a,newRefs:t,xref:i});let l=[],h=e.length,C=e.at(-1);C!==10&&C!==13&&(l.push(`\n`),h+=1);let B=q9(A,t,c);t=t.sort((u,d)=>u.ref.num-d.ref.num);for(let{data:u}of t)u!==null&&l.push(u);await(c?v9(A,h,t,B,l):K9(A,h,t,B,l));let Q=l.reduce((u,d)=>u+d.length,e.length),E=new Uint8Array(Q);E.set(e);let f=e.length;for(let u of l)Mf(u,f,E),f+=u.length;return E}var wE=40,Nt={PAGE_CONTENT:1,STREAM_CONTENT:2,OBJECT:3,ANNOTATION:4,ELEMENT:5},Kg,Jf,un,lc,vg,Yf,qg,Kf,Tg=class{constructor(A,t){HA(this,Kg);this.dict=A,this.ref=t instanceof oA?t:null,this.roleMap=new Map,this.structParentIds=null}init(){this.readRoleMap()}addAnnotationIdToPage(A,t){mA(this,Kg,Jf).call(this,A,t,Nt.ANNOTATION)}readRoleMap(){let A=this.dict.get("RoleMap");A instanceof F&&A.forEach((t,i)=>{i instanceof M&&this.roleMap.set(t,i.name)})}static async canCreateStructureTree({catalogRef:A,pdfManager:t,newAnnotationsByPage:i}){var n;if(!(A instanceof oA))return k("Cannot save the struct tree: no catalog reference."),!1;let s=0,a=!0;for(let[r,g]of i){let{ref:o}=await t.getPage(r);if(!(o instanceof oA)){k(`Cannot save the struct tree: page ${r} has no ref.`),a=!0;break}for(let I of g)(n=I.accessibilityData)!=null&&n.type&&(I.parentTreeId=s++,a=!1)}if(a){for(let r of i.values())for(let g of r)delete g.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:A,xref:t,catalogRef:i,pdfManager:s,newRefs:a}){let n=s.catalog.cloneDict(),r=new mt;r.put(i,n);let g=t.getNewTemporaryRef();n.set("StructTreeRoot",g);let o=new F(t);o.set("Type",M.get("StructTreeRoot"));let I=t.getNewTemporaryRef();o.set("ParentTree",I);let c=[];o.set("K",c),r.put(g,o);let l=new F(t),h=[];l.set("Nums",h);let C=await mA(this,un,lc).call(this,{newAnnotationsByPage:A,structTreeRootRef:g,kids:c,nums:h,xref:t,pdfManager:s,cache:r});o.set("ParentTreeNextKey",C),r.put(I,l);let B=[];for(let[Q,E]of r.items())B.length=0,await ot(Q,E,B,t),a.push({ref:Q,data:B.join("")})}async canUpdateStructTree({pdfManager:A,xref:t,newAnnotationsByPage:i}){var o,I;if(!this.ref)return k("Cannot update the struct tree: no root reference."),!1;let s=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(s)||s<0)return k("Cannot update the struct tree: invalid next key."),!1;let a=this.dict.get("ParentTree");if(!(a instanceof F))return k("Cannot update the struct tree: ParentTree isn\'t a dict."),!1;let n=a.get("Nums");if(!Array.isArray(n))return k("Cannot update the struct tree: nums isn\'t an array."),!1;let r=new va(a,t);for(let c of i.keys()){let{pageDict:l}=await A.getPage(c);if(!l.has("StructParents"))continue;let h=l.get("StructParents");if(!Number.isInteger(h)||!Array.isArray(r.get(h)))return k(`Cannot save the struct tree: page ${c} has a wrong id.`),!1}let g=!0;for(let[c,l]of i){let{pageDict:h}=await A.getPage(c);mA(o=Tg,vg,Yf).call(o,{elements:l,xref:this.dict.xref,pageDict:h,numberTree:r});for(let C of l)(I=C.accessibilityData)!=null&&I.type&&(C.parentTreeId=s++,g=!1)}if(g){for(let c of i.values())for(let l of c)delete l.parentTreeId,delete l.structTreeParent;return!1}return!0}async updateStructureTree({newAnnotationsByPage:A,pdfManager:t,newRefs:i}){var C;let s=this.dict.xref,a=this.dict.clone(),n=this.ref,r=new mt;r.put(n,a);let g=a.getRaw("ParentTree"),o;g instanceof oA?o=s.fetch(g):(o=g,g=s.getNewTemporaryRef(),a.set("ParentTree",g)),o=o.clone(),r.put(g,o);let I=o.getRaw("Nums"),c=null;I instanceof oA&&(c=I,I=s.fetch(c)),I=I.slice(),c||o.set("Nums",I);let l=await mA(C=Tg,un,lc).call(C,{newAnnotationsByPage:A,structTreeRootRef:n,kids:null,nums:I,xref:s,pdfManager:t,cache:r});a.set("ParentTreeNextKey",l),c&&r.put(c,I);let h=[];for(let[B,Q]of r.items())h.length=0,await ot(B,Q,h,s),i.push({ref:B,data:h.join("")})}},Ui=Tg;Kg=new WeakSet,Jf=function(A,t,i){if(!(A instanceof oA)||t<0)return;this.structParentIds||(this.structParentIds=new mt);let s=this.structParentIds.get(A);s||(s=[],this.structParentIds.put(A,s)),s.push([t,i])},un=new WeakSet,lc=async function({newAnnotationsByPage:A,structTreeRootRef:t,kids:i,nums:s,xref:a,pdfManager:n,cache:r}){let g=M.get("OBJR"),o=-1/0;for(let[I,c]of A){let{ref:l}=await n.getPage(I),h=l instanceof oA;for(let{accessibilityData:C,ref:B,parentTreeId:Q,structTreeParent:E}of c){if(!(C!=null&&C.type))continue;let{type:f,title:u,lang:d,alt:x,expanded:p,actualText:m}=C;o=Math.max(o,Q);let D=a.getNewTemporaryRef(),S=new F(a);S.set("S",M.get(f)),u&&S.set("T",ii(u)),d&&S.set("Lang",d),x&&S.set("Alt",ii(x)),p&&S.set("E",ii(p)),m&&S.set("ActualText",ii(m)),await mA(this,qg,Kf).call(this,{structTreeParent:E,tagDict:S,newTagRef:D,structTreeRootRef:t,fallbackKids:i,xref:a,cache:r});let w=new F(a);S.set("K",w),w.set("Type",g),h&&w.set("Pg",l),w.set("Obj",B),r.put(D,S),s.push(Q,D)}}return o+1},vg=new WeakSet,Yf=function({elements:A,xref:t,pageDict:i,numberTree:s}){let a=new Map;for(let o of A)if(o.structTreeParentId){let I=parseInt(o.structTreeParentId.split("_mc")[1],10),c=a.get(I);c||(c=[],a.set(I,c)),c.push(o)}let n=i.get("StructParents");if(!Number.isInteger(n))return;let r=s.get(n),g=(o,I,c)=>{let l=a.get(o);if(l){let h=I.getRaw("P"),C=t.fetchIfRef(h);if(h instanceof oA&&C instanceof F){let B={ref:c,dict:I};for(let Q of l)Q.structTreeParent=B}return!0}return!1};for(let o of r){if(!(o instanceof oA))continue;let I=t.fetch(o),c=I.get("K");if(Number.isInteger(c)){g(c,I,o);continue}if(Array.isArray(c))for(let l of c){if(l=t.fetchIfRef(l),Number.isInteger(l)&&g(l,I,o))break;if(!(l instanceof F))continue;if(!ye(l.get("Type"),"MCR"))break;let h=l.get("MCID");if(Number.isInteger(h)&&g(h,I,o))break}}},qg=new WeakSet,Kf=async function({structTreeParent:A,tagDict:t,newTagRef:i,structTreeRootRef:s,fallbackKids:a,xref:n,cache:r}){let g=null,o;A?({ref:g}=A,o=A.dict.getRaw("P")||s):o=s,t.set("P",o);let I=n.fetchIfRef(o);if(!I){a.push(i);return}let c=r.get(o);c||(c=I.clone(),r.put(o,c));let l=c.getRaw("K"),h=l instanceof oA?r.get(l):null;if(!h){h=n.fetchIfRef(l),h=Array.isArray(h)?h.slice():[l];let B=n.getNewTemporaryRef();c.set("K",B),r.put(B,h)}let C=h.indexOf(g);h.splice(C>=0?C+1:h.length,0,i)},HA(Ui,un),HA(Ui,vg),HA(Ui,qg);var hc=class{constructor(A,t){this.tree=A,this.dict=t,this.kids=[],this.parseKids()}get role(){let A=this.dict.get("S"),t=A instanceof M?A.name:"",{root:i}=this.tree;return i.roleMap.has(t)?i.roleMap.get(t):t}parseKids(){let A=null,t=this.dict.getRaw("Pg");t instanceof oA&&(A=t.toString());let i=this.dict.get("K");if(Array.isArray(i))for(let s of i){let a=this.parseKid(A,s);a&&this.kids.push(a)}else{let s=this.parseKid(A,i);s&&this.kids.push(s)}}parseKid(A,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==A?null:new as({type:Nt.PAGE_CONTENT,mcid:t,pageObjId:A});let i=null;if(t instanceof oA?i=this.dict.xref.fetch(t):t instanceof F&&(i=t),!i)return null;let s=i.getRaw("Pg");s instanceof oA&&(A=s.toString());let a=i.get("Type")instanceof M?i.get("Type").name:null;if(a==="MCR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Stm");return new as({type:Nt.STREAM_CONTENT,refObjId:n instanceof oA?n.toString():null,pageObjId:A,mcid:i.get("MCID")})}if(a==="OBJR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Obj");return new as({type:Nt.OBJECT,refObjId:n instanceof oA?n.toString():null,pageObjId:A})}return new as({type:Nt.ELEMENT,dict:i})}},as=class{constructor({type:A,dict:t=null,mcid:i=null,pageObjId:s=null,refObjId:a=null}){this.type=A,this.dict=t,this.mcid=i,this.pageObjId=s,this.refObjId=a,this.parentNode=null}},Cc=class{constructor(A,t){this.root=A,this.rootDict=A?A.dict:null,this.pageDict=t,this.nodes=[]}parse(A){var r,g;if(!this.root||!this.rootDict)return;let t=this.rootDict.get("ParentTree");if(!t)return;let i=this.pageDict.get("StructParents"),s=A instanceof oA&&((r=this.root.structParentIds)==null?void 0:r.get(A));if(!Number.isInteger(i)&&!s)return;let a=new Map,n=new va(t,this.rootDict.xref);if(Number.isInteger(i)){let o=n.get(i);if(Array.isArray(o))for(let I of o)I instanceof oA&&this.addNode(this.rootDict.xref.fetch(I),a)}if(s)for(let[o,I]of s){let c=n.get(o);if(c){let l=this.addNode(this.rootDict.xref.fetchIfRef(c),a);((g=l==null?void 0:l.kids)==null?void 0:g.length)===1&&l.kids[0].type===Nt.OBJECT&&(l.kids[0].type=I)}}}addNode(A,t,i=0){if(i>wE)return k("StructTree MAX_DEPTH reached."),null;if(!(A instanceof F))return null;if(t.has(A))return t.get(A);let s=new hc(this,A);t.set(A,s);let a=A.get("P");if(!a||ye(a.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(A,s)||t.delete(A),s;let n=this.addNode(a,t,i+1);if(!n)return s;let r=!1;for(let g of n.kids)g.type===Nt.ELEMENT&&g.dict===A&&(g.parentNode=s,r=!0);return r||t.delete(A),s}addTopLevelNode(A,t){let i=this.rootDict.get("K");if(!i)return!1;if(i instanceof F)return i.objId!==A.objId?!1:(this.nodes[0]=t,!0);if(!Array.isArray(i))return!0;let s=!1;for(let a=0;awE){k("StructTree too deep to be fully serialized.");return}let n=Object.create(null);n.role=i.role,n.children=[],s.children.push(n);let r=i.dict.get("Alt");typeof r=="string"&&(n.alt=jA(r));let g=i.dict.get("Lang");typeof g=="string"&&(n.lang=jA(g));for(let o of i.kids){let I=o.type===Nt.ELEMENT?o.parentNode:null;if(I){A(I,n,a+1);continue}else o.type===Nt.PAGE_CONTENT||o.type===Nt.STREAM_CONTENT?n.children.push({type:"content",id:`p${o.pageObjId}_mc${o.mcid}`}):o.type===Nt.OBJECT?n.children.push({type:"object",id:o.refObjId}):o.type===Nt.ANNOTATION&&n.children.push({type:"annotation",id:`${Yu}${o.refObjId}`})}}let t=Object.create(null);t.children=[],t.role="Root";for(let i of this.nodes)i&&A(i,t);return t}};function f1(e){if(!Array.isArray(e)||e.length<2)return!1;let[A,t,...i]=e;if(!(A instanceof oA)&&!Number.isInteger(A)||!(t instanceof M))return!1;let s=i.length,a=!0;switch(t.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return s===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(s!==4)return!1;a=!1;break;default:return!1}for(let n of i)if(!(typeof n=="number"||a&&n===null))return!1;return!0}function On(e){return e instanceof F&&(e=e.get("D")),f1(e)?e:null}function yE(e){let A=e.get("D");if(A){if(A instanceof M&&(A=A.name),typeof A=="string")return jA(A);if(f1(A))return JSON.stringify(A)}return null}var Pg,vf,Wg,qf,Og=class{constructor(A,t){HA(this,Pg);HA(this,Wg);if(this.pdfManager=A,this.xref=t,this._catDict=t.getCatalogObj(),!(this._catDict instanceof F))throw new v("Catalog object is not a dictionary.");this.toplevelPagesDict,this._actualNumPages=null,this.fontCache=new mt,this.builtInCMapCache=new Map,this.standardFontDataCache=new Map,this.globalImageCache=new z0,this.pageKidsCountCache=new mt,this.pageIndexCache=new mt,this.pageDictCache=new mt,this.nonBlendModesSet=new be,this.systemFontCache=new Map}cloneDict(){return this._catDict.clone()}get version(){let A=this._catDict.get("Version");if(A instanceof M){if(XE.test(A.name))return nA(this,"version",A.name);k(`Invalid PDF catalog version: ${A.name}`)}return nA(this,"version",null)}get lang(){let A=this._catDict.get("Lang");return nA(this,"lang",A&&typeof A=="string"?jA(A):null)}get needsRendering(){let A=this._catDict.get("NeedsRendering");return nA(this,"needsRendering",typeof A=="boolean"?A:!1)}get collection(){let A=null;try{let t=this._catDict.get("Collection");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch Collection entry; assuming no collection is present.")}return nA(this,"collection",A)}get acroForm(){let A=null;try{let t=this._catDict.get("AcroForm");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch AcroForm entry; assuming no forms are present.")}return nA(this,"acroForm",A)}get acroFormRef(){let A=this._catDict.getRaw("AcroForm");return nA(this,"acroFormRef",A instanceof oA?A:null)}get metadata(){var i;let A=this._catDict.getRaw("Metadata");if(!(A instanceof oA))return nA(this,"metadata",null);let t=null;try{let s=this.xref.fetch(A,!((i=this.xref.encrypt)!=null&&i.encryptMetadata));if(s instanceof KA&&s.dict instanceof F){let a=s.dict.get("Type"),n=s.dict.get("Subtype");if(ye(a,"Metadata")&&ye(n,"XML")){let r=ka(s.getString());r&&(t=new ac(r).serializable)}}}catch(s){if(s instanceof ge)throw s;PA(`Skipping invalid Metadata: "${s}".`)}return nA(this,"metadata",t)}get markInfo(){let A=null;try{A=this._readMarkInfo()}catch(t){if(t instanceof ge)throw t;k("Unable to read mark info.")}return nA(this,"markInfo",A)}_readMarkInfo(){let A=this._catDict.get("MarkInfo");if(!(A instanceof F))return null;let t={Marked:!1,UserProperties:!1,Suspects:!1};for(let i in t){let s=A.get(i);typeof s=="boolean"&&(t[i]=s)}return t}get structTreeRoot(){let A=null;try{A=this._readStructTreeRoot()}catch(t){if(t instanceof ge)throw t;k("Unable read to structTreeRoot info.")}return nA(this,"structTreeRoot",A)}_readStructTreeRoot(){let A=this._catDict.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(A);if(!(t instanceof F))return null;let i=new Ui(t,A);return i.init(),i}get toplevelPagesDict(){let A=this._catDict.get("Pages");if(!(A instanceof F))throw new v("Invalid top-level pages dictionary.");return nA(this,"toplevelPagesDict",A)}get documentOutline(){let A=null;try{A=this._readDocumentOutline()}catch(t){if(t instanceof ge)throw t;k("Unable to read document outline.")}return nA(this,"documentOutline",A)}_readDocumentOutline(){let A=this._catDict.get("Outlines");if(!(A instanceof F)||(A=A.getRaw("First"),!(A instanceof oA)))return null;let t={items:[]},i=[{obj:A,parent:t}],s=new be;s.put(A);let a=this.xref,n=new Uint8ClampedArray(3);for(;i.length>0;){let r=i.shift(),g=a.fetchIfRef(r.obj);if(g===null)continue;g.has("Title")||k("Invalid outline item encountered.");let o={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:g,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});let I=g.get("Title"),c=g.get("F")||0,l=g.getArray("C"),h=g.get("Count"),C=n;wt(l,3)&&(l[0]!==0||l[1]!==0||l[2]!==0)&&(C=JA.singletons.rgb.getRgb(l,0));let B={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:typeof I=="string"?jA(I):"",color:C,count:Number.isInteger(h)?h:void 0,bold:!!(c&2),italic:!!(c&1),items:[]};r.parent.items.push(B),A=g.getRaw("First"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:B}),s.put(A)),A=g.getRaw("Next"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:r.parent}),s.put(A))}return t.items.length>0?t.items:null}get permissions(){let A=null;try{A=this._readPermissions()}catch(t){if(t instanceof ge)throw t;k("Unable to read permissions.")}return nA(this,"permissions",A)}_readPermissions(){let A=this.xref.trailer.get("Encrypt");if(!(A instanceof F))return null;let t=A.get("P");if(typeof t!="number")return null;t+=2**32;let i=[];for(let s in N1){let a=N1[s];t&a&&i.push(a)}return i}get optionalContentConfig(){let A=null;try{let t=this._catDict.get("OCProperties");if(!t)return nA(this,"optionalContentConfig",null);let i=t.get("D");if(!i)return nA(this,"optionalContentConfig",null);let s=t.get("OCGs");if(!Array.isArray(s))return nA(this,"optionalContentConfig",null);let a=[],n=new be;for(let r of s)!(r instanceof oA)||n.has(r)||(n.put(r),a.push(mA(this,Pg,vf).call(this,r)));A=mA(this,Wg,qf).call(this,i,n),A.groups=a}catch(t){if(t instanceof ge)throw t;k(`Unable to read optional content config: ${t}`)}return nA(this,"optionalContentConfig",A)}setActualNumPages(A=null){this._actualNumPages=A}get hasActualNumPages(){return this._actualNumPages!==null}get _pagesCount(){let A=this.toplevelPagesDict.get("Count");if(!Number.isInteger(A))throw new v("Page count in top-level pages dictionary is not an integer.");return nA(this,"_pagesCount",A)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){let A=this._readDests(),t=Object.create(null);if(A instanceof Fi)for(let[i,s]of A.getAll()){let a=On(s);a&&(t[jA(i)]=a)}else A instanceof F&&A.forEach(function(i,s){let a=On(s);a&&(t[i]=a)});return nA(this,"destinations",t)}getDestination(A){let t=this._readDests();if(t instanceof Fi){let i=On(t.get(A));if(i)return i;let s=this.destinations[A];if(s)return k(`Found "${A}" at an incorrect position in the NameTree.`),s}else if(t instanceof F){let i=On(t.get(A));if(i)return i}return null}_readDests(){let A=this._catDict.get("Names");if(A!=null&&A.has("Dests"))return new Fi(A.getRaw("Dests"),this.xref);if(this._catDict.has("Dests"))return this._catDict.get("Dests")}get pageLabels(){let A=null;try{A=this._readPageLabels()}catch(t){if(t instanceof ge)throw t;k("Unable to read page labels.")}return nA(this,"pageLabels",A)}_readPageLabels(){let A=this._catDict.getRaw("PageLabels");if(!A)return null;let t=new Array(this.numPages),i=null,s="",n=new va(A,this.xref).getAll(),r="",g=1;for(let o=0,I=this.numPages;o=1))throw new v("Invalid start in PageLabel dictionary.");g=l}else g=1}switch(i){case"D":r=g;break;case"R":case"r":r=qu(g,i==="r");break;case"A":case"a":let l=26,B=i==="a"?97:65,Q=g-1;r=String.fromCharCode(B+Q%l).repeat(Math.floor(Q/l)+1);break;default:if(i)throw new v(`Invalid style "${i}" in PageLabel dictionary.`);r=""}t[o]=s+r,g++}return t}get pageLayout(){let A=this._catDict.get("PageLayout"),t="";if(A instanceof M)switch(A.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=A.name}return nA(this,"pageLayout",t)}get pageMode(){let A=this._catDict.get("PageMode"),t="UseNone";if(A instanceof M)switch(A.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=A.name}return nA(this,"pageMode",t)}get viewerPreferences(){let A=this._catDict.get("ViewerPreferences");if(!(A instanceof F))return nA(this,"viewerPreferences",null);let t=null;for(let i of A.getKeys()){let s=A.get(i),a;switch(i){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":typeof s=="boolean"&&(a=s);break;case"NonFullScreenPageMode":if(s instanceof M)switch(s.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":a=s.name;break;default:a="UseNone"}break;case"Direction":if(s instanceof M)switch(s.name){case"L2R":case"R2L":a=s.name;break;default:a="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(s instanceof M)switch(s.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":a=s.name;break;default:a="CropBox"}break;case"PrintScaling":if(s instanceof M)switch(s.name){case"None":case"AppDefault":a=s.name;break;default:a="AppDefault"}break;case"Duplex":if(s instanceof M)switch(s.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":a=s.name;break;default:a="None"}break;case"PrintPageRange":Array.isArray(s)&&s.length%2===0&&s.every((r,g,o)=>Number.isInteger(r)&&r>0&&(g===0||r>=o[g-1])&&r<=this.numPages)&&(a=s);break;case"NumCopies":Number.isInteger(s)&&s>0&&(a=s);break;default:k(`Ignoring non-standard key in ViewerPreferences: ${i}.`);continue}if(a===void 0){k(`Bad value, for key "${i}", in ViewerPreferences: ${s}.`);continue}t||(t=Object.create(null)),t[i]=a}return nA(this,"viewerPreferences",t)}get openAction(){let A=this._catDict.get("OpenAction"),t=Object.create(null);if(A instanceof F){let i=new F(this.xref);i.set("A",A);let s={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:i,resultObj:s}),Array.isArray(s.dest)?t.dest=s.dest:s.action&&(t.action=s.action)}else Array.isArray(A)&&(t.dest=A);return nA(this,"openAction",OE(t)>0?t:null)}get attachments(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("EmbeddedFiles")){let i=new Fi(A.getRaw("EmbeddedFiles"),this.xref);for(let[s,a]of i.getAll()){let n=new qa(a,this.xref);t||(t=Object.create(null)),t[jA(s)]=n.serializable}}return nA(this,"attachments",t)}get xfaImages(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("XFAImages")){let i=new Fi(A.getRaw("XFAImages"),this.xref);for(let[s,a]of i.getAll())t||(t=new F(this.xref)),t.set(jA(s),a)}return nA(this,"xfaImages",t)}_collectJavaScript(){let A=this._catDict.get("Names"),t=null;function i(a,n){if(!(n instanceof F)||!ye(n.get("S"),"JavaScript"))return;let r=n.get("JS");if(r instanceof KA)r=r.getString();else if(typeof r!="string")return;r=jA(r).replaceAll("\\0",""),r&&(t||(t=new Map)).set(a,r)}if(A instanceof F&&A.has("JavaScript")){let a=new Fi(A.getRaw("JavaScript"),this.xref);for(let[n,r]of a.getAll())i(jA(n),r)}let s=this._catDict.get("OpenAction");return s&&i("OpenAction",s),t}get jsActions(){let A=this._collectJavaScript(),t=Vg(this.xref,this._catDict,Fu);if(A){t||(t=Object.create(null));for(let[i,s]of A)i in t?t[i].push(s):t[i]=[s]}return nA(this,"jsActions",t)}async fontFallback(A,t){let i=await Promise.all(this.fontCache);for(let s of i)if(s.loadedName===A){s.fallback(t);return}}async cleanup(A=!1){E1(),this.globalImageCache.clear(A),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.pageDictCache.clear(),this.nonBlendModesSet.clear();let t=await Promise.all(this.fontCache);for(let{dict:i}of t)delete i.cacheKey;this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear(),this.systemFontCache.clear()}async getPageDict(A){let t=[this.toplevelPagesDict],i=new be,s=this._catDict.getRaw("Pages");s instanceof oA&&i.put(s);let a=this.xref,n=this.pageKidsCountCache,r=this.pageIndexCache,g=this.pageDictCache,o=0;for(;t.length;){let I=t.pop();if(I instanceof oA){let C=n.get(I);if(C>=0&&o+C<=A){o+=C;continue}if(i.has(I))throw new v("Pages tree contains circular reference.");i.put(I);let B=await(g.get(I)||a.fetchAsync(I));if(B instanceof F){let Q=B.getRaw("Type");if(Q instanceof oA&&(Q=await a.fetchAsync(Q)),ye(Q,"Page")||!B.has("Kids")){if(n.has(I)||n.put(I,1),r.has(I)||r.put(I,o),o===A)return[B,I];o++;continue}}t.push(B);continue}if(!(I instanceof F))throw new v("Page dictionary kid reference points to wrong type of object.");let{objId:c}=I,l=I.getRaw("Count");if(l instanceof oA&&(l=await a.fetchAsync(l)),Number.isInteger(l)&&l>=0&&(c&&!n.has(c)&&n.put(c,l),o+l<=A)){o+=l;continue}let h=I.getRaw("Kids");if(h instanceof oA&&(h=await a.fetchAsync(h)),!Array.isArray(h)){let C=I.getRaw("Type");if(C instanceof oA&&(C=await a.fetchAsync(C)),ye(C,"Page")||!I.has("Kids")){if(o===A)return[I,null];o++;continue}throw new v("Page dictionary kids object is not an array.")}for(let C=h.length-1;C>=0;C--){let B=h[C];t.push(B),I===this.toplevelPagesDict&&B instanceof oA&&!g.has(B)&&g.put(B,a.fetchAsync(B))}}throw new Error(`Page index ${A} not found.`)}async getAllPageDicts(A=!1){let{ignoreErrors:t}=this.pdfManager.evaluatorOptions,i=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new be,a=this._catDict.getRaw("Pages");a instanceof oA&&s.put(a);let n=new Map,r=this.xref,g=this.pageIndexCache,o=0;function I(l,h){h&&!g.has(h)&&g.put(h,o),n.set(o++,[l,h])}function c(l){if(l instanceof ti&&!A)throw l;A&&t&&o===0&&(k(`getAllPageDicts - Skipping invalid first page: "${l}".`),l=F.empty),n.set(o++,[l,null])}for(;i.length>0;){let l=i.at(-1),{currentNode:h,posInKids:C}=l,B=h.getRaw("Kids");if(B instanceof oA)try{B=await r.fetchAsync(B)}catch(u){c(u);break}if(!Array.isArray(B)){c(new v("Page dictionary kids object is not an array."));break}if(C>=B.length){i.pop();continue}let Q=B[C],E;if(Q instanceof oA){if(s.has(Q)){c(new v("Pages tree contains circular reference."));break}s.put(Q);try{E=await r.fetchAsync(Q)}catch(u){c(u);break}}else E=Q;if(!(E instanceof F)){c(new v("Page dictionary kid reference points to wrong type of object."));break}let f=E.getRaw("Type");if(f instanceof oA)try{f=await r.fetchAsync(f)}catch(u){c(u);break}ye(f,"Page")||!E.has("Kids")?I(E,Q instanceof oA?Q:null):i.push({currentNode:E,posInKids:0}),l.posInKids++}return n}getPageIndex(A){let t=this.pageIndexCache.get(A);if(t!==void 0)return Promise.resolve(t);let i=this.xref;function s(r){let g=0,o;return i.fetchAsync(r).then(function(I){if(ur(r,A)&&!jE(I,"Page")&&!(I instanceof F&&!I.has("Type")&&I.has("Contents")))throw new v("The reference does not point to a /Page dictionary.");if(!I)return null;if(!(I instanceof F))throw new v("Node must be a dictionary.");return o=I.getRaw("Parent"),I.getAsync("Parent")}).then(function(I){if(!I)return null;if(!(I instanceof F))throw new v("Parent must be a dictionary.");return I.getAsync("Kids")}).then(function(I){if(!I)return null;let c=[],l=!1;for(let h of I){if(!(h instanceof oA))throw new v("Kid must be a reference.");if(ur(h,r)){l=!0;break}c.push(i.fetchAsync(h).then(function(C){if(!(C instanceof F))throw new v("Kid node must be a dictionary.");C.has("Count")?g+=C.get("Count"):g++}))}if(!l)throw new v("Kid reference not found in parent\'s kids.");return Promise.all(c).then(function(){return[g,o]})})}let a=0,n=r=>s(r).then(g=>{if(!g)return this.pageIndexCache.put(A,a),a;let[o,I]=g;return a+=o,n(I)});return n(A)}get baseUrl(){let A=this._catDict.get("URI");if(A instanceof F){let t=A.get("Base");if(typeof t=="string"){let i=Qr(t,null,{tryConvertEncoding:!0});if(i)return nA(this,"baseUrl",i.href)}}return nA(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:A,resultObj:t,docBaseUrl:i=null,docAttachments:s=null}){if(!(A instanceof F)){k("parseDestDictionary: `destDict` must be a dictionary.");return}let a=A.get("A"),n,r;if(a instanceof F||(A.has("Dest")?a=A.get("Dest"):(a=A.get("AA"),a instanceof F&&(a.has("D")?a=a.get("D"):a.has("U")&&(a=a.get("U"))))),a instanceof F){let g=a.get("S");if(!(g instanceof M)){k("parseDestDictionary: Invalid type in Action dictionary.");return}let o=g.name;switch(o){case"ResetForm":let I=a.get("Flags"),c=((typeof I=="number"?I:0)&1)===0,l=[],h=[];for(let w of a.get("Fields")||[])w instanceof oA?h.push(w.toString()):typeof w=="string"&&l.push(jA(w));t.resetForm={fields:l,refs:h,include:c};break;case"URI":n=a.get("URI"),n instanceof M&&(n="/"+n.name);break;case"GoTo":r=a.get("D");break;case"Launch":case"GoToR":let C=a.get("F");if(C instanceof F){let w=new qa(C,null,!0),{rawFilename:Y}=w.serializable;n=Y}else typeof C=="string"&&(n=C);let B=yE(a);B&&typeof n=="string"&&(n=n.split("#",1)[0]+"#"+B);let Q=a.get("NewWindow");typeof Q=="boolean"&&(t.newWindow=Q);break;case"GoToE":let E=a.get("T"),f;if(s&&E instanceof F){let w=E.get("R"),Y=E.get("N");ye(w,"C")&&typeof Y=="string"&&(f=s[jA(Y)])}if(f){t.attachment=f;let w=yE(a);w&&(t.attachmentDest=w)}else k(\'parseDestDictionary - unimplemented "GoToE" action.\');break;case"Named":let u=a.get("N");u instanceof M&&(t.action=u.name);break;case"SetOCGState":let d=a.get("State"),x=a.get("PreserveRB");if(!Array.isArray(d)||d.length===0)break;let p=[];for(let w of d)if(w instanceof M)switch(w.name){case"ON":case"OFF":case"Toggle":p.push(w.name);break}else w instanceof oA&&p.push(w.toString());if(p.length!==d.length)break;t.setOCGState={state:p,preserveRB:typeof x=="boolean"?x:!0};break;case"JavaScript":let m=a.get("JS"),D;m instanceof KA?D=m.getString():typeof m=="string"&&(D=m);let S=D&&zE(jA(D));if(S){n=S.url,t.newWindow=S.newWindow;break}default:if(o==="JavaScript"||o==="SubmitForm")break;k(`parseDestDictionary - unsupported action: "${o}".`);break}}else A.has("Dest")&&(r=A.get("Dest"));if(typeof n=="string"){let g=Qr(n,i,{addDefaultProtocol:!0,tryConvertEncoding:!0});g&&(t.url=g.href),t.unsafeUrl=n}r&&(r instanceof M&&(r=r.name),typeof r=="string"?t.dest=jA(r):f1(r)&&(t.dest=r))}},Pa=Og;Pg=new WeakSet,vf=function(A){let t=this.xref.fetch(A),i={id:A.toString(),name:null,intent:null,usage:{print:null,view:null}},s=t.get("Name");typeof s=="string"&&(i.name=jA(s));let a=t.getArray("Intent");Array.isArray(a)||(a=[a]),a.every(I=>I instanceof M)&&(i.intent=a.map(I=>I.name));let n=t.get("Usage");if(!(n instanceof F))return i;let r=i.usage,g=n.get("Print");if(g instanceof F){let I=g.get("PrintState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.print={printState:I.name}}}let o=n.get("View");if(o instanceof F){let I=o.get("ViewState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.view={viewState:I.name}}}return i},Wg=new WeakSet,qf=function(A,t){function i(o){let I=[];if(Array.isArray(o))for(let c of o)c instanceof oA&&t.has(c)&&I.push(c.toString());return I}function s(o,I=0){if(!Array.isArray(o))return null;let c=[];for(let h of o){if(h instanceof oA&&t.has(h)){r.put(h),c.push(h.toString());continue}let C=a(h,I);C&&c.push(C)}if(I>0)return c;let l=[];for(let h of t)r.has(h)||l.push(h.toString());return l.length&&c.push({name:null,order:l}),c}function a(o,I){if(++I>g)return k("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;let c=n.fetchIfRef(o);if(!Array.isArray(c))return null;let l=n.fetchIfRef(c[0]);if(typeof l!="string")return null;let h=s(c.slice(1),I);return!h||!h.length?null:{name:jA(l),order:h}}let n=this.xref,r=new be,g=10;return{name:typeof A.get("Name")=="string"?jA(A.get("Name")):null,creator:typeof A.get("Creator")=="string"?jA(A.get("Creator")):null,baseState:A.get("BaseState")instanceof M?A.get("BaseState").name:null,on:i(A.get("ON")),off:i(A.get("OFF")),order:s(A.get("Order")),groups:null}};function P9(e){return e instanceof oA||e instanceof F||e instanceof KA||Array.isArray(e)}function W9(e,A){if(e instanceof F)e=e.getRawValues();else if(e instanceof KA)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(let t of e)P9(t)&&A.push(t)}var Hs=class{constructor(A,t,i){this.dict=A,this.keys=t,this.xref=i,this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;let{keys:A,dict:t}=this;this.refSet=new be;let i=[];for(let s of A){let a=t.getRaw(s);a!==void 0&&i.push(a)}return this._walk(i)}async _walk(A){let t=[],i=[];for(;A.length;){let s=A.pop();if(s instanceof oA){if(this.refSet.has(s))continue;try{this.refSet.put(s),s=this.xref.fetch(s)}catch(a){if(!(a instanceof ge)){k(`ObjectLoader._walk - requesting all data: "${a}".`),this.refSet=null;let{manager:n}=this.xref.stream;return n.requestAllChunks()}t.push(s),i.push({begin:a.begin,end:a.end})}}if(s instanceof KA){let a=s.getBaseStreams();if(a){let n=!1;for(let r of a)r.isDataLoaded||(n=!0,i.push({begin:r.start,end:r.end}));n&&t.push(s)}}W9(s,A)}if(i.length){await this.xref.stream.manager.requestRanges(i);for(let s of t)s instanceof oA&&this.refSet.remove(s);return this._walk(t)}this.refSet=null}},eo=Symbol(),d0=Symbol(),Be=Symbol(),_i=Symbol(),Yt=Symbol(),ns=Symbol(),cr=Symbol(),Tt=Symbol(),$t=Symbol(),P=Symbol("content"),Ht=Symbol("data"),Js=Symbol(),L=Symbol("extra"),se=Symbol(),wn=Symbol(),Bc=Symbol(),Tf=Symbol(),x0=Symbol(),to=Symbol(),Wa=Symbol(),da=Symbol(),u1=Symbol(),We=Symbol(),xa=Symbol(),Ue=Symbol(),Ys=Symbol(),Ci=Symbol(),xe=Symbol(),MA=Symbol(),ue=Symbol(),ie=Symbol(),Oa=Symbol(),As=Symbol(),Qc=Symbol(),lr=Symbol(),d1=Symbol(),J0=Symbol(),rs=Symbol(),Mi=Symbol(),ma=Symbol(),di=Symbol(),pi=Symbol(),Za=Symbol(),ja=Symbol(),O9=Symbol(),de=Symbol("namespaceId"),XA=Symbol("nodeName"),qi=Symbol(),ni=Symbol(),Ec=Symbol(),xi=Symbol(),ri=Symbol(),Bt=Symbol(),Xs=Symbol(),Ti=Symbol(),Pf=Symbol("root"),ha=Symbol(),Bi=Symbol(),fc=Symbol(),Wf=Symbol(),Et=Symbol(),qt=Symbol(),Se=Symbol(),Of=Symbol(),SA=Symbol(),pa=Symbol(),ZA=Symbol(),$A=Symbol("uid"),Zt=Symbol(),me={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>e==="http://ns.adobe.com/xdp/pdf/"},signature:{id:6,check:e=>e==="http://www.w3.org/2000/09/xmldsig#"},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>e==="http://www.w3.org/1999/XSL/Transform"},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>e==="http://ns.adobe.com/xdp/"},xfdf:{id:12,check:e=>e==="http://ns.adobe.com/xfdf/"},xhtml:{id:13,check:e=>e==="http://www.w3.org/1999/xhtml"},xmpmeta:{id:14,check:e=>e==="http://ns.adobe.com/xmpmeta/"}},Z9={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/(10*2.54)*72,in:e=>e*72,px:e=>e},j9=/([+-]?\\d+\\.?\\d*)(.*)/;function io(e){return e.startsWith("\'")||e.startsWith(\'"\')?e.slice(1,-1):e}function GA({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseInt(e,10);return!isNaN(i)&&t(i)?i:A}function _r({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseFloat(e);return!isNaN(i)&&t(i)?i:A}function so({data:e,defaultValue:A,validate:t}){return e?(e=e.trim(),t(e)?e:A):A}function O(e,A){return so({data:e,defaultValue:A[0],validate:t=>A.includes(t)})}function hA(e,A="0"){if(A||(A="0"),!e)return hA(A);let t=e.trim().match(j9);if(!t)return hA(A);let[,i,s]=t,a=parseFloat(i);if(isNaN(a))return hA(A);if(a===0)return 0;let n=Z9[s];return n?n(a):a}function bE(e){if(!e)return{num:1,den:1};let A=e.trim().split(/\\s*:\\s*/).map(s=>parseFloat(s)).filter(s=>!isNaN(s));if(A.length===1&&A.push(1),A.length===0)return{num:1,den:1};let[t,i]=A;return{num:t,den:i}}function jt(e){return e?e.trim().split(/\\s+/).map(A=>({excluded:A[0]==="-",viewname:A.substring(1)})):[]}function X9(e,A=[0,0,0]){let[t,i,s]=A;if(!e)return{r:t,g:i,b:s};let a=e.trim().split(/\\s*,\\s*/).map(n=>Math.min(Math.max(0,parseInt(n.trim(),10)),255)).map(n=>isNaN(n)?0:n);return a.length<3?{r:t,g:i,b:s}:([t,i,s]=a,{r:t,g:i,b:s})}function V9(e){if(!e)return{x:-1,y:-1,width:-1,height:-1};let t=e.trim().split(/\\s*,\\s*/).map(r=>hA(r,"-1"));if(t.length<4||t[2]<0||t[3]<0)return{x:-1,y:-1,width:-1,height:-1};let[i,s,a,n]=t;return{x:i,y:s,width:a,height:n}}var dA=class{static get FAILURE(){return nA(this,"FAILURE",new dA(!1,null,null,null))}static get EMPTY(){return nA(this,"EMPTY",new dA(!0,null,null,null))}constructor(A,t,i,s){this.success=A,this.html=t,this.bbox=i,this.breakNode=s}isBreak(){return!!this.breakNode}static breakNode(A){return new dA(!1,null,null,A)}static success(A,t=null){return new dA(!0,A,t,null)}},uc=class{constructor(A){this.fonts=new Map,this.cache=new Map,this.warned=new Set,this.defaultFont=null,this.add(A)}add(A,t=null){for(let s of A)this.addPdfFont(s);for(let s of this.fonts.values())s.regular||(s.regular=s.italic||s.bold||s.bolditalic);if(!t||t.size===0)return;let i=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(let s of t)this.fonts.set(s,i)}addPdfFont(A){var r,g,o;let t=A.cssFontInfo,i=t.fontFamily,s=this.fonts.get(i);s||(s=Object.create(null),this.fonts.set(i,s),this.defaultFont||(this.defaultFont=s));let a="",n=parseFloat(t.fontWeight);parseFloat(t.italicAngle)!==0?a=n>=700?"bolditalic":"italic":n>=700&&(a="bold"),a||((A.name.includes("Bold")||(r=A.psName)!=null&&r.includes("Bold"))&&(a="bold"),(A.name.includes("Italic")||A.name.endsWith("It")||(g=A.psName)!=null&&g.includes("Italic")||(o=A.psName)!=null&&o.endsWith("It"))&&(a+="italic")),a||(a="regular"),s[a]=A}getDefault(){return this.defaultFont}find(A,t=!0){var r,g;let i=this.fonts.get(A)||this.cache.get(A);if(i)return i;let s=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=A.replaceAll(s,"");if(i=this.fonts.get(a),i)return this.cache.set(A,i),i;a=a.toLowerCase();let n=[];for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I);if(n.length===0)for(let[,o]of this.fonts.entries())(r=o.regular.name)!=null&&r.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);if(n.length===0){a=a.replaceAll(/psmt|mt/gi,"");for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I)}if(n.length===0)for(let o of this.fonts.values())(g=o.regular.name)!=null&&g.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);return n.length>=1?(n.length!==1&&t&&k(`XFA - Too many choices to guess the correct font: ${A}`),this.cache.set(A,n[0]),n[0]):(t&&!this.warned.has(A)&&(this.warned.add(A),k(`XFA - Cannot find the font: ${A}`)),null)}};function x1(e,A){return e.posture==="italic"?e.weight==="bold"?A.bolditalic:A.italic:e.weight==="bold"?A.bold:A.regular}function _9(e,A=!1){let t=null;if(e){let n=io(e.typeface),r=e[ie].fontFinder.find(n);t=x1(e,r)}if(!t)return{lineHeight:12,lineGap:2,lineNoGap:10};let i=e.size||10,s=t.lineHeight?Math.max(A?0:1.2,t.lineHeight):1.2,a=t.lineGap===void 0?.2:t.lineGap;return{lineHeight:s*i,lineGap:a*i,lineNoGap:Math.max(1,s-a)*i}}var z9=1.02,zr=class{constructor(A,t,i,s){if(this.lineHeight=i,this.paraMargin=t||{top:0,bottom:0,left:0,right:0},!A){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.xfaFont={typeface:A.typeface,posture:A.posture,weight:A.weight,size:A.size,letterSpacing:A.letterSpacing};let a=s.find(A.typeface);if(!a){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.pdfFont=x1(A,a),this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(s))}defaultFont(A){let t=A.find("Helvetica",!1)||A.find("Myriad Pro",!1)||A.find("Arial",!1)||A.getDefault();if(t!=null&&t.regular){let s=t.regular,n={typeface:s.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0};return[s,n]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}},dc=class{constructor(A,t,i,s){this.fontFinder=s,this.stack=[new zr(A,t,i,s)]}pushData(A,t,i){let s=this.stack.at(-1);for(let n of["typeface","posture","weight","size","letterSpacing"])A[n]||(A[n]=s.xfaFont[n]);for(let n of["top","bottom","left","right"])isNaN(t[n])&&(t[n]=s.paraMargin[n]);let a=new zr(A,t,i||s.lineHeight,this.fontFinder);a.pdfFont||(a.pdfFont=s.pdfFont),this.stack.push(a)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}},xc=class{constructor(A,t,i,s){this.glyphs=[],this.fontSelector=new dc(A,t,i,s),this.extraHeight=0}pushData(A,t,i){this.fontSelector.pushData(A,t,i)}popFont(A){return this.fontSelector.popFont()}addPara(){let A=this.fontSelector.topFont();this.extraHeight+=A.paraMargin.top+A.paraMargin.bottom}addString(A){if(!A)return;let t=this.fontSelector.topFont(),i=t.xfaFont.size;if(t.pdfFont){let s=t.xfaFont.letterSpacing,a=t.pdfFont,n=a.lineHeight||1.2,r=t.lineHeight||Math.max(1.2,n)*i,g=a.lineGap===void 0?.2:a.lineGap,o=n-g,I=Math.max(1,o)*i,c=i/1e3,l=a.defaultWidth||a.charsToGlyphs(" ")[0].width;for(let h of A.split(/[\\u2029\\n]/)){let C=a.encodeString(h).join(""),B=a.charsToGlyphs(C);for(let Q of B){let E=Q.width||l;this.glyphs.push([E*c+s,r,I,Q.unicode,!1])}this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop();return}for(let s of A.split(/[\\u2029\\n]/)){for(let a of s.split(""))this.glyphs.push([i,1.2*i,i,a,!1]);this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop()}compute(A){let t=-1,i=0,s=0,a=0,n=0,r=0,g=!1,o=!0;for(let I=0,c=this.glyphs.length;IA?(s=Math.max(s,n),n=0,a+=r,r=f,t=-1,i=0,g=!0,o=!1):(r=Math.max(f,r),i=n,n+=l,t=I);continue}if(n+l>A){a+=r,r=f,t!==-1?(I=t,s=Math.max(s,i),n=0,t=-1,i=0):(s=Math.max(s,n),n=l),g=!0,o=!1;continue}n+=l,r=Math.max(f,r)}return s=Math.max(s,n),a+=r+this.extraHeight,{width:z9*s,height:a,isBroken:g}}},DE=/^[^.[]+/,$9=/^[^\\]]+/,xt={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},Zf=new Map([["$data",(e,A)=>e.datasets?e.datasets.data:e],["$record",(e,A)=>(e.datasets?e.datasets.data:e)[Ue]()[0]],["$template",(e,A)=>e.template],["$connectionSet",(e,A)=>e.connectionSet],["$form",(e,A)=>e.form],["$layout",(e,A)=>e.layout],["$host",(e,A)=>e.host],["$dataWindow",(e,A)=>e.dataWindow],["$event",(e,A)=>e.event],["!",(e,A)=>e.datasets],["$xfa",(e,A)=>e],["xfa",(e,A)=>e],["$",(e,A)=>A]]),kE=new WeakMap;function Ax(e){return e=e.trim(),e==="*"?1/0:parseInt(e,10)||0}function jf(e,A,t=!0){let i=e.match(DE);if(!i)return null;let[s]=i,a=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:xt.dot}],n=s.length;for(;n0&&C.push(Q)}if(C.length===0&&!g&&r===0){if(A=A[MA](),!A)return null;r=-1,e=[A];continue}e=isFinite(h)?C.filter(B=>hB[h]):C.flat()}return e.length===0?null:e}function ex(e,A,t){let i=jf(t);if(!i||i.some(n=>n.operator===xt.dotDot))return null;let s=Zf.get(i[0].name),a=0;s?(e=s(e,A),a=1):e=A||e;for(let n=i.length;aA[Se]()).join("")}get[P0](){let A=Object.getPrototypeOf(this);if(!A._attributes){let t=A._attributes=new Set;for(let i of Object.getOwnPropertyNames(this)){if(this[i]===null||this[i]instanceof J||this[i]instanceof b)break;t.add(i)}}return nA(this,P0,A._attributes)}[Mi](A){let t=this;for(;t;){if(t===A)return!0;t=t[MA]()}return!1}[MA](){return this[Rt]}[xe](){return this[MA]()}[Ue](A=null){return A?this[A]:this[vA]}[Js](){let A=Object.create(null);this[P]&&(A.$content=this[P]);for(let t of Object.getOwnPropertyNames(this)){let i=this[t];i!==null&&(i instanceof J?A[t]=i[Js]():i instanceof b?i.isEmpty()||(A[t]=i.dump()):A[t]=i)}return A}[ZA](){return null}[SA](){return dA.EMPTY}*[Ys](){for(let A of this[Ue]())yield A}*[SE](A,t){for(let i of this[Ys]())if(!A||t===A.has(i[XA])){let s=this[x0](),a=i[SA](s);a.success||(this[L].failingNode=i),yield a}}[wn](){return null}[d0](A,t){this[L].children.push(A)}[x0](){}[_i]({filter:A=null,include:t=!0}){if(!this[L].generator)this[L].generator=this[SE](A,t);else{let i=this[x0](),s=this[L].failingNode[SA](i);if(!s.success)return s;s.html&&this[d0](s.html,s.bbox),delete this[L].failingNode}for(;;){let i=this[L].generator.next();if(i.done)break;let s=i.value;if(!s.success)return s;s.html&&this[d0](s.html,s.bbox)}return this[L].generator=null,dA.EMPTY}[Wf](A){this[ca]=new Set(Object.keys(A))}[FE](A){let t=this[P0],i=this[ca];return[...A].filter(s=>t.has(s)&&!i.has(s))}[ha](A,t=new Set){for(let i of this[vA])i[Ia](A,t)}[Ia](A,t){let i=this[Go](A,t);i?this[Zn](i,A,t):this[ha](A,t)}[Go](A,t){let{use:i,usehref:s}=this;if(!i&&!s)return null;let a=null,n=null,r=null,g=i;if(s?(g=s,s.startsWith("#som(")&&s.endsWith(")")?n=s.slice(5,-1):s.startsWith(".#som(")&&s.endsWith(")")?n=s.slice(6,-1):s.startsWith("#")?r=s.slice(1):s.startsWith(".#")&&(r=s.slice(2))):i.startsWith("#")?r=i.slice(1):n=i,this.use=this.usehref="",r?a=A.get(r):(a=Ni(A.get(Pf),this,n,!0,!1),a&&(a=a[0])),!a)return k(`XFA - Invalid prototype reference: ${g}.`),null;if(a[XA]!==this[XA])return k(`XFA - Incompatible prototype: ${a[XA]} !== ${this[XA]}.`),null;if(t.has(a))return k("XFA - Cycle detected in prototypes use."),null;t.add(a);let o=a[Go](A,t);return o&&a[Zn](o,A,t),a[ha](A,t),t.delete(a),a}[Zn](A,t,i){if(i.has(A)){k("XFA - Cycle detected in prototypes use.");return}!this[P]&&A[P]&&(this[P]=A[P]),new Set(i).add(A);for(let a of this[FE](A[ca]))this[a]=A[a],this[ca]&&this[ca].add(a);for(let a of Object.getOwnPropertyNames(this)){if(this[P0].has(a))continue;let n=this[a],r=A[a];if(n instanceof b){for(let g of n[vA])g[Ia](t,i);for(let g=n[vA].length,o=r[vA].length;gJ[Ro](t)):typeof A=="object"&&A!==null?Object.assign({},A):A}[Tt](){let A=Object.create(Object.getPrototypeOf(this));for(let t of Object.getOwnPropertySymbols(this))try{A[t]=this[t]}catch(i){nA(A,t,this[t])}A[$A]=`${A[XA]}${mc++}`,A[vA]=[];for(let t of Object.getOwnPropertyNames(this)){if(this[P0].has(t)){A[t]=J[Ro](this[t]);continue}let i=this[t];A[t]=i instanceof b?new b(i[Ca]):null}for(let t of this[vA]){let i=t[XA],s=t[Tt]();A[vA].push(s),s[Rt]=A,A[i]===null?A[i]=s:A[i][vA].push(s)}return A}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[to](A){return this[A]}[Wa](A,t,i=!0){return Array.from(this[da](A,t,i))}*[da](A,t,i=!0){if(A==="parent"){yield this[Rt];return}for(let s of this[vA])s[XA]===A&&(yield s),s.name===A&&(yield s),(t||s[Za]())&&(yield*s[da](A,t,!1));i&&this[P0].has(A)&&(yield new Xa(this,A,this[A]))}},b=class{constructor(A=1/0){this[Ca]=A,this[vA]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(A){return this[vA].length<=this[Ca]?(this[vA].push(A),!0):(k(`XFA - node "${A[XA]}" accepts no more than ${this[Ca]} children`),!1)}isEmpty(){return this[vA].length===0}dump(){return this[vA].length===1?this[vA][0][Js]():this[vA].map(A=>A[Js]())}[Tt](){let A=new b(this[Ca]);return A[vA]=this[vA].map(t=>t[Tt]()),A}get children(){return this[vA]}clear(){this[vA].length=0}},Xa=class{constructor(A,t,i){this[Rt]=A,this[XA]=t,this[P]=i,this[$t]=!1,this[$A]=`attribute${mc++}`}[MA](){return this[Rt]}[rs](){return!0}[u1](){return this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Se](){return this[P]}[Mi](A){return this[Rt]===A||this[Rt][Mi](A)}},Jt=class extends J{constructor(A,t,i={}){if(super(A,t),this[P]="",this[Si]=null,t!=="#text"){let s=new Map;this[a0]=s;for(let[a,n]of Object.entries(i))s.set(a,new Xa(this,a,n));if(i.hasOwnProperty(qi)){let a=i[qi].xfa.dataNode;a!==void 0&&(a==="dataGroup"?this[Si]=!1:a==="dataValue"&&(this[Si]=!0))}}this[$t]=!1}[pa](A){let t=this[XA];if(t==="#text"){A.push(ls(this[P]));return}let i=Yo(t),s=this[de]===Xf?"xfa:":"";A.push(`<${s}${i}`);for(let[a,n]of this[a0].entries()){let r=Yo(a);A.push(` ${r}="${ls(n[P])}"`)}if(this[Si]!==null&&(this[Si]?A.push(\' xfa:dataNode="dataValue"\'):A.push(\' xfa:dataNode="dataGroup"\')),!this[P]&&this[vA].length===0){A.push("/>");return}if(A.push(">"),this[P])typeof this[P]=="string"?A.push(ls(this[P])):this[P][pa](A);else for(let a of this[vA])a[pa](A);A.push(``)}[ni](A){if(this[P]){let t=new Jt(this[de],"#text");this[Be](t),t[P]=this[P],this[P]=""}return this[Be](A),!0}[xi](A){this[P]+=A}[se](){if(this[P]&&this[vA].length>0){let A=new Jt(this[de],"#text");this[Be](A),A[P]=this[P],delete this[P]}}[SA](){return this[XA]==="#text"?dA.success({name:"#text",value:this[P]}):dA.EMPTY}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[Tf](){return this[a0]}[to](A){let t=this[a0].get(A);return t!==void 0?t:this[Ue](A)}*[da](A,t){let i=this[a0].get(A);i&&(yield i);for(let s of this[vA])s[XA]===A&&(yield s),t&&(yield*s[da](A,t))}*[Bc](A,t){let i=this[a0].get(A);i&&(!t||!i[$t])&&(yield i);for(let s of this[vA])yield*s[Bc](A,t)}*[xa](A,t,i){for(let s of this[vA])s[XA]===A&&(!i||!s[$t])&&(yield s),t&&(yield*s[xa](A,t,i))}[rs](){return this[Si]===null?this[vA].length===0||this[vA][0][de]===me.xhtml.id:this[Si]}[u1](){return this[Si]===null?this[vA].length===0?this[P].trim():this[vA][0][de]===me.xhtml.id?this[vA][0][Se]().trim():null:this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Js](A=!1){let t=Object.create(null);A&&(t.$ns=this[de]),this[P]&&(t.$content=this[P]),t.$name=this[XA],t.children=[];for(let i of this[vA])t.children.push(i[Js](A));t.attributes=Object.create(null);for(let[i,s]of this[a0])t.attributes[i]=s[P];return t}},ce=class extends J{constructor(A,t){super(A,t),this[P]=""}[xi](A){this[P]+=A}[se](){}},_A=class extends ce{constructor(A,t,i){super(A,t),this[jn]=i}[se](){this[P]=so({data:this[P],defaultValue:this[jn][0],validate:A=>this[jn].includes(A)})}[Yt](A){super[Yt](A),delete this[jn]}},qA=class extends ce{[se](){this[P]=this[P].trim()}},yt=class extends ce{constructor(A,t,i,s){super(A,t),this[No]=i,this[Mo]=s}[se](){this[P]=GA({data:this[P],defaultValue:this[No],validate:this[Mo]})}[Yt](A){super[Yt](A),delete this[No],delete this[Mo]}},pe=class extends yt{constructor(A,t){super(A,t,0,i=>i===1)}},$r=class extends yt{constructor(A,t){super(A,t,1,i=>i===0)}};function NA(e){return typeof e=="string"?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}var RE={anchorType(e,A){let t=e[xe]();if(!(!t||t.layout&&t.layout!=="position"))switch("transform"in A||(A.transform=""),e.anchorType){case"bottomCenter":A.transform+="translate(-50%, -100%)";break;case"bottomLeft":A.transform+="translate(0,-100%)";break;case"bottomRight":A.transform+="translate(-100%,-100%)";break;case"middleCenter":A.transform+="translate(-50%,-50%)";break;case"middleLeft":A.transform+="translate(0,-50%)";break;case"middleRight":A.transform+="translate(-100%,-50%)";break;case"topCenter":A.transform+="translate(-50%,0)";break;case"topRight":A.transform+="translate(-100%,0)";break}},dimensions(e,A){var a;let t=e[xe](),i=e.w,s=e.h;if((a=t.layout)!=null&&a.includes("row")){let n=t[L],r=e.colSpan,g;r===-1?(g=n.columnWidths.slice(n.currentColumn).reduce((o,I)=>o+I,0),n.currentColumn=0):(g=n.columnWidths.slice(n.currentColumn,n.currentColumn+r).reduce((o,I)=>o+I,0),n.currentColumn=(n.currentColumn+e.colSpan)%n.columnWidths.length),isNaN(g)||(i=e.w=g)}A.width=i!==""?NA(i):"auto",A.height=s!==""?NA(s):"auto"},position(e,A){let t=e[xe]();t!=null&&t.layout&&t.layout!=="position"||(A.position="absolute",A.left=NA(e.x),A.top=NA(e.y))},rotate(e,A){e.rotate&&("transform"in A||(A.transform=""),A.transform+=`rotate(-${e.rotate}deg)`,A.transformOrigin="top left")},presence(e,A){switch(e.presence){case"invisible":A.visibility="hidden";break;case"hidden":case"inactive":A.display="none";break}},hAlign(e,A){if(e[XA]==="para")switch(e.hAlign){case"justifyAll":A.textAlign="justify-all";break;case"radix":A.textAlign="left";break;default:A.textAlign=e.hAlign}else switch(e.hAlign){case"left":A.alignSelf="start";break;case"center":A.alignSelf="center";break;case"right":A.alignSelf="end";break}},margin(e,A){e.margin&&(A.margin=e.margin[ZA]().margin)}};function Vf(e,A){e[xe]().layout==="position"&&(e.minW>0&&(A.minWidth=NA(e.minW)),e.maxW>0&&(A.maxWidth=NA(e.maxW)),e.minH>0&&(A.minHeight=NA(e.minH)),e.maxH>0&&(A.maxHeight=NA(e.maxH)))}function NE(e,A,t,i,s,a){let n=new xc(A,t,i,s);return typeof e=="string"?n.addString(e):e[ri](n),n.compute(a)}function m1(e,A){let t=null,i=null,s=!1;if((!e.w||!e.h)&&e.value){let a=0,n=0;e.margin&&(a=e.margin.leftInset+e.margin.rightInset,n=e.margin.topInset+e.margin.bottomInset);let r=null,g=null;e.para&&(g=Object.create(null),r=e.para.lineHeight===""?null:e.para.lineHeight,g.top=e.para.spaceAbove===""?0:e.para.spaceAbove,g.bottom=e.para.spaceBelow===""?0:e.para.spaceBelow,g.left=e.para.marginLeft===""?0:e.para.marginLeft,g.right=e.para.marginRight===""?0:e.para.marginRight);let o=e.font;if(!o){let l=e[ue](),h=e[MA]();for(;h&&h!==l;){if(h.font){o=h.font;break}h=h[MA]()}}let I=(e.w||A.width)-a,c=e[ie].fontFinder;if(e.value.exData&&e.value.exData[P]&&e.value.exData.contentType==="text/html"){let l=NE(e.value.exData[P],o,g,r,c,I);i=l.width,t=l.height,s=l.isBroken}else{let l=e.value[Se]();if(l){let h=NE(l,o,g,r,c,I);i=h.width,t=h.height,s=h.isBroken}}i!==null&&!e.w&&(i+=a),t!==null&&!e.h&&(t+=n)}return{w:i,h:t,isBroken:s}}function _f(e,A,t){let i;if(e.w!==""&&e.h!=="")i=[e.x,e.y,e.w,e.h];else{if(!t)return null;let s=e.w;if(s===""){if(e.maxW===0){let n=e[xe]();s=n.layout==="position"&&n.w!==""?0:e.minW}else s=Math.min(e.maxW,t.width);A.attributes.style.width=NA(s)}let a=e.h;if(a===""){if(e.maxH===0){let n=e[xe]();a=n.layout==="position"&&n.h!==""?0:e.minH}else a=Math.min(e.maxH,t.height);A.attributes.style.height=NA(a)}i=[e.x,e.y,s,a]}return i}function ao(e){var t;let A=e[xe]();if((t=A.layout)!=null&&t.includes("row")){let i=A[L],s=e.colSpan,a;s===-1?a=i.columnWidths.slice(i.currentColumn).reduce((n,r)=>n+r,0):a=i.columnWidths.slice(i.currentColumn,i.currentColumn+s).reduce((n,r)=>n+r,0),isNaN(a)||(e.w=a)}A.layout&&A.layout!=="position"&&(e.x=e.y=0),e.layout==="table"&&e.w===""&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce((i,s)=>i+s,0))}function zf(e){switch(e.layout){case"position":return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb";default:return"xfaPosition"}}function lt(e,...A){let t=Object.create(null);for(let i of A){let s=e[i];if(s!==null){if(RE.hasOwnProperty(i)){RE[i](e,t);continue}if(s instanceof J){let a=s[ZA]();a?Object.assign(t,a):k(`(DEBUG) - XFA - style for ${i} not implemented yet`)}}}return t}function m0(e,A){let{attributes:t}=A,{style:i}=t,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(t.class.push("xfaWrapped"),e.border){let{widths:a,insets:n}=e.border[L],r,g,o=n[0],I=n[3],c=n[0]+n[2],l=n[1]+n[3];switch(e.border.hand){case"even":o-=a[0]/2,I-=a[3]/2,r=`calc(100% + ${(a[1]+a[3])/2-l}px)`,g=`calc(100% + ${(a[0]+a[2])/2-c}px)`;break;case"left":o-=a[0],I-=a[3],r=`calc(100% + ${a[1]+a[3]-l}px)`,g=`calc(100% + ${a[0]+a[2]-c}px)`;break;case"right":r=l?`calc(100% - ${l}px)`:"100%",g=c?`calc(100% - ${c}px)`:"100%";break}let h=["xfaBorder"];Vs(e.border)&&h.push("xfaPrintOnly");let C={name:"div",attributes:{class:h,style:{top:`${o}px`,left:`${I}px`,width:r,height:g}},children:[]};for(let B of["border","borderWidth","borderColor","borderRadius","borderStyle"])i[B]!==void 0&&(C.attributes.style[B]=i[B],delete i[B]);s.children.push(C,A)}else s.children.push(A);for(let a of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])i[a]!==void 0&&(s.attributes.style[a]=i[a],delete i[a]);return s.attributes.style.position=i.position==="absolute"?"absolute":"relative",delete i.position,i.alignSelf&&(s.attributes.style.alignSelf=i.alignSelf,delete i.alignSelf),s}function $f(e){let A=hA(e.textIndent,"0px");if(A>=0)return;let i="padding"+((e.textAlign==="right"?"right":"left")==="left"?"Left":"Right"),s=hA(e[i],"0px");e[i]=`${s-A}px`}function p1(e,A){switch(e.access){case"nonInteractive":A.push("xfaNonInteractive");break;case"readOnly":A.push("xfaReadOnly");break;case"protected":A.push("xfaDisabled");break}}function Vs(e){return e.relevant.length>0&&!e.relevant[0].excluded&&e.relevant[0].viewname==="print"}function Au(e){let A=e[ue]()[L].paraStack;return A.length?A.at(-1):null}function eu(e,A,t){var i;if((i=t.attributes.class)!=null&&i.includes("xfaRich")){A&&(e.h===""&&(A.height="auto"),e.w===""&&(A.width="auto"));let s=Au(e);if(s){let a=t.attributes.style;switch(a.display="flex",a.flexDirection="column",s.vAlign){case"top":a.justifyContent="start";break;case"bottom":a.justifyContent="end";break;case"middle":a.justifyContent="center";break}let n=s[ZA]();for(let[r,g]of Object.entries(n))r in a||(a[r]=g)}}}function tu(e,A,t,i){if(!t){delete i.fontFamily;return}let s=io(e.typeface);i.fontFamily=`"${s}"`;let a=t.find(s);if(a){let{fontFamily:n}=a.regular.cssFontInfo;n!==s&&(i.fontFamily=`"${n}"`);let r=Au(A);if(r&&r.lineHeight!==""||i.lineHeight)return;let g=x1(e,a);g&&(i.lineHeight=Math.max(1.2,g.lineHeight))}}function iu(e){let A=Qr(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return A?A.href:null}function su(e,A){return{name:"div",attributes:{class:[e.layout==="lr-tb"?"xfaLr":"xfaRl"]},children:A}}function au(e){if(!e[L])return null;let t={name:"div",attributes:e[L].attributes,children:e[L].children};if(e[L].failingNode){let i=e[L].failingNode[wn]();i&&(e.layout.endsWith("-tb")?t.children.push(su(e,[i])):t.children.push(i))}return t.children.length===0?null:t}function nu(e,A,t){let i=e[L],s=i.availableSpace,[a,n,r,g]=t;switch(e.layout){case"position":{i.width=Math.max(i.width,a+r),i.height=Math.max(i.height,n+g),i.children.push(A);break}case"lr-tb":case"rl-tb":(!i.line||i.attempt===1)&&(i.line=su(e,[]),i.children.push(i.line),i.numberInLine=0),i.numberInLine+=1,i.line.children.push(A),i.attempt===0?(i.currentWidth+=r,i.height=Math.max(i.height,i.prevHeight+g)):(i.currentWidth=r,i.prevHeight=i.height,i.height+=g,i.attempt=0),i.width=Math.max(i.width,i.currentWidth);break;case"rl-row":case"row":{i.children.push(A),i.width+=r,i.height=Math.max(i.height,g);let o=NA(i.height);for(let I of i.children)I.attributes.style.height=o;break}case"table":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}case"tb":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}}}function ru(e){let A=e[L].availableSpace,t=e.margin?e.margin.topInset+e.margin.bottomInset:0,i=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return e[L].attempt===0?{width:A.width-i-e[L].currentWidth,height:A.height-t-e[L].prevHeight}:{width:A.width-i,height:A.height-t-e[L].height};case"rl-row":case"row":return{width:e[L].columnWidths.slice(e[L].currentColumn).reduce((a,n)=>a+n),height:A.height-i};case"table":case"tb":return{width:A.width-i,height:A.height-t-e[L].height};case"position":default:return A}}function tx(e){let A=e.w===""?NaN:e.w,t=e.h===""?NaN:e.h,[i,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[i,s]=[A/2,t];break;case"bottomLeft":[i,s]=[0,t];break;case"bottomRight":[i,s]=[A,t];break;case"middleCenter":[i,s]=[A/2,t/2];break;case"middleLeft":[i,s]=[0,t/2];break;case"middleRight":[i,s]=[A,t/2];break;case"topCenter":[i,s]=[A/2,0];break;case"topRight":[i,s]=[A,0];break}let a,n;switch(e.rotate||0){case 0:[a,n]=[-i,-s];break;case 90:[a,n]=[-s,i],[A,t]=[t,-A];break;case 180:[a,n]=[i,s],[A,t]=[-A,-t];break;case 270:[a,n]=[s,-i],[A,t]=[-t,A];break}return[e.x+a+Math.min(0,A),e.y+n+Math.min(0,t),Math.abs(A),Math.abs(t)]}function no(e,A){var g;if(e[ue]()[L].firstUnsplittable===null||e.w===0||e.h===0)return!0;let t=2,i=e[xe](),s=((g=i[L])==null?void 0:g.attempt)||0,[,a,n,r]=tx(e);switch(i.layout){case"lr-tb":case"rl-tb":return s===0?e[ue]()[L].noLayoutFailure?e.w!==""?Math.round(n-A.width)<=t:A.width>t:e.h!==""&&Math.round(r-A.height)>t?!1:e.w!==""?Math.round(n-A.width)<=t?!0:i[L].numberInLine===0?A.height>t:!1:A.width>t:e[ue]()[L].noLayoutFailure?!0:e.h!==""&&Math.round(r-A.height)>t?!1:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"table":case"tb":return e[ue]()[L].noLayoutFailure?!0:e.h!==""&&!e[di]()?Math.round(r-A.height)<=t:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"position":if(e[ue]()[L].noLayoutFailure||e.h===""||Math.round(r+a-A.height)<=t)return!0;let o=e[ue]()[L].currentContentArea;return r+a>o.h;case"rl-row":case"row":return e[ue]()[L].noLayoutFailure?!0:e.h!==""?Math.round(r-A.height)<=t:!0;default:return!0}}var eA=me.template.id,p0="http://www.w3.org/2000/svg",Ag=2,ix=3,sx=5e3,ax=/^H(\\d+)$/,nx=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),rx=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function GE(e){if(!e||!e.border)return{w:0,h:0};let A=e.border[We]();return A?{w:A.widths[0]+A.widths[2]+A.insets[0]+A.insets[2],h:A.widths[1]+A.widths[3]+A.insets[1]+A.insets[3]}:{w:0,h:0}}function w1(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function y1(e,A){if(!e.value){let t=new an({});e[Be](t),e.value=t}e.value[Et](A)}function*b1(e){for(let A of e[Ue]()){if(A instanceof en){yield*A[Ys]();continue}yield A}}function yn(e){var A;return((A=e.validate)==null?void 0:A.nullTest)==="error"}function ro(e){for(;e;){if(!e.traversal){e[qt]=e[MA]()[qt];return}if(e[qt])return;let A=null;for(let s of e.traversal[Ue]())if(s.operation==="next"){A=s;break}if(!A||!A.ref){e[qt]=e[MA]()[qt];return}let t=e[ue]();e[qt]=++t[qt];let i=t[Bi](A.ref,e);if(!i)return;e=i[0]}}function go(e,A){var i;let t=e.assist;if(t){let s=t[SA]();s&&(A.title=s);let n=t.role.match(ax);if(n){let r="heading",g=n[1];A.role=r,A["aria-level"]=g}}if(e.layout==="table")A.role="table";else if(e.layout==="row")A.role="row";else{let s=e[MA]();s.layout==="row"&&(A.role=((i=s.assist)==null?void 0:i.role)==="TH"?"columnheader":"cell")}}function N0(e){if(!e.assist)return null;let A=e.assist;return A.speak&&A.speak[P]!==""?A.speak[P]:A.toolTip?A.toolTip[P]:null}function A0(e){return dA.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function oo(e){let A=e[ue]();A[L].firstUnsplittable===null&&(A[L].firstUnsplittable=e,A[L].noLayoutFailure=!0)}function Io(e){let A=e[ue]();A[L].firstUnsplittable===e&&(A[L].noLayoutFailure=!1)}function UE(e){if(e[L]||(e[L]=Object.create(null),e.targetType==="auto"))return!1;let A=e[ue](),t=null;if(e.target){if(t=A[Bi](e.target,e[MA]()),!t)return!1;t=t[0]}let{currentPageArea:i,currentContentArea:s}=A[L];if(e.targetType==="pageArea")return t instanceof zi||(t=null),e.startNew?(e[L].target=t||i,!0):t&&t!==i?(e[L].target=t,!0):!1;t instanceof _a||(t=null);let a=t&&t[MA](),n,r=a;if(e.startNew)if(t){let g=a.contentArea.children,o=g.indexOf(s),I=g.indexOf(t);o!==-1&&oe,i[L].noLayoutFailure=!0;let n=A[SA](t);e[d0](n.html,n.bbox),i[L].noLayoutFailure=s,A[xe]=a}var pc=class extends qA{constructor(A){super(eA,"appearanceFilter"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},eg=class extends J{constructor(A){super(eA,"arc",!0),this.circular=GA({data:A.circular,defaultValue:0,validate:t=>t===1}),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.startAngle=_r({data:A.startAngle,defaultValue:0,validate:t=>!0}),this.sweepAngle=_r({data:A.sweepAngle,defaultValue:360,validate:t=>!0}),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null,this.fill=null}[SA](){var g;let A=this.edge||new G0({}),t=A[ZA](),i=Object.create(null);((g=this.fill)==null?void 0:g.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let s,a={xmlns:p0,style:{width:"100%",height:"100%",overflow:"visible"}};if(this.sweepAngle===360)s={name:"ellipse",attributes:{xmlns:p0,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:i}};else{let o=this.startAngle*Math.PI/180,I=this.sweepAngle*Math.PI/180,c=this.sweepAngle>180?1:0,[l,h,C,B]=[50*(1+Math.cos(o)),50*(1-Math.sin(o)),50*(1+Math.cos(o+I)),50*(1-Math.sin(o+I))];s={name:"path",attributes:{xmlns:p0,d:`M ${l} ${h} A 50 50 0 ${c} 0 ${C} ${B}`,vectorEffect:"non-scaling-stroke",style:i}},Object.assign(a,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}let n={name:"svg",children:[s],attributes:a},r=this[MA]()[MA]();return w1(r)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]}):(n.attributes.style.position="absolute",dA.success(n))}},wc=class extends J{constructor(A){super(eA,"area",!0),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null,this.area=new b,this.draw=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[Za](){return!0}[J0](){return!0}[d0](A,t){let[i,s,a,n]=t;this[L].width=Math.max(this[L].width,i+a),this[L].height=Math.max(this[L].height,s+n),this[L].children.push(A)}[x0](){return this[L].availableSpace}[SA](A){let t=lt(this,"position"),i={style:t,id:this[$A],class:["xfaArea"]};Vs(this)&&i.class.push("xfaPrintOnly"),this.name&&(i.xfaName=this.name);let s=[];this[L]={children:s,width:0,height:0,availableSpace:A};let a=this[_i]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!a.success)return a.isBreak()?a:(delete this[L],dA.FAILURE);t.width=NA(this[L].width),t.height=NA(this[L].height);let n={name:"div",attributes:i,children:s},r=[this.x,this.y,this[L].width,this[L].height];return delete this[L],dA.success(n,r)}},yc=class extends J{constructor(A){super(eA,"assist",!0),this.id=A.id||"",this.role=A.role||"",this.use=A.use||"",this.usehref=A.usehref||"",this.speak=null,this.toolTip=null}[SA](){var A;return((A=this.toolTip)==null?void 0:A[P])||null}},bc=class extends J{constructor(A){super(eA,"barcode",!0),this.charEncoding=so({data:A.charEncoding?A.charEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.checksum=O(A.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),this.dataColumnCount=GA({data:A.dataColumnCount,defaultValue:-1,validate:t=>t>=0}),this.dataLength=GA({data:A.dataLength,defaultValue:-1,validate:t=>t>=0}),this.dataPrep=O(A.dataPrep,["none","flateCompress"]),this.dataRowCount=GA({data:A.dataRowCount,defaultValue:-1,validate:t=>t>=0}),this.endChar=A.endChar||"",this.errorCorrectionLevel=GA({data:A.errorCorrectionLevel,defaultValue:-1,validate:t=>t>=0&&t<=8}),this.id=A.id||"",this.moduleHeight=hA(A.moduleHeight,"5mm"),this.moduleWidth=hA(A.moduleWidth,"0.25mm"),this.printCheckDigit=GA({data:A.printCheckDigit,defaultValue:0,validate:t=>t===1}),this.rowColumnRatio=bE(A.rowColumnRatio),this.startChar=A.startChar||"",this.textLocation=O(A.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),this.truncate=GA({data:A.truncate,defaultValue:0,validate:t=>t===1}),this.type=O(A.type?A.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),this.upsMode=O(A.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),this.use=A.use||"",this.usehref=A.usehref||"",this.wideNarrowRatio=bE(A.wideNarrowRatio),this.encrypt=null,this.extras=null}},Dc=class extends J{constructor(A){super(eA,"bind",!0),this.match=O(A.match,["once","dataRef","global","none"]),this.ref=A.ref||"",this.picture=null}},Va=class extends J{constructor(A){super(eA,"bindItems"),this.connection=A.connection||"",this.labelRef=A.labelRef||"",this.ref=A.ref||"",this.valueRef=A.valueRef||""}},kc=class extends J{constructor(A){super(eA,"bookend"),this.id=A.id||"",this.leader=A.leader||"",this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||""}},Sc=class extends pe{constructor(A){super(eA,"boolean"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[SA](A){return A0(this[P]===1?"1":"0")}},tg=class extends J{constructor(A){super(eA,"border",!0),this.break=O(A.break,["close","open"]),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.extras=null,this.fill=null,this.margin=null}[We](){if(!this[L]){let A=this.edge.children.slice();if(A.length<4){let s=A.at(-1)||new G0({});for(let a=A.length;a<4;a++)A.push(s)}let t=A.map(s=>s.thickness),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[L]={widths:t,insets:i,edges:A}}return this[L]}[ZA](){var s;let{edges:A}=this[We](),t=A.map(a=>{let n=a[ZA]();return n.color||(n.color="#000000"),n}),i=Object.create(null);if(this.margin&&Object.assign(i,this.margin[ZA]()),((s=this.fill)==null?void 0:s.presence)==="visible"&&Object.assign(i,this.fill[ZA]()),this.corner.children.some(a=>a.radius!==0)){let a=this.corner.children.map(n=>n[ZA]());if(a.length===2||a.length===3){let n=a.at(-1);for(let r=a.length;r<4;r++)a.push(n)}i.borderRadius=a.map(n=>n.radius).join(" ")}switch(this.presence){case"invisible":case"hidden":i.borderStyle="";break;case"inactive":i.borderStyle="none";break;default:i.borderStyle=t.map(a=>a.style).join(" ");break}return i.borderWidth=t.map(a=>a.width).join(" "),i.borderColor=t.map(a=>a.color).join(" "),i}},Fc=class extends J{constructor(A){super(eA,"break",!0),this.after=O(A.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.afterTarget=A.afterTarget||"",this.before=O(A.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.beforeTarget=A.beforeTarget||"",this.bookendLeader=A.bookendLeader||"",this.bookendTrailer=A.bookendTrailer||"",this.id=A.id||"",this.overflowLeader=A.overflowLeader||"",this.overflowTarget=A.overflowTarget||"",this.overflowTrailer=A.overflowTrailer||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},ig=class extends J{constructor(A){super(eA,"breakAfter",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}},sg=class extends J{constructor(A){super(eA,"breakBefore",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}[SA](A){return this[L]={},dA.FAILURE}},Rc=class extends J{constructor(A){super(eA,"button",!0),this.highlight=O(A.highlight,["inverted","none","outline","push"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[SA](A){let i=this[MA]()[MA](),s={name:"button",attributes:{id:this[$A],class:["xfaButton"],style:{}},children:[]};for(let a of i.event.children){if(a.activity!=="click"||!a.script)continue;let n=zE(a.script[P]);if(!n)continue;let r=iu(n.url);r&&s.children.push({name:"a",attributes:{id:"link"+this[$A],href:r,newWindow:n.newWindow,class:["xfaLink"],style:{}},children:[]})}return dA.success(s)}},Nc=class extends J{constructor(A){super(eA,"calculate",!0),this.id=A.id||"",this.override=O(A.override,["disabled","error","ignore","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.script=null}},Gc=class extends J{constructor(A){super(eA,"caption",!0),this.id=A.id||"",this.placement=O(A.placement,["left","bottom","inline","right","top"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.reserve=Math.ceil(hA(A.reserve)),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.font=null,this.margin=null,this.para=null,this.value=null}[Et](A){y1(this,A)}[We](A){if(!this[L]){let{width:t,height:i}=A;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":i=this.reserve<=0?i:this.reserve;break}this[L]=m1(this,{width:t,height:i})}return this[L]}[SA](A){if(!this.value)return dA.EMPTY;this[Xs]();let t=this.value[SA](A).html;if(!t)return this[Bt](),dA.EMPTY;let i=this.reserve;if(this.reserve<=0){let{w:n,h:r}=this[We](A);switch(this.placement){case"left":case"right":case"inline":this.reserve=n;break;case"top":case"bottom":this.reserve=r;break}}let s=[];typeof t=="string"?s.push({name:"#text",value:t}):s.push(t);let a=lt(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(a.width=NA(this.reserve));break;case"top":case"bottom":this.reserve>0&&(a.height=NA(this.reserve));break}return eu(this,null,t),this[Bt](),this.reserve=i,dA.success({name:"div",attributes:{style:a,class:["xfaCaption"]},children:s})}},Uc=class extends qA{constructor(A){super(eA,"certificate"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Mc=class extends J{constructor(A){super(eA,"certificates",!0),this.credentialServerPolicy=O(A.credentialServerPolicy,["optional","required"]),this.id=A.id||"",this.url=A.url||"",this.urlPolicy=A.urlPolicy||"",this.use=A.use||"",this.usehref=A.usehref||"",this.encryption=null,this.issuers=null,this.keyUsage=null,this.oids=null,this.signing=null,this.subjectDNs=null}},ag=class extends J{constructor(A){super(eA,"checkButton",!0),this.id=A.id||"",this.mark=O(A.mark,["default","check","circle","cross","diamond","square","star"]),this.shape=O(A.shape,["square","round"]),this.size=hA(A.size,"10pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var Q,E,f;let t=lt("margin"),i=NA(this.size);t.width=t.height=i;let s,a,n,r=this[MA]()[MA](),g=r.items.children.length&&r.items.children[0][SA]().html||[],o={on:(g[0]!==void 0?g[0]:"on").toString(),off:(g[1]!==void 0?g[1]:"off").toString()},c=(((Q=r.value)==null?void 0:Q[Se]())||"off")===o.on||void 0,l=r[xe](),h=r[$A],C;l instanceof og?(n=l[$A],s="radio",a="xfaRadio",C=((E=l[Ht])==null?void 0:E[$A])||l[$A]):(s="checkbox",a="xfaCheckbox",C=((f=r[Ht])==null?void 0:f[$A])||r[$A]);let B={name:"input",attributes:{class:[a],style:t,fieldId:h,dataId:C,type:s,checked:c,xfaOn:o.on,xfaOff:o.off,"aria-label":N0(r),"aria-required":!1}};return n&&(B.attributes.name=n),yn(r)&&(B.attributes["aria-required"]=!0,B.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[B]})}},ng=class extends J{constructor(A){super(eA,"choiceList",!0),this.commitOn=O(A.commitOn,["select","exit"]),this.id=A.id||"",this.open=O(A.open,["userControl","always","multiSelect","onEntry"]),this.textEntry=GA({data:A.textEntry,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var o,I,c;let t=lt(this,"border","margin"),s=this[MA]()[MA](),n={fontSize:`calc(${((o=s.font)==null?void 0:o.size)||10}px * var(--scale-factor))`},r=[];if(s.items.children.length>0){let l=s.items,h=0,C=0;l.children.length===2&&(h=l.children[0].save,C=1-h);let B=l.children[h][SA]().html,Q=l.children[C][SA]().html,E=!1,f=((I=s.value)==null?void 0:I[Se]())||"";for(let u=0,d=B.length;ut>=0}),this.use=A.use||"",this.usehref=A.usehref||""}},Jc=class extends J{constructor(A){super(eA,"connect",!0),this.connection=A.connection||"",this.id=A.id||"",this.ref=A.ref||"",this.usage=O(A.usage,["exportAndImport","exportOnly","importOnly"]),this.use=A.use||"",this.usehref=A.usehref||"",this.picture=null}},_a=class extends J{constructor(A){super(eA,"contentArea",!0),this.h=hA(A.h),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=hA(A.w),this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null}[SA](A){let t=NA(this.x),i=NA(this.y),s={left:t,top:i,width:NA(this.w),height:NA(this.h)},a=["xfaContentarea"];return Vs(this)&&a.push("xfaPrintOnly"),dA.success({name:"div",children:[],attributes:{style:s,class:a,id:this[$A]}})}},rg=class extends J{constructor(A){super(eA,"corner",!0),this.id=A.id||"",this.inverted=GA({data:A.inverted,defaultValue:0,validate:t=>t===1}),this.join=O(A.join,["square","round"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.radius=hA(A.radius),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");return A.radius=NA(this.join==="square"?0:this.radius),A}},Yc=class extends ce{constructor(A){super(eA,"date"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Kc=class extends ce{constructor(A){super(eA,"dateTime"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},vc=class extends J{constructor(A){super(eA,"dateTimeEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.picker=O(A.picker,["host","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},qc=class extends ce{constructor(A){super(eA,"decimal"),this.fracDigits=GA({data:A.fracDigits,defaultValue:2,validate:t=>!0}),this.id=A.id||"",this.leadDigits=GA({data:A.leadDigits,defaultValue:-1,validate:t=>!0}),this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Tc=class extends J{constructor(A){super(eA,"defaultUi",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Pc=class extends J{constructor(A){super(eA,"desc",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},Wc=class extends _A{constructor(A){super(eA,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Oc=class extends J{constructor(A){super(eA,"digestMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.digestMethod=new b}},gg=class extends J{constructor(A){super(eA,"draw",!0),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.border=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.value=null,this.setProperty=new b}[Et](A){y1(this,A)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;ao(this),this[Xs]();let t=this.w,i=this.h,{w:s,h:a,isBroken:n}=m1(this,A);if(s&&this.w===""){if(n&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;this.w=s}if(a&&this.h===""&&(this.h=a),oo(this),!no(this,A))return this.w=t,this.h=i,this[Bt](),dA.FAILURE;Io(this);let r=lt(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");Vf(this,r),r.margin&&(r.padding=r.margin,delete r.margin);let g=["xfaDraw"];this.font&&g.push("xfaFont"),Vs(this)&&g.push("xfaPrintOnly");let o={style:r,id:this[$A],class:g};this.name&&(o.xfaName=this.name);let I={name:"div",attributes:o,children:[]};go(this,o);let c=_f(this,I,A),l=this.value?this.value[SA](A).html:null;return l===null?(this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c)):(I.children.push(l),eu(this,r,l),this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c))}},G0=class extends J{constructor(A){super(eA,"edge",!0),this.cap=O(A.cap,["square","butt","round"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");if(Object.assign(A,{linecap:this.cap,width:NA(this.thickness),color:this.color?this.color[ZA]():"#000000",style:""}),this.presence!=="visible")A.style="none";else switch(this.stroke){case"solid":A.style="solid";break;case"dashDot":A.style="dashed";break;case"dashDotDot":A.style="dashed";break;case"dashed":A.style="dashed";break;case"dotted":A.style="dotted";break;case"embossed":A.style="ridge";break;case"etched":A.style="groove";break;case"lowered":A.style="inset";break;case"raised":A.style="outset";break}return A}},Zc=class extends _A{constructor(A){super(eA,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},jc=class extends J{constructor(A){super(eA,"encodings",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encoding=new b}},Xc=class extends J{constructor(A){super(eA,"encrypt",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=null}},Vc=class extends J{constructor(A){super(eA,"encryptData",!0),this.id=A.id||"",this.operation=O(A.operation,["encrypt","decrypt"]),this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},_c=class extends J{constructor(A){super(eA,"encryption",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},zc=class extends _A{constructor(A){super(eA,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},$c=class extends J{constructor(A){super(eA,"encryptionMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encryptionMethod=new b}},Al=class extends J{constructor(A){super(eA,"event",!0),this.activity=O(A.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),this.id=A.id||"",this.listen=O(A.listen,["refOnly","refAndDescendents"]),this.name=A.name||"",this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.encryptData=null,this.execute=null,this.script=null,this.signData=null,this.submit=null}},el=class extends ce{constructor(A){super(eA,"exData"),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.maxLength=GA({data:A.maxLength,defaultValue:-1,validate:t=>t>=-1}),this.name=A.name||"",this.rid=A.rid||"",this.transferEncoding=O(A.transferEncoding,["none","base64","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[d1](){return this.contentType==="text/html"}[ni](A){return this.contentType==="text/html"&&A[de]===me.xhtml.id?(this[P]=A,!0):this.contentType==="text/xml"?(this[P]=A,!0):!1}[SA](A){return this.contentType!=="text/html"||!this[P]?dA.EMPTY:this[P][SA](A)}},tl=class extends J{constructor(A){super(eA,"exObject",!0),this.archive=A.archive||"",this.classId=A.classId||"",this.codeBase=A.codeBase||"",this.codeType=A.codeType||"",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.exObject=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},og=class extends J{constructor(A){super(eA,"exclGroup",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.accessKey=A.accessKey||"",this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.margin=null,this.para=null,this.traversal=null,this.validate=null,this.connect=new b,this.event=new b,this.field=new b,this.setProperty=new b}[J0](){return!0}[Oa](){return!0}[Et](A){for(let t of this.field.children){if(!t.value){let i=new an({});t[Be](i),t.value=i}t.value[Et](A)}}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,attributes:i,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[di]();if(s||oo(this),!no(this,A))return dA.FAILURE;let a=new Set(["field"]);if(this.layout.includes("row")){let E=this[xe]().columnWidths;Array.isArray(E)&&E.length>0&&(this[L].columnWidths=E,this[L].currentColumn=0)}let n=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),r=["xfaExclgroup"],g=zf(this);g&&r.push(g),Vs(this)&&r.push("xfaPrintOnly"),i.style=n,i.class=r,this.name&&(i.xfaName=this.name),this[Xs]();let o=this.layout==="lr-tb"||this.layout==="rl-tb",I=o?Ag:1;for(;this[L].attemptt>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.format=null,this.items=new b(2),this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.validate=null,this.value=null,this.bindItems=new b,this.connect=new b,this.event=new b,this.setProperty=new b}[J0](){return!0}[Et](A){y1(this,A)}[SA](A){var E,f,u;if(ro(this),!this.ui){this.ui=new sn({}),this.ui[ie]=this[ie],this[Be](this.ui);let d;switch(this.items.children.length){case 0:d=new Bg({}),this.ui.textEdit=d;break;case 1:d=new ag({}),this.ui.checkButton=d;break;case 2:d=new ng({}),this.ui.choiceList=d;break}this.ui[Be](d)}if(!this.ui||this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;this.caption&&delete this.caption[L],this[Xs]();let t=this.caption?this.caption[SA](A).html:null,i=this.w,s=this.h,a=0,n=0;this.margin&&(a=this.margin.leftInset+this.margin.rightInset,n=this.margin.topInset+this.margin.bottomInset);let r=null;if(this.w===""||this.h===""){let d=null,x=null,p=0,m=0;if(this.ui.checkButton)p=m=this.ui.checkButton.size;else{let{w:D,h:S}=m1(this,A);D!==null?(p=D,m=S):m=_9(this.font,!0).lineNoGap}if(r=GE(this.ui[We]()),p+=r.w,m+=r.h,this.caption){let{w:D,h:S,isBroken:w}=this.caption[We](A);if(w&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;switch(d=D,x=S,this.caption.placement){case"left":case"right":case"inline":d+=p;break;case"top":case"bottom":x+=m;break}}else d=p,x=m;d&&this.w===""&&(d+=a,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1t>=1&&t<=5}),this.appearanceFilter=null,this.certificates=null,this.digestMethods=null,this.encodings=null,this.encryptionMethods=null,this.handler=null,this.lockDocument=null,this.mdp=null,this.reasons=null,this.timeStamp=null}},rl=class extends ce{constructor(A){super(eA,"float"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},gl=class extends J{constructor(A){super(eA,"font",!0),this.baselineShift=hA(A.baselineShift),this.fontHorizontalScale=_r({data:A.fontHorizontalScale,defaultValue:100,validate:t=>t>=0}),this.fontVerticalScale=_r({data:A.fontVerticalScale,defaultValue:100,validate:t=>t>=0}),this.id=A.id||"",this.kerningMode=O(A.kerningMode,["none","pair"]),this.letterSpacing=hA(A.letterSpacing,"0"),this.lineThrough=GA({data:A.lineThrough,defaultValue:0,validate:t=>t===1||t===2}),this.lineThroughPeriod=O(A.lineThroughPeriod,["all","word"]),this.overline=GA({data:A.overline,defaultValue:0,validate:t=>t===1||t===2}),this.overlinePeriod=O(A.overlinePeriod,["all","word"]),this.posture=O(A.posture,["normal","italic"]),this.size=hA(A.size,"10pt"),this.typeface=A.typeface||"Courier",this.underline=GA({data:A.underline,defaultValue:0,validate:t=>t===1||t===2}),this.underlinePeriod=O(A.underlinePeriod,["all","word"]),this.use=A.use||"",this.usehref=A.usehref||"",this.weight=O(A.weight,["normal","bold"]),this.extras=null,this.fill=null}[Yt](A){super[Yt](A),this[ie].usedTypefaces.add(this.typeface)}[ZA](){let A=lt(this,"fill"),t=A.color;return t&&(t==="#000000"?delete A.color:t.startsWith("#")||(A.background=t,A.backgroundClip="text",A.color="transparent")),this.baselineShift&&(A.verticalAlign=NA(this.baselineShift)),A.fontKerning=this.kerningMode==="none"?"none":"normal",A.letterSpacing=NA(this.letterSpacing),this.lineThrough!==0&&(A.textDecoration="line-through",this.lineThrough===2&&(A.textDecorationStyle="double")),this.overline!==0&&(A.textDecoration="overline",this.overline===2&&(A.textDecorationStyle="double")),A.fontStyle=this.posture,A.fontSize=NA(.99*this.size),tu(this,this,this[ie].fontFinder,A),this.underline!==0&&(A.textDecoration="underline",this.underline===2&&(A.textDecorationStyle="double")),A.fontWeight=this.weight,A}},ol=class extends J{constructor(A){super(eA,"format",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.picture=null}},Il=class extends qA{constructor(A){super(eA,"handler"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},cl=class extends J{constructor(A){super(eA,"hyphenation"),this.excludeAllCaps=GA({data:A.excludeAllCaps,defaultValue:0,validate:t=>t===1}),this.excludeInitialCap=GA({data:A.excludeInitialCap,defaultValue:0,validate:t=>t===1}),this.hyphenate=GA({data:A.hyphenate,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.pushCharacterCount=GA({data:A.pushCharacterCount,defaultValue:3,validate:t=>t>=0}),this.remainCharacterCount=GA({data:A.remainCharacterCount,defaultValue:3,validate:t=>t>=0}),this.use=A.use||"",this.usehref=A.usehref||"",this.wordCharacterCount=GA({data:A.wordCharacterCount,defaultValue:7,validate:t=>t>=0})}},Ig=class extends qA{constructor(A){super(eA,"image"),this.aspect=O(A.aspect,["fit","actual","height","none","width"]),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.name=A.name||"",this.transferEncoding=O(A.transferEncoding,["base64","none","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[SA](){if(this.contentType&&!nx.has(this.contentType.toLowerCase()))return dA.EMPTY;let A=this[ie].images&&this[ie].images.get(this.href);if(!A&&(this.href||!this[P])||(!A&&this.transferEncoding==="base64"&&(A=Pe(atob(this[P]))),!A))return dA.EMPTY;if(!this.contentType){for(let[a,n]of rx)if(A.length>a.length&&a.every((r,g)=>r===A[g])){this.contentType=n;break}if(!this.contentType)return dA.EMPTY}let t=new Blob([A],{type:this.contentType}),i;switch(this.aspect){case"fit":case"actual":break;case"height":i={height:"100%",objectFit:"fill"};break;case"none":i={width:"100%",height:"100%",objectFit:"fill"};break;case"width":i={width:"100%",objectFit:"fill"};break}let s=this[MA]();return dA.success({name:"img",attributes:{class:["xfaImage"],style:i,src:URL.createObjectURL(t),alt:s?N0(s[MA]()):null}})}},ll=class extends J{constructor(A){super(eA,"imageEdit",!0),this.data=O(A.data,["link","embed"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){return this.data==="embed"?dA.success({name:"div",children:[],attributes:{}}):dA.EMPTY}},hl=class extends ce{constructor(A){super(eA,"integer"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseInt(this[P].trim(),10);this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Cl=class extends J{constructor(A){super(eA,"issuers",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},$a=class extends J{constructor(A){super(eA,"items",!0),this.id=A.id||"",this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.ref=A.ref||"",this.save=GA({data:A.save,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}[SA](){let A=[];for(let t of this[Ue]())A.push(t[Se]());return dA.success(A)}},Bl=class extends J{constructor(A){super(eA,"keep",!0),this.id=A.id||"";let t=["none","contentArea","pageArea"];this.intact=O(A.intact,t),this.next=O(A.next,t),this.previous=O(A.previous,t),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Ql=class extends J{constructor(A){super(eA,"keyUsage");let t=["","yes","no"];this.crlSign=O(A.crlSign,t),this.dataEncipherment=O(A.dataEncipherment,t),this.decipherOnly=O(A.decipherOnly,t),this.digitalSignature=O(A.digitalSignature,t),this.encipherOnly=O(A.encipherOnly,t),this.id=A.id||"",this.keyAgreement=O(A.keyAgreement,t),this.keyCertSign=O(A.keyCertSign,t),this.keyEncipherment=O(A.keyEncipherment,t),this.nonRepudiation=O(A.nonRepudiation,t),this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},El=class extends J{constructor(A){super(eA,"line",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.slope=O(A.slope,["\\\\","/"]),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null}[SA](){let A=this[MA]()[MA](),t=this.edge||new G0({}),i=t[ZA](),s=Object.create(null),a=t.presence==="visible"?t.thickness:0;s.strokeWidth=NA(a),s.stroke=i.color;let n,r,g,o,I="100%",c="100%";A.w<=a?([n,r,g,o]=["50%",0,"50%","100%"],I=s.strokeWidth):A.h<=a?([n,r,g,o]=[0,"50%","100%","50%"],c=s.strokeWidth):this.slope==="\\\\"?[n,r,g,o]=[0,0,"100%","100%"]:[n,r,g,o]=[0,"100%","100%",0];let h={name:"svg",children:[{name:"line",attributes:{xmlns:p0,x1:n,y1:r,x2:g,y2:o,style:s}}],attributes:{xmlns:p0,width:I,height:c,style:{overflow:"visible"}}};return w1(A)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[h]}):(h.attributes.style.position="absolute",dA.success(h))}},fl=class extends J{constructor(A){super(eA,"linear",!0),this.id=A.id||"",this.type=O(A.type,["toRight","toBottom","toLeft","toTop"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.type.replace(/([RBLT])/," $1").toLowerCase(),i=this.color?this.color[ZA]():"#000000";return`linear-gradient(${t}, ${A}, ${i})`}},ul=class extends ce{constructor(A){super(eA,"lockDocument"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=O(this[P],["auto","0","1"])}},dl=class extends J{constructor(A){super(eA,"manifest",!0),this.action=O(A.action,["include","all","exclude"]),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.ref=new b}},xl=class extends J{constructor(A){super(eA,"margin",!0),this.bottomInset=hA(A.bottomInset,"0"),this.id=A.id||"",this.leftInset=hA(A.leftInset,"0"),this.rightInset=hA(A.rightInset,"0"),this.topInset=hA(A.topInset,"0"),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](){return{margin:NA(this.topInset)+" "+NA(this.rightInset)+" "+NA(this.bottomInset)+" "+NA(this.leftInset)}}},ml=class extends J{constructor(A){super(eA,"mdp"),this.id=A.id||"",this.permissions=GA({data:A.permissions,defaultValue:2,validate:t=>t===1||t===3}),this.signatureType=O(A.signatureType,["filler","author"]),this.use=A.use||"",this.usehref=A.usehref||""}},pl=class extends J{constructor(A){super(eA,"medium"),this.id=A.id||"",this.imagingBBox=V9(A.imagingBBox),this.long=hA(A.long),this.orientation=O(A.orientation,["portrait","landscape"]),this.short=hA(A.short),this.stock=A.stock||"",this.trayIn=O(A.trayIn,["auto","delegate","pageFront"]),this.trayOut=O(A.trayOut,["auto","delegate"]),this.use=A.use||"",this.usehref=A.usehref||""}},wl=class extends J{constructor(A){super(eA,"message",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.text=new b}},yl=class extends J{constructor(A){super(eA,"numericEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},bl=class extends J{constructor(A){super(eA,"occur",!0),this.id=A.id||"",this.initial=A.initial!==""?GA({data:A.initial,defaultValue:"",validate:t=>!0}):"",this.max=A.max!==""?GA({data:A.max,defaultValue:1,validate:t=>!0}):"",this.min=A.min!==""?GA({data:A.min,defaultValue:1,validate:t=>!0}):"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[Yt](){let A=this[MA](),t=this.min;this.min===""&&(this.min=A instanceof zi||A instanceof U0?0:1),this.max===""&&(t===""?this.max=A instanceof zi||A instanceof U0?-1:1:this.max=this.min),this.max!==-1&&this.max!0}),this.name=A.name||"",this.numbered=GA({data:A.numbered,defaultValue:1,validate:t=>!0}),this.oddOrEven=O(A.oddOrEven,["any","even","odd"]),this.pagePosition=O(A.pagePosition,["any","first","last","only","rest"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.desc=null,this.extras=null,this.medium=null,this.occur=null,this.area=new b,this.contentArea=new b,this.draw=new b,this.exclGroup=new b,this.field=new b,this.subform=new b}[ja](){return this[L]?!this.occur||this.occur.max===-1||this[L].numberOfUsea.oddOrEven===t&&a.pagePosition===i);return s||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition===i),s)||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition==="any"),s)?s:this.pageArea.children[0]}},Sl=class extends J{constructor(A){super(eA,"para",!0),this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.lineHeight=A.lineHeight?hA(A.lineHeight,"0pt"):"",this.marginLeft=A.marginLeft?hA(A.marginLeft,"0pt"):"",this.marginRight=A.marginRight?hA(A.marginRight,"0pt"):"",this.orphans=GA({data:A.orphans,defaultValue:0,validate:t=>t>=0}),this.preserve=A.preserve||"",this.radixOffset=A.radixOffset?hA(A.radixOffset,"0pt"):"",this.spaceAbove=A.spaceAbove?hA(A.spaceAbove,"0pt"):"",this.spaceBelow=A.spaceBelow?hA(A.spaceBelow,"0pt"):"",this.tabDefault=A.tabDefault?hA(this.tabDefault):"",this.tabStops=(A.tabStops||"").trim().split(/\\s+/).map((t,i)=>i%2===1?hA(t):t),this.textIndent=A.textIndent?hA(A.textIndent,"0pt"):"",this.use=A.use||"",this.usehref=A.usehref||"",this.vAlign=O(A.vAlign,["top","bottom","middle"]),this.widows=GA({data:A.widows,defaultValue:0,validate:t=>t>=0}),this.hyphenation=null}[ZA](){let A=lt(this,"hAlign");return this.marginLeft!==""&&(A.paddingLeft=NA(this.marginLeft)),this.marginRight!==""&&(A.paddingight=NA(this.marginRight)),this.spaceAbove!==""&&(A.paddingTop=NA(this.spaceAbove)),this.spaceBelow!==""&&(A.paddingBottom=NA(this.spaceBelow)),this.textIndent!==""&&(A.textIndent=NA(this.textIndent),$f(A)),this.lineHeight>0&&(A.lineHeight=NA(this.lineHeight)),this.tabDefault!==""&&(A.tabSize=NA(this.tabDefault)),this.tabStops.length>0,this.hyphenatation&&Object.assign(A,this.hyphenatation[ZA]()),A}},Fl=class extends J{constructor(A){super(eA,"passwordEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.passwordChar=A.passwordChar||"*",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}},Rl=class extends J{constructor(A){super(eA,"pattern",!0),this.id=A.id||"",this.type=O(A.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000",i=5,s="repeating-linear-gradient",a=`${A},${A} ${i}px,${t} ${i}px,${t} ${2*i}px`;switch(this.type){case"crossHatch":return`${s}(to top,${a}) ${s}(to right,${a})`;case"crossDiagonal":return`${s}(45deg,${a}) ${s}(-45deg,${a})`;case"diagonalLeft":return`${s}(45deg,${a})`;case"diagonalRight":return`${s}(-45deg,${a})`;case"horizontal":return`${s}(to top,${a})`;case"vertical":return`${s}(to right,${a})`}return""}},Nl=class extends qA{constructor(A){super(eA,"picture"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Gl=class extends J{constructor(A){super(eA,"proto",!0),this.appearanceFilter=new b,this.arc=new b,this.area=new b,this.assist=new b,this.barcode=new b,this.bindItems=new b,this.bookend=new b,this.boolean=new b,this.border=new b,this.break=new b,this.breakAfter=new b,this.breakBefore=new b,this.button=new b,this.calculate=new b,this.caption=new b,this.certificate=new b,this.certificates=new b,this.checkButton=new b,this.choiceList=new b,this.color=new b,this.comb=new b,this.connect=new b,this.contentArea=new b,this.corner=new b,this.date=new b,this.dateTime=new b,this.dateTimeEdit=new b,this.decimal=new b,this.defaultUi=new b,this.desc=new b,this.digestMethod=new b,this.digestMethods=new b,this.draw=new b,this.edge=new b,this.encoding=new b,this.encodings=new b,this.encrypt=new b,this.encryptData=new b,this.encryption=new b,this.encryptionMethod=new b,this.encryptionMethods=new b,this.event=new b,this.exData=new b,this.exObject=new b,this.exclGroup=new b,this.execute=new b,this.extras=new b,this.field=new b,this.fill=new b,this.filter=new b,this.float=new b,this.font=new b,this.format=new b,this.handler=new b,this.hyphenation=new b,this.image=new b,this.imageEdit=new b,this.integer=new b,this.issuers=new b,this.items=new b,this.keep=new b,this.keyUsage=new b,this.line=new b,this.linear=new b,this.lockDocument=new b,this.manifest=new b,this.margin=new b,this.mdp=new b,this.medium=new b,this.message=new b,this.numericEdit=new b,this.occur=new b,this.oid=new b,this.oids=new b,this.overflow=new b,this.pageArea=new b,this.pageSet=new b,this.para=new b,this.passwordEdit=new b,this.pattern=new b,this.picture=new b,this.radial=new b,this.reason=new b,this.reasons=new b,this.rectangle=new b,this.ref=new b,this.script=new b,this.setProperty=new b,this.signData=new b,this.signature=new b,this.signing=new b,this.solid=new b,this.speak=new b,this.stipple=new b,this.subform=new b,this.subformSet=new b,this.subjectDN=new b,this.subjectDNs=new b,this.submit=new b,this.text=new b,this.textEdit=new b,this.time=new b,this.timeStamp=new b,this.toolTip=new b,this.traversal=new b,this.traverse=new b,this.ui=new b,this.validate=new b,this.value=new b,this.variables=new b}},Ul=class extends J{constructor(A){super(eA,"radial",!0),this.id=A.id||"",this.type=O(A.type,["toEdge","toCenter"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000";return`radial-gradient(circle at center, ${this.type==="toEdge"?`${A},${t}`:`${t},${A}`})`}},Ml=class extends qA{constructor(A){super(eA,"reason"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Ll=class extends J{constructor(A){super(eA,"reasons",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.reason=new b}},lg=class extends J{constructor(A){super(eA,"rectangle",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.fill=null}[SA](){var o;let A=this.edge.children.length?this.edge.children[0]:new G0({}),t=A[ZA](),i=Object.create(null);((o=this.fill)==null?void 0:o.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let a=(this.corner.children.length?this.corner.children[0]:new rg({}))[ZA](),r={name:"svg",children:[{name:"rect",attributes:{xmlns:p0,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:i}}],attributes:{xmlns:p0,style:{overflow:"visible"},width:"100%",height:"100%"}},g=this[MA]()[MA]();return w1(g)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[r]}):(r.attributes.style.position="absolute",dA.success(r))}},Hl=class extends qA{constructor(A){super(eA,"ref"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Jl=class extends qA{constructor(A){super(eA,"script"),this.binding=A.binding||"",this.contentType=A.contentType||"",this.id=A.id||"",this.name=A.name||"",this.runAt=O(A.runAt,["client","both","server"]),this.use=A.use||"",this.usehref=A.usehref||""}},An=class extends J{constructor(A){super(eA,"setProperty"),this.connection=A.connection||"",this.ref=A.ref||"",this.target=A.target||""}},Yl=class extends J{constructor(A){super(eA,"signData",!0),this.id=A.id||"",this.operation=O(A.operation,["sign","clear","verify"]),this.ref=A.ref||"",this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},Kl=class extends J{constructor(A){super(eA,"signature",!0),this.id=A.id||"",this.type=O(A.type,["PDF1.3","PDF1.6"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.filter=null,this.manifest=null,this.margin=null}},vl=class extends J{constructor(A){super(eA,"signing",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},ql=class extends J{constructor(A){super(eA,"solid",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](A){return A?A[ZA]():"#FFFFFF"}},Tl=class extends qA{constructor(A){super(eA,"speak"),this.disable=GA({data:A.disable,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.priority=O(A.priority,["custom","caption","name","toolTip"]),this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},Pl=class extends J{constructor(A){super(eA,"stipple",!0),this.id=A.id||"",this.rate=GA({data:A.rate,defaultValue:50,validate:t=>t>=0&&t<=100}),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){let t=this.rate/100;return Ce.makeHexColor(Math.round(A.value.r*(1-t)+this.value.r*t),Math.round(A.value.g*(1-t)+this.value.g*t),Math.round(A.value.b*(1-t)+this.value.b*t))}},hg=class extends J{constructor(A){super(eA,"subform",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.allowMacro=GA({data:A.allowMacro,defaultValue:0,validate:t=>t===1}),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.columnWidths=(A.columnWidths||"").trim().split(/\\s+/).map(t=>t==="-1"?-1:hA(t)),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.mergeMode=O(A.mergeMode,["consumeData","matchTemplate"]),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.restoreState=O(A.restoreState,["manual","auto"]),this.scope=O(A.scope,["name","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.bookend=null,this.border=null,this.break=null,this.calculate=null,this.desc=null,this.extras=null,this.keep=null,this.margin=null,this.occur=null,this.overflow=null,this.pageSet=null,this.para=null,this.traversal=null,this.validate=null,this.variables=null,this.area=new b,this.breakAfter=new b,this.breakBefore=new b,this.connect=new b,this.draw=new b,this.event=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.proto=new b,this.setProperty=new b,this.subform=new b,this.subformSet=new b}[xe](){let A=this[MA]();return A instanceof en?A[xe]():A}[J0](){return!0}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}*[Ys](){yield*b1(this)}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):this.keep&&this.keep.intact!=="none"?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[SA](A){var d;if(ro(this),this.break){if(this.break.after!=="auto"||this.break.afterTarget!==""){let x=new ig({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakAfter.push(x)}if(this.break.before!=="auto"||this.break.beforeTarget!==""){let x=new sg({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakBefore.push(x)}if(this.break.overflowTarget!==""){let x=new cg({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});x[ie]=this[ie],this[Be](x),this.overflow.push(x)}this[Ti](this.break),this.break=null}if(this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&k("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){let x=this.breakBefore.children[0];if(UE(x))return dA.breakNode(x)}if((d=this[L])!=null&&d.afterBreakAfter)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,line:null,attributes:i,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[ue](),a=s[L].noLayoutFailure,n=this[di]();if(n||oo(this),!no(this,A))return dA.FAILURE;let r=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){let x=this[xe]().columnWidths;Array.isArray(x)&&x.length>0&&(this[L].columnWidths=x,this[L].currentColumn=0)}let g=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),o=["xfaSubform"],I=zf(this);if(I&&o.push(I),i.style=g,i.class=o,this.name&&(i.xfaName=this.name),this.overflow){let x=this.overflow[We]();x.addLeader&&(x.addLeader=!1,ME(this,x.leader,A))}this[Xs]();let c=this.layout==="lr-tb"||this.layout==="rl-tb",l=c?Ag:1;for(;this[L].attempt=1){let x=this.breakAfter.children[0];if(UE(x))return this[L].afterBreakAfter=u,dA.breakNode(x)}return delete this[L],u}},en=class extends J{constructor(A){super(eA,"subformSet",!0),this.id=A.id||"",this.name=A.name||"",this.relation=O(A.relation,["ordered","choice","unordered"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.bookend=null,this.break=null,this.desc=null,this.extras=null,this.occur=null,this.overflow=null,this.breakAfter=new b,this.breakBefore=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[xe](){let A=this[MA]();for(;!(A instanceof hg);)A=A[MA]();return A}[J0](){return!0}},Wl=class extends ce{constructor(A){super(eA,"subjectDN"),this.delimiter=A.delimiter||",",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=new Map(this[P].split(this.delimiter).map(A=>(A=A.split("=",2),A[0]=A[0].trim(),A)))}},Ol=class extends J{constructor(A){super(eA,"subjectDNs",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.subjectDN=new b}},Zl=class extends J{constructor(A){super(eA,"submit",!0),this.embedPDF=GA({data:A.embedPDF,defaultValue:0,validate:t=>t===1}),this.format=O(A.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),this.id=A.id||"",this.target=A.target||"",this.textEncoding=so({data:A.textEncoding?A.textEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.use=A.use||"",this.usehref=A.usehref||"",this.xdpContent=A.xdpContent||"",this.encrypt=null,this.encryptData=new b,this.signData=new b}},tn=class extends J{constructor(A){super(eA,"template",!0),this.baseProfile=O(A.baseProfile,["full","interactiveForms"]),this.extras=null,this.subform=new b}[se](){this.subform.children.length===0&&k("XFA - No subforms in template node."),this.subform.children.length>=2&&k("XFA - Several subforms in template node: please file a bug."),this[qt]=sx}[di](){return!0}[Bi](A,t){return A.startsWith("#")?[this[As].get(A.slice(1))]:Ni(this,t,A,!0,!0)}*[Of](){var C,B,Q;if(!this.subform.children.length)return dA.success({name:"div",children:[]});this[L]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};let A=this.subform.children[0];A.pageSet[ns]();let t=A.pageSet.pageArea.children,i={name:"div",children:[]},s=null,a=null,n=null;if(A.breakBefore.children.length>=1?(a=A.breakBefore.children[0],n=a.target):A.subform.children.length>=1&&A.subform.children[0].breakBefore.children.length>=1?(a=A.subform.children[0].breakBefore.children[0],n=a.target):(C=A.break)!=null&&C.beforeTarget?(a=A.break,n=a.beforeTarget):A.subform.children.length>=1&&((B=A.subform.children[0].break)!=null&&B.beforeTarget)&&(a=A.subform.children[0].break,n=a.beforeTarget),a){let E=this[Bi](n,a[MA]());E instanceof zi&&(s=E,a[L]={})}s||(s=t[0]),s[L]={numberOfUse:1};let r=s[MA]();r[L]={numberOfUse:1,pageIndex:r.pageArea.children.indexOf(s),pageSetIndex:0};let g,o=null,I=null,c=!0,l=0,h=0;for(;;){if(c)l=0;else if(i.children.pop(),++l===ix)return k("XFA - Something goes wrong: please file a bug."),i;g=null,this[L].currentPageArea=s;let E=s[SA]().html;i.children.push(E),o&&(this[L].noLayoutFailure=!0,E.children.push(o[SA](s[L].space).html),o=null),I&&(this[L].noLayoutFailure=!0,E.children.push(I[SA](s[L].space).html),I=null);let f=s.contentArea.children,u=E.children.filter(x=>x.attributes.class.includes("xfaContentarea"));c=!1,this[L].firstUnsplittable=null,this[L].noLayoutFailure=!1;let d=x=>{var m;let p=A[wn]();p&&(c||(c=((m=p.children)==null?void 0:m.length)>0),u[x].children.push(p))};for(let x=h,p=f.length;x0),u[x].children.push(S.html)):!c&&i.children.length>1&&i.children.pop(),i;if(S.isBreak()){let w=S.breakNode;if(d(x),w.targetType==="auto")continue;w.leader&&(o=this[Bi](w.leader,w[MA]()),o=o?o[0]:null),w.trailer&&(I=this[Bi](w.trailer,w[MA]()),I=I?I[0]:null),w.targetType==="pageArea"?(g=w[L].target,x=1/0):w[L].target?(g=w[L].target,h=w[L].index+1,x=1/0):x=w[L].index;continue}if(this[L].overflowNode){let w=this[L].overflowNode;this[L].overflowNode=null;let Y=w[We](),U=Y.target;Y.addLeader=Y.leader!==null,Y.addTrailer=Y.trailer!==null,d(x);let K=x;if(x=1/0,U instanceof zi)g=U;else if(U instanceof _a){let Z=f.indexOf(U);Z!==-1?Z>K?x=Z-1:h=Z:(g=U[MA](),h=g.contentArea.children.indexOf(U))}continue}d(x)}this[L].pageNumber+=1,g&&(g[ja]()?g[L].numberOfUse+=1:g=null),s=g||s[Ci](),yield null}}},Cg=class extends ce{constructor(A){super(eA,"text"),this.id=A.id||"",this.maxChars=GA({data:A.maxChars,defaultValue:0,validate:t=>t>=0}),this.name=A.name||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}[eo](){return!0}[ni](A){return A[de]===me.xhtml.id?(this[P]=A,!0):(k(`XFA - Invalid content in Text: ${A[XA]}.`),!1)}[xi](A){this[P]instanceof J||super[xi](A)}[se](){typeof this[P]=="string"&&(this[P]=this[P].replaceAll(`\\r\n`,`\n`))}[We](){return typeof this[P]=="string"?this[P].split(/[\\u2029\\u2028\\n]/).reduce((A,t)=>(t&&A.push(t),A),[]).join(`\n`):this[P][Se]()}[SA](A){if(typeof this[P]=="string"){let t=A0(this[P]).html;return this[P].includes("\\u2029")?(t.name="div",t.children=[],this[P].split("\\u2029").map(i=>i.split(/[\\u2028\\n]/).reduce((s,a)=>(s.push({name:"span",value:a},{name:"br"}),s),[])).forEach(i=>{t.children.push({name:"p",children:i})})):/[\\u2028\\n]/.test(this[P])&&(t.name="div",t.children=[],this[P].split(/[\\u2028\\n]/).forEach(i=>{t.children.push({name:"span",value:i},{name:"br"})})),dA.success(t)}return this[P][SA](A)}},Bg=class extends J{constructor(A){super(eA,"textEdit",!0),this.allowRichText=GA({data:A.allowRichText,defaultValue:0,validate:t=>t===1}),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.multiLine=GA({data:A.multiLine,defaultValue:"",validate:t=>t===0||t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.vScrollPolicy=O(A.vScrollPolicy,["auto","off","on"]),this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a,n;let t=lt(this,"border","font","margin"),i,s=this[MA]()[MA]();return this.multiLine===""&&(this.multiLine=s instanceof gg?1:0),this.multiLine===1?i={name:"textarea",attributes:{dataId:((a=s[Ht])==null?void 0:a[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}}:i={name:"input",attributes:{type:"text",dataId:((n=s[Ht])==null?void 0:n[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}},yn(s)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}},jl=class extends qA{constructor(A){super(eA,"time"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Xl=class extends J{constructor(A){super(eA,"timeStamp"),this.id=A.id||"",this.server=A.server||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},Vl=class extends qA{constructor(A){super(eA,"toolTip"),this.id=A.id||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},_l=class extends J{constructor(A){super(eA,"traversal",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.traverse=new b}},zl=class extends J{constructor(A){super(eA,"traverse",!0),this.id=A.id||"",this.operation=O(A.operation,["next","back","down","first","left","right","up"]),this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.script=null}get name(){return this.operation}[Za](){return!1}},sn=class extends J{constructor(A){super(eA,"ui",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.picture=null,this.barcode=null,this.button=null,this.checkButton=null,this.choiceList=null,this.dateTimeEdit=null,this.defaultUi=null,this.imageEdit=null,this.numericEdit=null,this.passwordEdit=null,this.signature=null,this.textEdit=null}[We](){if(this[L]===void 0){for(let A of Object.getOwnPropertyNames(this)){if(A==="extras"||A==="picture")continue;let t=this[A];if(t instanceof J)return this[L]=t,t}this[L]=null}return this[L]}[SA](A){let t=this[We]();return t?t[SA](A):dA.EMPTY}},$l=class extends J{constructor(A){super(eA,"validate",!0),this.formatTest=O(A.formatTest,["warning","disabled","error"]),this.id=A.id||"",this.nullTest=O(A.nullTest,["disabled","error","warning"]),this.scriptTest=O(A.scriptTest,["error","disabled","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.picture=null,this.script=null}},an=class extends J{constructor(A){super(eA,"value",!0),this.id=A.id||"",this.override=GA({data:A.override,defaultValue:0,validate:t=>t===1}),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.arc=null,this.boolean=null,this.date=null,this.dateTime=null,this.decimal=null,this.exData=null,this.float=null,this.image=null,this.integer=null,this.line=null,this.rectangle=null,this.text=null,this.time=null}[Et](A){var s;let t=this[MA]();if(t instanceof za&&(s=t.ui)!=null&&s.imageEdit){this.image||(this.image=new Ig({}),this[Be](this.image)),this.image[P]=A[P];return}let i=A[XA];if(this[i]!==null){this[i][P]=A[P];return}for(let a of Object.getOwnPropertyNames(this)){let n=this[a];n instanceof J&&(this[a]=null,this[Ti](n))}this[A[XA]]=A,this[Be](A)}[Se](){if(this.exData)return typeof this.exData[P]=="string"?this.exData[P].trim():this.exData[P][Se]().trim();for(let A of Object.getOwnPropertyNames(this)){if(A==="image")continue;let t=this[A];if(t instanceof J)return(t[P]||"").toString().trim()}return null}[SA](A){for(let t of Object.getOwnPropertyNames(this)){let i=this[t];if(i instanceof J)return i[SA](A)}return dA.EMPTY}},Ah=class extends J{constructor(A){super(eA,"variables",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.manifest=new b,this.script=new b,this.text=new b,this.time=new b}[Za](){return!0}},Ks=class{static[Zt](A,t){if(Ks.hasOwnProperty(A)){let i=Ks[A](t);return i[Wf](t),i}}static appearanceFilter(A){return new pc(A)}static arc(A){return new eg(A)}static area(A){return new wc(A)}static assist(A){return new yc(A)}static barcode(A){return new bc(A)}static bind(A){return new Dc(A)}static bindItems(A){return new Va(A)}static bookend(A){return new kc(A)}static boolean(A){return new Sc(A)}static border(A){return new tg(A)}static break(A){return new Fc(A)}static breakAfter(A){return new ig(A)}static breakBefore(A){return new sg(A)}static button(A){return new Rc(A)}static calculate(A){return new Nc(A)}static caption(A){return new Gc(A)}static certificate(A){return new Uc(A)}static certificates(A){return new Mc(A)}static checkButton(A){return new ag(A)}static choiceList(A){return new ng(A)}static color(A){return new Lc(A)}static comb(A){return new Hc(A)}static connect(A){return new Jc(A)}static contentArea(A){return new _a(A)}static corner(A){return new rg(A)}static date(A){return new Yc(A)}static dateTime(A){return new Kc(A)}static dateTimeEdit(A){return new vc(A)}static decimal(A){return new qc(A)}static defaultUi(A){return new Tc(A)}static desc(A){return new Pc(A)}static digestMethod(A){return new Wc(A)}static digestMethods(A){return new Oc(A)}static draw(A){return new gg(A)}static edge(A){return new G0(A)}static encoding(A){return new Zc(A)}static encodings(A){return new jc(A)}static encrypt(A){return new Xc(A)}static encryptData(A){return new Vc(A)}static encryption(A){return new _c(A)}static encryptionMethod(A){return new zc(A)}static encryptionMethods(A){return new $c(A)}static event(A){return new Al(A)}static exData(A){return new el(A)}static exObject(A){return new tl(A)}static exclGroup(A){return new og(A)}static execute(A){return new il(A)}static extras(A){return new sl(A)}static field(A){return new za(A)}static fill(A){return new al(A)}static filter(A){return new nl(A)}static float(A){return new rl(A)}static font(A){return new gl(A)}static format(A){return new ol(A)}static handler(A){return new Il(A)}static hyphenation(A){return new cl(A)}static image(A){return new Ig(A)}static imageEdit(A){return new ll(A)}static integer(A){return new hl(A)}static issuers(A){return new Cl(A)}static items(A){return new $a(A)}static keep(A){return new Bl(A)}static keyUsage(A){return new Ql(A)}static line(A){return new El(A)}static linear(A){return new fl(A)}static lockDocument(A){return new ul(A)}static manifest(A){return new dl(A)}static margin(A){return new xl(A)}static mdp(A){return new ml(A)}static medium(A){return new pl(A)}static message(A){return new wl(A)}static numericEdit(A){return new yl(A)}static occur(A){return new bl(A)}static oid(A){return new Dl(A)}static oids(A){return new kl(A)}static overflow(A){return new cg(A)}static pageArea(A){return new zi(A)}static pageSet(A){return new U0(A)}static para(A){return new Sl(A)}static passwordEdit(A){return new Fl(A)}static pattern(A){return new Rl(A)}static picture(A){return new Nl(A)}static proto(A){return new Gl(A)}static radial(A){return new Ul(A)}static reason(A){return new Ml(A)}static reasons(A){return new Ll(A)}static rectangle(A){return new lg(A)}static ref(A){return new Hl(A)}static script(A){return new Jl(A)}static setProperty(A){return new An(A)}static signData(A){return new Yl(A)}static signature(A){return new Kl(A)}static signing(A){return new vl(A)}static solid(A){return new ql(A)}static speak(A){return new Tl(A)}static stipple(A){return new Pl(A)}static subform(A){return new hg(A)}static subformSet(A){return new en(A)}static subjectDN(A){return new Wl(A)}static subjectDNs(A){return new Ol(A)}static submit(A){return new Zl(A)}static template(A){return new tn(A)}static text(A){return new Cg(A)}static textEdit(A){return new Bg(A)}static time(A){return new jl(A)}static timeStamp(A){return new Xl(A)}static toolTip(A){return new Vl(A)}static traversal(A){return new _l(A)}static traverse(A){return new zl(A)}static ui(A){return new sn(A)}static validate(A){return new $l(A)}static value(A){return new an(A)}static variables(A){return new Ah(A)}},LE=me.datasets.id;function Xn(e){let A=new Cg({});return A[P]=e,A}var eh=class{constructor(A){var t;this.root=A,this.datasets=A.datasets,this.data=((t=A.datasets)==null?void 0:t.data)||new Jt(me.datasets.id,"data"),this.emptyMerge=this.data[Ue]().length===0,this.root.form=this.form=A.template[Tt]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){return this._bindElement(this.form,this.data),this.form}getData(){return this.data}_bindValue(A,t,i){var s,a;if(A[Ht]=t,A[Oa]())if(t[rs]()){let n=t[u1]();A[Et](Xn(n))}else if(A instanceof za&&((a=(s=A.ui)==null?void 0:s.choiceList)==null?void 0:a.open)==="multiSelect"){let n=t[Ue]().map(r=>r[P].trim()).join(`\n`);A[Et](Xn(n))}else this._isConsumeData()&&k("XFA - Nodes haven\'t the same type.");else!t[rs]()||this._isMatchTemplate()?this._bindElement(A,t):k("XFA - Nodes haven\'t the same type.")}_findDataByNameToConsume(A,t,i,s){if(!A)return null;let a,n;for(let r=0;r<3;r++){for(a=i[xa](A,!1,!0);n=a.next().value,!!n;)if(t===n[rs]())return n;if(i[de]===me.datasets.id&&i[XA]==="data")break;i=i[MA]()}return s?(a=this.data[xa](A,!0,!1),n=a.next().value,n||(a=this.data[Bc](A,!0),n=a.next().value,n!=null&&n[rs]())?n:null):null}_setProperties(A,t){if(A.hasOwnProperty("setProperty"))for(let{ref:i,target:s,connection:a}of A.setProperty.children){if(a||!i)continue;let n=Ni(this.root,t,i,!1,!1);if(!n){k(`XFA - Invalid reference: ${i}.`);continue}let[r]=n;if(!r[Mi](this.data)){k("XFA - Invalid node: must be a data node.");continue}let g=Ni(this.root,A,s,!1,!1);if(!g){k(`XFA - Invalid target: ${s}.`);continue}let[o]=g;if(!o[Mi](A)){k("XFA - Invalid target: must be a property or subproperty.");continue}let I=o[MA]();if(o instanceof An||I instanceof An){k("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(o instanceof Va||I instanceof Va){k("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}let c=r[Se](),l=o[XA];if(o instanceof Xa){let h=Object.create(null);h[l]=c;let C=Reflect.construct(Object.getPrototypeOf(I).constructor,[h]);I[l]=C[l];continue}if(!o.hasOwnProperty(P)){k("XFA - Invalid node to use in setProperty");continue}o[Ht]=r,o[P]=c,o[se]()}}_bindItems(A,t){if(!A.hasOwnProperty("items")||!A.hasOwnProperty("bindItems")||A.bindItems.isEmpty())return;for(let a of A.items.children)A[Ti](a);A.items.clear();let i=new $a({}),s=new $a({});A[Be](i),A.items.push(i),A[Be](s),A.items.push(s);for(let{ref:a,labelRef:n,valueRef:r,connection:g}of A.bindItems.children){if(g||!a)continue;let o=Ni(this.root,t,a,!1,!1);if(!o){k(`XFA - Invalid reference: ${a}.`);continue}for(let I of o){if(!I[Mi](this.datasets)){k(`XFA - Invalid ref (${a}): must be a datasets child.`);continue}let c=Ni(this.root,I,n,!0,!1);if(!c){k(`XFA - Invalid label: ${n}.`);continue}let[l]=c;if(!l[Mi](this.datasets)){k("XFA - Invalid label: must be a datasets child.");continue}let h=Ni(this.root,I,r,!0,!1);if(!h){k(`XFA - Invalid value: ${r}.`);continue}let[C]=h;if(!C[Mi](this.datasets)){k("XFA - Invalid value: must be a datasets child.");continue}let B=Xn(l[Se]()),Q=Xn(C[Se]());i[Be](B),i.text.push(B),s[Be](Q),s.text.push(Q)}}}_bindOccurrences(A,t,i){let s;if(t.length>1&&(s=A[Tt](),s[Ti](s.occur),s.occur=null),this._bindValue(A,t[0],i),this._setProperties(A,t[0]),this._bindItems(A,t[0]),t.length===1)return;let a=A[MA](),n=A[XA],r=a[Qc](A);for(let g=1,o=t.length;gg.name===A.name).length:a=i[s].children.length;let n=i[Qc](A)+1,r=t.initial-a;if(r){let g=A[Tt]();g[Ti](g.occur),g.occur=null,i[s].push(g),i[lr](n,g);for(let o=1;o0)this._bindOccurrences(s,[c[0]],null);else if(this.emptyMerge){let l=t[de]===LE?-1:t[de],h=s[Ht]=new Jt(l,s.name||"root");t[Be](h),this._bindElement(s,h)}continue}if(!s[J0]())continue;let a=!1,n=null,r=null,g=null;if(s.bind){switch(s.bind.match){case"none":this._setAndBind(s,t);continue;case"global":a=!0;break;case"dataRef":if(!s.bind.ref){k(`XFA - ref is empty in node ${s[XA]}.`),this._setAndBind(s,t);continue}r=s.bind.ref;break;default:break}s.bind.picture&&(n=s.bind.picture[P])}let[o,I]=this._getOccurInfo(s);if(r)if(g=Ni(this.root,t,r,!0,!1),g===null){if(g=ex(this.data,t,r),!g)continue;this._isConsumeData()&&(g[$t]=!0),this._setAndBind(s,g);continue}else this._isConsumeData()&&(g=g.filter(c=>!c[$t])),g.length>I?g=g.slice(0,I):g.length===0&&(g=null),g&&this._isConsumeData()&&g.forEach(c=>{c[$t]=!0});else{if(!s.name){this._setAndBind(s,t);continue}if(this._isConsumeData()){let c=[];for(;c.length0?c:null}else{if(g=t[xa](s.name,!1,this.emptyMerge).next().value,!g){if(o===0){i.push(s);continue}let c=t[de]===LE?-1:t[de];g=s[Ht]=new Jt(c,s.name),this.emptyMerge&&(g[$t]=!0),t[Be](g),this._setAndBind(s,g);continue}this.emptyMerge&&(g[$t]=!0),g=[g]}}g?this._bindOccurrences(s,g,n):o>0?this._setAndBind(s,t):i.push(s)}i.forEach(s=>s[MA]()[Ti](s))}},th=class{constructor(A,t){this.data=t,this.dataset=A.datasets||null}serialize(A){let t=[[-1,this.data[Ue]()]];for(;t.length>0;){let s=t.at(-1),[a,n]=s;if(a+1===n.length){t.pop();continue}let r=n[++s[0]],g=A.get(r[$A]);if(g)r[Et](g);else{let I=r[Tf]();for(let c of I.values()){let l=A.get(c[$A]);if(l){c[Et](l);break}}}let o=r[Ue]();o.length>0&&t.push([-1,o])}let i=[\'\'];if(this.dataset)for(let s of this.dataset[Ue]())s[XA]!=="data"&&s[pa](i);return this.data[pa](i),i.push(""),i.join("")}},j=me.config.id,ih=class extends J{constructor(A){super(j,"acrobat",!0),this.acrobat7=null,this.autoSave=null,this.common=null,this.validate=null,this.validateApprovalSignatures=null,this.submitUrl=new b}},sh=class extends J{constructor(A){super(j,"acrobat7",!0),this.dynamicRender=null}},ah=class extends _A{constructor(A){super(j,"ADBE_JSConsole",["delegate","Enable","Disable"])}},nh=class extends _A{constructor(A){super(j,"ADBE_JSDebugger",["delegate","Enable","Disable"])}},rh=class extends pe{constructor(A){super(j,"addSilentPrint")}},gh=class extends pe{constructor(A){super(j,"addViewerPreferences")}},oh=class extends $r{constructor(A){super(j,"adjustData")}},Ih=class extends yt{constructor(A){super(j,"adobeExtensionLevel",0,t=>t>=1&&t<=8)}},ch=class extends J{constructor(A){super(j,"agent",!0),this.name=A.name?A.name.trim():"",this.common=new b}},lh=class extends ce{constructor(A){super(j,"alwaysEmbed")}},hh=class extends qA{constructor(A){super(j,"amd")}},Ch=class extends J{constructor(A){super(j,"area"),this.level=GA({data:A.level,defaultValue:0,validate:t=>t>=1&&t<=3}),this.name=O(A.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}},Bh=class extends _A{constructor(A){super(j,"attributes",["preserve","delegate","ignore"])}},Qh=class extends _A{constructor(A){super(j,"autoSave",["disabled","enabled"])}},Eh=class extends qA{constructor(A){super(j,"base")}},fh=class extends J{constructor(A){super(j,"batchOutput"),this.format=O(A.format,["none","concat","zip","zipCompress"])}},uh=class extends ce{constructor(A){super(j,"behaviorOverride")}[se](){this[P]=new Map(this[P].trim().split(/\\s+/).filter(A=>A.includes(":")).map(A=>A.split(":",2)))}},dh=class extends J{constructor(A){super(j,"cache",!0),this.templateCache=null}},xh=class extends pe{constructor(A){super(j,"change")}},mh=class extends J{constructor(A){super(j,"common",!0),this.data=null,this.locale=null,this.localeSet=null,this.messaging=null,this.suppressBanner=null,this.template=null,this.validationMessaging=null,this.versionControl=null,this.log=new b}},ph=class extends J{constructor(A){super(j,"compress"),this.scope=O(A.scope,["imageOnly","document"])}},wh=class extends pe{constructor(A){super(j,"compressLogicalStructure")}},yh=class extends $r{constructor(A){super(j,"compressObjectStream")}},bh=class extends J{constructor(A){super(j,"compression",!0),this.compressLogicalStructure=null,this.compressObjectStream=null,this.level=null,this.type=null}},Dh=class extends J{constructor(A){super(j,"config",!0),this.acrobat=null,this.present=null,this.trace=null,this.agent=new b}},kh=class extends _A{constructor(A){super(j,"conformance",["A","B"])}},Sh=class extends pe{constructor(A){super(j,"contentCopy")}},Fh=class extends yt{constructor(A){super(j,"copies",1,t=>t>=1)}},Rh=class extends qA{constructor(A){super(j,"creator")}},Nh=class extends yt{constructor(A){super(j,"currentPage",0,t=>t>=0)}},Gh=class extends J{constructor(A){super(j,"data",!0),this.adjustData=null,this.attributes=null,this.incrementalLoad=null,this.outputXSL=null,this.range=null,this.record=null,this.startNode=null,this.uri=null,this.window=null,this.xsl=null,this.excludeNS=new b,this.transform=new b}},Uh=class extends J{constructor(A){super(j,"debug",!0),this.uri=null}},Mh=class extends ce{constructor(A){super(j,"defaultTypeface"),this.writingScript=O(A.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}},Lh=class extends _A{constructor(A){super(j,"destination",["pdf","pcl","ps","webClient","zpl"])}},Hh=class extends pe{constructor(A){super(j,"documentAssembly")}},Jh=class extends J{constructor(A){super(j,"driver",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},Yh=class extends _A{constructor(A){super(j,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}},Kh=class extends _A{constructor(A){super(j,"dynamicRender",["forbidden","required"])}},vh=class extends pe{constructor(A){super(j,"embed")}},qh=class extends pe{constructor(A){super(j,"encrypt")}},Th=class extends J{constructor(A){super(j,"encryption",!0),this.encrypt=null,this.encryptionLevel=null,this.permissions=null}},Ph=class extends _A{constructor(A){super(j,"encryptionLevel",["40bit","128bit"])}},Wh=class extends qA{constructor(A){super(j,"enforce")}},Oh=class extends J{constructor(A){super(j,"equate"),this.force=GA({data:A.force,defaultValue:1,validate:t=>t===0}),this.from=A.from||"",this.to=A.to||""}},Zh=class extends J{constructor(A){super(j,"equateRange"),this.from=A.from||"",this.to=A.to||"",this._unicodeRange=A.unicodeRange||""}get unicodeRange(){let A=[],t=/U\\+([0-9a-fA-F]+)/,i=this._unicodeRange;for(let s of i.split(",").map(a=>a.trim()).filter(a=>!!a))s=s.split("-",2).map(a=>{let n=a.match(t);return n?parseInt(n[1],16):0}),s.length===1&&s.push(s[0]),A.push(s);return nA(this,"unicodeRange",A)}},jh=class extends ce{constructor(A){super(j,"exclude")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>A&&["calculate","close","enter","exit","initialize","ready","validate"].includes(A))}},Xh=class extends qA{constructor(A){super(j,"excludeNS")}},Vh=class extends _A{constructor(A){super(j,"flipLabel",["usePrinterSetting","on","off"])}},_h=class extends J{constructor(A){super(j,"fontInfo",!0),this.embed=null,this.map=null,this.subsetBelow=null,this.alwaysEmbed=new b,this.defaultTypeface=new b,this.neverEmbed=new b}},zh=class extends pe{constructor(A){super(j,"formFieldFilling")}},$h=class extends qA{constructor(A){super(j,"groupParent")}},AC=class extends _A{constructor(A){super(j,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}},eC=class extends qA{constructor(A){super(j,"includeXDPContent")}},tC=class extends _A{constructor(A){super(j,"incrementalLoad",["none","forwardOnly"])}},iC=class extends pe{constructor(A){super(j,"incrementalMerge")}},sC=class extends pe{constructor(A){super(j,"interactive")}},aC=class extends _A{constructor(A){super(j,"jog",["usePrinterSetting","none","pageSet"])}},nC=class extends J{constructor(A){super(j,"labelPrinter",!0),this.name=O(A.name,["zpl","dpl","ipl","tcpl"]),this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},rC=class extends _A{constructor(A){super(j,"layout",["paginate","panel"])}},gC=class extends yt{constructor(A){super(j,"level",0,t=>t>0)}},oC=class extends pe{constructor(A){super(j,"linearized")}},IC=class extends qA{constructor(A){super(j,"locale")}},cC=class extends qA{constructor(A){super(j,"localeSet")}},lC=class extends J{constructor(A){super(j,"log",!0),this.mode=null,this.threshold=null,this.to=null,this.uri=null}},hC=class extends J{constructor(A){super(j,"map",!0),this.equate=new b,this.equateRange=new b}},CC=class extends J{constructor(A){super(j,"mediumInfo",!0),this.map=null}},BC=class extends J{constructor(A){super(j,"message",!0),this.msgId=null,this.severity=null}},QC=class extends J{constructor(A){super(j,"messaging",!0),this.message=new b}},EC=class extends _A{constructor(A){super(j,"mode",["append","overwrite"])}},fC=class extends pe{constructor(A){super(j,"modifyAnnots")}},uC=class extends yt{constructor(A){super(j,"msgId",1,t=>t>=1)}},dC=class extends qA{constructor(A){super(j,"nameAttr")}},xC=class extends ce{constructor(A){super(j,"neverEmbed")}},mC=class extends yt{constructor(A){super(j,"numberOfCopies",null,t=>t>=2&&t<=5)}},pC=class extends J{constructor(A){super(j,"openAction",!0),this.destination=null}},wC=class extends J{constructor(A){super(j,"output",!0),this.to=null,this.type=null,this.uri=null}},yC=class extends qA{constructor(A){super(j,"outputBin")}},bC=class extends J{constructor(A){super(j,"outputXSL",!0),this.uri=null}},DC=class extends _A{constructor(A){super(j,"overprint",["none","both","draw","field"])}},kC=class extends qA{constructor(A){super(j,"packets")}[se](){this[P]!=="*"&&(this[P]=this[P].trim().split(/\\s+/).filter(A=>["config","datasets","template","xfdf","xslt"].includes(A)))}},SC=class extends J{constructor(A){super(j,"pageOffset"),this.x=GA({data:A.x,defaultValue:"useXDCSetting",validate:t=>!0}),this.y=GA({data:A.y,defaultValue:"useXDCSetting",validate:t=>!0})}},FC=class extends qA{constructor(A){super(j,"pageRange")}[se](){let A=this[P].trim().split(/\\s+/).map(i=>parseInt(i,10)),t=[];for(let i=0,s=A.length;i!1)}},UC=class extends J{constructor(A){super(j,"pcl",!0),this.name=A.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.pageOffset=null,this.staple=null,this.xdc=null}},MC=class extends J{constructor(A){super(j,"pdf",!0),this.name=A.name||"",this.adobeExtensionLevel=null,this.batchOutput=null,this.compression=null,this.creator=null,this.encryption=null,this.fontInfo=null,this.interactive=null,this.linearized=null,this.openAction=null,this.pdfa=null,this.producer=null,this.renderPolicy=null,this.scriptModel=null,this.silentPrint=null,this.submitFormat=null,this.tagged=null,this.version=null,this.viewerPreferences=null,this.xdc=null}},LC=class extends J{constructor(A){super(j,"pdfa",!0),this.amd=null,this.conformance=null,this.includeXDPContent=null,this.part=null}},HC=class extends J{constructor(A){super(j,"permissions",!0),this.accessibleContent=null,this.change=null,this.contentCopy=null,this.documentAssembly=null,this.formFieldFilling=null,this.modifyAnnots=null,this.plaintextMetadata=null,this.print=null,this.printHighQuality=null}},JC=class extends pe{constructor(A){super(j,"pickTrayByPDFSize")}},YC=class extends qA{constructor(A){super(j,"picture")}},KC=class extends pe{constructor(A){super(j,"plaintextMetadata")}},vC=class extends _A{constructor(A){super(j,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}},qC=class extends J{constructor(A){super(j,"present",!0),this.behaviorOverride=null,this.cache=null,this.common=null,this.copies=null,this.destination=null,this.incrementalMerge=null,this.layout=null,this.output=null,this.overprint=null,this.pagination=null,this.paginationOverride=null,this.script=null,this.validate=null,this.xdp=null,this.driver=new b,this.labelPrinter=new b,this.pcl=new b,this.pdf=new b,this.ps=new b,this.submitUrl=new b,this.webClient=new b,this.zpl=new b}},TC=class extends pe{constructor(A){super(j,"print")}},PC=class extends pe{constructor(A){super(j,"printHighQuality")}},WC=class extends _A{constructor(A){super(j,"printScaling",["appdefault","noScaling"])}},OC=class extends qA{constructor(A){super(j,"printerName")}},ZC=class extends qA{constructor(A){super(j,"producer")}},jC=class extends J{constructor(A){super(j,"ps",!0),this.name=A.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.staple=null,this.xdc=null}},XC=class extends ce{constructor(A){super(j,"range")}[se](){this[P]=this[P].trim().split(/\\s*,\\s*/,2).map(A=>A.split("-").map(t=>parseInt(t.trim(),10))).filter(A=>A.every(t=>!isNaN(t))).map(A=>(A.length===1&&A.push(A[0]),A))}},VC=class extends ce{constructor(A){super(j,"record")}[se](){this[P]=this[P].trim();let A=parseInt(this[P],10);!isNaN(A)&&A>=0&&(this[P]=A)}},_C=class extends ce{constructor(A){super(j,"relevant")}[se](){this[P]=this[P].trim().split(/\\s+/)}},zC=class extends ce{constructor(A){super(j,"rename")}[se](){this[P]=this[P].trim(),(this[P].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[P]))&&k("XFA - Rename: invalid XFA name")}},$C=class extends _A{constructor(A){super(j,"renderPolicy",["server","client"])}},AB=class extends _A{constructor(A){super(j,"runScripts",["both","client","none","server"])}},eB=class extends J{constructor(A){super(j,"script",!0),this.currentPage=null,this.exclude=null,this.runScripts=null}},tB=class extends _A{constructor(A){super(j,"scriptModel",["XFA","none"])}},iB=class extends _A{constructor(A){super(j,"severity",["ignore","error","information","trace","warning"])}},sB=class extends J{constructor(A){super(j,"silentPrint",!0),this.addSilentPrint=null,this.printerName=null}},aB=class extends J{constructor(A){super(j,"staple"),this.mode=O(A.mode,["usePrinterSetting","on","off"])}},nB=class extends qA{constructor(A){super(j,"startNode")}},rB=class extends yt{constructor(A){super(j,"startPage",0,t=>!0)}},gB=class extends _A{constructor(A){super(j,"submitFormat",["html","delegate","fdf","xml","pdf"])}},oB=class extends qA{constructor(A){super(j,"submitUrl")}},IB=class extends yt{constructor(A){super(j,"subsetBelow",100,t=>t>=0&&t<=100)}},cB=class extends pe{constructor(A){super(j,"suppressBanner")}},lB=class extends pe{constructor(A){super(j,"tagged")}},hB=class extends J{constructor(A){super(j,"template",!0),this.base=null,this.relevant=null,this.startPage=null,this.uri=null,this.xsl=null}},CB=class extends _A{constructor(A){super(j,"threshold",["trace","error","information","warning"])}},BB=class extends _A{constructor(A){super(j,"to",["null","memory","stderr","stdout","system","uri"])}},QB=class extends J{constructor(A){super(j,"templateCache"),this.maxEntries=GA({data:A.maxEntries,defaultValue:5,validate:t=>t>=0})}},EB=class extends J{constructor(A){super(j,"trace",!0),this.area=new b}},fB=class extends J{constructor(A){super(j,"transform",!0),this.groupParent=null,this.ifEmpty=null,this.nameAttr=null,this.picture=null,this.presence=null,this.rename=null,this.whitespace=null}},uB=class extends _A{constructor(A){super(j,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}},dB=class extends qA{constructor(A){super(j,"uri")}},xB=class extends _A{constructor(A){super(j,"validate",["preSubmit","prePrint","preExecute","preSave"])}},mB=class extends ce{constructor(A){super(j,"validateApprovalSignatures")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>["docReady","postSign"].includes(A))}},pB=class extends _A{constructor(A){super(j,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}},wB=class extends _A{constructor(A){super(j,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}},yB=class extends J{constructor(A){super(j,"VersionControl"),this.outputBelow=O(A.outputBelow,["warn","error","update"]),this.sourceAbove=O(A.sourceAbove,["warn","error"]),this.sourceBelow=O(A.sourceBelow,["update","maintain"])}},bB=class extends J{constructor(A){super(j,"viewerPreferences",!0),this.ADBE_JSConsole=null,this.ADBE_JSDebugger=null,this.addViewerPreferences=null,this.duplexOption=null,this.enforce=null,this.numberOfCopies=null,this.pageRange=null,this.pickTrayByPDFSize=null,this.printScaling=null}},DB=class extends J{constructor(A){super(j,"webClient",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},kB=class extends _A{constructor(A){super(j,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}},SB=class extends ce{constructor(A){super(j,"window")}[se](){let A=this[P].trim().split(/\\s*,\\s*/,2).map(t=>parseInt(t,10));if(A.some(t=>isNaN(t))){this[P]=[0,0];return}A.length===1&&A.push(A[0]),this[P]=A}},FB=class extends J{constructor(A){super(j,"xdc",!0),this.uri=new b,this.xsl=new b}},RB=class extends J{constructor(A){super(j,"xdp",!0),this.packets=null}},NB=class extends J{constructor(A){super(j,"xsl",!0),this.debug=null,this.uri=null}},GB=class extends J{constructor(A){super(j,"zpl",!0),this.name=A.name?A.name.trim():"",this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},vs=class{static[Zt](A,t){if(vs.hasOwnProperty(A))return vs[A](t)}static acrobat(A){return new ih(A)}static acrobat7(A){return new sh(A)}static ADBE_JSConsole(A){return new ah(A)}static ADBE_JSDebugger(A){return new nh(A)}static addSilentPrint(A){return new rh(A)}static addViewerPreferences(A){return new gh(A)}static adjustData(A){return new oh(A)}static adobeExtensionLevel(A){return new Ih(A)}static agent(A){return new ch(A)}static alwaysEmbed(A){return new lh(A)}static amd(A){return new hh(A)}static area(A){return new Ch(A)}static attributes(A){return new Bh(A)}static autoSave(A){return new Qh(A)}static base(A){return new Eh(A)}static batchOutput(A){return new fh(A)}static behaviorOverride(A){return new uh(A)}static cache(A){return new dh(A)}static change(A){return new xh(A)}static common(A){return new mh(A)}static compress(A){return new ph(A)}static compressLogicalStructure(A){return new wh(A)}static compressObjectStream(A){return new yh(A)}static compression(A){return new bh(A)}static config(A){return new Dh(A)}static conformance(A){return new kh(A)}static contentCopy(A){return new Sh(A)}static copies(A){return new Fh(A)}static creator(A){return new Rh(A)}static currentPage(A){return new Nh(A)}static data(A){return new Gh(A)}static debug(A){return new Uh(A)}static defaultTypeface(A){return new Mh(A)}static destination(A){return new Lh(A)}static documentAssembly(A){return new Hh(A)}static driver(A){return new Jh(A)}static duplexOption(A){return new Yh(A)}static dynamicRender(A){return new Kh(A)}static embed(A){return new vh(A)}static encrypt(A){return new qh(A)}static encryption(A){return new Th(A)}static encryptionLevel(A){return new Ph(A)}static enforce(A){return new Wh(A)}static equate(A){return new Oh(A)}static equateRange(A){return new Zh(A)}static exclude(A){return new jh(A)}static excludeNS(A){return new Xh(A)}static flipLabel(A){return new Vh(A)}static fontInfo(A){return new _h(A)}static formFieldFilling(A){return new zh(A)}static groupParent(A){return new $h(A)}static ifEmpty(A){return new AC(A)}static includeXDPContent(A){return new eC(A)}static incrementalLoad(A){return new tC(A)}static incrementalMerge(A){return new iC(A)}static interactive(A){return new sC(A)}static jog(A){return new aC(A)}static labelPrinter(A){return new nC(A)}static layout(A){return new rC(A)}static level(A){return new gC(A)}static linearized(A){return new oC(A)}static locale(A){return new IC(A)}static localeSet(A){return new cC(A)}static log(A){return new lC(A)}static map(A){return new hC(A)}static mediumInfo(A){return new CC(A)}static message(A){return new BC(A)}static messaging(A){return new QC(A)}static mode(A){return new EC(A)}static modifyAnnots(A){return new fC(A)}static msgId(A){return new uC(A)}static nameAttr(A){return new dC(A)}static neverEmbed(A){return new xC(A)}static numberOfCopies(A){return new mC(A)}static openAction(A){return new pC(A)}static output(A){return new wC(A)}static outputBin(A){return new yC(A)}static outputXSL(A){return new bC(A)}static overprint(A){return new DC(A)}static packets(A){return new kC(A)}static pageOffset(A){return new SC(A)}static pageRange(A){return new FC(A)}static pagination(A){return new RC(A)}static paginationOverride(A){return new NC(A)}static part(A){return new GC(A)}static pcl(A){return new UC(A)}static pdf(A){return new MC(A)}static pdfa(A){return new LC(A)}static permissions(A){return new HC(A)}static pickTrayByPDFSize(A){return new JC(A)}static picture(A){return new YC(A)}static plaintextMetadata(A){return new KC(A)}static presence(A){return new vC(A)}static present(A){return new qC(A)}static print(A){return new TC(A)}static printHighQuality(A){return new PC(A)}static printScaling(A){return new WC(A)}static printerName(A){return new OC(A)}static producer(A){return new ZC(A)}static ps(A){return new jC(A)}static range(A){return new XC(A)}static record(A){return new VC(A)}static relevant(A){return new _C(A)}static rename(A){return new zC(A)}static renderPolicy(A){return new $C(A)}static runScripts(A){return new AB(A)}static script(A){return new eB(A)}static scriptModel(A){return new tB(A)}static severity(A){return new iB(A)}static silentPrint(A){return new sB(A)}static staple(A){return new aB(A)}static startNode(A){return new nB(A)}static startPage(A){return new rB(A)}static submitFormat(A){return new gB(A)}static submitUrl(A){return new oB(A)}static subsetBelow(A){return new IB(A)}static suppressBanner(A){return new cB(A)}static tagged(A){return new lB(A)}static template(A){return new hB(A)}static templateCache(A){return new QB(A)}static threshold(A){return new CB(A)}static to(A){return new BB(A)}static trace(A){return new EB(A)}static transform(A){return new fB(A)}static type(A){return new uB(A)}static uri(A){return new dB(A)}static validate(A){return new xB(A)}static validateApprovalSignatures(A){return new mB(A)}static validationMessaging(A){return new pB(A)}static version(A){return new wB(A)}static versionControl(A){return new yB(A)}static viewerPreferences(A){return new bB(A)}static webClient(A){return new DB(A)}static whitespace(A){return new kB(A)}static window(A){return new SB(A)}static xdc(A){return new FB(A)}static xdp(A){return new RB(A)}static xsl(A){return new NB(A)}static zpl(A){return new GB(A)}},Kt=me.connectionSet.id,UB=class extends J{constructor(A){super(Kt,"connectionSet",!0),this.wsdlConnection=new b,this.xmlConnection=new b,this.xsdConnection=new b}},MB=class extends J{constructor(A){super(Kt,"effectiveInputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},LB=class extends J{constructor(A){super(Kt,"effectiveOutputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},HB=class extends qA{constructor(A){super(Kt,"operation"),this.id=A.id||"",this.input=A.input||"",this.name=A.name||"",this.output=A.output||"",this.use=A.use||"",this.usehref=A.usehref||""}},JB=class extends qA{constructor(A){super(Kt,"rootElement"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},YB=class extends qA{constructor(A){super(Kt,"soapAction"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},KB=class extends qA{constructor(A){super(Kt,"soapAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},vB=class extends qA{constructor(A){super(Kt,"uri"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},qB=class extends qA{constructor(A){super(Kt,"wsdlAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},TB=class extends J{constructor(A){super(Kt,"wsdlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.effectiveInputPolicy=null,this.effectiveOutputPolicy=null,this.operation=null,this.soapAction=null,this.soapAddress=null,this.wsdlAddress=null}},PB=class extends J{constructor(A){super(Kt,"xmlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.uri=null}},WB=class extends J{constructor(A){super(Kt,"xsdConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.rootElement=null,this.uri=null}},qs=class{static[Zt](A,t){if(qs.hasOwnProperty(A))return qs[A](t)}static connectionSet(A){return new UB(A)}static effectiveInputPolicy(A){return new MB(A)}static effectiveOutputPolicy(A){return new LB(A)}static operation(A){return new HB(A)}static rootElement(A){return new JB(A)}static soapAction(A){return new YB(A)}static soapAddress(A){return new KB(A)}static uri(A){return new vB(A)}static wsdlAddress(A){return new qB(A)}static wsdlConnection(A){return new TB(A)}static xmlConnection(A){return new PB(A)}static xsdConnection(A){return new WB(A)}},OB=me.datasets.id,ZB=class extends Jt{constructor(A){super(OB,"data",A)}[ma](){return!0}},jB=class extends J{constructor(A){super(OB,"datasets",!0),this.data=null,this.Signature=null}[ni](A){let t=A[XA];(t==="data"&&A[de]===OB||t==="Signature"&&A[de]===me.signature.id)&&(this[t]=A),this[Be](A)}},Ts=class{static[Zt](A,t){if(Ts.hasOwnProperty(A))return Ts[A](t)}static datasets(A){return new jB(A)}static data(A){return new ZB(A)}},Qe=me.localeSet.id,XB=class extends J{constructor(A){super(Qe,"calendarSymbols",!0),this.name="gregorian",this.dayNames=new b(2),this.eraNames=null,this.meridiemNames=null,this.monthNames=new b(2)}},VB=class extends qA{constructor(A){super(Qe,"currencySymbol"),this.name=O(A.name,["symbol","isoname","decimal"])}},_B=class extends J{constructor(A){super(Qe,"currencySymbols",!0),this.currencySymbol=new b(3)}},zB=class extends qA{constructor(A){super(Qe,"datePattern"),this.name=O(A.name,["full","long","med","short"])}},$B=class extends J{constructor(A){super(Qe,"datePatterns",!0),this.datePattern=new b(4)}},AQ=class extends ce{constructor(A){super(Qe,"dateTimeSymbols")}},eQ=class extends qA{constructor(A){super(Qe,"day")}},tQ=class extends J{constructor(A){super(Qe,"dayNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.day=new b(7)}},iQ=class extends qA{constructor(A){super(Qe,"era")}},sQ=class extends J{constructor(A){super(Qe,"eraNames",!0),this.era=new b(2)}},aQ=class extends J{constructor(A){super(Qe,"locale",!0),this.desc=A.desc||"",this.name="isoname",this.calendarSymbols=null,this.currencySymbols=null,this.datePatterns=null,this.dateTimeSymbols=null,this.numberPatterns=null,this.numberSymbols=null,this.timePatterns=null,this.typeFaces=null}},nQ=class extends J{constructor(A){super(Qe,"localeSet",!0),this.locale=new b}},rQ=class extends qA{constructor(A){super(Qe,"meridiem")}},gQ=class extends J{constructor(A){super(Qe,"meridiemNames",!0),this.meridiem=new b(2)}},oQ=class extends qA{constructor(A){super(Qe,"month")}},IQ=class extends J{constructor(A){super(Qe,"monthNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.month=new b(12)}},cQ=class extends qA{constructor(A){super(Qe,"numberPattern"),this.name=O(A.name,["full","long","med","short"])}},lQ=class extends J{constructor(A){super(Qe,"numberPatterns",!0),this.numberPattern=new b(4)}},hQ=class extends qA{constructor(A){super(Qe,"numberSymbol"),this.name=O(A.name,["decimal","grouping","percent","minus","zero"])}},CQ=class extends J{constructor(A){super(Qe,"numberSymbols",!0),this.numberSymbol=new b(5)}},BQ=class extends qA{constructor(A){super(Qe,"timePattern"),this.name=O(A.name,["full","long","med","short"])}},QQ=class extends J{constructor(A){super(Qe,"timePatterns",!0),this.timePattern=new b(4)}},EQ=class extends J{constructor(A){super(Qe,"typeFace",!0),this.name=A.name|""}},fQ=class extends J{constructor(A){super(Qe,"typeFaces",!0),this.typeFace=new b}},Ps=class{static[Zt](A,t){if(Ps.hasOwnProperty(A))return Ps[A](t)}static calendarSymbols(A){return new XB(A)}static currencySymbol(A){return new VB(A)}static currencySymbols(A){return new _B(A)}static datePattern(A){return new zB(A)}static datePatterns(A){return new $B(A)}static dateTimeSymbols(A){return new AQ(A)}static day(A){return new eQ(A)}static dayNames(A){return new tQ(A)}static era(A){return new iQ(A)}static eraNames(A){return new sQ(A)}static locale(A){return new aQ(A)}static localeSet(A){return new nQ(A)}static meridiem(A){return new rQ(A)}static meridiemNames(A){return new gQ(A)}static month(A){return new oQ(A)}static monthNames(A){return new IQ(A)}static numberPattern(A){return new cQ(A)}static numberPatterns(A){return new lQ(A)}static numberSymbol(A){return new hQ(A)}static numberSymbols(A){return new CQ(A)}static timePattern(A){return new BQ(A)}static timePatterns(A){return new QQ(A)}static typeFace(A){return new EQ(A)}static typeFaces(A){return new fQ(A)}},gx=me.signature.id,uQ=class extends J{constructor(A){super(gx,"signature",!0)}},Ws=class{static[Zt](A,t){if(Ws.hasOwnProperty(A))return Ws[A](t)}static signature(A){return new uQ(A)}},ox=me.stylesheet.id,dQ=class extends J{constructor(A){super(ox,"stylesheet",!0)}},Os=class{static[Zt](A,t){if(Os.hasOwnProperty(A))return Os[A](t)}static stylesheet(A){return new dQ(A)}},Ix=me.xdp.id,xQ=class extends J{constructor(A){super(Ix,"xdp",!0),this.uuid=A.uuid||"",this.timeStamp=A.timeStamp||"",this.config=null,this.connectionSet=null,this.datasets=null,this.localeSet=null,this.stylesheet=new b,this.template=null}[Ec](A){let t=me[A[XA]];return t&&A[de]===t.id}},Zs=class{static[Zt](A,t){if(Zs.hasOwnProperty(A))return Zs[A](t)}static xdp(A){return new xQ(A)}},cx=me.xhtml.id,Vn=Symbol(),lx=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),hx=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>e==="none"?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,A)=>(e=A.fontSize=hA(e),NA(.99*e))],["letter-spacing",e=>NA(hA(e))],["line-height",e=>NA(hA(e))],["margin",e=>NA(hA(e))],["margin-bottom",e=>NA(hA(e))],["margin-left",e=>NA(hA(e))],["margin-right",e=>NA(hA(e))],["margin-top",e=>NA(hA(e))],["text-indent",e=>NA(hA(e))],["font-family",e=>e],["vertical-align",e=>NA(hA(e))]]),Cx=/\\s+/g,Bx=/[\\r\\n]+/g,Qx=/\\r\\n?/g;function Ex(e,A,t){let i=Object.create(null);if(!e)return i;let s=Object.create(null);for(let[a,n]of e.split(";").map(r=>r.split(":",2))){let r=hx.get(a);if(r==="")continue;let g=n;r&&(g=typeof r=="string"?r:r(n,s)),a.endsWith("scale")?i.transform=i.transform?`${i[a]} ${g}`:g:i[a.replaceAll(/-([a-zA-Z])/g,(o,I)=>I.toUpperCase())]=g}if(i.fontFamily&&tu({typeface:i.fontFamily,weight:i.fontWeight||"normal",posture:i.fontStyle||"normal",size:s.fontSize||0},A,A[ie].fontFinder,i),t&&i.verticalAlign&&i.verticalAlign!=="0px"&&i.fontSize){let r=hA(i.fontSize);i.fontSize=NA(r*.583),i.verticalAlign=NA(Math.sign(hA(i.verticalAlign))*r*.333)}return t&&i.fontSize&&(i.fontSize=`calc(${i.fontSize} * var(--scale-factor))`),$f(i),i}function fx(e){return e.style?e.style.trim().split(/\\s*;\\s*/).filter(A=>!!A).map(A=>A.split(/\\s*:\\s*/,2)).filter(([A,t])=>(A==="font-family"&&e[ie].usedTypefaces.add(t),lx.has(A))).map(A=>A.join(":")).join(";"):""}var ux=new Set(["body","html"]),ct=class extends Jt{constructor(A,t){super(cx,t),this[Vn]=!1,this.style=A.style||""}[Yt](A){super[Yt](A),this.style=fx(this)}[eo](){return!ux.has(this[XA])}[xi](A,t=!1){t?this[Vn]=!0:(A=A.replaceAll(Bx,""),this.style.includes("xfa-spacerun:yes")||(A=A.replaceAll(Cx," "))),A&&(this[P]+=A)}[ri](A,t=!0){let i=Object.create(null),s={top:NaN,bottom:NaN,left:NaN,right:NaN},a=null;for(let[n,r]of this.style.split(";").map(g=>g.split(":",2)))switch(n){case"font-family":i.typeface=io(r);break;case"font-size":i.size=hA(r);break;case"font-weight":i.weight=r;break;case"font-style":i.posture=r;break;case"letter-spacing":i.letterSpacing=hA(r);break;case"margin":let g=r.split(/ \\t/).map(o=>hA(o));switch(g.length){case 1:s.top=s.bottom=s.left=s.right=g[0];break;case 2:s.top=s.bottom=g[0],s.left=s.right=g[1];break;case 3:s.top=g[0],s.bottom=g[2],s.left=s.right=g[1];break;case 4:s.top=g[0],s.left=g[1],s.bottom=g[2],s.right=g[3];break}break;case"margin-top":s.top=hA(r);break;case"margin-bottom":s.bottom=hA(r);break;case"margin-left":s.left=hA(r);break;case"margin-right":s.right=hA(r);break;case"line-height":a=hA(r);break}if(A.pushData(i,s,a),this[P])A.addString(this[P]);else for(let n of this[Ue]()){if(n[XA]==="#text"){A.addString(n[P]);continue}n[ri](A)}t&&A.popFont()}[SA](A){let t=[];if(this[L]={children:t},this[_i]({}),t.length===0&&!this[P])return dA.EMPTY;let i;return this[Vn]?i=this[P]?this[P].replaceAll(Qx,`\n`):void 0:i=this[P]||void 0,dA.success({name:this[XA],attributes:{href:this.href,style:Ex(this.style,this,this[Vn])},children:t,value:i})}},mQ=class extends ct{constructor(A){super(A,"a"),this.href=iu(A.href)||""}},pQ=class extends ct{constructor(A){super(A,"b")}[ri](A){A.pushFont({weight:"bold"}),super[ri](A),A.popFont()}},wQ=class extends ct{constructor(A){super(A,"body")}[SA](A){let t=super[SA](A),{html:i}=t;return i?(i.name="div",i.attributes.class=["xfaRich"],t):dA.EMPTY}},yQ=class extends ct{constructor(A){super(A,"br")}[Se](){return`\n`}[ri](A){A.addString(`\n`)}[SA](A){return dA.success({name:"br"})}},bQ=class extends ct{constructor(A){super(A,"html")}[SA](A){var i;let t=[];if(this[L]={children:t},this[_i]({}),t.length===0)return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[P]||""});if(t.length===1){let s=t[0];if((i=s.attributes)!=null&&i.class.includes("xfaRich"))return dA.success(s)}return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}},DQ=class extends ct{constructor(A){super(A,"i")}[ri](A){A.pushFont({posture:"italic"}),super[ri](A),A.popFont()}},kQ=class extends ct{constructor(A){super(A,"li")}},SQ=class extends ct{constructor(A){super(A,"ol")}},FQ=class extends ct{constructor(A){super(A,"p")}[ri](A){super[ri](A,!1),A.addString(`\n`),A.addPara(),A.popFont()}[Se](){return this[MA]()[Ue]().at(-1)===this?super[Se]():super[Se]()+`\n`}},RQ=class extends ct{constructor(A){super(A,"span")}},NQ=class extends ct{constructor(A){super(A,"sub")}},GQ=class extends ct{constructor(A){super(A,"sup")}},UQ=class extends ct{constructor(A){super(A,"ul")}},$i=class{static[Zt](A,t){if($i.hasOwnProperty(A))return $i[A](t)}static a(A){return new mQ(A)}static b(A){return new pQ(A)}static body(A){return new wQ(A)}static br(A){return new yQ(A)}static html(A){return new bQ(A)}static i(A){return new DQ(A)}static li(A){return new kQ(A)}static ol(A){return new SQ(A)}static p(A){return new FQ(A)}static span(A){return new RQ(A)}static sub(A){return new NQ(A)}static sup(A){return new GQ(A)}static ul(A){return new UQ(A)}},HE={config:vs,connection:qs,datasets:Ts,localeSet:Ps,signature:Ws,stylesheet:Os,template:Ks,xdp:Zs,xhtml:$i},Qg=class{constructor(A){this.namespaceId=A}[Zt](A,t){return new Jt(this.namespaceId,A,t)}},MQ=class extends J{constructor(A){super(-1,"root",Object.create(null)),this.element=null,this[As]=A}[ni](A){return this.element=A,!0}[se](){super[se](),this.element.template instanceof tn&&(this[As].set(Pf,this.element),this.element.template[ha](this[As]),this.element.template[As]=this[As])}},LQ=class extends J{constructor(){super(-1,"",Object.create(null))}[ni](A){return!1}},HQ=class{constructor(A=null){this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max(...Object.values(me).map(({id:t})=>t)),this._currentNamespace=A||new Qg(++this._nextNsId)}buildRoot(A){return new MQ(A)}build({nsPrefix:A,name:t,attributes:i,namespace:s,prefixes:a}){let n=s!==null;if(n&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),a&&this._addNamespacePrefix(a),i.hasOwnProperty(qi)){let o=HE.datasets,I=i[qi],c=null;for(let[l,h]of Object.entries(I))if(this._getNamespaceToUse(l)===o){c={xfa:h};break}c?i[qi]=c:delete i[qi]}let r=this._getNamespaceToUse(A),g=(r==null?void 0:r[Zt](t,i))||new LQ;return g[ma]()&&this._nsAgnosticLevel++,(n||a||g[ma]())&&(g[cr]={hasNamespace:n,prefixes:a,nsAgnostic:g[ma]()}),g}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(A){let t=this._namespaces.get(A);if(t)return t;for(let[i,{check:s}]of Object.entries(me))if(s(A)){if(t=HE[i],t)return this._namespaces.set(A,t),t;break}return t=new Qg(++this._nextNsId),this._namespaces.set(A,t),t}_addNamespacePrefix(A){for(let{prefix:t,value:i}of A){let s=this._searchNamespace(i),a=this._namespacePrefixes.get(t);a||(a=[],this._namespacePrefixes.set(t,a)),a.push(s)}}_getNamespaceToUse(A){if(!A)return this._currentNamespace;let t=this._namespacePrefixes.get(A);return(t==null?void 0:t.length)>0?t.at(-1):(k(`Unknown namespace prefix: ${A}.`),null)}clean(A){let{hasNamespace:t,prefixes:i,nsAgnostic:s}=A;t&&(this._currentNamespace=this._namespaceStack.pop()),i&&i.forEach(({prefix:a})=>{this._namespacePrefixes.get(a).pop()}),s&&this._nsAgnosticLevel--}},js=class extends jr{constructor(A=null,t=!1){super(),this._builder=new HQ(A),this._stack=[],this._globalData={usedTypefaces:new Set},this._ids=new Map,this._current=this._builder.buildRoot(this._ids),this._errorCode=ht.NoError,this._whiteRegex=/^\\s+$/,this._nbsps=/\\xa0+/g,this._richText=t}parse(A){if(this.parseXml(A),this._errorCode===ht.NoError)return this._current[se](),this._current.element}onText(A){if(A=A.replace(this._nbsps,t=>t.slice(1)+" "),this._richText||this._current[eo]()){this._current[xi](A,this._richText);return}this._whiteRegex.test(A)||this._current[xi](A.trim())}onCdata(A){this._current[xi](A)}_mkAttributes(A,t){let i=null,s=null,a=Object.create({});for(let{name:n,value:r}of A)if(n==="xmlns")i?k(`XFA - multiple namespace definition in <${t}>`):i=r;else if(n.startsWith("xmlns:")){let g=n.substring(6);s||(s=[]),s.push({prefix:g,value:r})}else{let g=n.indexOf(":");if(g===-1)a[n]=r;else{let o=a[qi];o||(o=a[qi]=Object.create(null));let[I,c]=[n.slice(0,g),n.slice(g+1)],l=o[I]||(o[I]=Object.create(null));l[c]=r}}return[i,s,a]}_getNameAndPrefix(A,t){let i=A.indexOf(":");return i===-1?[A,null]:[A.substring(i+1),t?"":A.substring(0,i)]}onBeginElement(A,t,i){let[s,a,n]=this._mkAttributes(t,A),[r,g]=this._getNameAndPrefix(A,this._builder.isNsAgnostic()),o=this._builder.build({nsPrefix:g,name:r,attributes:n,namespace:s,prefixes:a});if(o[ie]=this._globalData,i){o[se](),this._current[ni](o)&&o[fc](this._ids),o[Yt](this._builder);return}this._stack.push(this._current),this._current=o}onEndElement(A){let t=this._current;if(t[d1]()&&typeof t[P]=="string"){let i=new js;i._globalData=this._globalData;let s=i.parse(t[P]);t[P]=null,t[ni](s)}t[se](),this._current=this._stack.pop(),this._current[ni](t)&&t[fc](this._ids),t[Yt](this._builder)}onError(A){this._errorCode=A}},M0=class{constructor(A){try{this.root=new js().parse(M0._createDocument(A));let t=new eh(this.root);this.form=t.bind(),this.dataHandler=new th(this.root,t.getData()),this.form[ie].template=this.form}catch(t){k(`XFA - an error occurred during parsing and binding: ${t}`)}}isValid(){return this.root&&this.form}_createPagesHelper(){let A=this.form[Of]();return new Promise((t,i)=>{let s=()=>{try{let a=A.next();a.done?t(a.value):setTimeout(s,0)}catch(a){i(a)}};setTimeout(s,0)})}async _createPages(){try{this.pages=await this._createPagesHelper(),this.dims=this.pages.children.map(A=>{let{width:t,height:i}=A.attributes.style;return[0,0,parseInt(t),parseInt(i)]})}catch(A){k(`XFA - an error occurred during layout: ${A}`)}}getBoundingBox(A){return this.dims[A]}async getNumPages(){return this.pages||await this._createPages(),this.dims.length}setImages(A){this.form[ie].images=A}setFonts(A){this.form[ie].fontFinder=new uc(A);let t=[];for(let i of this.form[ie].usedTypefaces)i=io(i),this.form[ie].fontFinder.find(i)||t.push(i);return t.length>0?t:null}appendFonts(A,t){this.form[ie].fontFinder.add(A,t)}async getPages(){this.pages||await this._createPages();let A=this.pages;return this.pages=null,A}serializeData(A){return this.dataHandler.serialize(A)}static _createDocument(A){return A["/xdp:xdp"]?Object.values(A).join(""):A["xdp:xdp"]}static getRichTextAsHtml(A){if(!A||typeof A!="string")return null;try{let t=new js($i,!0).parse(A);if(!["body","xhtml"].includes(t[XA])){let n=$i.body({});n[Be](t),t=n}let i=t[SA]();if(!i.success)return null;let{html:s}=i,{attributes:a}=s;return a&&(a.class&&(a.class=a.class.filter(n=>!n.startsWith("xfa"))),a.dir="auto"),{html:s,str:t[Se]()}}catch(t){k(`XFA - an error occurred during parsing of rich text: ${t}`)}return null}},ei=class{static createGlobals(A){return Promise.all([A.ensureCatalog("acroForm"),A.ensureDoc("xfaDatasets"),A.ensureCatalog("structTreeRoot"),A.ensureCatalog("baseUrl"),A.ensureCatalog("attachments")]).then(([t,i,s,a,n])=>({pdfManager:A,acroForm:t instanceof F?t:F.empty,xfaDatasets:i,structTreeRoot:s,baseUrl:a,attachments:n}),t=>(k(`createGlobals: "${t}".`),null))}static async create(A,t,i,s,a,n){let r=a?await this._getPageIndex(A,t,i.pdfManager):null;return i.pdfManager.ensure(this,"_create",[A,t,i,s,a,r,n])}static _create(A,t,i,s,a=!1,n=null,r=null){let g=A.fetchIfRef(t);if(!(g instanceof F))return;let{acroForm:o,pdfManager:I}=i,c=t instanceof oA?t.toString():`annot_${s.createObjId()}`,l=g.get("Subtype");l=l instanceof M?l.name:null;let h={xref:A,ref:t,dict:g,subtype:l,id:c,annotationGlobals:i,collectFields:a,needAppearances:!a&&o.get("NeedAppearances")===!0,pageIndex:n,evaluatorOptions:I.evaluatorOptions,pageRef:r};switch(l){case"Link":return new PQ(h);case"Text":return new TQ(h);case"Widget":let C=Mt({dict:g,key:"FT"});switch(C=C instanceof M?C.name:null,C){case"Tx":return new KQ(h);case"Btn":return new vQ(h);case"Ch":return new qQ(h);case"Sig":return new Eg(h)}return k(`Unimplemented widget field type "${C}", falling back to base field type.`),new bt(h);case"Popup":return new fg(h);case"FreeText":return new wa(h);case"Line":return new WQ(h);case"Square":return new OQ(h);case"Circle":return new ZQ(h);case"PolyLine":return new ug(h);case"Polygon":return new dg(h);case"Caret":return new jQ(h);case"Ink":return new l0(h);case"Highlight":return new ya(h);case"Underline":return new XQ(h);case"Squiggly":return new VQ(h);case"StrikeOut":return new _Q(h);case"Stamp":return new gs(h);case"FileAttachment":return new zQ(h);default:return a||k(l?`Unimplemented annotation type "${l}", falling back to base annotation.`:"Annotation is missing the required /Subtype."),new L0(h)}}static async _getPageIndex(A,t,i){try{let s=await A.fetchIfRefAsync(t);if(!(s instanceof F))return-1;let a=s.getRaw("P");if(a instanceof oA)try{return await i.ensureCatalog("getPageIndex",[a])}catch(r){PA(`_getPageIndex -- not a valid page reference: "${r}".`)}if(s.has("Kids"))return-1;let n=await i.ensureDoc("numPages");for(let r=0;rA/255)}function bn(e,A){let t=e.getArray("QuadPoints");if(!wt(t,null)||t.length===0||t.length%8>0)return null;let i=new Float32Array(t.length);for(let s=0,a=t.length;sA[2]||QA[3]))return null;i.set([C,E,B,E,C,Q,B,Q],s)}return i}function JQ(e,A,t){let[i,s,a,n]=Ce.getAxialAlignedBoundingBox(A,t);if(i===a||s===n)return[1,0,0,1,e[0],e[1]];let r=(e[2]-e[0])/(a-i),g=(e[3]-e[1])/(n-s);return[r,0,0,g,e[0]-i*r,e[1]-s*g]}var L0=class{constructor(A){let{dict:t,xref:i,annotationGlobals:s}=A;this.setTitle(t.get("T")),this.setContents(t.get("Contents")),this.setModificationDate(t.get("M")),this.setFlags(t.get("F")),this.setRectangle(t.getArray("Rect")),this.setColor(t.getArray("C")),this.setBorderStyle(t),this.setAppearance(t),this.setOptionalContent(t);let a=t.get("MK");this.setBorderAndBackgroundColors(a),this.setRotation(a,t),this.ref=A.ref instanceof oA?A.ref:null,this._streams=[],this.appearance&&this._streams.push(this.appearance);let n=!!(this.flags&it.LOCKED),r=!!(this.flags&it.LOCKEDCONTENTS);if(s.structTreeRoot){let g=t.get("StructParent");g=Number.isInteger(g)&&g>=0?g:-1,s.structTreeRoot.addAnnotationIdToPage(A.pageRef,g)}if(this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:A.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:A.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&it.NOROTATE),noHTML:n&&r,isEditable:!1},A.collectFields){let g=t.get("Kids");if(Array.isArray(g)){let o=[];for(let I of g)I instanceof oA&&o.push(I.toString());o.length!==0&&(this.data.kidIds=o)}this.data.actions=Vg(i,t,WE),this.data.fieldName=this._constructFieldName(t),this.data.pageIndex=A.pageIndex}this._isOffscreenCanvasSupported=A.evaluatorOptions.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}_hasFlag(A,t){return!!(A&t)}_isViewable(A){return!this._hasFlag(A,it.INVISIBLE)&&!this._hasFlag(A,it.NOVIEW)}_isPrintable(A){return this._hasFlag(A,it.PRINT)&&!this._hasFlag(A,it.HIDDEN)&&!this._hasFlag(A,it.INVISIBLE)}mustBeViewed(A,t){var s;let i=(s=A==null?void 0:A.get(this.data.id))==null?void 0:s.noView;return i!==void 0?!i:this.viewable&&!this._hasFlag(this.flags,it.HIDDEN)}mustBePrinted(A){var i;let t=(i=A==null?void 0:A.get(this.data.id))==null?void 0:i.noPrint;return t!==void 0?!t:this.printable}mustBeViewedWhenEditing(A,t=null){return A?!this.data.isEditable:!(t!=null&&t.has(this.data.id))}get viewable(){return this.data.quadPoints===null?!1:this.flags===0?!0:this._isViewable(this.flags)}get printable(){return this.data.quadPoints===null||this.flags===0?!1:this._isPrintable(this.flags)}_parseStringHelper(A){let t=typeof A=="string"?jA(A):"",i=t&&yf(t).dir==="rtl"?"rtl":"ltr";return{str:t,dir:i}}setDefaultAppearance(A){let{dict:t,annotationGlobals:i}=A,s=Mt({dict:t,key:"DA"})||i.acroForm.get("DA");this._defaultAppearance=typeof s=="string"?s:"",this.data.defaultAppearanceData=Q1(this._defaultAppearance)}setTitle(A){this._title=this._parseStringHelper(A)}setContents(A){this._contents=this._parseStringHelper(A)}setModificationDate(A){this.modificationDate=typeof A=="string"?A:null}setFlags(A){this.flags=Number.isInteger(A)&&A>0?A:0,this.flags&it.INVISIBLE&&this.constructor.name!=="Annotation"&&(this.flags^=it.INVISIBLE)}hasFlag(A){return this._hasFlag(this.flags,A)}setRectangle(A){this.rectangle=Ei(A,[0,0,0,0])}setColor(A){this.color=Qs(A)}setLineEndings(A){if(this.lineEndings=["None","None"],Array.isArray(A)&&A.length===2)for(let t=0;t<2;t++){let i=A[t];if(i instanceof M)switch(i.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=i.name;continue}k(`Ignoring invalid lineEnding: ${i}`)}}setRotation(A,t){this.rotation=0;let i=A instanceof F?A.get("R")||0:t.get("Rotate")||0;Number.isInteger(i)&&i!==0&&(i%=360,i<0&&(i+=360),i%90===0&&(this.rotation=i))}setBorderAndBackgroundColors(A){A instanceof F?(this.borderColor=Qs(A.getArray("BC"),null),this.backgroundColor=Qs(A.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}setBorderStyle(A){if(this.borderStyle=new YQ,A instanceof F)if(A.has("BS")){let t=A.get("BS");if(t instanceof F){let i=t.get("Type");(!i||ye(i,"Border"))&&(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}}else if(A.has("Border")){let t=A.getArray("Border");Array.isArray(t)&&t.length>=3&&(this.borderStyle.setHorizontalCornerRadius(t[0]),this.borderStyle.setVerticalCornerRadius(t[1]),this.borderStyle.setWidth(t[2],this.rectangle),t.length===4&&this.borderStyle.setDashArray(t[3],!0))}else this.borderStyle.setWidth(0)}setAppearance(A){this.appearance=null;let t=A.get("AP");if(!(t instanceof F))return;let i=t.get("N");if(i instanceof KA){this.appearance=i;return}if(!(i instanceof F))return;let s=A.get("AS");if(!(s instanceof M)||!i.has(s.name))return;let a=i.get(s.name);a instanceof KA&&(this.appearance=a)}setOptionalContent(A){this.oc=null;let t=A.get("OC");t instanceof M?k("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof F&&(this.oc=t)}loadResources(A,t){return t.dict.getAsync("Resources").then(i=>i?new Hs(i,A,i.xref).load().then(function(){return i}):void 0)}async getOperatorList(A,t,i,s){let{hasOwnCanvas:a,id:n,rect:r}=this.data,g=this.appearance,o=!!(a&&i&st.DISPLAY);if(o&&(r[0]===r[2]||r[1]===r[3]))return this.data.hasOwnCanvas=!1,{opList:new ze,separateForm:!1,separateCanvas:!1};if(!g){if(!o)return{opList:new ze,separateForm:!1,separateCanvas:!1};g=new It(""),g.dict=new F}let I=g.dict,c=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],g),l=Ko(I.getArray("BBox"),[0,0,1,1]),h=Ki(I.getArray("Matrix"),Wt),C=JQ(r,l,h),B=new ze,Q;return this.oc&&(Q=await A.parseMarkedContentProps(this.oc,null)),Q!==void 0&&B.addOp(y.beginMarkedContentProps,["OC",Q]),B.addOp(y.beginAnnotation,[n,r,C,h,o]),await A.getOperatorList({stream:g,task:t,resources:c,operatorList:B,fallbackFontDict:this._fallbackFontDict}),B.addOp(y.endAnnotation,[]),Q!==void 0&&B.addOp(y.endMarkedContent,[]),this.reset(),{opList:B,separateForm:!1,separateCanvas:o}}async save(A,t,i){return null}get hasTextContent(){return!1}async extractTextContent(A,t,i){if(!this.appearance)return;let s=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),a=[],n=[],r=null,g={desiredSize:Math.Infinity,ready:!0,enqueue(o,I){for(let c of o.items)c.str!==void 0&&(r||(r=c.transform.slice(-2)),n.push(c.str),c.hasEOL&&(a.push(n.join("").trimEnd()),n.length=0))}};if(await A.getTextContent({stream:this.appearance,task:t,resources:s,includeMarkedContent:!0,keepWhiteSpace:!0,sink:g,viewBox:i}),this.reset(),n.length&&a.push(n.join("").trimEnd()),a.length>1||a[0]){let o=this.appearance.dict,I=Ko(o.getArray("BBox"),null),c=Ki(o.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(r,I,c),this.data.textContent=a}}_transformPoint(A,t,i){let{rect:s}=this.data;t||(t=[0,0,1,1]),i||(i=[1,0,0,1,0,0]);let a=JQ(s,t,i);return a[4]-=s[0],a[5]-=s[1],A=Ce.applyTransform(A,a),Ce.applyTransform(A,i)}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(let A of this._streams)A.reset()}_constructFieldName(A){if(!A.has("T")&&!A.has("Parent"))return k("Unknown field name, falling back to empty field name."),"";if(!A.has("Parent"))return jA(A.get("T"));let t=[];A.has("T")&&t.unshift(jA(A.get("T")));let i=A,s=new be;for(A.objId&&s.put(A.objId);i.has("Parent")&&(i=i.get("Parent"),!(!(i instanceof F)||i.objId&&s.has(i.objId)));)i.objId&&s.put(i.objId),i.has("T")&&t.unshift(jA(i.get("T")));return t.join(".")}},YQ=class{constructor(){this.width=1,this.style=Y0.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}setWidth(A,t=[0,0,0,0]){if(A instanceof M){this.width=0;return}if(typeof A=="number"){if(A>0){let i=(t[2]-t[0])/2,s=(t[3]-t[1])/2;i>0&&s>0&&(A>i||A>s)&&(k(`AnnotationBorderStyle.setWidth - ignoring width: ${A}`),A=1)}this.width=A}}setStyle(A){if(A instanceof M)switch(A.name){case"S":this.style=Y0.SOLID;break;case"D":this.style=Y0.DASHED;break;case"B":this.style=Y0.BEVELED;break;case"I":this.style=Y0.INSET;break;case"U":this.style=Y0.UNDERLINE;break;default:break}}setDashArray(A,t=!1){if(Array.isArray(A)){let i=!0,s=!0;for(let a of A)if(+a>=0)a>0&&(s=!1);else{i=!1;break}A.length===0||i&&!s?(this.dashArray=A,t&&this.setStyle(M.get("D"))):this.width=0}else A&&(this.width=0)}setHorizontalCornerRadius(A){Number.isInteger(A)&&(this.horizontalCornerRadius=A)}setVerticalCornerRadius(A){Number.isInteger(A)&&(this.verticalCornerRadius=A)}},$e=class extends L0{constructor(A){super(A);let{dict:t}=A;if(t.has("IRT")){let s=t.getRaw("IRT");this.data.inReplyTo=s instanceof oA?s.toString():null;let a=t.get("RT");this.data.replyType=a instanceof M?a.name:Ho.REPLY}let i=null;if(this.data.replyType===Ho.GROUP){let s=t.get("IRT");this.setTitle(s.get("T")),this.data.titleObj=this._title,this.setContents(s.get("Contents")),this.data.contentsObj=this._contents,s.has("CreationDate")?(this.setCreationDate(s.get("CreationDate")),this.data.creationDate=this.creationDate):this.data.creationDate=null,s.has("M")?(this.setModificationDate(s.get("M")),this.data.modificationDate=this.modificationDate):this.data.modificationDate=null,i=s.getRaw("Popup"),s.has("C")?(this.setColor(s.getArray("C")),this.data.color=this.color):this.data.color=null}else this.data.titleObj=this._title,this.setCreationDate(t.get("CreationDate")),this.data.creationDate=this.creationDate,i=t.getRaw("Popup"),t.has("C")||(this.data.color=null);this.data.popupRef=i instanceof oA?i.toString():null,t.has("RC")&&(this.data.richText=M0.getRichTextAsHtml(t.get("RC")))}setCreationDate(A){this.creationDate=typeof A=="string"?A:null}_setDefaultAppearance({xref:A,extra:t,strokeColor:i,fillColor:s,blendMode:a,strokeAlpha:n,fillAlpha:r,pointsCallback:g}){let o=Number.MAX_VALUE,I=Number.MAX_VALUE,c=Number.MIN_VALUE,l=Number.MIN_VALUE,h=["q"];t&&h.push(t),i&&h.push(`${i[0]} ${i[1]} ${i[2]} RG`),s&&h.push(`${s[0]} ${s[1]} ${s[2]} rg`);let C=this.data.quadPoints;C||(C=Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]));for(let m=0,D=C.length;mtypeof t=="string").map(t=>jA(t)):A instanceof M?jA(A.name):typeof A=="string"?jA(A):null}hasFieldFlag(A){return!!(this.data.fieldFlags&A)}_isViewable(A){return!0}mustBeViewed(A,t){return t?this.viewable:super.mustBeViewed(A,t)&&!this._hasFlag(this.flags,it.NOVIEW)}getRotationMatrix(A){var a;let t=(a=A==null?void 0:A.get(this.data.id))==null?void 0:a.rotation;if(t===void 0&&(t=this.rotation),t===0)return Wt;let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1];return xr(t,i,s)}getBorderAndBackgroundAppearances(A){var r;let t=(r=A==null?void 0:A.get(this.data.id))==null?void 0:r.rotation;if(t===void 0&&(t=this.rotation),!this.backgroundColor&&!this.borderColor)return"";let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1],a=t===0||t===180?`0 0 ${i} ${s} re`:`0 0 ${s} ${i} re`,n="";if(this.backgroundColor&&(n=`${mi(this.backgroundColor,!0)} ${a} f `),this.borderColor){let g=this.borderStyle.width||1;n+=`${g} w ${mi(this.borderColor,!1)} ${a} S `}return n}async getOperatorList(A,t,i,s){if(i&st.ANNOTATIONS_FORMS&&!(this instanceof Eg)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new ze,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(A,t,i,s);let a=await this._getAppearance(A,t,i,s);if(this.appearance&&a===null)return super.getOperatorList(A,t,i,s);let n=new ze;if(!this._defaultAppearance||a===null)return{opList:n,separateForm:!1,separateCanvas:!1};let r=!!(this.data.hasOwnCanvas&&i&st.DISPLAY),g=[1,0,0,1,0,0],o=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],I=JQ(this.data.rect,o,g),c;this.oc&&(c=await A.parseMarkedContentProps(this.oc,null)),c!==void 0&&n.addOp(y.beginMarkedContentProps,["OC",c]),n.addOp(y.beginAnnotation,[this.data.id,this.data.rect,I,this.getRotationMatrix(s),r]);let l=new It(a);return await A.getOperatorList({stream:l,task:t,resources:this._fieldResources.mergedResources,operatorList:n}),n.addOp(y.endAnnotation,[]),c!==void 0&&n.addOp(y.endMarkedContent,[]),{opList:n,separateForm:!1,separateCanvas:r}}_getMKDict(A){let t=new F(null);return A&&t.set("R",A),this.borderColor&&t.set("BC",ft(this.borderColor)),this.backgroundColor&&t.set("BG",ft(this.backgroundColor)),t.size>0?t:null}amendSavedDict(A,t){}async save(A,t,i){let s=i==null?void 0:i.get(this.data.id),a=s==null?void 0:s.value,n=s==null?void 0:s.rotation;if(a===this.data.fieldValue||a===void 0){if(!this._hasValueFromXFA&&n===void 0)return null;a||(a=this.data.fieldValue)}if(n===void 0&&!this._hasValueFromXFA&&Array.isArray(a)&&Array.isArray(this.data.fieldValue)&&a.length===this.data.fieldValue.length&&a.every((Q,E)=>Q===this.data.fieldValue[E]))return null;n===void 0&&(n=this.rotation);let r=null;if(!this._needAppearances&&(r=await this._getAppearance(A,t,st.SAVE,i),r===null))return null;let g=!1;r!=null&&r.needAppearances&&(g=!0,r=null);let{xref:o}=A,I=o.fetchIfRef(this.ref);if(!(I instanceof F))return null;let c=new F(o);for(let Q of I.getKeys())Q!=="AP"&&c.set(Q,I.getRaw(Q));let l={path:this.data.fieldName,value:a};c.set("V",Array.isArray(a)?a.map(ii):ii(a)),this.amendSavedDict(i,c);let h=this._getMKDict(n);h&&c.set("MK",h);let C=[],B=[{ref:this.ref,data:"",xfa:l,needAppearances:g}];if(r!==null){let Q=o.getNewTemporaryRef(),E=new F(o);c.set("AP",E),E.set("N",Q);let f=this._getSaveFieldResources(o),u=new It(r),d=u.dict=new F(o);d.set("Subtype",M.get("Form")),d.set("Resources",f),d.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);let x=this.getRotationMatrix(i);x!==Wt&&d.set("Matrix",x),await ot(Q,u,C,o),B.push({ref:Q,data:C.join(""),xfa:null,needAppearances:!1}),C.length=0}return c.set("M",`D:${Zi()}`),await ot(this.ref,c,C,o),B[0].data=C.join(""),B}async _getAppearance(A,t,i,s){if(this.hasFieldFlag(Te.PASSWORD))return null;let n=s==null?void 0:s.get(this.data.id),r,g;if(n&&(r=n.formattedValue||n.value,g=n.rotation),g===void 0&&r===void 0&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;let o=this.getBorderAndBackgroundAppearances(s);if(r===void 0&&(r=this.data.fieldValue,!r))return`/Tx BMC q ${o}Q EMC`;if(Array.isArray(r)&&r.length===1&&(r=r[0]),gt(typeof r=="string","Expected `value` to be a string."),r=r.trim(),this.data.combo){let U=this.data.options.find(({exportValue:K})=>r===K);r=(U==null?void 0:U.displayValue)||r}if(r==="")return`/Tx BMC q ${o}Q EMC`;g===void 0&&(g=this.rotation);let I=-1,c;this.data.multiLine?(c=r.split(/\\r\\n?|\\n/).map(U=>U.normalize("NFC")),I=c.length):c=[r.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let l=1,h=2,C=this.data.rect[3]-this.data.rect[1],B=this.data.rect[2]-this.data.rect[0];(g===90||g===270)&&([B,C]=[C,B]),this._defaultAppearance||(this.data.defaultAppearanceData=Q1(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let Q=await bt._getFontData(A,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources),E,f,u,d=[],x=!1;for(let U of c){let K=Q.encodeString(U);K.length>1&&(x=!0),d.push(K.join(""))}if(x&&i&st.SAVE)return{needAppearances:!0};if(x&&this._isOffscreenCanvasSupported){let U=this.data.comb?"monospace":"sans-serif",K=new Ut(A.xref,U),Z=K.createFontResources(c.join("")),AA=Z.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){let _=this._fieldResources.mergedResources.get("Font");for(let tA of AA.getKeys())_.set(tA,AA.getRaw(tA))}else this._fieldResources.mergedResources.set("Font",AA);let gA=K.fontName.name;Q=await bt._getFontData(A,t,{fontName:gA,fontSize:0},Z);for(let _=0,tA=d.length;_2)return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 ${Ae(h)} ${Ae(S)} Tm (${Fs(d[0])}) Tj ET Q EMC`;let w={shift:0},Y=this._renderText(d[0],Q,f,B,D,w,h,S);return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 0 0 Tm ${Y} ET Q EMC`}static async _getFontData(A,t,i,s){let a=new ze,n={font:null,clone(){return this}},{fontName:r,fontSize:g}=i;return await A.handleSetFont(s,[r&&M.get(r),g],null,a,t,n,null),n.font}_getTextWidth(A,t){return t.charsToGlyphs(A).reduce((i,s)=>i+s.width,0)/1e3}_computeFontSize(A,t,i,s,a){let{fontSize:n}=this.data.defaultAppearanceData,r=(n||12)*Qi,g=Math.round(A/r);if(!n){let o=l=>Math.floor(l*100)/100;if(a===-1){let l=this._getTextWidth(i,s);n=o(Math.min(A/Qi,l>t?t/l:1/0)),g=1}else{let l=i.split(/\\r\\n?|\\n/),h=[];for(let B of l){let Q=s.encodeString(B).join(""),E=s.charsToGlyphs(Q),f=s.getCharPositions(Q);h.push({line:Q,glyphs:E,positions:f})}let C=B=>{let Q=0;for(let E of h){let f=this._splitLine(null,s,B,t,E);if(Q+=f.length*B,Q>A)return!0}return!1};for(g=Math.max(g,a);;){if(r=A/g,n=o(r/Qi),C(n)){g++;continue}break}}let{fontName:I,fontColor:c}=this.data.defaultAppearanceData;this._defaultAppearance=N9({fontSize:n,fontName:I,fontColor:c})}return[this._defaultAppearance,n,A/g]}_renderText(A,t,i,s,a,n,r,g){let o;if(a===1){let c=this._getTextWidth(A,t)*i;o=(s-c)/2}else if(a===2){let c=this._getTextWidth(A,t)*i;o=s-c-r}else o=r;let I=Ae(o-n.shift);return n.shift=o,g=Ae(g),`${I} ${g} Td (${Fs(A)}) Tj`}_getSaveFieldResources(A){var n;let{localResources:t,appearanceResources:i,acroFormResources:s}=this._fieldResources,a=(n=this.data.defaultAppearanceData)==null?void 0:n.fontName;if(!a)return t||F.empty;for(let r of[t,i])if(r instanceof F){let g=r.get("Font");if(g instanceof F&&g.has(a))return r}if(s instanceof F){let r=s.get("Font");if(r instanceof F&&r.has(a)){let g=new F(A);g.set(a,r.getRaw(a));let o=new F(A);return o.set("Font",g),F.merge({xref:A,dictArray:[o,t],mergeSubDicts:!0})}}return t||F.empty}getFieldObject(){return null}},KQ=class extends bt{constructor(A){super(A);let{dict:t}=A;t.has("PMD")&&(this.flags|=it.HIDDEN,this.data.hidden=!0,k("Barcodes are not supported")),this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML,this._hasText=!0,typeof this.data.fieldValue!="string"&&(this.data.fieldValue="");let i=Mt({dict:t,key:"Q"});(!Number.isInteger(i)||i<0||i>2)&&(i=null),this.data.textAlignment=i;let s=Mt({dict:t,key:"MaxLen"});(!Number.isInteger(s)||s<0)&&(s=0),this.data.maxLen=s,this.data.multiLine=this.hasFieldFlag(Te.MULTILINE),this.data.comb=this.hasFieldFlag(Te.COMB)&&!this.hasFieldFlag(Te.MULTILINE)&&!this.hasFieldFlag(Te.PASSWORD)&&!this.hasFieldFlag(Te.FILESELECT)&&this.data.maxLen!==0,this.data.doNotScroll=this.hasFieldFlag(Te.DONOTSCROLL)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(A,t,i,s,a,n,r,g,o,I,c){let l=a/this.data.maxLen,h=this.getBorderAndBackgroundAppearances(c),C=[],B=t.getCharPositions(i);for(let[E,f]of B)C.push(`(${Fs(i.substring(E,f))}) Tj`);let Q=C.join(` ${Ae(l)} 0 Td `);return`/Tx BMC q ${h}BT `+A+` 1 0 0 1 ${Ae(r)} ${Ae(g+o)} Tm ${Q} ET Q EMC`}_getMultilineAppearance(A,t,i,s,a,n,r,g,o,I,c,l){let h=[],C=a-2*g,B={shift:0};for(let f=0,u=t.length;fs?(o.push(A.substring(h,E)),h=E,C=d,I=-1,l=-1):(C+=d,I=E,c=f,l=B):C+d>s?I!==-1?(o.push(A.substring(h,c)),h=c,B=l+1,I=-1,C=0):(o.push(A.substring(h,E)),h=E,C=d):C+=d}return hI!=="Off");n.length=0,n.push("Off",o)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off"),this.data.exportValue=n[1];let r=i.get(this.data.exportValue);this.checkedAppearance=r instanceof KA?r:null;let g=i.get("Off");this.uncheckedAppearance=g instanceof KA?g:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"check"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processRadioButton(A){this.data.buttonValue=null;let t=A.dict.get("Parent");if(t instanceof F){this.parent=A.dict.getRaw("Parent");let r=t.get("V");r instanceof M&&(this.data.fieldValue=this._decodeFormValue(r))}let i=A.dict.get("AP");if(!(i instanceof F))return;let s=i.get("N");if(!(s instanceof F))return;for(let r of s.getKeys())if(r!=="Off"){this.data.buttonValue=this._decodeFormValue(r);break}let a=s.get(this.data.buttonValue);this.checkedAppearance=a instanceof KA?a:null;let n=s.get("Off");this.uncheckedAppearance=n instanceof KA?n:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"disc"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processPushButton(A){let{dict:t,annotationGlobals:i}=A;if(!t.has("A")&&!t.has("AA")&&!this.data.alternativeText){k("Push buttons without action dictionaries are not supported");return}this.data.isTooltipOnly=!t.has("A")&&!t.has("AA"),Pa.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:i.baseUrl,docAttachments:i.attachments})}getFieldObject(){let A="button",t;return this.data.checkBox?(A="checkbox",t=this.data.exportValue):this.data.radioButton&&(A="radiobutton",t=this.data.buttonValue),{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:t,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:A}}get fallbackFontDict(){let A=new F;return A.set("BaseFont",M.get("ZapfDingbats")),A.set("Type",M.get("FallbackType")),A.set("Subtype",M.get("FallbackType")),A.set("Encoding",M.get("ZapfDingbatsEncoding")),nA(this,"fallbackFontDict",A)}},qQ=class extends bt{constructor(A){super(A);let{dict:t,xref:i}=A;this.indices=t.getArray("I"),this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0,this.data.options=[];let s=Mt({dict:t,key:"Opt"});if(Array.isArray(s))for(let a=0,n=s.length;a=0&&n0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:A}}amendSavedDict(A,t){var n;if(!this.hasIndices)return;let i=(n=A==null?void 0:A.get(this.data.id))==null?void 0:n.value;Array.isArray(i)||(i=[i]);let s=[],{options:a}=this.data;for(let r=0,g=0,o=a.length;rS&&(S=U,w=Y)}[B,Q]=this._computeFontSize(D,c-2*o,w,C,-1)}let E=Q*Qi,f=(E-Q)/2,u=Math.floor(I/E),d=0;if(h.length>0){let D=Math.min(...h),S=Math.max(...h);d=Math.max(0,S-u+1),d>D&&(d=D)}let x=Math.min(d+u+1,l),p=["/Tx BMC q",`1 1 ${c} ${I} re W n`];if(h.length){p.push("0.600006 0.756866 0.854904 rg");for(let D of h)d<=D&&DI.trimEnd());let{coords:r,bbox:g,matrix:o}=Ut.getFirstPositionInfo(this.rectangle,this.rotation,n);this.data.textPosition=this._transformPoint(r,g,o)}if(this._isOffscreenCanvasSupported){let r=A.dict.get("CA"),g=new Ut(i,"sans-serif");this.appearance=g.createAppearance(this._contents.str,this.rectangle,this.rotation,n,a,r),this._streams.push(this.appearance)}else k("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(A,t,{apRef:i,ap:s,oldAnnotation:a}){let{color:n,fontSize:r,rect:g,rotation:o,user:I,value:c}=A,l=a||new F(t);l.set("Type",M.get("Annot")),l.set("Subtype",M.get("FreeText")),a?(l.set("M",`D:${Zi()}`),l.delete("RC")):l.set("CreationDate",`D:${Zi()}`),l.set("Rect",g);let h=`/Helv ${r} Tf ${mi(n,!0)}`;if(l.set("DA",h),l.set("Contents",ii(c)),l.set("F",4),l.set("Border",[0,0,0]),l.set("Rotate",o),I&&l.set("T",ii(I)),i||s){let C=new F(t);l.set("AP",C),i?C.set("N",i):C.set("N",s)}return l}static async createNewAppearanceStream(A,t,i){let{baseFontRef:s,evaluator:a,task:n}=i,{color:r,fontSize:g,rect:o,rotation:I,value:c}=A,l=new F(t),h=new F(t);if(s)h.set("Helv",s);else{let EA=new F(t);EA.set("BaseFont",M.get("Helvetica")),EA.set("Type",M.get("Font")),EA.set("Subtype",M.get("Type1")),EA.set("Encoding",M.get("WinAnsiEncoding")),h.set("Helv",EA)}l.set("Font",h);let C=await bt._getFontData(a,n,{fontName:"Helv",fontSize:g},l),[B,Q,E,f]=o,u=E-B,d=f-Q;I%180!==0&&([u,d]=[d,u]);let x=c.split(`\n`),p=g/1e3,m=-1/0,D=[];for(let EA of x){let fA=C.encodeString(EA);if(fA.length>1)return null;EA=fA.join(""),D.push(EA);let CA=0,N=C.charsToGlyphs(EA);for(let H of N)CA+=H.width*p;m=Math.max(m,CA)}let S=1;m>u&&(S=u/m);let w=1,Y=Qi*g,U=(Qi-Cr)*g,K=Y*x.length;K>d&&(w=d/K);let Z=Math.min(S,w),AA=g*Z,gA,R,_;switch(I){case 0:_=[1,0,0,1],R=[o[0],o[1],u,d],gA=[o[0],o[3]-U];break;case 90:_=[0,1,-1,0],R=[o[1],-o[2],u,d],gA=[o[1],-o[0]-U];break;case 180:_=[-1,0,0,-1],R=[-o[2],-o[3],u,d],gA=[-o[2],-o[1]-U];break;case 270:_=[0,-1,1,0],R=[-o[3],o[0],u,d],gA=[-o[3],o[2]-U];break}let tA=["q",`${_.join(" ")} 0 0 cm`,`${R.join(" ")} re W n`,"BT",`${mi(r,!0)}`,`0 Tc /Helv ${Ae(AA)} Tf`];tA.push(`${gA.join(" ")} Td (${Fs(D[0])}) Tj`);let IA=Ae(Y);for(let EA=1,fA=D.length;EA(h.push(`${s[0]} ${s[1]} m`,`${s[2]} ${s[3]} l`,"S"),[C[0]-I,C[2]+I,C[7]-I,C[3]+I])})}}},OQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUARE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(o,I)=>{let c=I[4]+this.borderStyle.width/2,l=I[5]+this.borderStyle.width/2,h=I[6]-I[4]-this.borderStyle.width,C=I[3]-I[7]-this.borderStyle.width;return o.push(`${c} ${l} ${h} ${C} re`),r?o.push("B"):o.push("S"),[I[0],I[2],I[7],I[3]]}})}}},ZQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.CIRCLE,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;let o=4/3*Math.tan(Math.PI/(2*4));this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(I,c)=>{let l=c[0]+this.borderStyle.width/2,h=c[1]-this.borderStyle.width/2,C=c[6]-this.borderStyle.width/2,B=c[7]+this.borderStyle.width/2,Q=l+(C-l)/2,E=h+(B-h)/2,f=(C-l)/2*o,u=(B-h)/2*o;return I.push(`${Q} ${B} m`,`${Q+f} ${B} ${C} ${E+u} ${C} ${E} c`,`${C} ${E-u} ${Q+f} ${h} ${Q} ${h} c`,`${Q-f} ${h} ${l} ${E-u} ${l} ${E} c`,`${l} ${E+u} ${Q-f} ${B} ${Q} ${B} c`,"h"),r?I.push("B"):I.push("S"),[c[0],c[2],c[7],c[3]]}})}}},ug=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;this.data.annotationType=Le.POLYLINE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,this.data.vertices=null,this instanceof dg||(this.setLineEndings(t.getArray("LE")),this.data.lineEndings=this.lineEndings);let s=t.getArray("Vertices");if(!wt(s,null))return;let a=this.data.vertices=Float32Array.from(s);if(!this.appearance){let n=this.color?ft(this.color):[0,0,0],r=t.get("CA"),g=this.borderStyle.width||1,o=2*g,I=[1/0,1/0,-1/0,-1/0];for(let c=0,l=a.length;c{for(let h=0,C=a.length;h{for(let l of this.data.inkLists){for(let h=0,C=l.length;hB.points)),l.set("F",4),l.set("Rotate",I),g&&l.set("IT",M.get("InkHighlight"));let h=new F(t);l.set("BS",h),h.set("W",c),l.set("C",Array.from(a,B=>B/255)),l.set("CA",n);let C=new F(t);return l.set("AP",C),i?C.set("N",i):C.set("N",s),l}static async createNewAppearanceStream(A,t,i){if(A.outlines)return this.createNewAppearanceStreamForHighlight(A,t,i);let{color:s,rect:a,paths:n,thickness:r,opacity:g}=A,o=[`${r} w 1 J 1 j`,`${mi(s,!1)}`];g!==1&&o.push("/R0 gs");let I=[];for(let{bezier:C}of n){if(I.length=0,I.push(`${Ae(C[0])} ${Ae(C[1])} m`),C.length===2)I.push(`${Ae(C[0])} ${Ae(C[1])} l S`);else{for(let B=2,Q=C.length;B(o.push(`${I[0]} ${I[1]} m`,`${I[2]} ${I[3]} l`,`${I[6]} ${I[7]} l`,`${I[4]} ${I[5]} l`,"f"),[I[0],I[2],I[7],I[3]])})}}else this.data.popupRef=null}static createNewDict(A,t,{apRef:i,ap:s}){let{color:a,opacity:n,rect:r,rotation:g,user:o,quadPoints:I}=A,c=new F(t);if(c.set("Type",M.get("Annot")),c.set("Subtype",M.get("Highlight")),c.set("CreationDate",`D:${Zi()}`),c.set("Rect",r),c.set("F",4),c.set("Border",[0,0,0]),c.set("Rotate",g),c.set("QuadPoints",I),c.set("C",Array.from(a,l=>l/255)),c.set("CA",n),o&&c.set("T",ii(o)),i||s){let l=new F(t);c.set("AP",l),l.set("N",i||s)}return c}static async createNewAppearanceStream(A,t,i){let{color:s,rect:a,outlines:n,opacity:r}=A,g=[`${mi(s,!0)}`,"/R0 gs"],o=[];for(let Q of n){o.length=0,o.push(`${Ae(Q[0])} ${Ae(Q[1])} m`);for(let E=2,f=Q.length;E(r.push(`${g[4]} ${g[5]+1.3} m`,`${g[6]} ${g[7]+1.3} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},VQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUIGGLY,this.data.quadPoints=bn(t,null)){if(!this.appearance){let a=this.color?ft(this.color):[0,0,0],n=t.get("CA");this._setDefaultAppearance({xref:i,extra:"[] 0 d 1 w",strokeColor:a,strokeAlpha:n,pointsCallback:(r,g)=>{let o=(g[1]-g[5])/6,I=o,c=g[4],l=g[5],h=g[6];r.push(`${c} ${l+I} m`);do c+=2,I=I===0?o:0,r.push(`${c} ${l+I} l`);while(c(r.push(`${(g[0]+g[4])/2} ${(g[1]+g[5])/2} m`,`${(g[2]+g[6])/2} ${(g[3]+g[7])/2} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},gs=class extends $e{constructor(A){super(A),this.data.annotationType=Le.STAMP,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1}static async createImage(A,t){let{width:i,height:s}=A,a=new OffscreenCanvas(i,s),n=a.getContext("2d",{alpha:!0});n.drawImage(A,0,0);let r=n.getImageData(0,0,i,s).data,g=new Uint32Array(r.buffer),o=g.some(Ot.isLittleEndian?Q=>Q>>>24!==255:Q=>(Q&255)!==255);o&&(n.fillStyle="white",n.fillRect(0,0,i,s),n.drawImage(A,0,0));let I=a.convertToBlob({type:"image/jpeg",quality:1}).then(Q=>Q.arrayBuffer()),c=M.get("XObject"),l=M.get("Image"),h=new F(t);h.set("Type",c),h.set("Subtype",l),h.set("BitsPerComponent",8),h.set("ColorSpace",M.get("DeviceRGB")),h.set("Filter",M.get("DCTDecode")),h.set("BBox",[0,0,i,s]),h.set("Width",i),h.set("Height",s);let C=null;if(o){let Q=new Uint8Array(g.length);if(Ot.isLittleEndian)for(let f=0,u=g.length;f>>24;else for(let f=0,u=g.length;f=0&&n<=1?n:null}};function JE(e){try{return ka(e)}catch(A){return k(`UTF-8 decoding failed: "${A}".`),e}}var $Q=class extends Ls{constructor(A){super(A),this.node=null}onEndElement(A){let t=super.onEndElement(A);if(t&&A==="xfa:datasets")throw this.node=t,new Error("Aborting DatasetXMLParser.")}},A1=class{constructor(A){if(A.datasets)this.node=new Ls({hasAttributes:!0}).parseFromString(A.datasets).documentElement;else{let t=new $Q({hasAttributes:!0});try{t.parseFromString(A["xdp:xdp"])}catch(i){}this.node=t.node}}getValue(A){if(!this.node||!A)return"";let t=this.node.searchNode(_E(A),0);if(!t)return"";let i=t.firstChild;return(i==null?void 0:i.nodeName)==="value"?t.children.map(s=>JE(s.textContent)):JE(t.textContent)}},dn,e1=class{constructor(A,t){HA(this,dn,null);this.stream=A,this.pdfManager=t,this.entries=[],this._xrefStms=new Set,this._cacheMap=new Map,this._pendingRefs=new be,this._newPersistentRefNum=null,this._newTemporaryRefNum=null,this._persistentRefsCache=null}getNewPersistentRef(A){this._newPersistentRefNum===null&&(this._newPersistentRefNum=this.entries.length||1);let t=this._newPersistentRefNum++;return this._cacheMap.set(t,A),oA.get(t,0)}getNewTemporaryRef(){if(this._newTemporaryRefNum===null&&(this._newTemporaryRefNum=this.entries.length||1,this._newPersistentRefNum)){this._persistentRefsCache=new Map;for(let A=this._newTemporaryRefNum;A0;){let[r,g]=n;if(!Number.isInteger(r)||!Number.isInteger(g))throw new v(`Invalid XRef range fields: ${r}, ${g}`);if(!Number.isInteger(i)||!Number.isInteger(s)||!Number.isInteger(a))throw new v(`Invalid XRef entry fields length: ${r}, ${g}`);for(let o=t.entryNum;o=w.length);)U+=String.fromCharCode(K),K=w[Y];return U}function g(w,Y,U){let K=U.length,Z=w.length,AA=0;for(;Y=K)break;Y++,AA++}return AA}let o=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g,I=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,l=new Uint8Array([116,114,97,105,108,101,114]),h=new Uint8Array([115,116,97,114,116,120,114,101,102]),C=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();let B=this.stream;B.pos=0;let Q=B.getBytes(),E=Qt(Q),f=Q.length,u=B.start,d=[],x=[];for(;u=f)break;w=Q[u]}while(w!==10&&w!==13);continue}let Y=r(Q,u),U;if(Y.startsWith("xref")&&(Y.length===4||/\\s/.test(Y[4])))u+=g(Q,u,l),d.push(u),u+=g(Q,u,h);else if(U=c.exec(Y)){let K=U[1]|0,Z=U[2]|0,AA=u+Y.length,gA,R=!1;if(!this.entries[K])R=!0;else if(this.entries[K].gen===Z)try{new zt({lexer:new dt(B.makeSubStream(AA))}).getObj(),R=!0}catch(QA){QA instanceof Sa?k(`indexObjects -- checking object (${Y}): "${QA}".`):R=!0}R&&(this.entries[K]={offset:u-B.start,gen:Z,uncompressed:!0}),o.lastIndex=AA;let _=o.exec(E);_?(gA=o.lastIndex+1-u,_[1]!=="endobj"&&(k(`indexObjects: Found "${_[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`),gA-=_[1].length+1)):gA=f-u;let tA=Q.subarray(u,u+gA),IA=g(tA,0,C);IA0?Math.max(...this._xrefStms):null}getEntry(A){let t=this.entries[A];return t&&!t.free&&t.offset?t:null}fetchIfRef(A,t=!1){return A instanceof oA?this.fetch(A,t):A}fetch(A,t=!1){if(!(A instanceof oA))throw new Error("ref object is not a reference");let i=A.num,s=this._cacheMap.get(i);if(s!==void 0)return s instanceof F&&!s.objId&&(s.objId=A.toString()),s;let a=this.getEntry(i);if(a===null)return this._cacheMap.set(i,a),a;if(this._pendingRefs.has(A))return this._pendingRefs.remove(A),k(`Ignoring circular reference: ${A}.`),Ku;this._pendingRefs.put(A);try{a=a.uncompressed?this.fetchUncompressed(A,a,t):this.fetchCompressed(A,a,t),this._pendingRefs.remove(A)}catch(n){throw this._pendingRefs.remove(A),n}return a instanceof F?a.objId=A.toString():a instanceof KA&&(a.dict.objId=A.toString()),a}fetchUncompressed(A,t,i=!1){let s=A.gen,a=A.num;if(t.gen!==s){let c=`Inconsistent generation in XRef: ${A}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;k(`Empty, or invalid, /${A} entry.`)}return null}get mediaBox(){return nA(this,"mediaBox",this._getBoundingBox("MediaBox")||xx)}get cropBox(){return nA(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let A=this.pageDict.get("UserUnit");return(typeof A!="number"||A<=0)&&(A=dx),nA(this,"userUnit",A)}get view(){let{cropBox:A,mediaBox:t}=this;if(A!==t&&!Ss(A,t)){let i=Ce.intersect(A,t);if(i&&i[2]-i[0]>0&&i[3]-i[1]>0)return nA(this,"view",i);k("Empty /CropBox and /MediaBox intersection.")}return nA(this,"view",t)}get rotate(){let A=this._getInheritableProperty("Rotate")||0;return A%90!==0?A=0:A>=360?A%=360:A<0&&(A=(A%360+360)%360),nA(this,"rotate",A)}_onSubStreamError(A,t){if(this.evaluatorOptions.ignoreErrors){k(`getContentStream - ignoring sub-stream (${t}): "${A}".`);return}throw A}getContentStream(){return this.pdfManager.ensure(this,"content").then(A=>A instanceof KA?A:Array.isArray(A)?new sI(A,this._onSubStreamError.bind(this)):new Rs)}get xfaData(){return nA(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async saveNewAnnotations(A,t,i,s){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");let a=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),n=new mt,r=new be;mA(this,xn,t1).call(this,i,n,r);let g=this.pageDict,o=this.annotations.filter(C=>!(C instanceof oA&&n.has(C))),I=await ei.saveNewAnnotations(a,t,i,s);for(let{ref:C}of I.annotations)C instanceof oA&&!r.has(C)&&o.push(C);let c=g.get("Annots");g.set("Annots",o);let l=[];await ot(this.ref,g,l,this.xref),c&&g.set("Annots",c);let h=I.dependencies;h.push({ref:this.ref,data:l.join("")},...I.annotations);for(let C of n)h.push({ref:C,data:null});return h}save(A,t,i){let s=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then(function(a){let n=[];for(let r of a)r.mustBePrinted(i)&&n.push(r.save(s,t,i).catch(function(g){return k(`save - ignoring annotation data during "${t.name}" task: "${g}".`),null}));return Promise.all(n).then(function(r){return r.filter(g=>!!g)})})}loadResources(A){return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then(()=>new Hs(this.resources,A,this.xref).load())}getOperatorList({handler:A,sink:t,task:i,intent:s,cacheKey:a,annotationStorage:n=null,modifiedIds:r=null}){let g=this.getContentStream(),o=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),I=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),c=this.xfaFactory?null:$E(n),l=c==null?void 0:c.get(this.pageIndex),h=Promise.resolve(null),C=null;if(l){let Q=this.pdfManager.ensureDoc("annotationGlobals"),E,f=new Set;for(let{bitmapId:d,bitmap:x}of l)d&&!x&&!f.has(d)&&f.add(d);let{isOffscreenCanvasSupported:u}=this.evaluatorOptions;if(f.size>0){let d=l.slice();for(let[x,p]of n)x.startsWith(TE)&&p.bitmap&&f.has(p.bitmapId)&&d.push(p);E=ei.generateImages(d,this.xref,u)}else E=ei.generateImages(l,this.xref,u);C=new be,mA(this,xn,t1).call(this,l,C,null),h=Q.then(d=>d?ei.printNewAnnotations(d,I,i,l,E):null)}let B=Promise.all([g,o]).then(([Q])=>{let E=new ze(s,t);return A.send("StartRenderPage",{transparency:I.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:a}),I.getOperatorList({stream:Q,task:i,resources:this.resources,operatorList:E}).then(function(){return E})});return Promise.all([B,this._parsedAnnotations,h]).then(function([Q,E,f]){if(f){E=E.filter(S=>!(S.ref&&C.has(S.ref)));for(let S=0,w=f.length;SK.ref&&ur(K.ref,Y.refToReplace));U>=0&&(E.splice(U,1,Y),f.splice(S--,1),w--)}}E=E.concat(f)}if(E.length===0||s&st.ANNOTATIONS_DISABLE)return Q.flush(!0),{length:Q.totalLength};let u=!!(s&st.ANNOTATIONS_FORMS),d=!!(s&st.IS_EDITING),x=!!(s&st.ANY),p=!!(s&st.DISPLAY),m=!!(s&st.PRINT),D=[];for(let S of E)(x||p&&S.mustBeViewed(n,u)&&S.mustBeViewedWhenEditing(d,r)||m&&S.mustBePrinted(n))&&D.push(S.getOperatorList(I,i,s,n).catch(function(w){return k(`getOperatorList - ignoring annotation data during "${i.name}" task: "${w}".`),{opList:null,separateForm:!1,separateCanvas:!1}}));return Promise.all(D).then(function(S){let w=!1,Y=!1;for(let{opList:U,separateForm:K,separateCanvas:Z}of S)Q.addOpList(U),w||(w=K),Y||(Y=Z);return Q.flush(!0,{form:w,canvas:Y}),{length:Q.totalLength}})})}async extractTextContent({handler:A,task:t,includeMarkedContent:i,disableNormalization:s,sink:a}){let n=this.getContentStream(),r=this.loadResources(["ExtGState","Font","Properties","XObject"]),g=this.pdfManager.ensureCatalog("lang"),[o,,I]=await Promise.all([n,r,g]);return new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:o,task:t,resources:this.resources,includeMarkedContent:i,disableNormalization:s,sink:a,viewBox:this.view,lang:I})}async getStructTree(){let A=await this.pdfManager.ensureCatalog("structTreeRoot");return A?(await this._parsedAnnotations,(await this.pdfManager.ensure(this,"_parseStructTree",[A])).serializable):null}_parseStructTree(A){let t=new Cc(A,this.pageDict);return t.parse(this.ref),t}async getAnnotationsData(A,t,i){let s=await this._parsedAnnotations;if(s.length===0)return s;let a=[],n=[],r,g=!!(i&st.ANY),o=!!(i&st.DISPLAY),I=!!(i&st.PRINT);for(let c of s){let l=g||o&&c.viewable;(l||I&&c.printable)&&a.push(c.data),c.hasTextContent&&l&&(r||(r=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})),n.push(c.extractTextContent(r,t,[-1/0,-1/0,1/0,1/0]).catch(function(h){k(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${h}".`)})))}return await Promise.all(n),a}get annotations(){let A=this._getInheritableProperty("Annots");return nA(this,"annotations",Array.isArray(A)?A:[])}get _parsedAnnotations(){let A=this.pdfManager.ensure(this,"annotations").then(async t=>{if(t.length===0)return t;let i=await this.pdfManager.ensureDoc("annotationGlobals");if(!i)return[];let s=[];for(let g of t)s.push(ei.create(this.xref,g,i,this._localIdFactory,!1,this.ref).catch(function(o){return k(`_parsedAnnotations: "${o}".`),null}));let a=[],n,r;for(let g of await Promise.all(s))if(g){if(g instanceof bt){(r||(r=[])).push(g);continue}if(g instanceof fg){(n||(n=[])).push(g);continue}a.push(g)}return r&&a.push(...r),n&&a.push(...n),a});return nA(this,"_parsedAnnotations",A)}get jsActions(){let A=Vg(this.xref,this.pageDict,Ru);return nA(this,"jsActions",A)}};xn=new WeakSet,t1=function(A,t,i){for(let s of A)if(s.id){let a=oA.fromString(s.id);if(!a){k(`A non-linked annotation cannot be modified: ${s.id}`);continue}if(s.deleted){t.put(a,a);continue}i==null||i.put(a),s.ref=a,delete s.id}};var YE=new Uint8Array([37,80,68,70,45]),KE=new Uint8Array([115,116,97,114,116,120,114,101,102]),mx=new Uint8Array([101,110,100,111,98,106]),vE=1024,px="\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0";function Lo(e,A,t=1024,i=!1){let s=A.length,a=e.peekBytes(t),n=a.length-s;if(n<=0)return!1;if(i){let r=s-1,g=a.length-1;for(;g>=r;){let o=0;for(;o=s)return e.pos+=g-r,!0;g--}}else{let r=0;for(;r<=n;){let g=0;for(;g=s)return e.pos+=r,!0;r++}}return!1}var mn,i1,mg=class{constructor(A,t){HA(this,mn);if(t.length<=0)throw new ks("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=A,this.stream=t,this.xref=new e1(t,A),this._pagePromises=new Map,this._version=null;let i={font:0};this._globalIdFactory=class{static getDocId(){return`g_${A.docId}`}static createFontId(){return`f${++i.font}`}static createObjId(){OA("Abstract method `createObjId` called.")}static getPageObjId(){OA("Abstract method `getPageObjId` called.")}}}parse(A){this.xref.parse(A),this.catalog=new Pa(this.pdfManager,this.xref)}get linearization(){let A=null;try{A=mI.create(this.stream)}catch(t){if(t instanceof ge)throw t;PA(t)}return nA(this,"linearization",A)}get startXRef(){let A=this.stream,t=0;if(this.linearization){if(A.reset(),Lo(A,mx)){A.skip(6);let i=A.peekByte();for(;pt(i);)A.pos++,i=A.peekByte();t=A.pos-A.start}}else{let s=KE.length,a=!1,n=A.end;for(;!a&&n>0;)n-=1024-s,n<0&&(n=0),A.pos=n,a=Lo(A,KE,1024,!0);if(a){A.skip(9);let r;do r=A.getByte();while(pt(r));let g="";for(;r>=32&&r<=57;)g+=String.fromCharCode(r),r=A.getByte();t=parseInt(g,10),isNaN(t)&&(t=0)}}return nA(this,"startXRef",t)}checkHeader(){let A=this.stream;if(A.reset(),!Lo(A,YE))return;A.moveStart(),A.skip(YE.length);let t="",i;for(;(i=A.getByte())>32&&t.length<7;)t+=String.fromCharCode(i);XE.test(t)?this._version=t:k(`Invalid PDF header version: ${t}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let A=0;return this.catalog.hasActualNumPages?A=this.catalog.numPages:this.xfaFactory?A=this.xfaFactory.getNumPages():this.linearization?A=this.linearization.numPages:A=this.catalog.numPages,nA(this,"numPages",A)}_hasOnlyDocumentSignatures(A,t=0){return Array.isArray(A)?A.every(s=>{if(s=this.xref.fetchIfRef(s),!(s instanceof F))return!1;if(s.has("Kids"))return++t>10?(k("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):this._hasOnlyDocumentSignatures(s.get("Kids"),t);let a=ye(s.get("FT"),"Sig"),n=s.get("Rect"),r=Array.isArray(n)&&n.every(g=>g===0);return a&&r}):!1}get _xfaStreams(){let A=this.catalog.acroForm;if(!A)return null;let t=A.get("XFA"),i={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof KA&&!t.isEmpty)return i["xdp:xdp"]=t,i;if(!Array.isArray(t)||t.length===0)return null;for(let s=0,a=t.length;s{l.set(Q,E)});let h=[];for(let[Q,E]of l){let f=E.get("FontDescriptor");if(!(f instanceof F))continue;let u=f.get("FontFamily");u=u.replaceAll(/[ ]+(\\d)/g,"$1");let d=f.get("FontWeight"),x=-f.get("ItalicAngle"),p={fontFamily:u,fontWeight:d,italicAngle:x};Ou(p)&&h.push(g.handleSetFont(s,[M.get(Q),1],null,o,t,c,null,p).catch(function(m){return k(`loadXfaFonts: "${m}".`),null}))}await Promise.all(h);let C=this.xfaFactory.setFonts(I);if(!C)return;r.ignoreErrors=!0,h.length=0,I.length=0;let B=new Set;for(let Q of C)B1(`${Q}-Regular`)||B.add(Q);B.size&&C.push("PdfJS-Fallback");for(let Q of C)if(!B.has(Q))for(let E of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){let f=`${Q}-${E.name}`,u=pf(f);h.push(g.handleSetFont(s,[M.get(f),1],null,o,t,c,u,{fontFamily:Q,fontWeight:E.fontWeight,italicAngle:E.italicAngle}).catch(function(d){return k(`loadXfaFonts: "${d}".`),null}))}await Promise.all(h),this.xfaFactory.appendFonts(I,B)}async serializeXfaData(A){return this.xfaFactory?this.xfaFactory.serializeData(A):null}get version(){return this.catalog.version||this._version}get formInfo(){let A={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return nA(this,"formInfo",A);try{let i=t.get("Fields"),s=Array.isArray(i)&&i.length>0;A.hasFields=s;let a=t.get("XFA");A.hasXfa=Array.isArray(a)&&a.length>0||a instanceof KA&&!a.isEmpty;let r=!!(t.get("SigFlags")&1),g=r&&this._hasOnlyDocumentSignatures(i);A.hasAcroForm=s&&!g,A.hasSignatures=r}catch(i){if(i instanceof ge)throw i;k(`Cannot fetch form information: "${i}".`)}return nA(this,"formInfo",A)}get documentInfo(){let A={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures},t;try{t=this.xref.trailer.get("Info")}catch(i){if(i instanceof ge)throw i;PA("The document information dictionary is invalid.")}if(!(t instanceof F))return nA(this,"documentInfo",A);for(let i of t.getKeys()){let s=t.get(i);switch(i){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if(typeof s=="string"){A[i]=jA(s);continue}break;case"Trapped":if(s instanceof M){A[i]=s;continue}break;default:let a;switch(typeof s){case"string":a=jA(s);break;case"number":case"boolean":a=s;break;default:s instanceof M&&(a=s);break}if(a===void 0){k(`Bad value, for custom key "${i}", in Info: ${s}.`);continue}A.Custom||(A.Custom=Object.create(null)),A.Custom[i]=a;continue}k(`Bad value, for key "${i}", in Info: ${s}.`)}return nA(this,"documentInfo",A)}get fingerprints(){function A(n){return typeof n=="string"&&n.length>0&&n!==px}function t(n){let r=[];for(let g of n){let o=g.toString(16);r.push(o.padStart(2,"0"))}return r.join("")}let i=this.xref.trailer.get("ID"),s,a;return Array.isArray(i)&&A(i[0])?(s=Pe(i[0]),i[1]!==i[0]&&A(i[1])&&(a=Pe(i[1]))):s=Ri(this.stream.getByteRange(0,vE),0,vE),nA(this,"fingerprints",[t(s),a?t(a):null])}async _getLinearizationPage(A){let{catalog:t,linearization:i,xref:s}=this,a=oA.get(i.objectNumberFirst,0);try{let n=await s.fetchAsync(a);if(n instanceof F){let r=n.getRaw("Type");if(r instanceof oA&&(r=await s.fetchAsync(r)),ye(r,"Page")||!n.has("Type")&&!n.has("Kids")&&n.has("Contents"))return t.pageKidsCountCache.has(a)||t.pageKidsCountCache.put(a,1),t.pageIndexCache.has(a)||t.pageIndexCache.put(a,0),[n,a]}throw new v("The Linearization dictionary doesn\'t point to a valid Page dictionary.")}catch(n){return k(`_getLinearizationPage: "${n.message}".`),t.getPageDict(A)}}getPage(A){let t=this._pagePromises.get(A);if(t)return t;let{catalog:i,linearization:s,xfaFactory:a}=this,n;return a?n=Promise.resolve([F.empty,null]):(s==null?void 0:s.pageFirst)===A?n=this._getLinearizationPage(A):n=i.getPageDict(A),n=n.then(([r,g])=>new xg({pdfManager:this.pdfManager,xref:this.xref,pageIndex:A,pageDict:r,ref:g,globalIdFactory:this._globalIdFactory,fontCache:i.fontCache,builtInCMapCache:i.builtInCMapCache,standardFontDataCache:i.standardFontDataCache,globalImageCache:i.globalImageCache,systemFontCache:i.systemFontCache,nonBlendModesSet:i.nonBlendModesSet,xfaFactory:a})),this._pagePromises.set(A,n),n}async checkFirstPage(A=!1){if(!A)try{await this.getPage(0)}catch(t){if(t instanceof ti)throw this._pagePromises.delete(0),await this.cleanup(),new Pi}}async checkLastPage(A=!1){let{catalog:t,pdfManager:i}=this;t.setActualNumPages();let s;try{if(await Promise.all([i.ensureDoc("xfaFactory"),i.ensureDoc("linearization"),i.ensureCatalog("numPages")]),this.xfaFactory)return;if(this.linearization?s=this.linearization.numPages:s=t.numPages,Number.isInteger(s)){if(s<=1)return}else throw new v("Page count is not an integer.");await this.getPage(s-1)}catch(a){if(this._pagePromises.delete(s-1),await this.cleanup(),a instanceof ti&&!A)throw new Pi;k(`checkLastPage - invalid /Pages tree /Count: ${s}.`);let n;try{n=await t.getAllPageDicts(A)}catch(r){if(r instanceof ti&&!A)throw new Pi;t.setActualNumPages(1);return}for(let[r,[g,o]]of n){let I;g instanceof Error?(I=Promise.reject(g),I.catch(()=>{})):I=Promise.resolve(new xg({pdfManager:i,xref:this.xref,pageIndex:r,pageDict:g,ref:o,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(r,I)}t.setActualNumPages(n.size)}}fontFallback(A,t){return this.catalog.fontFallback(A,t)}async cleanup(A=!1){return this.catalog?this.catalog.cleanup(A):E1()}get fieldObjects(){if(!this.formInfo.hasFields)return nA(this,"fieldObjects",Promise.resolve(null));let A=Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureCatalog("acroForm")]).then(async([t,i])=>{if(!t)return null;let s=new be,a=Object.create(null),n=new Map;for(let g of await i.getAsync("Fields"))await mA(this,mn,i1).call(this,"",g,n,t,s);let r=[];for(let[g,o]of n)r.push(Promise.all(o).then(I=>{I=I.filter(c=>!!c),I.length>0&&(a[g]=I)}));return await Promise.all(r),a});return nA(this,"fieldObjects",A)}get hasJSActions(){let A=this.pdfManager.ensureDoc("_parseHasJSActions");return nA(this,"hasJSActions",A)}async _parseHasJSActions(){let[A,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return A?!0:t?Object.values(t).some(i=>i.some(s=>s.actions!==null)):!1}get calculationOrderIds(){let A=this.catalog.acroForm;if(!(A!=null&&A.has("CO")))return nA(this,"calculationOrderIds",null);let t=A.get("CO");if(!Array.isArray(t)||t.length===0)return nA(this,"calculationOrderIds",null);let i=[];for(let s of t)s instanceof oA&&i.push(s.toString());return i.length===0?nA(this,"calculationOrderIds",null):nA(this,"calculationOrderIds",i)}get annotationGlobals(){return nA(this,"annotationGlobals",ei.createGlobals(this.pdfManager))}};mn=new WeakSet,i1=async function(A,t,i,s,a){let{xref:n}=this;if(!(t instanceof oA)||a.has(t))return;a.put(t);let r=await n.fetchAsync(t);if(!(r instanceof F))return;if(r.has("T")){let o=jA(await r.getAsync("T"));A=A===""?o:`${A}.${o}`}else{let o=r;for(;;){if(o=o.getRaw("Parent"),o instanceof oA){if(a.has(o))break;o=await n.fetchAsync(o)}if(!(o instanceof F))break;if(o.has("T")){let I=jA(await o.getAsync("T"));A=A===""?I:`${A}.${I}`;break}}}if(i.has(A)||i.set(A,[]),i.get(A).push(ei.create(n,t,s,null,!0,null).then(o=>o==null?void 0:o.getFieldObject()).catch(function(o){return k(`#collectFieldObjects: "${o}".`),null})),!r.has("Kids"))return;let g=await r.getAsync("Kids");if(Array.isArray(g))for(let o of g)await mA(this,mn,i1).call(this,A,o,i,s,a)};function wx(e){if(e){let A=Qr(e);if(A)return A.href;k(`Invalid absolute docBaseUrl: "${e}".`)}return null}var pg=class{constructor(A){var t;this._docBaseUrl=wx(A.docBaseUrl),this._docId=A.docId,this._password=A.password,this.enableXfa=A.enableXfa,(t=A.evaluatorOptions).isOffscreenCanvasSupported&&(t.isOffscreenCanvasSupported=Ot.isOffscreenCanvasSupported),this.evaluatorOptions=Object.freeze(A.evaluatorOptions)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}get catalog(){return this.pdfDocument.catalog}ensureDoc(A,t){return this.ensure(this.pdfDocument,A,t)}ensureXRef(A,t){return this.ensure(this.pdfDocument.xref,A,t)}ensureCatalog(A,t){return this.ensure(this.pdfDocument.catalog,A,t)}getPage(A){return this.pdfDocument.getPage(A)}fontFallback(A,t){return this.pdfDocument.fontFallback(A,t)}loadXfaFonts(A,t){return this.pdfDocument.loadXfaFonts(A,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(A){return this.pdfDocument.serializeXfaData(A)}cleanup(A=!1){return this.pdfDocument.cleanup(A)}async ensure(A,t,i){OA("Abstract method `ensure` called")}requestRange(A,t){OA("Abstract method `requestRange` called")}requestLoadedStream(A=!1){OA("Abstract method `requestLoadedStream` called")}sendProgressiveData(A){OA("Abstract method `sendProgressiveData` called")}updatePassword(A){this._password=A}terminate(A){OA("Abstract method `terminate` called")}},wg=class extends pg{constructor(A){super(A);let t=new Ie(A.source);this.pdfDocument=new mg(this,t),this._loadedStreamPromise=Promise.resolve(t)}async ensure(A,t,i){let s=A[t];return typeof s=="function"?s.apply(A,i):s}requestRange(A,t){return Promise.resolve()}requestLoadedStream(A=!1){return this._loadedStreamPromise}terminate(A){}},s1=class extends pg{constructor(A){super(A),this.streamManager=new To(A.source,{msgHandler:A.handler,length:A.length,disableAutoFetch:A.disableAutoFetch,rangeChunkSize:A.rangeChunkSize}),this.pdfDocument=new mg(this,this.streamManager.getStream())}async ensure(A,t,i){try{let s=A[t];return typeof s=="function"?s.apply(A,i):s}catch(s){if(!(s instanceof ge))throw s;return await this.requestRange(s.begin,s.end),this.ensure(A,t,i)}}requestRange(A,t){return this.streamManager.requestRange(A,t)}requestLoadedStream(A=!1){return this.streamManager.requestAllChunks(A)}sendProgressiveData(A){this.streamManager.onReceiveData({chunk:A})}terminate(A){this.streamManager.abort(A)}},_n={UNKNOWN:0,DATA:1,ERROR:2},ke={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function ut(e){switch(e instanceof Error||typeof e=="object"&&e!==null||OA(\'wrapReason: Expected "reason" to be a (possibly cloned) Error.\'),e.name){case"AbortException":return new ve(e.message);case"MissingPDFException":return new Er(e.message);case"PasswordException":return new bs(e.message,e.code);case"UnexpectedResponseException":return new fr(e.message,e.status);case"UnknownErrorException":return new Ds(e.message,e.details);default:return new Ds(e.message,e.toString())}}var Zg,gu,jg,ou,ys,hr,yg=class{constructor(A,t,i){HA(this,Zg);HA(this,jg);HA(this,ys);this.sourceName=A,this.targetName=t,this.comObj=i,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=s=>{let a=s.data;if(a.targetName!==this.sourceName)return;if(a.stream){mA(this,jg,ou).call(this,a);return}if(a.callback){let r=a.callbackId,g=this.callbackCapabilities[r];if(!g)throw new Error(`Cannot resolve callback ${r}`);if(delete this.callbackCapabilities[r],a.callback===_n.DATA)g.resolve(a.data);else if(a.callback===_n.ERROR)g.reject(ut(a.reason));else throw new Error("Unexpected callback case");return}let n=this.actionHandler[a.action];if(!n)throw new Error(`Unknown action from worker: ${a.action}`);if(a.callbackId){let r=this.sourceName,g=a.sourceName;new Promise(function(o){o(n(a.data))}).then(function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.DATA,callbackId:a.callbackId,data:o})},function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.ERROR,callbackId:a.callbackId,reason:ut(o)})});return}if(a.streamId){mA(this,Zg,gu).call(this,a);return}n(a.data)},i.addEventListener("message",this._onComObjOnMessage)}on(A,t){let i=this.actionHandler;if(i[A])throw new Error(`There is already an actionName called "${A}"`);i[A]=t}send(A,t,i){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,data:t},i)}sendWithPromise(A,t,i){let s=this.callbackId++,a=Promise.withResolvers();this.callbackCapabilities[s]=a;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,callbackId:s,data:t},i)}catch(n){a.reject(n)}return a.promise}sendWithStream(A,t,i,s){let a=this.streamId++,n=this.sourceName,r=this.targetName,g=this.comObj;return new ReadableStream({start:o=>{let I=Promise.withResolvers();return this.streamControllers[a]={controller:o,startCall:I,pullCall:null,cancelCall:null,isClosed:!1},g.postMessage({sourceName:n,targetName:r,action:A,streamId:a,data:t,desiredSize:o.desiredSize},s),I.promise},pull:o=>{let I=Promise.withResolvers();return this.streamControllers[a].pullCall=I,g.postMessage({sourceName:n,targetName:r,stream:ke.PULL,streamId:a,desiredSize:o.desiredSize}),I.promise},cancel:o=>{gt(o instanceof Error,"cancel must have a valid reason");let I=Promise.withResolvers();return this.streamControllers[a].cancelCall=I,this.streamControllers[a].isClosed=!0,g.postMessage({sourceName:n,targetName:r,stream:ke.CANCEL,streamId:a,reason:ut(o)}),I.promise}},i)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}};Zg=new WeakSet,gu=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this,r=this.actionHandler[A.action],g={enqueue(o,I=1,c){if(this.isCancelled)return;let l=this.desiredSize;this.desiredSize-=I,l>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:i,targetName:s,stream:ke.ENQUEUE,streamId:t,chunk:o},c)},close(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.CLOSE,streamId:t}),delete n.streamSinks[t])},error(o){gt(o instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.ERROR,streamId:t,reason:ut(o)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:A.desiredSize,ready:null};g.sinkCapability.resolve(),g.ready=g.sinkCapability.promise,this.streamSinks[t]=g,new Promise(function(o){o(r(A.data,g))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,success:!0})},function(o){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,reason:ut(o)})})},jg=new WeakSet,ou=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this.streamControllers[t],r=this.streamSinks[t];switch(A.stream){case ke.START_COMPLETE:A.success?n.startCall.resolve():n.startCall.reject(ut(A.reason));break;case ke.PULL_COMPLETE:A.success?n.pullCall.resolve():n.pullCall.reject(ut(A.reason));break;case ke.PULL:if(!r){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0});break}r.desiredSize<=0&&A.desiredSize>0&&r.sinkCapability.resolve(),r.desiredSize=A.desiredSize,new Promise(function(g){var o;g((o=r.onPull)==null?void 0:o.call(r))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,reason:ut(g)})});break;case ke.ENQUEUE:if(gt(n,"enqueue should have stream controller"),n.isClosed)break;n.controller.enqueue(A.chunk);break;case ke.CLOSE:if(gt(n,"close should have stream controller"),n.isClosed)break;n.isClosed=!0,n.controller.close(),mA(this,ys,hr).call(this,n,t);break;case ke.ERROR:gt(n,"error should have stream controller"),n.controller.error(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL_COMPLETE:A.success?n.cancelCall.resolve():n.cancelCall.reject(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL:if(!r)break;new Promise(function(g){var o;g((o=r.onCancel)==null?void 0:o.call(r,ut(A.reason)))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,reason:ut(g)})}),r.sinkCapability.reject(ut(A.reason)),r.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}},ys=new WeakSet,hr=async function(A,t){var i,s,a;await Promise.allSettled([(i=A.startCall)==null?void 0:i.promise,(s=A.pullCall)==null?void 0:s.promise,(a=A.cancelCall)==null?void 0:a.promise]),delete this.streamControllers[t]};var a1=class{constructor(A){this._msgHandler=A,this._contentLength=null,this._fullRequestReader=null,this._rangeRequestReaders=[]}getFullReader(){return gt(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once."),this._fullRequestReader=new n1(this._msgHandler),this._fullRequestReader}getRangeReader(A,t){let i=new r1(A,t,this._msgHandler);return this._rangeRequestReaders.push(i),i}cancelAllRequests(A){var t;(t=this._fullRequestReader)==null||t.cancel(A);for(let i of this._rangeRequestReaders.slice(0))i.cancel(A)}},n1=class{constructor(A){this._msgHandler=A,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;let t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then(i=>{this._isStreamingSupported=i.isStreamingSupported,this._isRangeSupported=i.isRangeSupported,this._contentLength=i.contentLength})}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},r1=class{constructor(A,t,i){this._msgHandler=i,this.onProgress=null;let s=this._msgHandler.sendWithStream("GetRangeReader",{begin:A,end:t});this._reader=s.getReader()}get isStreamingSupported(){return!1}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},li=class{constructor(A){this.name=A,this.terminated=!1,this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}},H0=class{static setup(A,t){let i=!1;A.on("test",function(s){i||(i=!0,A.send("test",s instanceof Uint8Array))}),A.on("configure",function(s){Nu(s.verbosity)}),A.on("GetDocRequest",function(s){return H0.createDocumentHandler(s,t)})}static createDocumentHandler(A,t){let i,s=!1,a=null,n=new Set,r=Gu(),{docId:g,apiVersion:o}=A,I="4.6.82";if(o!==I)throw new Error(`The API version "${o}" does not match the Worker version "${I}".`);let c=[];for(let d in[])c.push(d);if(c.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+c.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");let l=g+"_worker",h=new yg(l,g,t);function C(){if(s)throw new Error("Worker was terminated")}function B(d){n.add(d)}function Q(d){d.finish(),n.delete(d)}async function E(d){await i.ensureDoc("checkHeader"),await i.ensureDoc("parseStartXRef"),await i.ensureDoc("parse",[d]),await i.ensureDoc("checkFirstPage",[d]),await i.ensureDoc("checkLastPage",[d]);let x=await i.ensureDoc("isPureXfa");if(x){let S=new li("loadXfaFonts");B(S),await Promise.all([i.loadXfaFonts(h,S).catch(w=>{}).then(()=>Q(S)),i.loadXfaImages()])}let[p,m]=await Promise.all([i.ensureDoc("numPages"),i.ensureDoc("fingerprints")]),D=x?await i.ensureDoc("htmlForXfa"):null;return{numPages:p,fingerprints:m,htmlForXfa:D}}function f({data:d,password:x,disableAutoFetch:p,rangeChunkSize:m,length:D,docBaseUrl:S,enableXfa:w,evaluatorOptions:Y}){let U={source:null,disableAutoFetch:p,docBaseUrl:S,docId:g,enableXfa:w,evaluatorOptions:Y,handler:h,length:D,password:x,rangeChunkSize:m},K=Promise.withResolvers(),Z;if(d){try{U.source=d,Z=new wg(U),K.resolve(Z)}catch(IA){K.reject(IA)}return K.promise}let AA,gA=[];try{AA=new a1(h)}catch(IA){return K.reject(IA),K.promise}let R=AA.getFullReader();R.headersReady.then(function(){if(R.isRangeSupported){U.source=AA,U.length=R.contentLength,U.disableAutoFetch||(U.disableAutoFetch=R.isStreamingSupported),Z=new s1(U);for(let IA of gA)Z.sendProgressiveData(IA);gA=[],K.resolve(Z),a=null}}).catch(function(IA){K.reject(IA),a=null});let _=0,tA=function(){let IA=VE(gA);D&&IA.length!==D&&k("reported HTTP length is different from actual");try{U.source=IA,Z=new wg(U),K.resolve(Z)}catch(QA){K.reject(QA)}gA=[]};return new Promise(function(IA,QA){let V=function({value:lA,done:EA}){try{if(C(),EA){Z||tA(),a=null;return}_+=lA.byteLength,R.isStreamingSupported||h.send("DocProgress",{loaded:_,total:Math.max(_,R.contentLength||0)}),Z?Z.sendProgressiveData(lA):gA.push(lA),R.read().then(V,QA)}catch(fA){QA(fA)}};R.read().then(V,QA)}).catch(function(IA){K.reject(IA),a=null}),a=function(IA){AA.cancelAllRequests(IA)},K.promise}function u(d){function x(D){C(),h.send("GetDoc",{pdfInfo:D})}function p(D){if(C(),D instanceof bs){let S=new li(`PasswordException: response ${D.code}`);B(S),h.sendWithPromise("PasswordRequest",D).then(function({password:w}){Q(S),i.updatePassword(w),m()}).catch(function(){Q(S),h.send("DocException",D)})}else D instanceof ks||D instanceof Er||D instanceof fr||D instanceof Ds?h.send("DocException",D):h.send("DocException",new Ds(D.message,D.toString()))}function m(){C(),E(!1).then(x,function(D){if(C(),!(D instanceof Pi)){p(D);return}i.requestLoadedStream().then(function(){C(),E(!0).then(x,p)})})}C(),f(d).then(function(D){if(s)throw D.terminate(new ve("Worker was terminated.")),new Error("Worker was terminated");i=D,i.requestLoadedStream(!0).then(S=>{h.send("DataLoaded",{length:S.bytes.byteLength})})}).then(m,p)}return h.on("GetPage",function(d){return i.getPage(d.pageIndex).then(function(x){return Promise.all([i.ensure(x,"rotate"),i.ensure(x,"ref"),i.ensure(x,"userUnit"),i.ensure(x,"view")]).then(function([p,m,D,S]){var w;return{rotate:p,ref:m,refStr:(w=m==null?void 0:m.toString())!=null?w:null,userUnit:D,view:S}})})}),h.on("GetPageIndex",function(d){let x=oA.get(d.num,d.gen);return i.ensureCatalog("getPageIndex",[x])}),h.on("GetDestinations",function(d){return i.ensureCatalog("destinations")}),h.on("GetDestination",function(d){return i.ensureCatalog("getDestination",[d.id])}),h.on("GetPageLabels",function(d){return i.ensureCatalog("pageLabels")}),h.on("GetPageLayout",function(d){return i.ensureCatalog("pageLayout")}),h.on("GetPageMode",function(d){return i.ensureCatalog("pageMode")}),h.on("GetViewerPreferences",function(d){return i.ensureCatalog("viewerPreferences")}),h.on("GetOpenAction",function(d){return i.ensureCatalog("openAction")}),h.on("GetAttachments",function(d){return i.ensureCatalog("attachments")}),h.on("GetDocJSActions",function(d){return i.ensureCatalog("jsActions")}),h.on("GetPageJSActions",function({pageIndex:d}){return i.getPage(d).then(function(x){return i.ensure(x,"jsActions")})}),h.on("GetOutline",function(d){return i.ensureCatalog("documentOutline")}),h.on("GetOptionalContentConfig",function(d){return i.ensureCatalog("optionalContentConfig")}),h.on("GetPermissions",function(d){return i.ensureCatalog("permissions")}),h.on("GetMetadata",function(d){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}),h.on("GetMarkInfo",function(d){return i.ensureCatalog("markInfo")}),h.on("GetData",function(d){return i.requestLoadedStream().then(function(x){return x.bytes})}),h.on("GetAnnotations",function({pageIndex:d,intent:x}){return i.getPage(d).then(function(p){let m=new li(`GetAnnotations: page ${d}`);return B(m),p.getAnnotationsData(h,m,x).then(D=>(Q(m),D),D=>{throw Q(m),D})})}),h.on("GetFieldObjects",function(d){return i.ensureDoc("fieldObjects")}),h.on("HasJSActions",function(d){return i.ensureDoc("hasJSActions")}),h.on("GetCalculationOrderIds",function(d){return i.ensureDoc("calculationOrderIds")}),h.on("SaveDocument",async function({isPureXfa:d,numPages:x,annotationStorage:p,filename:m}){var H;let D=[i.requestLoadedStream(),i.ensureCatalog("acroForm"),i.ensureCatalog("acroFormRef"),i.ensureDoc("startXRef"),i.ensureDoc("xref"),i.ensureDoc("linearization"),i.ensureCatalog("structTreeRoot")],S=[],w=d?null:$E(p),[Y,U,K,Z,AA,gA,R]=await Promise.all(D),_=AA.trailer.getRaw("Root")||null,tA;if(w){R?await R.canUpdateStructTree({pdfManager:i,xref:AA,newAnnotationsByPage:w})&&(tA=R):await Ui.canCreateStructureTree({catalogRef:_,pdfManager:i,newAnnotationsByPage:w})&&(tA=null);let q=ei.generateImages(p.values(),AA,i.evaluatorOptions.isOffscreenCanvasSupported),T=tA===void 0?S:[];for(let[$,X]of w)T.push(i.getPage($).then(W=>{let G=new li(`Save (editor): page ${$}`);return W.saveNewAnnotations(h,G,X,q).finally(function(){Q(G)})}));tA===null?S.push(Promise.all(T).then(async $=>(await Ui.createStructureTree({newAnnotationsByPage:w,xref:AA,catalogRef:_,pdfManager:i,newRefs:$}),$))):tA&&S.push(Promise.all(T).then(async $=>(await tA.updateStructureTree({newAnnotationsByPage:w,pdfManager:i,newRefs:$}),$)))}if(d)S.push(i.serializeXfaData(p));else for(let q=0;qq.needAppearances),EA=U instanceof F&&U.get("XFA")||null,fA=null,CA=!1;if(Array.isArray(EA)){for(let q=0,T=EA.length;q{typeof X=="string"&&(q[$]=jA(X))}),N={rootRef:_,encryptRef:AA.trailer.getRaw("Encrypt")||null,newRef:AA.getNewTemporaryRef(),infoRef:AA.trailer.getRaw("Info")||null,info:q,fileIds:AA.trailer.get("ID")||null,startXRef:gA?Z:(H=AA.lastXRefStreamPos)!=null?H:Z,filename:m}}return T9({originalData:Y.bytes,xrefInfo:N,newRefs:QA,xref:AA,hasXfa:!!EA,xfaDatasetsRef:fA,hasXfaDatasetsEntry:CA,needAppearances:lA,acroFormRef:K,acroForm:U,xfaData:V,useXrefStream:jE(AA.topDict,"XRef")}).finally(()=>{AA.resetNewTemporaryRef()})}),h.on("GetOperatorList",function(d,x){let p=d.pageIndex;i.getPage(p).then(function(m){let D=new li(`GetOperatorList: page ${p}`);B(D);let S=r>=Da.INFOS?Date.now():0;m.getOperatorList({handler:h,sink:x,task:D,intent:d.intent,cacheKey:d.cacheKey,annotationStorage:d.annotationStorage,modifiedIds:d.modifiedIds}).then(function(w){Q(D),S&&PA(`page=${p+1} - getOperatorList: time=${Date.now()-S}ms, len=${w.length}`),x.close()},function(w){Q(D),!D.terminated&&x.error(w)})})}),h.on("GetTextContent",function(d,x){let{pageIndex:p,includeMarkedContent:m,disableNormalization:D}=d;i.getPage(p).then(function(S){let w=new li("GetTextContent: page "+p);B(w);let Y=r>=Da.INFOS?Date.now():0;S.extractTextContent({handler:h,task:w,sink:x,includeMarkedContent:m,disableNormalization:D}).then(function(){Q(w),Y&&PA(`page=${p+1} - getTextContent: time=${Date.now()-Y}ms`),x.close()},function(U){Q(w),!w.terminated&&x.error(U)})})}),h.on("GetStructTree",function(d){return i.getPage(d.pageIndex).then(function(x){return i.ensure(x,"getStructTree")})}),h.on("FontFallback",function(d){return i.fontFallback(d.id,h)}),h.on("Cleanup",function(d){return i.cleanup(!0)}),h.on("Terminate",function(d){s=!0;let x=[];if(i){i.terminate(new ve("Worker was terminated."));let p=i.cleanup();x.push(p),i=null}else E1();a&&a(new ve("Worker was terminated."));for(let p of n)x.push(p.finished),p.terminate();return Promise.all(x).then(function(){h.destroy(),h=null})}),h.on("Ready",function(d){u(A),A=null}),l}static initializeFromPort(A){let t=new yg("worker","main",A);H0.setup(t,A),t.send("ready",null)}};function yx(e){return typeof e.postMessage=="function"&&"onmessage"in e}typeof window=="undefined"&&!ku&&typeof self!="undefined"&&yx(self)&&H0.initializeFromPort(self);var bx=qE.WorkerMessageHandler;\n'); } // src/processors/pdf.ts var isWorkerInitialized = false; function initializeWorker() { if (!isWorkerInitialized) { __webpack_exports__GlobalWorkerOptions.workerPort = new Worker2(); isWorkerInitialized = true; } } async function extractTextFromPDF(arrayBuffer) { logger.time("Extracting text from PDF"); try { initializeWorker(); const pdf = await __webpack_exports__getDocument({ data: arrayBuffer }).promise; const numPages = pdf.numPages; const textContents = await Promise.all( Array.from({ length: numPages }, (_, i) => getPageText(pdf, i + 1)) ); const fullText = textContents.join("\n\n"); logger.table("Extracted text from PDF", { textLength: fullText.length }); logger.timeEnd("Extracting text from PDF"); return fullText; } catch (error) { logger.error("Error extracting text from PDF", { error }); throw new Error(`Failed to extract text from PDF: ${error.message}`); } } async function getPageText(pdf, pageNum) { const page = await pdf.getPage(pageNum); const content = await page.getTextContent(); let lastY; const textItems = []; for (const item of content.items) { if ("str" in item) { if (lastY === item.transform[5] || !lastY) { textItems.push(item.str); } else { textItems.push(` ${item.str}`); } lastY = item.transform[5]; } } return textItems.join("") + "\n\n"; } // node_modules/idb/build/index.js var instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); var idbProxyableTypes; var cursorAdvanceMethods; function getIdbProxyableTypes() { return idbProxyableTypes || (idbProxyableTypes = [ IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction ]); } function getCursorAdvanceMethods() { return cursorAdvanceMethods || (cursorAdvanceMethods = [ IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey ]); } var transactionDoneMap = /* @__PURE__ */ new WeakMap(); var transformCache = /* @__PURE__ */ new WeakMap(); var reverseTransformCache = /* @__PURE__ */ new WeakMap(); function promisifyRequest(request) { const promise = new Promise((resolve, reject) => { const unlisten = () => { request.removeEventListener("success", success); request.removeEventListener("error", error); }; const success = () => { resolve(wrap(request.result)); unlisten(); }; const error = () => { reject(request.error); unlisten(); }; request.addEventListener("success", success); request.addEventListener("error", error); }); reverseTransformCache.set(promise, request); return promise; } function cacheDonePromiseForTransaction(tx) { if (transactionDoneMap.has(tx)) return; const done = new Promise((resolve, reject) => { const unlisten = () => { tx.removeEventListener("complete", complete); tx.removeEventListener("error", error); tx.removeEventListener("abort", error); }; const complete = () => { resolve(); unlisten(); }; const error = () => { reject(tx.error || new DOMException("AbortError", "AbortError")); unlisten(); }; tx.addEventListener("complete", complete); tx.addEventListener("error", error); tx.addEventListener("abort", error); }); transactionDoneMap.set(tx, done); } var idbProxyTraps = { get(target, prop, receiver) { if (target instanceof IDBTransaction) { if (prop === "done") return transactionDoneMap.get(target); if (prop === "store") { return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]); } } return wrap(target[prop]); }, set(target, prop, value) { target[prop] = value; return true; }, has(target, prop) { if (target instanceof IDBTransaction && (prop === "done" || prop === "store")) { return true; } return prop in target; } }; function replaceTraps(callback) { idbProxyTraps = callback(idbProxyTraps); } function wrapFunction(func) { if (getCursorAdvanceMethods().includes(func)) { return function(...args) { func.apply(unwrap(this), args); return wrap(this.request); }; } return function(...args) { return wrap(func.apply(unwrap(this), args)); }; } function transformCachableValue(value) { if (typeof value === "function") return wrapFunction(value); if (value instanceof IDBTransaction) cacheDonePromiseForTransaction(value); if (instanceOfAny(value, getIdbProxyableTypes())) return new Proxy(value, idbProxyTraps); return value; } function wrap(value) { if (value instanceof IDBRequest) return promisifyRequest(value); if (transformCache.has(value)) return transformCache.get(value); const newValue = transformCachableValue(value); if (newValue !== value) { transformCache.set(value, newValue); reverseTransformCache.set(newValue, value); } return newValue; } var unwrap = (value) => reverseTransformCache.get(value); function openDB(name, version3, { blocked, upgrade, blocking, terminated } = {}) { const request = indexedDB.open(name, version3); const openPromise = wrap(request); if (upgrade) { request.addEventListener("upgradeneeded", (event) => { upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event); }); } if (blocked) { request.addEventListener("blocked", (event) => blocked( // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 event.oldVersion, event.newVersion, event )); } openPromise.then((db) => { if (terminated) db.addEventListener("close", () => terminated()); if (blocking) { db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event)); } }).catch(() => { }); return openPromise; } var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"]; var writeMethods = ["put", "add", "delete", "clear"]; var cachedMethods = /* @__PURE__ */ new Map(); function getMethod(target, prop) { if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop === "string")) { return; } if (cachedMethods.get(prop)) return cachedMethods.get(prop); const targetFuncName = prop.replace(/FromIndex$/, ""); const useIndex = prop !== targetFuncName; const isWrite = writeMethods.includes(targetFuncName); if ( // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName)) ) { return; } const method = async function(storeName, ...args) { const tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly"); let target2 = tx.store; if (useIndex) target2 = target2.index(args.shift()); return (await Promise.all([ target2[targetFuncName](...args), isWrite && tx.done ]))[0]; }; cachedMethods.set(prop, method); return method; } replaceTraps((oldTraps) => ({ ...oldTraps, get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop) })); var advanceMethodProps = ["continue", "continuePrimaryKey", "advance"]; var methodMap = {}; var advanceResults = /* @__PURE__ */ new WeakMap(); var ittrProxiedCursorToOriginalProxy = /* @__PURE__ */ new WeakMap(); var cursorIteratorTraps = { get(target, prop) { if (!advanceMethodProps.includes(prop)) return target[prop]; let cachedFunc = methodMap[prop]; if (!cachedFunc) { cachedFunc = methodMap[prop] = function(...args) { advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args)); }; } return cachedFunc; } }; async function* iterate(...args) { let cursor = this; if (!(cursor instanceof IDBCursor)) { cursor = await cursor.openCursor(...args); } if (!cursor) return; cursor = cursor; const proxiedCursor = new Proxy(cursor, cursorIteratorTraps); ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor); reverseTransformCache.set(proxiedCursor, unwrap(cursor)); while (cursor) { yield proxiedCursor; cursor = await (advanceResults.get(proxiedCursor) || cursor.continue()); advanceResults.delete(proxiedCursor); } } function isIteratorProp(target, prop) { return prop === Symbol.asyncIterator && instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor]) || prop === "iterate" && instanceOfAny(target, [IDBIndex, IDBObjectStore]); } replaceTraps((oldTraps) => ({ ...oldTraps, get(target, prop, receiver) { if (isIteratorProp(target, prop)) return iterate; return oldTraps.get(target, prop, receiver); }, has(target, prop) { return isIteratorProp(target, prop) || oldTraps.has(target, prop); } })); // src/indexedDB.ts var FileCache = class { constructor() { this.db = null; this.vaultId = ""; } async init(vaultId) { this.vaultId = vaultId; const dbName = `LocalGPTCache/${this.vaultId}`; this.db = await openDB(dbName, 3, { upgrade(db, oldVersion, newVersion) { if (oldVersion < 1) { if (!db.objectStoreNames.contains("embeddings")) { db.createObjectStore("embeddings"); } } if (oldVersion < 2) { if (!db.objectStoreNames.contains("content")) { db.createObjectStore("content"); } } if (oldVersion < 3) { if (db.objectStoreNames.contains("embeddings")) { db.deleteObjectStore("embeddings"); } } } }); } async getContent(key) { if (!this.db) throw new Error("Database not initialized"); return this.db.get("content", key); } async setContent(key, value) { if (!this.db) throw new Error("Database not initialized"); await this.db.put("content", value, key); } async clearContent() { if (!this.db) throw new Error("Database not initialized"); await this.db.clear("content"); } async clearAll() { if (!this.db) throw new Error("Database not initialized"); await this.db.clear("content"); } }; var fileCache = new FileCache(); // src/rag.ts var MAX_DEPTH = 10; async function startProcessing(linkedFiles, vault, metadataCache, activeFile, updateCompletedSteps) { logger.info("Starting RAG processing"); const processedDocs = /* @__PURE__ */ new Map(); const context = { vault, metadataCache, activeFile }; await Promise.all( linkedFiles.map(async (file) => { await processDocumentForRAG(file, context, processedDocs, 0, false); updateCompletedSteps == null ? void 0 : updateCompletedSteps(1); }) ); return processedDocs; } async function getFileContent(file, vault) { if (file.extension === "pdf") { const cachedContent = await fileCache.getContent(file.path); if ((cachedContent == null ? void 0 : cachedContent.mtime) === file.stat.mtime) { return cachedContent.content; } const arrayBuffer = await vault.readBinary(file); const pdfContent = await extractTextFromPDF(arrayBuffer); await fileCache.setContent(file.path, { mtime: file.stat.mtime, content: pdfContent }); return pdfContent; } return vault.cachedRead(file); } async function processDocumentForRAG(file, context, processedDocs, depth, isBacklink) { if (depth > MAX_DEPTH || processedDocs.has(file.path) || file.path === context.activeFile.path) { return processedDocs; } try { const content = await getFileContent(file, context.vault); processedDocs.set(file.path, { content, meta: { source: file.path, basename: file.basename, stat: file.stat, depth, isBacklink } }); if (file.extension === "md" && !isBacklink) { const linkedFiles = getLinkedFiles( content, context.vault, context.metadataCache, file.path ); const backlinkFiles = getBacklinkFiles( file, context, processedDocs ); await Promise.all([ ...linkedFiles.map( (linkedFile) => processDocumentForRAG( linkedFile, context, processedDocs, depth + 1, false ) ), ...backlinkFiles.map( (backlinkFile) => processDocumentForRAG( backlinkFile, context, processedDocs, depth, true ) ) ]); } } catch (error) { console.error(`Error processing document ${file.path}:`, error); } return processedDocs; } function getLinkedFiles(content, vault, metadataCache, currentFilePath) { const linkRegex = /\[\[([^\]|#]+)(?:#[^\]|]+)?(?:\|[^\]]+)?\]\]/g; return Array.from(content.matchAll(linkRegex), (match) => match[1]).map((linkText) => { const linkPath = metadataCache.getFirstLinkpathDest( linkText, currentFilePath ); return linkPath ? vault.getAbstractFileByPath(linkPath.path) : null; }).filter( (file) => file instanceof import_obsidian2.TFile && (file.extension === "md" || file.extension === "pdf") ); } function getBacklinkFiles(file, context, processedDocs) { const resolvedLinks = context.metadataCache.resolvedLinks || {}; const backlinks = []; for (const [sourcePath, links] of Object.entries(resolvedLinks)) { if (processedDocs.has(sourcePath) || !(links == null ? void 0 : links[file.path])) { continue; } const backlinkFile = context.vault.getAbstractFileByPath( sourcePath ); if ((backlinkFile == null ? void 0 : backlinkFile.extension) === "md") { backlinks.push(backlinkFile); } } return backlinks; } async function searchDocuments(query, documents, aiProviders, embeddingProvider, abortController, updateCompletedSteps, addTotalProgressSteps, contextLimit) { if (abortController == null ? void 0 : abortController.signal.aborted) return ""; try { let lastProcessedChunks = 0; let initialized = false; logger.info("Passed contextLimit for context", contextLimit); const results = await aiProviders.retrieve({ query, documents, embeddingProvider, onProgress: (progress) => { var _a2; if (abortController == null ? void 0 : abortController.signal.aborted) return; if (!initialized) { initialized = true; addTotalProgressSteps == null ? void 0 : addTotalProgressSteps(progress.totalChunks || 0); } const processed = ((_a2 = progress.processedChunks) == null ? void 0 : _a2.length) || 0; if (processed > lastProcessedChunks) { updateCompletedSteps(processed - lastProcessedChunks); lastProcessedChunks = processed; } }, abortController }); if (!initialized && (results == null ? void 0 : results.length)) { updateCompletedSteps(1); } return formatResults(results, contextLimit); } catch (error) { if (!(abortController == null ? void 0 : abortController.signal.aborted)) { console.error("Error in searchDocuments:", error); } return ""; } } function formatResults(results, contextLimit) { if (!(results == null ? void 0 : results.length)) return ""; const groupedResults = groupResultsByBasename(results); const sortedGroups = sortResultGroups(groupedResults); const { text: text2, length } = formatGroupedResults(sortedGroups, contextLimit); logger.info("Total length of context", length); return text2; } function groupResultsByBasename(results) { return results.reduce((map, result) => { var _a2; const basename = (_a2 = result.document.meta) == null ? void 0 : _a2.basename; const existing = map.get(basename) || []; existing.push(result); map.set(basename, existing); return map; }, /* @__PURE__ */ new Map()); } function sortResultGroups(groupedResults) { return Array.from(groupedResults.entries()).sort( (a, b) => { var _a2, _b, _c, _d, _e, _f; return (((_c = (_b = (_a2 = b[1][0]) == null ? void 0 : _a2.document.meta) == null ? void 0 : _b.stat) == null ? void 0 : _c.ctime) || 0) - (((_f = (_e = (_d = a[1][0]) == null ? void 0 : _d.document.meta) == null ? void 0 : _e.stat) == null ? void 0 : _f.ctime) || 0); } ); } function formatGroupedResults(groups, contextLimit) { let formattedResults = ""; let totalLength = 0; for (const [basename, groupResults] of groups) { if (totalLength >= contextLimit) break; formattedResults += `[[${basename}]] `; const { text: text2, length } = formatSingleGroup( groupResults, contextLimit, totalLength ); formattedResults += text2; totalLength += length; } const trimmed = formattedResults.trim(); return { text: trimmed, length: trimmed.length }; } function formatSingleGroup(groupResults, contextLimit, currentLength) { let groupText = ""; let addedLength = 0; const sortedResults = [...groupResults].sort((a, b) => b.score - a.score); for (const result of sortedResults) { const content = result.content.trim(); const projectedLength = currentLength + addedLength + content.length + 2; if (!content || projectedLength >= contextLimit) { continue; } groupText += `${content} `; addedLength += content.length + 2; } return { text: groupText, length: addedLength }; } // src/main.ts var import_sdk2 = __toESM(require_dist()); // src/utils.ts function preparePrompt(prompt = "", selectedText, context) { const withSelection = mergeSelection(prompt, selectedText); const withContext = injectContext(withSelection, context); return resolveConditionalContext(withContext, context); } function mergeSelection(prompt, selectedText) { if (prompt.includes(SELECTION_KEYWORD)) { return prompt.replace(SELECTION_KEYWORD, selectedText || ""); } return [prompt, selectedText].filter(Boolean).join("\n\n"); } function injectContext(prompt, context) { if (prompt.includes(CONTEXT_KEYWORD)) { return prompt.replace(CONTEXT_KEYWORD, context || ""); } if (context.trim()) { return [prompt, "Context:\n" + context].filter(Boolean).join("\n\n"); } return prompt; } function resolveConditionalContext(prompt, context) { if (prompt.includes(CONTEXT_CONDITION_START) && prompt.includes(CONTEXT_CONDITION_END)) { const start = prompt.indexOf(CONTEXT_CONDITION_START) - 1; const end = prompt.indexOf(CONTEXT_CONDITION_END); if (start !== -1 && end !== -1 && start < end) { let contextBlock = prompt.substring( start + CONTEXT_CONDITION_START.length + 1, end ); if (!context.trim()) { contextBlock = ""; } prompt = prompt.substring(0, start) + contextBlock + prompt.substring(end + CONTEXT_CONDITION_END.length + 1); } } return prompt; } // src/main.ts function removeThinkingTags(text2) { return text2.replace(/^[\s\S]*?<\/think>\s*/, ""); } var MIN_BASE_SPEED = 0.02 / 16; var MAX_BASE_SPEED = 3 / 16; var LocalGPT = class extends import_obsidian3.Plugin { constructor() { super(...arguments); this.actionPaletteProviderId = null; this.actionPaletteModel = null; this.actionPaletteModelProviderId = null; this.actionPaletteCreativityKey = null; // "", "low", "medium", "high" this.abortControllers = []; this.currentPercentage = 0; this.targetPercentage = 0; this.frameId = null; this.lastFrameTime = null; this.displayedPercentage = 0; // fractional internal value this.baseSpeed = 0; // percent per ms (smoothed) this.lastTargetUpdateTime = null; this.progressFinished = false; // controls when we can show 100% this.totalProgressSteps = 0; this.completedProgressSteps = 0; // Legacy provider defaults used by older settings migrations this.legacyDefaultProviders = { ollama: { url: "http://localhost:11434", defaultModel: "gemma2", embeddingModel: "", type: "ollama" }, ollama_fallback: { url: "http://localhost:11434", defaultModel: "gemma2", embeddingModel: "", type: "ollama" }, openaiCompatible: { url: "http://localhost:8080/v1", apiKey: "", embeddingModel: "", type: "openaiCompatible" }, openaiCompatible_fallback: { url: "http://localhost:8080/v1", apiKey: "", embeddingModel: "", type: "openaiCompatible" } }; this.escapeHandler = (event) => { if (event.key === "Escape") { this.abortControllers.forEach( (abortControllers) => { abortControllers.abort(); } ); this.abortControllers = []; } }; this.animationLoop = (time) => { if (this.lastFrameTime === null) { this.lastFrameTime = time; } const delta = time - this.lastFrameTime; this.lastFrameTime = time; const target = this.targetPercentage; if (delta > 0 && this.displayedPercentage < target) { let speed = this.baseSpeed; if (speed === 0) { speed = (target - this.displayedPercentage) / 400; } this.displayedPercentage = Math.min( target, this.displayedPercentage + speed * delta ); const rounded = Math.floor(this.displayedPercentage); if (rounded !== this.currentPercentage) { this.currentPercentage = rounded; this.updateStatusBar(); } } if (this.displayedPercentage >= target) { this.displayedPercentage = target; this.currentPercentage = target; this.updateStatusBar(); } if (this.currentPercentage < this.targetPercentage || this.displayedPercentage < this.targetPercentage) { this.frameId = requestAnimationFrame(this.animationLoop); return; } this.stopAnimation(); }; } async onload() { (0, import_sdk2.initAI)(this.app, this, async () => { await this.loadSettings(); this.addSettingTab(new LocalGPTSettingTab(this.app, this)); this.reload(); this.app.workspace.onLayoutReady(async () => { await fileCache.init(this.app.appId); window.setTimeout(() => { this.checkUpdates(); }, 5e3); }); this.registerEditorExtension(spinnerPlugin); this.registerEditorExtension(actionPalettePlugin); this.initializeStatusBar(); }); } initializeStatusBar() { this.statusBarItem = this.addStatusBarItem(); this.statusBarItem.addClass("local-gpt-status"); this.statusBarItem.hide(); } processText(text2, selectedText) { if (!text2.trim()) { return ""; } const cleanText = removeThinkingTags(text2).trim(); return ["\n", cleanText.replace(selectedText, "").trim(), "\n"].join( "" ); } addCommands() { this.addCommand({ id: "context-menu", name: I18n.t("commands.showContextMenu"), editorCallback: (editor) => { const editorView = editor.cm; const cursorPositionFrom = editor.getCursor("from"); const cursorPositionTo = editor.getCursor("to"); const contextMenu = new import_obsidian3.Menu(); this.settings.actions.forEach((action) => { contextMenu.addItem((item) => { item.setTitle(action.name).onClick( this.runAction.bind(this, action, editor) ); }); }); const fromRect = editorView.coordsAtPos( editor.posToOffset(cursorPositionFrom) ); const toRect = editorView.coordsAtPos( editor.posToOffset(cursorPositionTo) ); contextMenu.showAtPosition({ x: fromRect.left, y: toRect.top + (editorView.defaultLineHeight || 0) }); } }); this.settings.actions.forEach((action, index2) => { this.addCommand({ id: `quick-access-${index2 + 1}`, name: `${index2 + 1} | ${action.name}`, editorCallback: (editor) => { this.runAction(action, editor); } }); }); this.addCommand({ id: "local-gpt-action-palette", name: I18n.t("commands.actionPalette.name"), editorCallback: async (editor) => { var _a2, _b; const editorView = editor.cm; const cursorPositionFrom = editor.getCursor("from"); const insertPos = editor.posToOffset({ line: cursorPositionFrom.line, ch: 0 }); let modelLabel = ""; let currentProviderId; try { const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); const aiProviders = await aiRequestWaiter.promise; const selectedProviderId = this.actionPaletteProviderId || this.settings.aiProviders.main; const provider = aiProviders.providers.find( (p) => p.id === selectedProviderId ); if (provider) { currentProviderId = provider.id; const modelToShow = this.actionPaletteModelProviderId === provider.id ? this.actionPaletteModel || provider.model : provider.model; const creativityKey = (_b = (_a2 = this.actionPaletteCreativityKey) != null ? _a2 : this.settings.defaults.creativity) != null ? _b : ""; const creativityLabelMap = { "": I18n.t("settings.creativityNone"), low: I18n.t("settings.creativityLow"), medium: I18n.t("settings.creativityMedium"), high: I18n.t("settings.creativityHigh") }; const creativityLabel = creativityLabelMap[creativityKey] || ""; modelLabel = [ provider.name, modelToShow, creativityLabel ].filter(Boolean).join(" \xB7 "); } } catch (e) { } showActionPalette(editorView, insertPos, { onSubmit: (text2, selectedFiles = [], systemPrompt) => { var _a3, _b2, _c; const overrideProviderId = this.actionPaletteProviderId || this.settings.aiProviders.main; const creativityKey = (_b2 = (_a3 = this.actionPaletteCreativityKey) != null ? _a3 : this.settings.defaults.creativity) != null ? _b2 : ""; const temperatureOverride = (_c = CREATIVITY[creativityKey]) == null ? void 0 : _c.temperature; this.runFreeform( editor, text2, selectedFiles, overrideProviderId, temperatureOverride, systemPrompt ).finally(() => { }); hideActionPalette(editorView); this.app.workspace.updateOptions(); }, onCancel: () => { hideActionPalette(editorView); this.app.workspace.updateOptions(); }, placeholder: I18n.t("commands.actionPalette.placeholder"), modelLabel, providerId: currentProviderId, getFiles: () => { return this.app.vault.getMarkdownFiles().concat( this.app.vault.getFiles().filter((f) => f.extension === "pdf") ).map((file) => ({ path: file.path, basename: file.basename, extension: file.extension })); }, getProviders: async () => { try { const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); const aiProviders = await aiRequestWaiter.promise; return aiProviders.providers.filter((p) => Boolean(p.model)).map((p) => ({ id: p.id, name: p.model || I18n.t( "commands.actionPalette.unknownModel" ), providerName: p.name, providerUrl: p.url || "" })); } catch (error) { console.error("Error fetching models:", error); return []; } }, getModels: async (providerId) => { try { const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); const aiProviders = await aiRequestWaiter.promise; const provider = aiProviders.providers.find( (p) => p.id === providerId ); if (!provider) return []; const models = provider.availableModels || await aiProviders.fetchModels(provider); return models.map((m) => ({ id: m, name: m })); } catch (error) { console.error("Error fetching models:", error); return []; } }, onProviderChange: async (providerId) => { this.actionPaletteProviderId = providerId; this.actionPaletteModel = null; this.actionPaletteModelProviderId = null; }, onModelChange: async (model) => { const providerId = this.actionPaletteProviderId || this.settings.aiProviders.main; this.actionPaletteModel = model; this.actionPaletteModelProviderId = providerId; }, onCreativityChange: async (creativityKey) => { this.actionPaletteCreativityKey = creativityKey; }, getSystemPrompts: () => { return this.settings.actions.filter((action) => action.system).map((action) => ({ name: action.name, system: action.system })); } }); this.app.workspace.updateOptions(); } }); } async runFreeform(editor, userInput, selectedFiles = [], overrideProviderId, customTemperature, systemPrompt) { return this.executeAction( { prompt: userInput, system: systemPrompt, replace: false, selectedFiles, overrideProviderId: overrideProviderId || void 0, temperature: customTemperature }, editor ); } async runAction(action, editor) { return this.executeAction( { prompt: action.prompt, system: action.system, replace: !!action.replace, temperature: action.temperature || CREATIVITY[this.settings.defaults.creativity].temperature }, editor ); } async executeAction(params, editor) { const { editorView, cursorPositionFrom, cursorPositionTo, cursorOffsetTo, selectedTextRef } = this.extractSelectionContext(editor); const { abortController, hideSpinner, onUpdate } = this.createExecutionContext( editorView, cursorOffsetTo, selectedTextRef ); const { cleanedText, imagesInBase64 } = await this.extractImagesFromSelection(selectedTextRef.value); selectedTextRef.value = cleanedText; logger.time("Processing Embeddings"); logger.timeEnd("Processing Embeddings"); logger.debug("Selected text", cleanedText); const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); const aiProviders = await aiRequestWaiter.promise; const embeddingProvider = aiProviders.providers.find( (provider2) => provider2.id === this.settings.aiProviders.embedding ); const context = await this.enhanceWithContext( cleanedText, aiProviders, embeddingProvider, abortController, params.selectedFiles ); const provider = this.selectProvider( aiProviders, imagesInBase64.length > 0, params.overrideProviderId ); const adjustedProvider = this.overrideProviderModel(provider, params); let fullText = ""; try { fullText = await this.executeProviderRequest( aiProviders, adjustedProvider, params, cleanedText, context, imagesInBase64, abortController, onUpdate ); } finally { hideSpinner && hideSpinner(); this.app.workspace.updateOptions(); } if (abortController.signal.aborted) { return; } const finalText = removeThinkingTags(fullText).trim(); this.applyTextResult( editor, params.replace, finalText, selectedTextRef.value, cursorPositionFrom, cursorPositionTo ); } extractSelectionContext(editor) { const editorView = editor.cm; const selection = editor.getSelection(); const selectedTextRef = { value: selection || editor.getValue() }; const cursorPositionFrom = editor.getCursor("from"); const cursorPositionTo = editor.getCursor("to"); const cursorOffsetTo = editor.posToOffset(cursorPositionTo); return { editorView, cursorPositionFrom, cursorPositionTo, cursorOffsetTo, selectedTextRef }; } createExecutionContext(editorView, cursorOffsetTo, selectedTextRef) { const abortController = new AbortController(); this.abortControllers.push(abortController); const spinner = editorView.plugin(spinnerPlugin) || void 0; const hideSpinner = spinner == null ? void 0 : spinner.show(cursorOffsetTo); this.app.workspace.updateOptions(); abortController.signal.addEventListener("abort", () => { hideSpinner && hideSpinner(); this.app.workspace.updateOptions(); }); const onUpdate = (updatedString) => { if (!spinner) return; spinner.processText( updatedString, (text2) => this.processText(text2, selectedTextRef.value) ); this.app.workspace.updateOptions(); }; return { abortController, hideSpinner, onUpdate }; } async extractImagesFromSelection(selectedText) { const regexp = /!\[\[(.+?\.(?:png|jpe?g))]]/gi; const fileNames = Array.from( selectedText.matchAll(regexp), (match) => match[1] ); const cleanedText = selectedText.replace(regexp, ""); const imagesInBase64 = (await Promise.all( fileNames.map( (fileName) => this.readImageAsDataUrl(fileName) ) )).filter(Boolean) || []; return { cleanedText, imagesInBase64 }; } async readImageAsDataUrl(fileName) { const filePath = this.app.metadataCache.getFirstLinkpathDest( fileName, // @ts-ignore this.app.workspace.getActiveFile().path ); if (!filePath) { return ""; } return this.app.vault.adapter.readBinary(filePath.path).then((buffer) => { const extension = filePath.extension.toLowerCase(); const mimeType = extension === "jpg" ? "jpeg" : extension; const blob = new Blob([buffer], { type: `image/${mimeType}` }); return new Promise((resolve) => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.readAsDataURL(blob); }); }); } selectProvider(aiProviders, hasImages, overrideProviderId) { const visionCandidate = hasImages ? aiProviders.providers.find( (p) => p.id === this.settings.aiProviders.vision ) : void 0; const preferredProviderId = overrideProviderId || this.settings.aiProviders.main; const fallback = aiProviders.providers.find( (p) => p.id === preferredProviderId ); const provider = visionCandidate || fallback; if (!provider) { throw new Error("No AI provider found"); } return provider; } overrideProviderModel(provider, params) { if (this.actionPaletteModel && params.overrideProviderId && this.actionPaletteModelProviderId === params.overrideProviderId) { return { ...provider, model: this.actionPaletteModel }; } return provider; } async executeProviderRequest(aiProviders, provider, params, selectedText, context, imagesInBase64, abortController, onUpdate) { var _a2; try { return await aiProviders.execute({ provider, prompt: preparePrompt(params.prompt, selectedText, context), images: imagesInBase64, systemPrompt: params.system, options: { temperature: (_a2 = params.temperature) != null ? _a2 : CREATIVITY[this.settings.defaults.creativity].temperature }, onProgress: (_chunk, accumulatedText) => { onUpdate(accumulatedText); }, abortController }); } catch (error) { if (!abortController.signal.aborted) { new import_obsidian3.Notice( I18n.t("notices.errorGenerating", { message: error.message }) ); } logger.separator(); return ""; } } applyTextResult(editor, replaceSelection, finalText, selectedText, cursorPositionFrom, cursorPositionTo) { if (replaceSelection) { editor.replaceRange( finalText, cursorPositionFrom, cursorPositionTo ); return; } const isLastLine = editor.lastLine() === cursorPositionTo.line; const text2 = this.processText(finalText, selectedText); editor.replaceRange(isLastLine ? "\n" + text2 : text2, { ch: 0, line: cursorPositionTo.line + 1 }); } async enhanceWithContext(selectedText, aiProviders, aiProvider, abortController, selectedFiles) { const activeFile = this.app.workspace.getActiveFile(); if (!activeFile || !aiProvider || (abortController == null ? void 0 : abortController.signal.aborted)) { return ""; } const allLinkedFiles = this.collectLinkedFilesForContext( selectedText, selectedFiles, activeFile.path ); if (allLinkedFiles.length === 0) { return ""; } try { this.initializeProgress(); const processedDocs = await startProcessing( allLinkedFiles, this.app.vault, this.app.metadataCache, activeFile, this.updateCompletedSteps.bind(this) ); if (this.shouldAbortProcessing(processedDocs, abortController)) { return this.finishContextProcessing(""); } const retrieveDocuments = Array.from(processedDocs.values()); if (abortController == null ? void 0 : abortController.signal.aborted) { return this.finishContextProcessing(""); } const contextLimit = this.resolveContextLimit(); const relevantContext = await searchDocuments( selectedText, retrieveDocuments, aiProviders, aiProvider, abortController, this.updateCompletedSteps.bind(this), this.addTotalProgressSteps.bind(this), contextLimit ); return this.finishContextProcessing(relevantContext.trim() || ""); } catch (error) { return this.handleContextError(error, abortController); } } collectLinkedFilesForContext(selectedText, selectedFiles, activeFilePath) { const linkedFiles = getLinkedFiles( selectedText, this.app.vault, this.app.metadataCache, activeFilePath ); const additionalFiles = (selectedFiles == null ? void 0 : selectedFiles.map( (filePath) => this.app.vault.getAbstractFileByPath(filePath) ).filter( (file) => file !== null && file instanceof import_obsidian3.TFile && (file.extension === "md" || file.extension === "pdf") )) || []; return [...linkedFiles, ...additionalFiles]; } shouldAbortProcessing(processedDocs, abortController) { return processedDocs.size === 0 || (abortController == null ? void 0 : abortController.signal.aborted); } resolveContextLimit() { var _a2, _b; const preset = (_b = (_a2 = this.settings) == null ? void 0 : _a2.defaults) == null ? void 0 : _b.contextLimit; const map = { local: 1e4, cloud: 32e3, advanced: 1e5, max: 3e6 }; return map[preset]; } finishContextProcessing(result) { this.hideStatusBar(); return result; } handleContextError(error, abortController) { this.hideStatusBar(); if (!(abortController == null ? void 0 : abortController.signal.aborted)) { console.error("Error processing RAG:", error); new import_obsidian3.Notice( I18n.t("notices.errorProcessingRag", { message: error.message }) ); } return ""; } onunload() { document.removeEventListener("keydown", this.escapeHandler); window.clearInterval(this.updatingInterval); if (this.frameId !== null) { cancelAnimationFrame(this.frameId); } } async loadSettings() { const loadedData = await this.loadData(); const { settings, changed } = await this.migrateSettings(loadedData); this.settings = Object.assign({}, DEFAULT_SETTINGS, settings); if (changed) { await this.saveData(this.settings); } } async migrateSettings(loadedData) { if (!loadedData) { return { settings: loadedData, changed: false }; } let changed = false; changed = this.migrateToVersion2(loadedData) || changed; changed = this.migrateToVersion3(loadedData) || changed; changed = this.migrateToVersion4(loadedData) || changed; changed = this.migrateToVersion5(loadedData) || changed; changed = this.migrateToVersion6(loadedData) || changed; changed = await this.migrateToVersion7(loadedData) || changed; changed = this.migrateToVersion8(loadedData) || changed; return { settings: loadedData, changed }; } migrateToVersion2(settings) { if (settings._version && settings._version >= 1) { return false; } const providers = JSON.parse( JSON.stringify(this.legacyDefaultProviders) ); settings.providers = providers; settings.providers.ollama.ollamaUrl = settings.ollamaUrl; delete settings.ollamaUrl; settings.providers.ollama.defaultModel = settings.defaultModel; delete settings.defaultModel; settings.providers.openaiCompatible && (settings.providers.openaiCompatible.apiKey = ""); settings._version = 2; return true; } migrateToVersion3(settings) { if (settings._version && settings._version >= 3) { return false; } settings.defaultProvider = settings.selectedProvider || "ollama"; delete settings.selectedProvider; const providers = settings.providers; if (providers) { Object.keys(providers).forEach((key) => { providers[key].type = key; }); } settings._version = 3; return true; } migrateToVersion4(settings) { if (settings._version && settings._version >= 4) { return false; } settings.defaults = { provider: settings.defaultProvider || "ollama", fallbackProvider: settings.fallbackProvider || "", creativity: "low" }; delete settings.defaultProvider; delete settings.fallbackProvider; settings._version = 4; return true; } migrateToVersion5(settings) { if (settings._version && settings._version >= 5) { return false; } const providers = settings.providers; if (providers) { Object.keys(this.legacyDefaultProviders).forEach((provider) => { if (providers[provider]) { providers[provider].embeddingModel = this.legacyDefaultProviders[provider].embeddingModel; } }); } settings._version = 5; setTimeout(() => { new import_obsidian3.Notice( `\u{1F389} LocalGPT can finally use context from links! Check the Settings!`, 0 ); }, 1e4); return true; } migrateToVersion6(settings) { if (settings._version && settings._version >= 6) { return false; } const providers = settings.providers; if (providers) { Object.keys(this.legacyDefaultProviders).forEach((provider) => { var _a2, _b; if (((_a2 = providers[provider]) == null ? void 0 : _a2.type) === "ollama") { providers[provider].url = providers[provider].ollamaUrl; delete providers[provider].ollamaUrl; } if (((_b = providers[provider]) == null ? void 0 : _b.type) === "openaiCompatible") { providers[provider].url = providers[provider].url.replace(/\/+$/i, "") + "/v1"; } }); } settings._version = 6; return true; } async migrateToVersion7(settings) { if (settings._version && settings._version >= 7) { return false; } new import_obsidian3.Notice(I18n.t("notices.importantUpdate"), 0); const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); const aiProviders = await aiRequestWaiter.promise; settings.aiProviders = { main: null, embedding: null, vision: null }; const oldProviders = settings.providers; const oldDefaults = settings.defaults; if (oldProviders && (oldDefaults == null ? void 0 : oldDefaults.provider)) { await this.migrateLegacyProviderConfig( settings, aiProviders, oldProviders, oldDefaults ); } delete settings.defaults; delete settings.providers; settings._version = 7; return true; } async migrateLegacyProviderConfig(settings, aiProviders, oldProviders, oldDefaults) { const provider = oldDefaults.provider; const typesMap = { ollama: "ollama", openaiCompatible: "openai" }; const providerConfig = oldProviders[provider]; if (!providerConfig) { return; } const type = typesMap[providerConfig.type]; await this.createMigratedProvider( settings, aiProviders, provider, providerConfig, type, "main", providerConfig.defaultModel ); await this.createMigratedProvider( settings, aiProviders, provider, providerConfig, type, "embedding", providerConfig.embeddingModel ); } async createMigratedProvider(settings, aiProviders, provider, providerConfig, type, targetKey, model) { if (!model) { return; } let adjustedModel = model; if (type === "ollama" && !adjustedModel.endsWith(":latest")) { adjustedModel = `${adjustedModel}:latest`; } const id = `id-${Date.now().toString()}`; const newProvider = await aiProviders.migrateProvider({ id, name: targetKey === "main" ? `Local GPT ${provider}` : `Local GPT ${provider} embeddings`, apiKey: providerConfig.apiKey, url: providerConfig.url, type, model: adjustedModel }); if (newProvider) { settings.aiProviders[targetKey] = newProvider.id; } } migrateToVersion8(settings) { if (settings._version && settings._version >= 8) { return false; } settings.defaults = settings.defaults || {}; settings.defaults.contextLimit = settings.defaults.contextLimit || "local"; settings._version = 8; return true; } async checkUpdates() { try { const { json: response } = await (0, import_obsidian3.requestUrl)({ url: "https://api.github.com/repos/pfrankov/obsidian-local-gpt/releases/latest", method: "GET", headers: { "Content-Type": "application/json" }, contentType: "application/json" }); if (response.tag_name !== this.manifest.version) { new import_obsidian3.Notice(I18n.t("notices.newVersion")); } } catch (error) { console.error("Error checking for updates:", error); } } reload() { this.onunload(); this.addCommands(); this.abortControllers = []; this.updatingInterval = window.setInterval( this.checkUpdates.bind(this), 108e5 ); document.addEventListener("keydown", this.escapeHandler); } async saveSettings() { await this.saveData(this.settings); this.reload(); } initializeProgress() { this.totalProgressSteps = 0; this.completedProgressSteps = 0; this.currentPercentage = 0; this.targetPercentage = 0; this.displayedPercentage = 0; this.baseSpeed = 0; this.lastTargetUpdateTime = null; this.lastFrameTime = null; this.progressFinished = false; this.stopAnimation(); this.statusBarItem.show(); this.updateStatusBar(); } addTotalProgressSteps(steps) { this.totalProgressSteps += steps; this.updateProgressBar(); } updateCompletedSteps(steps) { this.completedProgressSteps += steps; if (this.completedProgressSteps > this.totalProgressSteps) { this.totalProgressSteps = this.completedProgressSteps; } this.updateProgressBar(); } updateProgressBar() { const newTarget = this.calculateTargetPercentage(); if (newTarget === this.targetPercentage) { return; } const now2 = performance.now(); this.baseSpeed = this.calculateBaseSpeed(newTarget, now2); this.targetPercentage = newTarget; this.lastTargetUpdateTime = now2; this.ensureAnimationLoop(); } calculateTargetPercentage() { if (this.totalProgressSteps <= 0) { return 0; } const ratio = Math.min( this.completedProgressSteps / this.totalProgressSteps, 1 ); return Math.floor(ratio * 100); } calculateBaseSpeed(newTarget, now2) { if (this.lastTargetUpdateTime === null) { return this.baseSpeed; } const dt = now2 - this.lastTargetUpdateTime; const diff = newTarget - this.targetPercentage; if (dt <= 0 || diff <= 0) { return this.baseSpeed; } const instantaneous = diff / dt; const blended = this.baseSpeed === 0 ? instantaneous : this.baseSpeed * 0.75 + instantaneous * 0.25; return Math.min(MAX_BASE_SPEED, Math.max(MIN_BASE_SPEED, blended)); } ensureAnimationLoop() { if (this.frameId !== null) { return; } this.lastFrameTime = null; this.frameId = requestAnimationFrame(this.animationLoop); } updateStatusBar() { const shown = this.progressFinished ? this.currentPercentage : Math.min(this.currentPercentage, 99); this.statusBarItem.setAttr( "data-text", shown ? I18n.t("statusBar.enhancingWithProgress", { percent: String(shown) }) : I18n.t("statusBar.enhancing") ); this.statusBarItem.setText(` `); } stopAnimation() { if (this.frameId !== null) { cancelAnimationFrame(this.frameId); } this.frameId = null; this.lastFrameTime = null; } hideStatusBar() { this.statusBarItem.hide(); this.totalProgressSteps = 0; this.completedProgressSteps = 0; this.currentPercentage = 0; this.targetPercentage = 0; this.displayedPercentage = 0; this.baseSpeed = 0; this.lastTargetUpdateTime = null; this.lastFrameTime = null; this.progressFinished = false; this.stopAnimation(); } markProgressFinished() { if (this.progressFinished) { return; } this.progressFinished = true; this.currentPercentage = 100; this.displayedPercentage = 100; this.targetPercentage = 100; this.updateStatusBar(); } }; /*! Bundled license information: sortablejs/modular/sortable.esm.js: (**! * Sortable 1.15.6 * @author RubaXa * @author owenm * @license MIT *) */ /* nosourcemap */