From a0638a75eb3193bee86c7cfeedc212b37564d267 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 1 Oct 2025 18:39:48 +0300 Subject: [PATCH 01/36] ZugferdConformanceLevel --- .../embedded-file-streams.md | 41 +--------- .../embedded-file-streams/zugferd-invoices.md | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md b/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md index 6b3dd08d..f41eba6b 100644 --- a/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md +++ b/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md @@ -41,46 +41,7 @@ RadFixedDocument stores the integrated files in an **EmbeddedFilesCollection** a ### Creating an Embedded Electronic (ZUGFeRD) Invoice -RadPdfProcessing provides support for embedding of [ZUGFeRD](https://de.wikipedia.org/wiki/ZUGFeRD) (acronym for Zentraler User Guide des Forums elektronische Rechnung Deutschland) invoices. - -#### **[C#] Add ZUGFeRD invoice** - -{{region cs-radpdfprocessing-embedded-file-add-zugferd-invoice}} - - RadFixedDocument document = new RadFixedDocument(); - using (RadFixedDocumentEditor editor = new RadFixedDocumentEditor(document)) - { - editor.CharacterProperties.TrySetFont(new System.Windows.Media.FontFamily("Calibri")); - editor.InsertRun("PDF/A-3B Compliant Invoice"); - }; - byte[] bytes = File.ReadAllBytes(@"zugferd-invoice.xml"); - document.EmbeddedFiles.AddZugferdInvoice(bytes); - - PdfFormatProvider provider = new PdfFormatProvider(); - PdfExportSettings settings = new PdfExportSettings(); - settings.ComplianceLevel = PdfComplianceLevel.PdfA3B; - provider.ExportSettings = settings; - using (Stream output = File.OpenWrite("exportedInvoice.pdf")) - { - provider.Export(document, output); - } - -{{endregion}} - ->note Only a single XML invoice attachment is allowed according to ZUGFeRD standard. - ->important To comply with the PDF/A-3B standard all the fonts in the documents should be embedded, so please avoid using [Standard Fonts]({%slug radpdfprocessing-concepts-fonts%}) because they are not being embedded in the document. In **.NET Standard/.NET (Target OS: None)** environments, fonts beyond the [14 standard ones]({%slug radpdfprocessing-concepts-fonts%}#standard-fonts) require a [FontsProvider implementation]({%slug pdfprocessing-implement-fontsprovider%}) to be resolved correctly. - -#### **[C#] Remove ZUGFeRD invoice** - -{{region cs-radpdfprocessing-embedded-file-remove-zugferd-invoice}} - - if (document.EmbeddedFiles.ContainsZugferdInvoice) - { - document.EmbeddedFiles.RemoveZugferdInvoice(); - } - -{{endregion}} +RadPdfProcessing provides support for embedding of [ZUGFeRD invoices]({%slug radpdfprocessing-embedded-file-streams-zugferd-invoices%}). ### Using the MergedEmbeddedFileNameResolving event diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md new file mode 100644 index 00000000..7b0325a1 --- /dev/null +++ b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md @@ -0,0 +1,78 @@ +--- +title: ZUGFeRD invoices +description: Learn how to embed a ZUGFeRD invoice into a PDF document utilizing the Telerik PdfProcessing library. +page_title: ZUGFeRD invoices +slug: radpdfprocessing-embedded-file-streams-zugferd-invoices +tags: pdf, file, stream, embedded, zugferd, invoice +position: 1 +--- + +# ZUGFeRD invoices + +|Minimum Version|Q4 2025| +|----|----| + +[ZUGFeRD](https://de.wikipedia.org/wiki/ZUGFeRD) (acronym for Zentraler User Guide des Forums elektronische Rechnung Deutschland) is a specification for the electronic invoice format of the same name. **RadPdfProcessing** provides support for embedding of ZUGFeRD invoices. + +### Creating an Embedded Electronic (ZUGFeRD) Invoice + +#### **[C#] Add ZUGFeRD invoice** + +{{region cs-radpdfprocessing-embedded-file-add-zugferd-invoice}} + + RadFixedDocument document = new RadFixedDocument(); + using (RadFixedDocumentEditor editor = new RadFixedDocumentEditor(document)) + { + editor.CharacterProperties.TrySetFont(new System.Windows.Media.FontFamily("Calibri")); + editor.InsertRun("PDF/A-3B Compliant Invoice"); + }; + byte[] bytes = File.ReadAllBytes(@"zugferd-invoice.xml"); + document.EmbeddedFiles.AddZugferdInvoice(bytes); + + PdfFormatProvider provider = new PdfFormatProvider(); + PdfExportSettings settings = new PdfExportSettings(); + settings.ComplianceLevel = PdfComplianceLevel.PdfA3B; + provider.ExportSettings = settings; + using (Stream output = File.OpenWrite("exportedInvoice.pdf")) + { + provider.Export(document, output); + } + +{{endregion}} + +>note Only a single XML invoice attachment is allowed according to ZUGFeRD standard. + +>important To comply with the PDF/A-3B standard all the fonts in the documents should be embedded, so please avoid using [Standard Fonts]({%slug radpdfprocessing-concepts-fonts%}) because they are not being embedded in the document. In **.NET Standard/.NET (Target OS: None)** environments, fonts beyond the [14 standard ones]({%slug radpdfprocessing-concepts-fonts%}#standard-fonts) require a [FontsProvider implementation]({%slug pdfprocessing-implement-fontsprovider%}) to be resolved correctly. + +#### **[C#] Remove ZUGFeRD invoice** + +{{region cs-radpdfprocessing-embedded-file-remove-zugferd-invoice}} + + if (document.EmbeddedFiles.ContainsZugferdInvoice) + { + document.EmbeddedFiles.RemoveZugferdInvoice(); + } + +{{endregion}} + +## ZugferdConformanceLevel + +Specifies the ZUGFeRD (Factur-X) conformance level to use when exporting PDF invoices. Higher levels generally include all requirements of the lower levels and add more structured data to support automated processing and validation scenarios. + +As of **Q4 2025** RadPdfProcessing offers the functionality to specify the **ZugferdConformanceLevel**. The available options are: + +* **Minimum**: The minimal profile providing only the essential data needed for a compliant e-invoice. Suitable for simple use cases with limited automation. +* **Basic**: The basic profile providing core structured data for improved interoperability and basic automated processing between trading partners. This is the default value. +* **Comfort**: The comfort profile with richer structured content, typically aligned with common business requirements to enable advanced automation. +* **Extended**: The most comprehensive profile including extended data elements to cover advanced or industry-specific scenarios beyond the comfort profile. + +```` +RadFixedDocument document = new RadFixedDocument(); +document.EmbeddedFiles.AddZugferdInvoice(new byte[3] { 1, 2, 3 }, ZugferdConformanceLevel.Comfort); +```` + +The ZugferdConformanceLevel can be passed through: + +* ExportSettings +* Directly to the EmbeddedFilesCollection.AddZugferdInvoice() method + From 32d46279970f61da87e70d56791d39b37ba5388a Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Fri, 3 Oct 2025 13:09:52 +0300 Subject: [PATCH 02/36] polishing zugferd --- .../embedded-file-streams/embedded-file-streams.md | 2 +- .../embedded-file-streams/zugferd-invoices.md | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md b/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md index f41eba6b..2c8636d4 100644 --- a/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md +++ b/libraries/radpdfprocessing/features/embedded-file-streams/embedded-file-streams.md @@ -41,7 +41,7 @@ RadFixedDocument stores the integrated files in an **EmbeddedFilesCollection** a ### Creating an Embedded Electronic (ZUGFeRD) Invoice -RadPdfProcessing provides support for embedding of [ZUGFeRD invoices]({%slug radpdfprocessing-embedded-file-streams-zugferd-invoices%}). +RadPdfProcessing provides support for embedding [ZUGFeRD invoices]({%slug radpdfprocessing-embedded-file-streams-zugferd-invoices%}). ### Using the MergedEmbeddedFileNameResolving event diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md index 7b0325a1..878bb91f 100644 --- a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md +++ b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md @@ -40,7 +40,7 @@ position: 1 {{endregion}} ->note Only a single XML invoice attachment is allowed according to ZUGFeRD standard. +>note Only a single XML invoice attachment is allowed according to the ZUGFeRD standard. >important To comply with the PDF/A-3B standard all the fonts in the documents should be embedded, so please avoid using [Standard Fonts]({%slug radpdfprocessing-concepts-fonts%}) because they are not being embedded in the document. In **.NET Standard/.NET (Target OS: None)** environments, fonts beyond the [14 standard ones]({%slug radpdfprocessing-concepts-fonts%}#standard-fonts) require a [FontsProvider implementation]({%slug pdfprocessing-implement-fontsprovider%}) to be resolved correctly. @@ -57,9 +57,9 @@ position: 1 ## ZugferdConformanceLevel -Specifies the ZUGFeRD (Factur-X) conformance level to use when exporting PDF invoices. Higher levels generally include all requirements of the lower levels and add more structured data to support automated processing and validation scenarios. +As of **Q4 2025** RadPdfProcessing provides support for specifying the ZUGFeRD (Factur-X) **conformance level** to use when exporting PDF invoices. Higher levels generally include all requirements of the lower levels and add more structured data to support automated processing and validation scenarios. -As of **Q4 2025** RadPdfProcessing offers the functionality to specify the **ZugferdConformanceLevel**. The available options are: +RadPdfProcessing offers the functionality to specify the **ZugferdConformanceLevel** when embedding the invoice. The available options are: * **Minimum**: The minimal profile providing only the essential data needed for a compliant e-invoice. Suitable for simple use cases with limited automation. * **Basic**: The basic profile providing core structured data for improved interoperability and basic automated processing between trading partners. This is the default value. @@ -68,11 +68,6 @@ As of **Q4 2025** RadPdfProcessing offers the functionality to specify the **Zug ```` RadFixedDocument document = new RadFixedDocument(); -document.EmbeddedFiles.AddZugferdInvoice(new byte[3] { 1, 2, 3 }, ZugferdConformanceLevel.Comfort); +document.EmbeddedFiles.AddZugferdInvoice(File.ReadAllBytes(@"zugferd-invoice.xml"), ZugferdConformanceLevel.Comfort); ```` -The ZugferdConformanceLevel can be passed through: - -* ExportSettings -* Directly to the EmbeddedFilesCollection.AddZugferdInvoice() method - From cd8181aacbaeebc19506b07f70cbc0ccb92574a6 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Fri, 3 Oct 2025 17:26:41 +0300 Subject: [PATCH 03/36] RadFixedPage and RadFixedDocument articles review --- libraries/radpdfprocessing/model/radfixeddocument.md | 11 +++++++++-- libraries/radpdfprocessing/model/radfixedpage.md | 8 +++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libraries/radpdfprocessing/model/radfixeddocument.md b/libraries/radpdfprocessing/model/radfixeddocument.md index e03460f1..327ab058 100644 --- a/libraries/radpdfprocessing/model/radfixeddocument.md +++ b/libraries/radpdfprocessing/model/radfixeddocument.md @@ -10,7 +10,7 @@ position: 1 # RadFixedDocument -__RadFixedDocument__ hosts fixed document content and is the root element in the document elements tree. It holds a collection of [RadFixedPage]({%slug radpdfprocessing-model-radfixedpage%}) elements. +**RadFixedDocument** is a core class in the Telerik Document Processing libraries, specifically within the PdfProcessing model. This article will get you familiar with the basics of __RadFixedDocument__. It contains the following sections: @@ -22,7 +22,7 @@ This article will get you familiar with the basics of __RadFixedDocument__. It c ## What Is RadFixedDocument -__RadFixedDocument__ is the root that contains all other elements in the __RadPdfProcessing__ model. It exposes the following public API: +**RadFixedDocument** is the main document unit of the **PdfProcessing** model. It represents the root element of a fixed-layout PDF document and serves as the container for all other document elements. RadFixedDocument holds a collection of [RadFixedPage]({%slug radpdfprocessing-model-radfixedpage%}) elements. It exposes the following public API: |Property Name|Description| |----|----| @@ -54,6 +54,13 @@ __RadFixedDocument__ is the root that contains all other elements in the __RadPd |**MergedEmbeddedFileNameResolving**|Occurs when trying to resolve conflicts between the embedded file names while merging RadFixedDocument instances.| |**MergedJavaScriptNameResolving**|Occurs when trying to resolve conflicts between the JavaScript names while merging RadFixedDocument instances.| + +RadFixedDocument is typically used when: + +* Creating a PDF document from scratch programmatically: a complete example is available in the [PdfProcessing Basic Usage demo](https://demos.telerik.com/document-processing/pdfprocessing). +* Extracting or manipulating content from existing PDF documents: first import any existing PDF documents with the help of the [PdfFormatProvider]({%slug radpdfprocessing-formats-and-conversion-pdf-pdfformatprovider%}). +* Generating structured, fixed-layout documents with precise control over layout and formatting: [FixedContentEditor]({%slug radpdfprocessing-editing-fixedcontenteditor%}) and [RadFixedDocumentEditor]({%slug radpdfprocessing-editing-radfixeddocumenteditor%}) allow you to create a RadFixedDocument either with managing the position or in a flow-like manner and insert all desired elements one after another. + >note A complete SDK example how to generate a document is available [here](https://github.com/telerik/document-processing-sdk/tree/master/PdfProcessing/GenerateDocument). __Example 1__ shows how you can create a new __RadFixedDocument__ instance. diff --git a/libraries/radpdfprocessing/model/radfixedpage.md b/libraries/radpdfprocessing/model/radfixedpage.md index 5519c1ba..01dee341 100644 --- a/libraries/radpdfprocessing/model/radfixedpage.md +++ b/libraries/radpdfprocessing/model/radfixedpage.md @@ -31,7 +31,13 @@ __RadFixedPage__ exposes the following properties: |__CropBox__| Defines the region to which the contents of the page are clipped (cropped) when displayed or printed. This boundary determines the visible page content. The default value is the page’s media box. | |__Size__|Property of type Size representing the size of the page. Its value is determined by the width and height of the **MediaBox**.| |__Rotation__|Property of type [Rotation](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.Model.Data.Rotation.html) representing the page rotation.| -|**Actions**|Gets the page [actions]({%slug radpdfprocessing-model-action-collections%}#pageactioncollection) collection.| +|**Actions**|Gets the page [actions]({%slug radpdfprocessing-model-action-collections%}#pageactioncollection) collection.| + +RadFixedPage is typically used when: + +* Creating a PDF document (and its pages) from scratch programmatically: a complete example is available in the [PdfProcessing Basic Usage demo](https://demos.telerik.com/document-processing/pdfprocessing). +* Loading page content from existing PDF documents: you cannot deserialize a RadFixedPage directly from a byte array (memory stream) because pages are part of the document structure. The [PdfFormatProvider]({%slug radpdfprocessing-formats-and-conversion-pdf-pdfformatprovider%}) handles the parsing and conversion from raw PDF bytes to the structured RadFixedDocument object. Once imported, you can manipulate individual pages (RadFixedPage) as needed. +* Generating structured, fixed-layout documents with precise control over layout and formatting: [FixedContentEditor]({%slug radpdfprocessing-editing-fixedcontenteditor%}) and [RadFixedDocumentEditor]({%slug radpdfprocessing-editing-radfixeddocumenteditor%}) allow you to create a RadFixedDocument either with managing the position or in a flow-like manner and insert all desired elements one after another. __Example 1__ demonstrates how to create a new __RadFixedPage__ instance and add it to the __Pages__ collection of __RadFixedDocument__. From b154326a525a1dd4e641bb31acb021dbf1b6011b Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 6 Oct 2025 12:32:12 +0300 Subject: [PATCH 04/36] Updated TextFormatProvider with timeout mechanism. --- .../formats-and-conversion/plain-text/settings.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/formats-and-conversion/plain-text/settings.md b/libraries/radpdfprocessing/formats-and-conversion/plain-text/settings.md index 05c940f2..b9a9a3d3 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/plain-text/settings.md +++ b/libraries/radpdfprocessing/formats-and-conversion/plain-text/settings.md @@ -49,7 +49,8 @@ The __Export()__ method of **TextFormatProvider** allows you to pass a **TextFor RadFixedDocument document = CreateRadFixedDocument(); TextFormatProvider provider = new TextFormatProvider(); - string text = provider.Export(document, settings); + string text = provider.Export(document, settings); // Obsolete since Q4 2025 + string text = provider.Export(document, settings, TimeSpan.FromSeconds(10)); {{endregion}} From e92959de265ad6d7a90b9ca676c854d266fe5394 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 6 Oct 2025 13:15:03 +0300 Subject: [PATCH 05/36] Documented AnnotationBorderStyle. --- libraries/radpdfprocessing/model/annotations/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/model/annotations/overview.md b/libraries/radpdfprocessing/model/annotations/overview.md index 34bc3916..bcf8cebe 100644 --- a/libraries/radpdfprocessing/model/annotations/overview.md +++ b/libraries/radpdfprocessing/model/annotations/overview.md @@ -33,7 +33,7 @@ The abstract **Annotation** element associates an object with a location on a [R |[TextMarkup]({%slug radpdfprocessing-model-annotations-text-markup%})| Text markup annotations appear as **Highlights**, **Underlines**, **Strikeouts** or **Squiggly** underlines in the text of a document. When opened, they display a pop-up window containing the text of the associated note.| |[Popup]({%slug radpdfprocessing-model-annotations-popup%})|A popup annotation is associated with another [markup annotation]({%slug radpdfprocessing-model-annotations-overview%}) and displays its content in a pop-up window for entry and editing. It typically appears as a pop-up note.| -* **Border**: Represents the annotation borders. This property is of type [AnnotationBorder](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.Model.Annotations.AnnotationBorder.html). +* **Border**: Represents the annotation borders. This property is of type [AnnotationBorder](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.Model.Annotations.AnnotationBorder.html) that uses an [AnnotationBorderStyle](https://docs.telerik.com/devtools/document-processing/api/telerik.windows.documents.fixed.model.annotations.annotationborderstyle). * **IsPrintable**: A boolean value that indicates whether the annotation instance should be visualized when printing the document. When set to *false*, the annotation won't appear when the document is printed. From 2a35f69088ff2c7d32dcf5686ac3b807a1b2f0f3 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 6 Oct 2025 13:52:47 +0300 Subject: [PATCH 06/36] Stylisic changes. --- .../model/actions/js-actions/action-collections.md | 2 +- libraries/radpdfprocessing/model/formsource/overview.md | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libraries/radpdfprocessing/model/actions/js-actions/action-collections.md b/libraries/radpdfprocessing/model/actions/js-actions/action-collections.md index 36a747bf..9dca8b3b 100644 --- a/libraries/radpdfprocessing/model/actions/js-actions/action-collections.md +++ b/libraries/radpdfprocessing/model/actions/js-actions/action-collections.md @@ -98,7 +98,7 @@ Represents a collection of Action objects associated with a [RadFixedPage]({%slu |OnPageOpen|Gets or sets the collection of actions triggered when the page is opened.| |OnPageClose|Gets or sets the collection of actions triggered when the page is closed.| -The following example shows how to utilize the JavaScript Actions functionality showing an alert when the second page in a document is closed +The following example shows how to utilize the JavaScript Actions functionality showing an alert when the second page in a document is closed: ```csharp diff --git a/libraries/radpdfprocessing/model/formsource/overview.md b/libraries/radpdfprocessing/model/formsource/overview.md index e06a3c26..6e2df6de 100644 --- a/libraries/radpdfprocessing/model/formsource/overview.md +++ b/libraries/radpdfprocessing/model/formsource/overview.md @@ -32,10 +32,11 @@ The FormSource class exposes a default constructor which you can use to create a The snippet from **Example 1** will create an empty FormSource object. To fill this object with content you can use [FixedContentEditor]({%slug radpdfprocessing-editing-fixedcontenteditor%}) as described later in this article. The properties exposed by the **FormSource** class are as follows: -|Property|Description| -|----|----| -|**Size**|Allows getting or setting the size of the form.| -|**Content**|Gets the contents of the form.| + +| Property | Description | +| ---- | ---- | +| **Size** | Allows getting or setting the size of the form. | +| **Content** | Gets the contents of the form. | ## Adding Content to a FormSource Object From 459798c683c7c00909c69ef0675b5856c1ee52f0 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 6 Oct 2025 18:31:11 +0300 Subject: [PATCH 07/36] Documented ExpandableMemoryStream. --- .../pdf/expandablememorystream.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md diff --git a/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md b/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md new file mode 100644 index 00000000..ea882047 --- /dev/null +++ b/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md @@ -0,0 +1,42 @@ +--- +title: ExpandableMemoryStream +page_title: ExpandableMemoryStream +description: Learn about the segmented, dynamically growing in-memory stream implementation used for large PDF processing scenarios. +slug: radpdfprocessing-formats-and-conversion-pdf-expandablememorystream +tags: pdf, memory, performance, stream, fixed, document, processing, dpl, format, expandablememorystream, large, file, size +published: True +position: 3 +--- + +# ExpandableMemoryStream + +## Overview + +ExpandableMemoryStream is a segmented in‑memory stream optimized for large or many parallel PDF operations. Instead of resizing one big array, it grows by adding fixed‑size blocks only when needed. This keeps allocations smaller and steadier, helps the GC, and maintains predictable performance as documents scale. Compared to MemoryStream (which resizes one contiguous array and copies data on expansion), this segmented approach adds fixed blocks without copying existing bytes, reducing large reallocations and LOH pressure for very large or unpredictable workloads. The block‑based design grows incrementally without moving existing bytes and supports very large content sizes while keeping allocation behavior stable under parallel load. + +## Why a Segmented Approach + +Large PDF generation often needs a temporary buffer. A normal contiguous array may reallocate and copy data multiple times as it expands, increasing CPU work, peak memory, and pressure on the Large Object Heap (LOH). Avoiding large contiguous allocations lowers fragmentation, reduces garbage collection pauses, and scales better when size is unpredictable or workloads are bursty. + +## How It Works + +Data lives in equal‑sized blocks held in order. When more space is required a single new block is allocated, earlier blocks stay untouched. A position maps to (block index, offset). Growing exposes cleared bytes ready for writing. Shrinking lowers only the visible length and retains the blocks so later growth can reuse already allocated memory without new large allocations. + +## When to Use + +Use it when you need to: + +- Build or merge large PDFs fully in memory before saving. +- Combine many pieces where the final size is unknown. +- Run multiple document builds in parallel and want steady, predictable allocations. +- Seek and rewrite parts of the buffered content without triggering array growth copies. + +## Example + +The following example shows two common ways to load a large PDF document into memory before further processing. The first approach constructs the stream directly from a byte array and passes an explicit segment size (bufferSize). The second approach creates an empty instance and copies a file stream into it. The constructor's second parameter (bufferSize) is optional and defaults to 1,000,000 bytes (1 MB). You can omit it unless you want a different segment size. + + + +In both cases the segmented internal structure avoids reallocating a single large contiguous buffer, helping performance and memory stability for very large PDF files. + + From f2ae5cb215bf77851db8f6d6121c897924a47297 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 6 Oct 2025 18:31:36 +0300 Subject: [PATCH 08/36] ExpandableMemoryStream config. --- _config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_config.yml b/_config.yml index c195db52..a508439b 100644 --- a/_config.yml +++ b/_config.yml @@ -252,6 +252,9 @@ navigation: libraries/radpdfprocessing/formats-and-conversion/pdf/pdfstreamwriter: title: PdfStreamWriter position: 2 + libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream: + title: ExpandableMemoryStream + position: 3 libraries/radpdfprocessing/formats-and-conversion/plain-text: title: Plain Text position: 0 From 11f5700a64ebf0ff08f2378132c4f63ba45c3cb0 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 8 Oct 2025 08:01:55 +0300 Subject: [PATCH 09/36] zugferd code snippet added to the docs solution --- .../embedded-file-streams/zugferd-invoices.md | 37 ++----------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md index 878bb91f..5779cbba 100644 --- a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md +++ b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md @@ -18,27 +18,7 @@ position: 1 #### **[C#] Add ZUGFeRD invoice** -{{region cs-radpdfprocessing-embedded-file-add-zugferd-invoice}} - - RadFixedDocument document = new RadFixedDocument(); - using (RadFixedDocumentEditor editor = new RadFixedDocumentEditor(document)) - { - editor.CharacterProperties.TrySetFont(new System.Windows.Media.FontFamily("Calibri")); - editor.InsertRun("PDF/A-3B Compliant Invoice"); - }; - byte[] bytes = File.ReadAllBytes(@"zugferd-invoice.xml"); - document.EmbeddedFiles.AddZugferdInvoice(bytes); - - PdfFormatProvider provider = new PdfFormatProvider(); - PdfExportSettings settings = new PdfExportSettings(); - settings.ComplianceLevel = PdfComplianceLevel.PdfA3B; - provider.ExportSettings = settings; - using (Stream output = File.OpenWrite("exportedInvoice.pdf")) - { - provider.Export(document, output); - } - -{{endregion}} + >note Only a single XML invoice attachment is allowed according to the ZUGFeRD standard. @@ -46,14 +26,7 @@ position: 1 #### **[C#] Remove ZUGFeRD invoice** -{{region cs-radpdfprocessing-embedded-file-remove-zugferd-invoice}} - - if (document.EmbeddedFiles.ContainsZugferdInvoice) - { - document.EmbeddedFiles.RemoveZugferdInvoice(); - } - -{{endregion}} + ## ZugferdConformanceLevel @@ -66,8 +39,6 @@ RadPdfProcessing offers the functionality to specify the **ZugferdConformanceLev * **Comfort**: The comfort profile with richer structured content, typically aligned with common business requirements to enable advanced automation. * **Extended**: The most comprehensive profile including extended data elements to cover advanced or industry-specific scenarios beyond the comfort profile. -```` -RadFixedDocument document = new RadFixedDocument(); -document.EmbeddedFiles.AddZugferdInvoice(File.ReadAllBytes(@"zugferd-invoice.xml"), ZugferdConformanceLevel.Comfort); -```` + + From d394d77ee304f97f5af8dcda73b2a6ce316cb7b6 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Wed, 8 Oct 2025 11:39:08 +0300 Subject: [PATCH 10/36] Auto fit text in a stamp annotation KB. --- ...-text-stamp-annotation-radpdfprocessing.md | 148 ++++++++++++++++++ .../stamp-auto-fitted-multiline-text.png | Bin 0 -> 8375 bytes 2 files changed, 148 insertions(+) create mode 100644 knowledge-base/fit-multiline-text-stamp-annotation-radpdfprocessing.md create mode 100644 knowledge-base/images/stamp-auto-fitted-multiline-text.png diff --git a/knowledge-base/fit-multiline-text-stamp-annotation-radpdfprocessing.md b/knowledge-base/fit-multiline-text-stamp-annotation-radpdfprocessing.md new file mode 100644 index 00000000..c586652e --- /dev/null +++ b/knowledge-base/fit-multiline-text-stamp-annotation-radpdfprocessing.md @@ -0,0 +1,148 @@ +--- +title: Fit Multiline Text Inside a Custom Stamp Annotation in PDFs with RadPdfProcessing +description: Learn how to measure and fit multiline text inside the fixed rectangle of a custom StampAnnotation by calculating the optimal font size. +type: how-to +page_title: Fit Multiline Text Inside a Custom Stamp Annotation in PDFs with RadPdfProcessing +meta_title: Fit Multiline Text Inside a Custom Stamp Annotation in PDFs with RadPdfProcessing +slug: fit-multiline-text-stamp-annotation-radpdfprocessing +tags: pdf, stamp, annotation, font, size, multiline, measure, text, appearance, autosize, fit, aouto, fixed, editor, auto +res_type: kb +--- + +## Environment + +| Version | Product | Author | +| ---- | ---- | ---- | +| 2025.3.806 | RadPdfProcessing | [Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov) | + +## Description + +This article shows how to render multiple lines of text so they fit inside the fixed rectangle of a custom [StampAnnotation]({%slug radpdfprocessing-model-annotations-stamp%}) by dynamically determining the maximum usable font size. Unlike predefined stamp names, a custom stamp appearance requires supplying a visual form (a **FormSource**) that draws both background styling and text content. + +>important When using a custom name (not one of the predefined **StampAnnotationPredefinedNames**), it is recommended to prefix the name with **#** (e.g., **#CustomStamp**) so external PDF viewers (like Adobe Acrobat) don't overwrite the custom appearance if the stamp is moved. + +## Solution + +To fit multiline text inside a stamp rectangle: + +1. Create a **StampAnnotation** with a fixed **Rect** on a page. +2. Build a custom **FormSource** that will serve as the annotation's appearance (**Content.NormalContentSource**). +3. Measure each line by incrementally increasing the font size in a **Block** until the rendered dimensions exceed the available width/height and keep the maximum size that fits. +4. Use the minimum of all line-specific maximum sizes so every line fits within the rectangle. +5. Draw a decorative background (border, fill, dash pattern) and then render each line vertically stacked. +6. Export the document to PDF. + +![Stamp With Auto-Fitted Multiline Text](images/stamp-auto-fitted-multiline-text.png) + +Below is a complete example demonstrating these steps. + +#### [C#] Measure and Fit Multiline Text in a StampAnnotation + +```csharp +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Telerik.Documents.Primitives; +using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf; +using Telerik.Windows.Documents.Fixed.Model; +using Telerik.Windows.Documents.Fixed.Model.Annotations; +using Telerik.Windows.Documents.Fixed.Model.ColorSpaces; +using Telerik.Windows.Documents.Fixed.Model.Editing; +using Telerik.Windows.Documents.Fixed.Model.Resources; + +List lines = new List() { "1st line", "second line", "3rd line",}; +RadFixedDocument document = CreateTextAnnotation(lines); + +string exportFileName = "StampAnnotation.pdf"; +File.Delete(exportFileName); +using (Stream output = File.OpenWrite(exportFileName)) +{ + PdfFormatProvider provider = new PdfFormatProvider(); + provider.Export(document, output, TimeSpan.FromSeconds(20)); +} + +Process.Start(new ProcessStartInfo +{ + FileName = exportFileName, + UseShellExecute = true +}); + +RadFixedDocument CreateTextAnnotation(List lines) +{ + RadFixedDocument radFixedDocument = new RadFixedDocument(); + RadFixedPage page = radFixedDocument.Pages.AddPage(); + + StampAnnotation stampAnnotation = page.Annotations.AddStamp(new Rect(100, 100, 100, 100)); + stampAnnotation.Name = "#Test"; + + FormSource annotationForm = CreateContentFormWithText(stampAnnotation.Rect, lines); + stampAnnotation.Content.NormalContentSource = annotationForm; + + return radFixedDocument; +} + +static FormSource CreateContentFormWithText(Rect stampRectangle, List lines) +{ + FormSource textForm = new FormSource(); + textForm.Size = new Size(stampRectangle.Width, stampRectangle.Height); + + FixedContentEditor textFormEditor = new FixedContentEditor(textForm); + + using (textFormEditor.SaveProperties()) + { + textFormEditor.GraphicProperties.IsFilled = true; + textFormEditor.GraphicProperties.IsStroked = true; + textFormEditor.GraphicProperties.StrokeThickness = 2; + textFormEditor.GraphicProperties.StrokeColor = new RgbColor(92, 229, 0); + textFormEditor.GraphicProperties.FillColor = new RgbColor(213, 222, 226); + textFormEditor.GraphicProperties.StrokeDashArray = new double[] { 17, 4 }; + textFormEditor.DrawRectangle(new Rect(textFormEditor.Position.Matrix.OffsetX, textFormEditor.Position.Matrix.OffsetY, stampRectangle.Width, stampRectangle.Height)); + } + + double calculatedFontSize = MeasureFontSize(textForm, textFormEditor, lines); + textFormEditor.TextProperties.FontSize = calculatedFontSize; + + double offset = 0; + foreach (string line in lines) + { + textFormEditor.Position.Translate(0, offset); + textFormEditor.DrawText(line); + offset += calculatedFontSize; + } + + return textForm; +} + +static double MeasureFontSize(FormSource textForm, FixedContentEditor formEditor, List lines) +{ + List fontSizes = new List(); + + foreach (string line in lines) + { + double fontSize = 0; + Size textSize = Size.Empty; + Block block = new Block(); + block.TextProperties.Font = formEditor.TextProperties.Font; + while (textSize.Width < textForm.Size.Width && textSize.Height < textForm.Size.Height) + { + block.TextProperties.FontSize = ++fontSize; + block.InsertText(line); + textSize = block.Measure(); + block.Clear(); + } + + fontSizes.Add(fontSize); + } + + return fontSizes.Min(); +} +``` + +## See Also + +- [Stamp Annotation]({%slug radpdfprocessing-model-annotations-stamp%}) +- [FixedContentEditor]({%slug radpdfprocessing-editing-fixedcontenteditor%}) +- [FormSource Overview]({%slug radpdfprocessing-model-formsource-overview%}) +- [PdfProcessing Overview]({%slug radpdfprocessing-overview%}) diff --git a/knowledge-base/images/stamp-auto-fitted-multiline-text.png b/knowledge-base/images/stamp-auto-fitted-multiline-text.png new file mode 100644 index 0000000000000000000000000000000000000000..84392e9f7d205c4c9fe632d33b3713b82bb2de73 GIT binary patch literal 8375 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 Date: Wed, 8 Oct 2025 17:13:54 +0300 Subject: [PATCH 11/36] Update document-themes.md --- .../concepts/document-themes.md | 122 +++++++++++++++--- 1 file changed, 104 insertions(+), 18 deletions(-) diff --git a/libraries/radwordsprocessing/concepts/document-themes.md b/libraries/radwordsprocessing/concepts/document-themes.md index 70741a87..8c7aa8fb 100644 --- a/libraries/radwordsprocessing/concepts/document-themes.md +++ b/libraries/radwordsprocessing/concepts/document-themes.md @@ -1,5 +1,6 @@ --- title: Document Themes +description: Learn how to use document themes in Telerik Document Processing to apply consistent colors and fonts across your documents. Explore color schemes, font schemes, ThemableColor and ThemableFontFamily objects, and how to dynamically resolve actual values based on the current theme. page_title: Document Themes slug: radwordsprocessing-concepts-document-themes tags: document,themes @@ -9,11 +10,8 @@ position: 3 # Document Themes - - Document themes enable you to specify colors, fonts and a variety of graphic effects in a document and affect the look and feel of the whole document. Each theme contains a color scheme and a font scheme and is represented by the __DocumentTheme__ class and can be modified by the __Theme__ property of [RadFlowDocument]({%slug radwordsprocessing-model-radflowdocument%}). Document theme contains two parts – color scheme – responsible for the colors, and font scheme – responsible for the fonts. - * [Color Schemes](#color-schemes) * [Font Schemes](#font-schemes) @@ -24,8 +22,7 @@ Document themes enable you to specify colors, fonts and a variety of graphic eff ## Color Schemes -A color scheme has a unique name and contains a number of predefined colors. Its representation in __RadFlowDocument__'s model is the __ThemeColorScheme__ class. A scheme defines twelve colors and each of these is assigned a sole __ThemeColorType__. The following list contains all __ThemeColorType__ values: - +A color scheme has a unique name and contains a number of predefined colors. Its representation in __RadFlowDocument__'s model is the __ThemeColorScheme__ class. A scheme defines twelve colors and each of these is assigned a sole __ThemeColorType__. The following list contains all __ThemeColorType__ values: * background1 * text1 @@ -145,8 +142,7 @@ When you need to create a font that depends on the current document theme, you n ## Document Themes -Now that you have a color and a font schemes, you can create a new __DocumentTheme__. You need to specify a name and pass the already created color and font schemes. - +Now that you have a color and a font schemes, you can create a new __DocumentTheme__. You need to specify a name and pass the already created color and font schemes. #### __[C#] Example 5: Create a DocumentTheme object__ @@ -155,10 +151,7 @@ Now that you have a color and a font schemes, you can create a new __DocumentThe DocumentTheme theme = new DocumentTheme("Mine", colorScheme, fontScheme); {{endregion}} - - -There are a number of predefined color and font schemes. You can find them in a static class called [PredefinedThemeSchemes](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Spreadsheet.Theming.PredefinedThemeSchemes.html). The class exposes the properties __ColorSchemes__ and __FontSchemes__ that hold all predefined schemes. - +There are a number of predefined color and font schemes. You can find them in a static class called [PredefinedThemeSchemes](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Spreadsheet.Theming.PredefinedThemeSchemes.html). The class exposes the properties __ColorSchemes__ and __FontSchemes__ that hold all predefined schemes. #### __[C#] Example 6: Using a predefined scheme__ @@ -167,11 +160,8 @@ There are a number of predefined color and font schemes. You can find them in a DocumentTheme theme1 = new DocumentTheme("From Predefined schemes", PredefinedThemeSchemes.ColorSchemes[0], PredefinedThemeSchemes.FontSchemes[5]); {{endregion}} - - Changing the current document theme is as easy as setting a single property. - #### __[C#] Example 7: Change the document theme__ {{region cs-radwordsprocessing-concepts-document-themes_6}} @@ -179,7 +169,106 @@ Changing the current document theme is as easy as setting a single property. document.Theme = theme; {{endregion}} - +## Predefined ThemeColorSchemes + +The table includes all 42 predefined theme color schemes with their corresponding color values for each color category (Background 1, Text 1, Background 2, Text 2, Accent 1-6, Hyperlink, and Followed Hyperlink). + +| Theme Name | Background 1 | Text 1 | Background 2 | Text 2 | Accent 1 | Accent 2 | Accent 3 | Accent 4 | Accent 5 | Accent 6 | Hyperlink | Followed Hyperlink | +|------------|--------------|--------|--------------|--------|----------|----------|----------|----------|----------|----------|-----------|-------------------| +| Office | | | | | | | | | | | | | +| Office 2007 - 2010 | | | | | | | | | | | | | +| Grayscale | | | | | | | | | | | | | +| Adjacency | | | | | | | | | | | | | +| Angels | | | | | | | | | | | | | +| Apex | | | | | | | | | | | | | +| Apothecary | | | | | | | | | | | | | +| Aspect | | | | | | | | | | | | | +| Austin | | | | | | | | | | | | | +| Black Tie | | | | | | | | | | | | | +| Civic | | | | | | | | | | | | | +| Clarity | | | | | | | | | | | | | +| Composite | | | | | | | | | | | | | +| Concourse | | | | | | | | | | | | | +| Couture | | | | | | | | | | | | | +| Elemental | | | | | | | | | | | | | +| Equity | | | | | | | | | | | | | +| Essential | | | | | | | | | | | | | +| Executive | | | | | | | | | | | | | +| Flow | | | | | | | | | | | | | +| Foundry | | | | | | | | | | | | | +| Grid | | | | | | | | | | | | | +| Hardcover | | | | | | | | | | | | | +| Horizon | | | | | | | | | | | | | +| Median | | | | | | | | | | | | | +| Metro | | | | | | | | | | | | | +| Module | | | | | | | | | | | | | +| Newsprint | | | | | | | | | | | | | +| Opulent | | | | | | | | | | | | | +| Oriel | | | | | | | | | | | | | +| Origin | | | | | | | | | | | | | +| Paper | | | | | | | | | | | | | +| Perspective | | | | | | | | | | | | | +| Pushpin | | | | | | | | | | | | | +| Slipstream | | | | | | | | | | | | | +| Solstice | | | | | | | | | | | | | +| Technic | | | | | | | | | | | | | +| Thatch | | | | | | | | | | | | | +| Trek | | | | | | | | | | | | | +| Urban | | | | | | | | | | | | | +| Verve | | | | | | | | | | | | | +| Waveform | | | | | | | | | | | | | + + +### Predefined ThemeFontSchemes + +RadWordsProcessing offers a set of predefined ThemeFontSchemes listed in the table below: + +|Theme Name|Major Font|Minor Font| +|----|----|----| +| Office | Calibri Light | Calibri | +| Office 2007 - 2010 | Cambria | Calibri | +| Office 2 | Calibri | Cambria | +| Office Classic | Arial | Times New Roman | +| Office Classic 2 | Arial | Arial | +| Adjacency | Cambria | Calibri | +| Angels | Franklin Gothic Medium | Franklin Gothic Book | +| Apex | Lucida Sans | Book Antiqua | +| Apothecary | Book Antiqua | Century Gothic | +| Aspect | Verdana | Verdana | +| Austin | Century Gothic | Century Gothic | +| Black Tie | Garamond | Garamond | +| Civic | Georgia | Georgia | +| Clarity | Arial | Arial | +| Composite | Calibri | Calibri | +| Concourse | Lucida Sans Unicode | Lucida Sans Unicode | +| Couture | Garamond | Garamond | +| Elemental | Palatino Linotype | Palatino Linotype | +| Equity | Franklin Gothic Book | Perpetua | +| Essential | Arial Black | Arial | +| Executive | Century Gothic | Palatino Linotype | +| Flow | Calibri | Constantia | +| Foundry | Rockwell | Rockwell | +| Grid | Franklin Gothic Medium | Franklin Gothic Medium | +| Hardcover | Book Antiqua | Book Antiqua | +| Horizon | Arial Narrow | Arial Narrow | +| Median | Tw Cen MT | Tw Cen MT | +| Metro | Consolas | Corbel | +| Module | Corbel | Corbel | +| Newsprint | Impact | Times New Roman | +| Opulent | Trebuchet MS | Trebuchet MS | +| Oriel | Century Schoolbook | Century Schoolbook | +| Origin | Bookman Old Style | Gill Sans MT | +| Paper | Constantia | Constantia | +| Perspective | Arial | Arial | +| Pushpin | Constantia | Franklin Gothic Book | +| Slipstream | Trebuchet MS | Trebuchet MS | +| Solstice | Gill Sans MT | Gill Sans MT | +| Technic | Franklin Gothic Book | Arial | +| Thatch | Tw Cen MT | Tw Cen MT | +| Trek | Franklin Gothic Medium | Franklin Gothic Book | +| Urban | Trebuchet MS | Georgia | +| Verve | Century Gothic | Century Gothic | +| Waveform | Candara | Candara | ## Getting Actual Values @@ -194,7 +283,6 @@ In order to get the actual value from __ThemableColor__ or __ThemableFontFamily_ {{endregion}} - #### __[C#] Example 9: Get actual value from ThemableFont__ {{region cs-radwordsprocessing-concepts-document-themes_8}} @@ -202,8 +290,6 @@ In order to get the actual value from __ThemableColor__ or __ThemableFontFamily_ // The actualFont is the same as the Major font of the fontScheme. {{endregion}} - - ## See Also * [RadFlowDocument]({%slug radwordsprocessing-model-radflowdocument%}) From 0fe2683aed65c7ac82045a0a215202a727dbdff2 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Tue, 14 Oct 2025 11:18:36 +0300 Subject: [PATCH 12/36] KB: Runtime Diagnostics - Showcase (85553) --- .../runtime-licensing-diagnostics.md | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 knowledge-base/runtime-licensing-diagnostics.md diff --git a/knowledge-base/runtime-licensing-diagnostics.md b/knowledge-base/runtime-licensing-diagnostics.md new file mode 100644 index 00000000..f90711ed --- /dev/null +++ b/knowledge-base/runtime-licensing-diagnostics.md @@ -0,0 +1,77 @@ +--- +title: Runtime Licensing Diagnostics +description: Step-by-step walkthrough of using Telerik.Licensing runtime diagnostics to investigate unexpected watermarks across web, plugin, and desktop scenarios. +type: how-to +page_title: Runtime Licensing Diagnostics +meta_title: Runtime Licensing Diagnostics +slug: runtime-licensing-diagnostics +tags: licensing, diagnostics, runtime, watermark, plugins, webforms, aspnet, blazor, wpf, winforms, license, key, register +ticketid: 1697496 +res_type: kb +--- + +## Environment + +| Version | Product(s) | Author | +| ---- | ---- | ---- | +| 2025.3.806 | Document Processing & Telerik UI |[Yoan Karamanov](https://www.telerik.com/blogs/author/yoan-karamanov)| + +## Description + +In certain environments an application may still show a trial watermark (or trial sheet) **at runtime** even though everything looked correct at **build time**: + +* Valid **telerik-license.txt** file is present. +* Build logs indicate Telerik products detected (class library and executable). +* No licensing build errors are reported. + +Yet the rendered UI (document, control, page) contains a watermark. + +These issues surface mainly in two categories: + +1. **Web products (ASP.NET AJAX, MVC, Core, Blazor)** – Incorrect script load order or duplicate script imports where one import overrides a previously applied license. +2. **.NET applications with extensibility / plugins (WPF, WinForms, class libraries, host wrappers)** - The entry assembly at runtime differs (e.g. a host like **SentinelDotNetFx.dll**), changing the licensing evaluation path. + +Runtime diagnostics in **Telerik.Licensing** help correlate what the licensing engine sees (entry assembly, loaded assemblies, product metadata, license evidences) with the final **IsLicenseValid** result. + +## Solution + +### 1. Enable Diagnostics Early +Call **Telerik.Licensing.TelerikLicensing.EnableDiagnostics();** **as early as possible**, before any Telerik UI controls or Document Processing code is first reached/loaded. + +### 2. Plugin / Non-Standard Entry Scenarios +If the code runs as a plugin or a dynamically loaded context (no traditional entry assembly, or an unexpected wrapper assembly), call **TelerikLicensing.Register()** **after** enabling diagnostics to provision runtime script keys. + +### 3. Execute +Trigger the Telerik code so the licensing pipeline executes. + +### 4. Collect the Log +Read the accumulated diagnostics text from **Telerik.Licensing.TelerikLicensing.Diagnostics** and persist it (file, console). The log grows for the life of the process (restart to clear). + +### 5. Analyze Key Sections +Look for: +- Entry assembly (**Assembly.GetEntryAssembly()**) +- Product metadata extraction (**ProductMetadataForAssembly ...**) +- License evidences (subscription / perpetual tokens) +- Final resolution line (**Resolved: IsLicenseValid: ...**) + +### 6. Disable When Done +Diagnostics add overhead and should not remain enabled indefinitely in production. + +### Performance & Operational Notes +- Diagnostics add measurable overhead. Use only during investigation. +- Log size grows monotonically until process restart. +- Capture the log after reproducing the watermark; then disable diagnostics. + +## See Also + +* [License Activation Errors and Warnings]({%slug activation-errors-and-warnings%}) +* [Adding the License Key to CI Services]({%slug adding-license-key-ci-cd-services%}) +* [License Key FAQ]({%slug frequently-asked-questions%}) +* [License Agreement]({%slug license-agreement%}) +* [Redistributing Telerik Document Processing]({%slug installation-deploying-telerik-document-processing%}) +* [Unable to find package Telerik.Licensing]({%slug dpl-package-update-failure-license%}) +* [Handling License Key File Name and Environment Variable Name Changes in the 2025 Q1 Release]({%slug handling-license-file-name-changes%}) +* [Telerik.Licensing NuGet package is not available on the Telerik NuGet feed]({%slug dpl-telerik-licensing-nuget-feed%}) +* [Diagnostic Options for Telerik Licensing]({%slug telerik-trial-version-message-diagnostic-options%}) +* [Resolving License Validation Issues in Telerik Document Processing Libraries]({%slug license-not-recognized-telerik-document-processing-libraries%}) +* [Telerik License Approaches](https://github.com/LanceMcCarthy/DevOpsExamples?tab=readme-ov-file#telerik-license-approaches) From d4d4699827702fad992b79d2748ea4fa4cda1bcf Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Thu, 16 Oct 2025 11:47:06 +0300 Subject: [PATCH 13/36] Replace Assemblies with NuGet Packages - Getting Started + Introduciton sections. --- .../Installation/install-nuget-packages.md | 2 +- .../installing-on-your-computer.md | 8 +- .../Installation/nuget-packages.md | 12 +-- getting-started/Installation/pdf-export.md | 6 +- getting-started/first-steps.md | 26 +++--- getting-started/getting-started.md | 82 +++++++++---------- introduction.md | 6 +- 7 files changed, 71 insertions(+), 71 deletions(-) diff --git a/getting-started/Installation/install-nuget-packages.md b/getting-started/Installation/install-nuget-packages.md index 5880eb6d..bca56e40 100644 --- a/getting-started/Installation/install-nuget-packages.md +++ b/getting-started/Installation/install-nuget-packages.md @@ -40,7 +40,7 @@ This article describes how you can install the Document Processing Libraries usi > >* A version for __.Net Standard 2.0__ > ->Both versions are available as NuGet packages but with different names. The assemblies for __.NET Standard__ do __not__ contain the word __Windows__ in their name. +>Both versions are available as NuGet packages but with different names. The packages for __.NET Standard__ do __not__ contain the word __Windows__ in their name. ## Download from the NuGet server diff --git a/getting-started/Installation/installing-on-your-computer.md b/getting-started/Installation/installing-on-your-computer.md index a2fb3037..cebcaf82 100644 --- a/getting-started/Installation/installing-on-your-computer.md +++ b/getting-started/Installation/installing-on-your-computer.md @@ -14,9 +14,9 @@ position: 5 Telerik Document Processing is part of several Telerik bundles and is installed following the steps for installing the suite with which you've obtained the product. ->Starting from Q1 2016, the Document Processing assemblies have an assembly version which may differ from the assembly version of the other assemblies in the particular suite. +>Starting from Q1 2016, the Document Processing packages have a package version which may differ from the package version of the other packages in the particular suite. > ->Starting from R3 2016, only assemblies with a version number ending with .40 suffix are distributed. The libraries don't contain code specific for .NET Framework 4.5, thus an additional version is not needed. +>Starting from R3 2016, only packages with a version number ending with .40 suffix are distributed. The libraries don't contain code specific for .NET Framework 4.5, thus an additional version is not needed. > >The changes are synced between the controls that have a dependency on Telerik Document Processing and while the referenced files are from the same release, they should work as expected regardless of the version distinction. @@ -30,13 +30,13 @@ The libraries can be used through the available NuGet packages. [Installing Telerik UI for ASP.NET AJAX](http://docs.telerik.com/devtools/aspnet-ajax/installation/which-file-do-i-need-to-install) -When the installation completes, the Telerik Document Processing assemblies will be available in the *AdditionalLibraries* sub-folder. +When the installation completes, the Telerik Document Processing packages will be available in the *AdditionalLibraries* sub-folder. ## UI for ASP.NET MVC [Installing Telerik UI for ASP.NET MVC](https://docs.telerik.com/aspnet-mvc/getting-started/installation/overview) -When the installation completes, the Telerik Document Processing assemblies will be available in the *spreadsheet* sub-folder. +When the installation completes, the Telerik Document Processing packages will be available in the *spreadsheet* sub-folder. ## UI for Blazor diff --git a/getting-started/Installation/nuget-packages.md b/getting-started/Installation/nuget-packages.md index 65f088cb..27057663 100644 --- a/getting-started/Installation/nuget-packages.md +++ b/getting-started/Installation/nuget-packages.md @@ -3,7 +3,7 @@ title: Available NuGet Packages page_title: Available NuGet Packages description: Learn how you can use the Telerik Document Processing libraries through NuGet. slug: available-nuget-packages -tags: nuget, document, processing, assembly +tags: nuget, document, processing, assembly, package published: True position: 6 --- @@ -27,7 +27,7 @@ If your workflow relies on NuGet for package management, you can take advantage > >* A version for __.Net Standard 2.0__ > ->Both versions are available as NuGet packages but with different names. The assemblies for __.NET Standard__ do __not__ contain the word __Windows__ in their name. +>Both versions are available as NuGet packages but with different names. The packages for __.NET Standard__ do __not__ contain the word __Windows__ in their name. >caption Package lists to use with .NET Standard (left) and .NET Framework (right) @@ -43,8 +43,8 @@ The following list represents the available NuGet packages for the Document Proc * __Telerik.Windows.Documents.Core:__ The main NuGet package for the Telerik Document Processing libraries. Required when you plan to use the library. * __Telerik.Windows.Documents.Fixed:__ The package is required when processing `PDF` documents. -* __Telerik.Windows.Documents.Fixed.FormatProviders.Ocr:__ This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. -* __Telerik.Windows.Documents.Tesseract.Ocr:__ This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. +* __Telerik.Windows.Documents.Fixed.FormatProviders.Ocr:__ This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. +* __Telerik.Windows.Documents.Tesseract.Ocr:__ This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. * __Telerik.Windows.Documents.CMapUtils:__ Provides a default implementation for getting the data of a predefined CMap table by a given name. * __Telerik.Windows.Documents.Flow:__ The package is part of the WordsProcessing library. Required for processing `HTML`, `DOCX`, `RTF`, and `TXT` documents. * __Telerik.Windows.Documents.DrawingML:__ Part of the WordsProcessing library. It is needed for working with shapes inside the documents. @@ -63,8 +63,8 @@ The following list represents the available NuGet packages for the Document Proc * __Telerik.Documents.Core:__ The main NuGet package from the Telerik Document Processing libraries. Required when you plan to use the library. * __Telerik.Documents.Fixed:__ The package is required when processing `PDF` documents. -* __Telerik.Documents.Fixed.FormatProviders.Ocr:__ This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. -* __Telerik.Documents.Tesseract.Ocr:__ This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. +* __Telerik.Documents.Fixed.FormatProviders.Ocr:__ This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. +* __Telerik.Documents.Tesseract.Ocr:__ This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. * __Telerik.Documents.ImageUtils:__ This package is required when exporting to `PDF` format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High. For more information check the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) article. * __Telerik.Documents.CMapUtils:__ Provides a default implementation for getting the data of a predefined CMap table by a given name. * __Telerik.Documents.Flow:__ The package is part of the Words Processing Library. Required for processing `HTML`, `DOCX`, `RTF`, and `TXT` documents. diff --git a/getting-started/Installation/pdf-export.md b/getting-started/Installation/pdf-export.md index 2703086e..9b9db899 100644 --- a/getting-started/Installation/pdf-export.md +++ b/getting-started/Installation/pdf-export.md @@ -24,7 +24,7 @@ Depending on the scenario, you could take advantage of the different functionali ## Create a PDF Document From Scratch -**RadPdfProcessing** is intended to work with fixed documents and provides a convenient API to create, modify and export PDF documents. To use its import and export functionalities, you will need to add a reference to the **Telerik.Windows.Documents.Fixed** assembly. +**RadPdfProcessing** is intended to work with fixed documents and provides a convenient API to create, modify and export PDF documents. To use its import and export functionalities, you will need to add a reference to the **Telerik.Windows.Documents.Fixed** package. You can import and export a document through the respective methods of the **PdfFormatProvider** class. @@ -34,7 +34,7 @@ You can import and export a document through the respective methods of the **Pdf In scenarios where you need to convert a document from another file format to PDF, you could take advantage of the capabilities of **RadWordsProcessing**. This library allows you to import documents from the most common rich text formats (Docx, HTML, RTF) as well as plain text and export them to PDF. All the supported document formats and the corresponding format providers are listed in the [Formats and Conversion section]({%slug radwordsprocessing-formats-and-conversion%}). -In order to use the **PdfFormatProvider** of **RadWordsProcessing**, you should add a reference to the **Telerik.Windows.Documents.Flow.FormatProviders.Pdf** assembly. +In order to use the **PdfFormatProvider** of **RadWordsProcessing**, you should add a reference to the **Telerik.Windows.Documents.Flow.FormatProviders.Pdf** package. >The **PdfFormatProvider** class of RadWordsProcessing resides in the **Telerik.Windows.Documents.Flow.FormatProviders.Pdf namespace**. For more information on how to work with this provider, please read [this topic]({%slug radwordsprocessing-formats-and-conversion-pdf-pdfformatprovider%}). @@ -63,7 +63,7 @@ In order to use the **PdfFormatProvider** of **RadWordsProcessing**, you should While the so far discussed libraries allow working with text documents, with RadSpreadProcessing you can create, import and export tabular data. This library supports the most common file formats for storing spreadsheet documents - Xlsx, CSV. All format providers are listed and described in the corresponding [Formats and Conversion section]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}). -In order to enable the export to PDF in RadSpreadProcessing, you will need to add a reference to the **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf** assembly. +In order to enable the export to PDF in RadSpreadProcessing, you will need to add a reference to the **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf** package. >The **PdfFormatProvider** class of RadSpreadProcessing resides in the **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf namespace**. For more information on how to work with this provider, please read [this topic]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}). diff --git a/getting-started/first-steps.md b/getting-started/first-steps.md index a226e655..e35c97c3 100644 --- a/getting-started/first-steps.md +++ b/getting-started/first-steps.md @@ -17,11 +17,11 @@ The Telerik Document Processing libraries that we use in this guide are UI-indep >important Please install **<PackageReference Include="Telerik.Licensing" Version="1.*" />**. -Since we distribute Telerik Document Processing libraries as an addition to several Telerik UI component bundles, chances are that the libraries are already installed on your system. In this case, all you need is to locate them. The table below provides links to the installation instructions for each of the Telerik UI component suites that give you access to the Telerik Document Processing libraries. If the standard installation of your Telerik UI component suite includes the Document Processing assemblies, the table also shows their default location. +Since we distribute Telerik Document Processing libraries as an addition to several Telerik UI component bundles, chances are that the libraries are already installed on your system. In this case, all you need is to locate them. The table below provides links to the installation instructions for each of the Telerik UI component suites that give you access to the Telerik Document Processing libraries. If the standard installation of your Telerik UI component suite includes the Document Processing packages, the table also shows their default location. ->tipRegardless of the Telerik UI components suite that you use, you can always get the Document Processing assemblies as NuGet packages from the [Telerik NuGet server]({%slug installation-nuget-packages%}). +>tipRegardless of the Telerik UI components suite that you use, you can always get the Document Processing packages as NuGet packages from the [Telerik NuGet server]({%slug installation-nuget-packages%}). -| UI Components suite | Installation instructions | Default location of the Document Processing assemblies | +| UI Components suite | Installation instructions | Default location of the Document Processing packages | |--------------------|---------------------------|------------------------------------------------| | UI for ASP.NET AJAX | [Installing Telerik UI for ASP.NET AJAX](http://docs.telerik.com/devtools/aspnet-ajax/installation/which-file-do-i-need-to-install) |
  • `C:\Program Files (x86)\Progress\Telerik UI for ASP.NET AJAX [version]\AdditionalLibraries\Bin40`
  • `C:\Program Files (x86)\Progress\Telerik UI for ASP.NET AJAX [version]\AdditionalLibraries\Bin45`
| | UI for ASP.NET MVC | [Installing Telerik UI for ASP.NET MVC](http://docs.telerik.com/kendo-ui/aspnet-mvc/introduction#installation) |
  • `C:\Program Files (x86)\Progress\Telerik UI for ASP.NET MVC [version]\dpl\net40`
  • `C:\Program Files (x86)\Progress\Telerik UI for ASP.NET MVC [version]\dpl\netstandard`
| @@ -46,29 +46,29 @@ As we are going to create a UI-Independent example, we will use a console projec ## Step 3: Add a Telerik Document Processing Library to a Project -This sample application will use [RadWordsProcessing]({%slug radwordsprocessing-overview%}). In this step, we must add the required assemblies. +This sample application will use [RadWordsProcessing]({%slug radwordsprocessing-overview%}). In this step, we must add the required packages. -1. Reference the assemblies that provide the __RadWordsProcessing__ functionality: +1. Reference the packages that provide the __RadWordsProcessing__ functionality: For .NET Framework project: - * __Telerik.Windows.Documents.Core.dll__ - * __Telerik.Windows.Documents.Flow.dll__ + * __Telerik.Windows.Documents.Core__ + * __Telerik.Windows.Documents.Flow__ For .NET Standard ({{site.dotnetversions}}) project: - * __Telerik.Documents.Core.dll__ - * __Telerik.Documents.Flow.dll__ + * __Telerik.Documents.Core__ + * __Telerik.Documents.Flow__ >note As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. -1. Reference the assembly that allows you to export the content as a PDF file: +1. Reference the package that allows you to export the content as a PDF file: For .NET Framework project: - * __Telerik.Windows.Documents.Flow.FormatProviders.Pdf.dll__ + * __Telerik.Windows.Documents.Flow.FormatProviders.Pdf__ For .NET Standard ({{site.dotnetversions}}) project: - * __Telerik.Documents.Flow.FormatProviders.Pdf.dll__ + * __Telerik.Documents.Flow.FormatProviders.Pdf__ -> The Document Processing assemblies for {{site.dotnetversions}} don't contain "Windows" in their names. +> The Document Processing packages for {{site.dotnetversions}} don't contain "Windows" in their names. ## Step 4: Create a Document diff --git a/getting-started/getting-started.md b/getting-started/getting-started.md index 35c9081a..84db3e59 100644 --- a/getting-started/getting-started.md +++ b/getting-started/getting-started.md @@ -9,61 +9,61 @@ position: 0 # Getting Started with Telerik Document Processing -**Telerik Document Processing** includes a set of cross-platform libraries that let you import and export content between different document formats and work with archive files. The needed assemblies come with the installation files of several Telerik suites. They are also available in the internal builds of the same Telerik suites. Learn which products include Telerik Document Processing in the [Product Bundles](https://www.telerik.com/purchase.aspx?filter=web). +**Telerik Document Processing** includes a set of cross-platform libraries that let you import and export content between different document formats and work with archive files. The required references come with the installation files of several Telerik suites. They are also available in the internal builds of the same Telerik suites. Learn which products include Telerik Document Processing in the [Product Bundles](https://www.telerik.com/purchase.aspx?filter=web). >tipMore information about the suites that include Telerik Document Processing and how to install them is available in the [Installing on Your Computer]({%slug installation-installing-on-your-computer%}) article. >important Please install **<PackageReference Include="Telerik.Licensing" Version="1.*" />**. -The following tables list all Telerik Document Processing assemblies for the different platforms and their roles: +The following tables list all Telerik Document Processing packages for the different platforms and their roles: ->important The .NET Standard assemblies are compatible with any .NET version (e.g .NET 9), even if there are no assemblies explicitly available for the specific versions. The same applies to the .NET Framework assemblies. +>important The .NET Standard packages are compatible with any .NET version (e.g .NET 9), even if there are no packages explicitly available for the specific versions. The same applies to the .NET Framework packages. -### Assemblies for .NET Standard (Support for {{site.dotnetversions}}) +### Packages for .NET Standard (Support for {{site.dotnetversions}}) -| Assembly Name| Description | +| Packagea Name| Description | |-------|----------------| -| **Telerik.Documents.Core.dll** | The main assembly from the Telerik document processing libraries. You always need it when you intend to use the library. | -| **Telerik.Documents.Flow.dll** | Part of the words (text) processing library. It is needed for processing HTML, DOCX, RTF and TXT documents. | -| **Telerik.Documents.DrawingML.dll** | Part of the words (text) processing library. It is needed for working with shapes inside the documents. | -| **Telerik.Documents.Flow.FormatProviders.Doc.dll** | Allows importing of DOC and DOT document. | -| **Telerik.Documents.Flow.FormatProviders.Pdf.dll** | Allows exporting of flow documents (DOCX, DOC, DOT, RTF, and HTML) to PDF. | -| **Telerik.Documents.Fixed.dll** | Part of the PDF processing library. It is needed for working with PDF documents. | -| **Telerik.Documents.Fixed.FormatProviders.Ocr.dll** | This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | -| **Telerik.Documents.Tesseract.Ocr.dll** | This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | -| **Telerik.Documents.ImageUtils.dll** | This assembly is required when exporting to `PDF` format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High. For more information check the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) article. -| **Telerik.Documents.CMapUtils.dll** | Provides a default implementation for getting the data of a predefined CMap table by a given name. The assembly is optional and you will need to include a reference to it only if you need to process documents with [CMap tables]({%slug radpdfprocessing-concepts-cmap-tables%}). | -| **Telerik.Documents.Spreadsheet.dll** | The main assembly for the spreadsheet processing. It is needed for processing XLSX, CSV, TXT documents. | -| **Telerik.Documents.Spreadsheet.FormatProviders.OpenXml.dll** | This assembly is needed for processing XLSX documents. | -| **Telerik.Documents.Spreadsheet.FormatProviders.Pdf.dll** | This assembly is needed for exporting to PDF documents. | -| **Telerik.Documents.Spreadsheet.FormatProviders.Xls.dll** | This assembly is needed for processing XLS documents. | -| **Telerik.Documents.SpreadsheetStreaming.dll** | The main assembly for generating huge spreadsheet files using minimum resources. | -| **Telerik.Zip.dll** |It is the main assembly of the [Telerik Zip Library]({%slug radziplibrary-overview%}). | +| **Telerik.Documents.Core** | The main package from the Telerik document processing libraries. You always need it when you intend to use the library. | +| **Telerik.Documents.Flow** | Part of the words (text) processing library. It is needed for processing HTML, DOCX, RTF and TXT documents. | +| **Telerik.Documents.DrawingML** | Part of the words (text) processing library. It is needed for working with shapes inside the documents. | +| **Telerik.Documents.Flow.FormatProviders.Doc** | Allows importing of DOC and DOT document. | +| **Telerik.Documents.Flow.FormatProviders.Pdf** | Allows exporting of flow documents (DOCX, DOC, DOT, RTF, and HTML) to PDF. | +| **Telerik.Documents.Fixed** | Part of the PDF processing library. It is needed for working with PDF documents. | +| **Telerik.Documents.Fixed.FormatProviders.Ocr** | This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | +| **Telerik.Documents.Tesseract.Ocr** | This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | +| **Telerik.Documents.ImageUtils** | This package is required when exporting to `PDF` format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High. For more information check the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) article. +| **Telerik.Documents.CMapUtils** | Provides a default implementation for getting the data of a predefined CMap table by a given name. The package is optional and you will need to include a reference to it only if you need to process documents with [CMap tables]({%slug radpdfprocessing-concepts-cmap-tables%}). | +| **Telerik.Documents.Spreadsheet** | The main package for the spreadsheet processing. It is needed for processing XLSX, CSV, TXT documents. | +| **Telerik.Documents.Spreadsheet.FormatProviders.OpenXml** | This package is needed for processing XLSX documents. | +| **Telerik.Documents.Spreadsheet.FormatProviders.Pdf** | This package is needed for exporting to PDF documents. | +| **Telerik.Documents.Spreadsheet.FormatProviders.Xls** | This package is needed for processing XLS documents. | +| **Telerik.Documents.SpreadsheetStreaming** | The main package for generating huge spreadsheet files using minimum resources. | +| **Telerik.Zip** |It is the main package of the [Telerik Zip Library]({%slug radziplibrary-overview%}). | ### Assemblies for .NET Framework -| Assembly Name| Description | +| package Name| Description | |-------|----------------| -| **Telerik.Windows.Documents.Core.dll** | The main assembly from the Telerik document processing libraries. You always need it when you intend to use the library. | -| **Telerik.Windows.Documents.Flow.dll** | Part of the words (text) processing library. It is needed for processing HTML, DOCX, RTF and TXT documents. | -| **Telerik.Windows.Documents.DrawingML.dll** | Part of the words (text) processing library. It is needed for working with shapes inside the documents. | -| **Telerik.Windows.Documents.Flow.FormatProviders.Doc.dll** | Allows importing of DOC and DOT document. | -| **Telerik.Windows.Documents.Flow.FormatProviders.Pdf.dll** | Allows exporting of flow documents (DOCX, DOC, DOT, RTF, and HTML) to PDF. | -| **Telerik.Documents.SpreadsheetStreaming.dll** | The main assembly for generating huge spreadsheet files using minimum resources. | -| **Telerik.Windows.Documents.Spreadsheet.dll** | The main assembly for the spreadsheet processing. It is needed for processing XLSX, CSV, TXT documents. | -| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.dll** | This assembly is needed for processing XLSX documents. | -| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls.dll** | This assembly is needed for processing XLS documents. | -| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.dll** | This assembly is needed for processing PDF documents. | -| **Telerik.Windows.Documents.Fixed.dll** | Part of the PDF processing library. It is needed for working with PDF documents. | -| **Telerik.Windows.Documents.Fixed.FormatProviders.Ocr.dll** | This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | -| **Telerik.Windows.Documents.Tesseract.Ocr.dll** | This assembly is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | -| **Telerik.Windows.Documents.CMapUtils.dll** | Provides a default implementation for getting the data of a predefined CMap table by a given name. The assembly is optional and you will need to include a reference to it only if you need to process documents with [CMap tables]({%slug radpdfprocessing-concepts-cmap-tables%}). | -| **Telerik.Windows.Zip.dll** |It is the main assembly of the [Telerik Zip Library]({%slug radziplibrary-overview%}). | -| **Telerik.Windows.Zip.Extensions.dll** | Extends **Telerik.Windows.Zip** assembly with additional helper methods ([Zip Extensions]({%slug radziplibrary-zipextensions%})). | - - ->The libraries support .NET 4.6.2 and later. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names. +| **Telerik.Windows.Documents.Core** | The main package from the Telerik document processing libraries. You always need it when you intend to use the library. | +| **Telerik.Windows.Documents.Flow** | Part of the words (text) processing library. It is needed for processing HTML, DOCX, RTF and TXT documents. | +| **Telerik.Windows.Documents.DrawingML** | Part of the words (text) processing library. It is needed for working with shapes inside the documents. | +| **Telerik.Windows.Documents.Flow.FormatProviders.Doc** | Allows importing of DOC and DOT document. | +| **Telerik.Windows.Documents.Flow.FormatProviders.Pdf** | Allows exporting of flow documents (DOCX, DOC, DOT, RTF, and HTML) to PDF. | +| **Telerik.Documents.SpreadsheetStreaming** | The main package for generating huge spreadsheet files using minimum resources. | +| **Telerik.Windows.Documents.Spreadsheet** | The main package for the spreadsheet processing. It is needed for processing XLSX, CSV, TXT documents. | +| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml** | This package is needed for processing XLSX documents. | +| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls** | This package is needed for processing XLS documents. | +| **Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf** | This package is needed for processing PDF documents. | +| **Telerik.Windows.Documents.Fixed** | Part of the PDF processing library. It is needed for working with PDF documents. | +| **Telerik.Windows.Documents.Fixed.FormatProviders.Ocr** | This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | +| **Telerik.Windows.Documents.Tesseract.Ocr** | This package is needed for the [Optical Character Recognition (OCR)]({%slug radpdfprocessing-formats-and-conversion-ocr-ocrformatprovider%}) functionality. | +| **Telerik.Windows.Documents.CMapUtils** | Provides a default implementation for getting the data of a predefined CMap table by a given name. The package is optional and you will need to include a reference to it only if you need to process documents with [CMap tables]({%slug radpdfprocessing-concepts-cmap-tables%}). | +| **Telerik.Windows.Zip** |It is the main package of the [Telerik Zip Library]({%slug radziplibrary-overview%}). | +| **Telerik.Windows.Zip.Extensions** | Extends **Telerik.Windows.Zip** package with additional helper methods ([Zip Extensions]({%slug radziplibrary-zipextensions%})). | + + +>The libraries support .NET 4.6.2 and later. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names. ## Getting Started Resources by Library diff --git a/introduction.md b/introduction.md index 81b3a64e..5f413f3c 100644 --- a/introduction.md +++ b/introduction.md @@ -85,9 +85,9 @@ The Telerik Document Processing libraries support the following file formats: ![DPL Ninja](images/dpl-formats.png) -## Available Assemblies +## Required References ->The Telerik Document Processing libraries are available in **.NET Framework**, **{{site.dotnetversions}}** (or newer) for Windows and **.NET Standard** compatible versions. You can download the assemblies of these libraries from the following products: +>The Telerik Document Processing libraries are available in **.NET Framework**, **{{site.dotnetversions}}** (or newer) for Windows and **.NET Standard** compatible versions. You can download the references for these libraries from the following products: > |.NET Framework Products|{{site.dotnetversions}} *for Windows*|.NET Standard| @@ -108,7 +108,7 @@ To start using the libraries right away, see the [First Steps]({%slug getting-st Telerik Document Processing is a commercial library. You are welcome to explore its full functionality and get technical support from the team when you register for a free 30-day trial. To use it commercially, you need to [purchase a license](https://www.telerik.com/purchase.aspx). Feel free to review the Telerik [License Agreement](https://www.telerik.com/purchase/license-agreement/devcraft-complete-dlw-s) to get acquainted with the full terms of use. ->Telerik Document Processing is available as part of **DevCraft**, **UI for ASP.NET Core**, **UI for ASP.NET MVC**, **UI for ASP.NET AJAX**, **UI for Blazor**, **UI for .NET MAUI**, **UI for Xamarin**, **UI for WPF**, **UI for WinForms**, **UI for Silverlight***. The libraries are subject to the license under which you've obtained the assemblies. ( * [Learn about Telerik UI for Silverlight discontinuation, end user options and alternatives.](https://www.telerik.com/products/silverlight/overview.aspx)). +>Telerik Document Processing is available as part of **DevCraft**, **UI for ASP.NET Core**, **UI for ASP.NET MVC**, **UI for ASP.NET AJAX**, **UI for Blazor**, **UI for .NET MAUI**, **UI for Xamarin**, **UI for WPF**, **UI for WinForms**, **UI for Silverlight***. The libraries are subject to the license under which you've obtained the assemblies/NuGet packages. ( * [Learn about Telerik UI for Silverlight discontinuation, end user options and alternatives.](https://www.telerik.com/products/silverlight/overview.aspx)). ## Support Options From c399fdb4740924f4a1ec18ab3568619497800ca3 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 20 Oct 2025 17:57:26 +0300 Subject: [PATCH 14/36] Replace Assemblies information with NuGets. --- .../trial-license-limitations.md | 2 +- integration/integration-with-visual-studio.md | 6 +-- integration/integration-with-vs-code.md | 2 +- introduction.md | 4 +- .../troubleshooting-windowsbase-error.md | 2 +- libraries/radpdfprocessing/concepts/cmaps.md | 4 +- .../radpdfprocessing/cross-platform/images.md | 8 ++-- .../cross-platform/overview.md | 22 +++++----- .../prerequisites.md | 2 +- .../using-image-format-provider.md | 6 +-- .../ocr/custom-ocr-provider.md | 2 +- .../ocr/prerequisites.md | 4 +- .../pdfformatprovider/pdfformatprovider.md | 6 +-- .../plain-text/textformatprovider.md | 6 +-- libraries/radpdfprocessing/getting-started.md | 26 +++++------ libraries/radpdfprocessing/model/image.md | 2 +- .../radpdfprocessing/model/imagesource.md | 6 +-- .../cross-platform-support/cross-platform.md | 30 ++++++------- .../cross-platform-support/images.md | 2 +- .../cross-platform-support/text-measure.md | 2 +- .../features/charts/pdf-export.md | 2 +- .../features/shapes-and-images.md | 2 +- .../using-data-table-format-provider.md | 2 +- .../general-information.md | 18 ++++---- .../xls/xlsformatprovider.md | 8 ++-- .../xlsm/xlsmformatprovider.md | 8 ++-- .../xlsx/xlsxformatprovider.md | 6 +-- .../import-export-format-providers-manager.md | 2 +- .../pdf/pdfformatprovider.md | 6 +-- .../radspreadprocessing/getting-started.md | 38 ++++++++-------- .../features/text-measuring.md | 2 +- .../getting-started.md | 10 ++--- .../concepts/fields/fields.md | 2 +- .../fields/numbering-fields-provider.md | 2 +- .../radwordsprocessing/cross-platform.md | 26 +++++------ .../prerequisites.md | 2 +- .../html/htmlformatprovider.md | 6 +-- .../pdf/pdfformatprovider.md | 12 ++--- .../plain-text/txt-txtformatprovider.md | 6 +-- .../rtf/rtfformatprovider.md | 6 +-- .../doc/docformatprovider.md | 10 ++--- .../docx/docxformatprovider.md | 6 +-- .../radwordsprocessing/getting-started.md | 44 +++++++++---------- .../radwordsprocessing/model/imageinline.md | 2 +- .../radwordsprocessing/model/shapes/shapes.md | 4 +- .../radziplibrary/features/zip-extensions.md | 5 +-- libraries/radziplibrary/gettingstarted.md | 8 ++-- security/overview.md | 2 +- troubleshooting/pdfprocessing.md | 2 +- upgrade/upgrade-instructions.md | 2 +- 50 files changed, 197 insertions(+), 198 deletions(-) diff --git a/distribution-and-licensing/trial-license-limitations.md b/distribution-and-licensing/trial-license-limitations.md index 4006f0c8..369e9374 100644 --- a/distribution-and-licensing/trial-license-limitations.md +++ b/distribution-and-licensing/trial-license-limitations.md @@ -11,7 +11,7 @@ position: 3 The free trial license of Telerik Document Processing is fully functional and will work for an unlimited time. -The only difference between the developer and trial versions of the assemblies is that trial assemblies add a copyright message to the produced documents. +The only difference between the developer and trial versions of the packages is that trial packages add a copyright message to the produced documents. In PDF and flow formats, this is a message at the top of the document, whereas for XLSX documents the message is added to a separate sheet. diff --git a/integration/integration-with-visual-studio.md b/integration/integration-with-visual-studio.md index 9ae2047e..b4fcdf83 100644 --- a/integration/integration-with-visual-studio.md +++ b/integration/integration-with-visual-studio.md @@ -27,13 +27,13 @@ The Telerik Document Processing Configuration wizard allows you to select which ![DPL Configure Wizard Main Page](../images/dpl_configure_wizard.png) -Assemblies are pre-selected based on the component you have launched the wizard through. Following is a list of the assemblies that will be selected for each library. +Packages are pre-selected based on the component you have launched the wizard through. Following is a list of the packages that will be selected for each library. -|Component |Selected assemblies | +|Component |Selected packages | |---------|---------| |RadPdfProcessing |Documents.Core
Documents.Fixed
Zip | |RadSpreadProcessing | Documents.Core
Documents.Fixed
Documents.Spreadsheet
Documents.SpreadSheet.FormatProviders.OpenXml
Documents.SpreadSheet.FormatProviders.Pdf
Zip | |RadSpreadStreamProcessing | Documents.SpreadSheetStreaming
Zip | |RadWordsProcessing | Documents.Core
Documents.Fixed
Documents.Flow
Documents.Flow.FormatProviders.Pdf
Zip | -When you click the **Finish** button, the selected assembly references are added to you project. +When you click the **Finish** button, the selected package references are added to you project. diff --git a/integration/integration-with-vs-code.md b/integration/integration-with-vs-code.md index 36cb230b..b4bdb266 100644 --- a/integration/integration-with-vs-code.md +++ b/integration/integration-with-vs-code.md @@ -47,7 +47,7 @@ After executing one of the options the wizard must appear like this: ![Configure Document Processing Wizard](images/Configure_Document_Processing_Wizard_MAUI.png) -The **Telerik Document Processing Configuration wizard** allows you to select which libraries your project would use. It allows you to use the license and selection of the `.csproj` file, in which you want the installation to be provided. This option is useful in cases when the user has many opened projects in the workspace. If a library you selected has any dependencies, they are automatically checked. In the table below there is a list of the assemblies that will be selected for each library: +The **Telerik Document Processing Configuration wizard** allows you to select which libraries your project would use. It allows you to use the license and selection of the `.csproj` file, in which you want the installation to be provided. This option is useful in cases when the user has many opened projects in the workspace. If a library you selected has any dependencies, they are automatically checked. In the table below there is a list of the packages that will be selected for each library: |Library |Packages | |---------|---------| diff --git a/introduction.md b/introduction.md index 5f413f3c..641ebcab 100644 --- a/introduction.md +++ b/introduction.md @@ -98,7 +98,7 @@ The Telerik Document Processing libraries support the following file formats: |[UI for WinForms](https://www.telerik.com/products/winforms.aspx)|[UI for WinForms](https://www.telerik.com/products/winforms.aspx)|[UI for WinUI](https://www.telerik.com/winui)| |[UI for Silverlight (discontinued)](https://www.telerik.com/products/silverlight/overview.aspx)||[UI for .NET MAUI](https://www.telerik.com/maui-ui)| -All versions are available as [NuGet packages]({%slug installation-nuget-packages%}). The assemblies/packages for .NET Standard do not contain the word *Windows* in their name. Learn [What Versions of Document Processing Libraries are Distributed with the Telerik Products]({%slug distribute-telerik-document-processing-libraries-net-versions%}) +All versions are available as [NuGet packages]({%slug installation-nuget-packages%}). The packages for .NET Standard do not contain the word *Windows* in their name. Learn [What Versions of Document Processing Libraries are Distributed with the Telerik Products]({%slug distribute-telerik-document-processing-libraries-net-versions%}) ## Getting Started @@ -108,7 +108,7 @@ To start using the libraries right away, see the [First Steps]({%slug getting-st Telerik Document Processing is a commercial library. You are welcome to explore its full functionality and get technical support from the team when you register for a free 30-day trial. To use it commercially, you need to [purchase a license](https://www.telerik.com/purchase.aspx). Feel free to review the Telerik [License Agreement](https://www.telerik.com/purchase/license-agreement/devcraft-complete-dlw-s) to get acquainted with the full terms of use. ->Telerik Document Processing is available as part of **DevCraft**, **UI for ASP.NET Core**, **UI for ASP.NET MVC**, **UI for ASP.NET AJAX**, **UI for Blazor**, **UI for .NET MAUI**, **UI for Xamarin**, **UI for WPF**, **UI for WinForms**, **UI for Silverlight***. The libraries are subject to the license under which you've obtained the assemblies/NuGet packages. ( * [Learn about Telerik UI for Silverlight discontinuation, end user options and alternatives.](https://www.telerik.com/products/silverlight/overview.aspx)). +>Telerik Document Processing is available as part of **DevCraft**, **UI for ASP.NET Core**, **UI for ASP.NET MVC**, **UI for ASP.NET AJAX**, **UI for Blazor**, **UI for .NET MAUI**, **UI for Xamarin**, **UI for WPF**, **UI for WinForms**, **UI for Silverlight***. The libraries are subject to the license under which you've obtained the packages. ( * [Learn about Telerik UI for Silverlight discontinuation, end user options and alternatives.](https://www.telerik.com/products/silverlight/overview.aspx)). ## Support Options diff --git a/knowledge-base/troubleshooting-windowsbase-error.md b/knowledge-base/troubleshooting-windowsbase-error.md index ad1db8c0..d2aad0c3 100644 --- a/knowledge-base/troubleshooting-windowsbase-error.md +++ b/knowledge-base/troubleshooting-windowsbase-error.md @@ -31,7 +31,7 @@ res_type: kb ## Description -This exception is thrown when the binaries for .NET Framework are used in a project targeting .NET Core. +This exception is thrown when the packages for .NET Framework are used in a project targeting .NET Core. ## Error Message diff --git a/libraries/radpdfprocessing/concepts/cmaps.md b/libraries/radpdfprocessing/concepts/cmaps.md index 1d8fd7dd..dfa0a527 100644 --- a/libraries/radpdfprocessing/concepts/cmaps.md +++ b/libraries/radpdfprocessing/concepts/cmaps.md @@ -19,9 +19,9 @@ PdfProcessing enables you to use a default implementation for the known predefin ## Default Implementation -The **Telerik[.Windows].Documents.CMapUtils.dll** assembly provides a default implementation for obtaining the data of a predefined CMap table by a given name. The class that contains implementations for all the CMap tables defined by the PDF Format Specification is called **PredefinedCMapsProvider**. In order to register an instance of the default implementation, the **FixedExtensibilityManager** class should be used. +The **Telerik[.Windows].Documents.CMapUtils** package provides a default implementation for obtaining the data of a predefined CMap table by a given name. The class that contains implementations for all the CMap tables defined by the PDF Format Specification is called **PredefinedCMapsProvider**. In order to register an instance of the default implementation, the **FixedExtensibilityManager** class should be used. ->To use this functionality, you must add a reference to the **Telerik[.Windows].Documents.CMapUtils.dll**. +>To use this functionality, you must add a reference to the **Telerik[.Windows].Documents.CMapUtils package**. #### [C#] Example 1: Register default CMapsProvider {{region radpdfprocessing-concepts-cmap_0}} diff --git a/libraries/radpdfprocessing/cross-platform/images.md b/libraries/radpdfprocessing/cross-platform/images.md index 8f0f9c81..2fb7408a 100644 --- a/libraries/radpdfprocessing/cross-platform/images.md +++ b/libraries/radpdfprocessing/cross-platform/images.md @@ -22,11 +22,11 @@ To reduce file size, PDF supports only a number of compression filters like Jpeg ## Requirements -To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add references to the following .Net Standard assemblies: +To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add references to the following .Net Standard packages: -|Assembly/ NuGet package|Description| +|NuGet package|Description| |----|----| -|**Telerik.Documents.ImageUtils**|This assembly is currently not available in UI for Xamarin.| +|**Telerik.Documents.ImageUtils**|This package is currently not available in UI for Xamarin.| |**SkiaSharp.NativeAssets.*** (version {{site.skiasharpversion}})|May differ according to the used platform. For **Linux** use SkiaSharp.NativeAssets.Linux.NoDependencies| |**SkiaSharp.Views.Blazor** and **wasm-tools**|For Blazor Web Assembly.| @@ -67,7 +67,7 @@ The `JpegImageConverter` property uses an implementation of the `JpegImageConver ### Default Implementation for JpegImageConverter -The **Telerik.Documents.ImageUtils** assembly provides a default implementation of the JpegImageConverter class that could be used when exporting a document. The default implementation depends on the [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/) library to convert images to Jpeg format. +The **Telerik.Documents.ImageUtils** package provides a default implementation of the JpegImageConverter class that could be used when exporting a document. The default implementation depends on the [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/) library to convert images to Jpeg format. >note View Implementation [Requirements](#requirements). diff --git a/libraries/radpdfprocessing/cross-platform/overview.md b/libraries/radpdfprocessing/cross-platform/overview.md index ad58f330..31d8cb4e 100644 --- a/libraries/radpdfprocessing/cross-platform/overview.md +++ b/libraries/radpdfprocessing/cross-platform/overview.md @@ -11,26 +11,26 @@ position: 0 # Cross-Platform Support -The [Telerik Document Processing]({%slug introduction%}) libraries are compatible across different .NET implementations, including .NET Standard, {{site.dotnetversions}} (Target OS: *None*), and newer versions. There is a set of binaries built against the .NET Standard version which you can reference in an application. +The [Telerik Document Processing]({%slug introduction%}) libraries are compatible across different .NET implementations, including .NET Standard, {{site.dotnetversions}} (Target OS: *None*), and newer versions. There is a set of packages built against the .NET Standard version which you can reference in an application. ->note The binaries compatible with .NET Standard, {{site.dotnetversions}} (Target OS: *None*) are distributed with the packages targeting .NET Standard. You can obtain the assemblies through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. +>note The binaries compatible with .NET Standard, {{site.dotnetversions}} (Target OS: *None*) are distributed with the packages targeting .NET Standard. You can obtain the packages through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. -## Assembly References +## Package References -In order to use the model of the **RadPdfProcessing** library in your cross-platform project, you need to add references to the following **.Net Standard** assemblies/ NuGet packages: +In order to use the model of the **RadPdfProcessing** library in your cross-platform project, you need to add references to the following **.Net Standard** NuGet packages: -* **Telerik.Documents.Core.dll** -* **Telerik.Documents.Fixed.dll** -* ~~Telerik.Zip.dll~~* +* **Telerik.Documents.Core** +* **Telerik.Documents.Fixed** +* ~~Telerik.Zip~~* >note As of [Q2 2025](https://www.telerik.com/support/whats-new/telerik-document-processing/release-history/progress-telerik-document-processing-2025-2-520-changelog) the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. -To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add references to the following **.Net Standard** assembly: +To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add references to the following **.Net Standard** package: -* **Telerik.Documents.ImageUtils.dll** -
_This assembly is not available in UI for Xamarin._ +* **Telerik.Documents.ImageUtils** +
_This package is not available in UI for Xamarin._ -> Note that for .NET Framework, {{site.dotnetversions}} with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core.dll**) +> Note that for .NET Framework, {{site.dotnetversions}} with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core**) ## Fonts and Images diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md index 95e733b7..54b3338b 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md @@ -29,7 +29,7 @@ This article explains the requirements for using the GenAI-powered Document Insi ## Required References -In addition to the [standard RadPdfProcessing references]({%slug radpdfprocessing-getting-started%}#assembly-references), you will need to add the following references to use the GenAI-powered Document Insights features: +In addition to the [standard RadPdfProcessing references]({%slug radpdfprocessing-getting-started%}#package-references), you will need to add the following references to use the GenAI-powered Document Insights features: |.NET Framework|.NET Standard-compatible| |---|---| diff --git a/libraries/radpdfprocessing/formats-and-conversion/convert-to-image/using-image-format-provider.md b/libraries/radpdfprocessing/formats-and-conversion/convert-to-image/using-image-format-provider.md index 23c9b9c1..11c3cc7c 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/convert-to-image/using-image-format-provider.md +++ b/libraries/radpdfprocessing/formats-and-conversion/convert-to-image/using-image-format-provider.md @@ -20,9 +20,9 @@ Since R3 2022 the __RadPdfProcessing__ library supports converting entire docume To enable the image exporting functionality in your application, you must add references to the following packages: -* The __Telerik.Documents.Fixed.FormatProviders.Image.Skia__ assembly. -* The __SkiaSharp__ Nuget package. -* The __SkiaSharp.NativeAssets.*__ Nuget package. This package may differ according to the used platform. There are versions for Windows, macOS, Linux, WebAssembly, Android, iOS, and others. +* The __Telerik.Documents.Fixed.FormatProviders.Image.Skia__ NuGet package. +* The __SkiaSharp__ NuGet package. +* The __SkiaSharp.NativeAssets.*__ NuGet package. This package may differ according to the used platform. There are versions for Windows, macOS, Linux, WebAssembly, Android, iOS, and others. A [FontsProvider](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/fonts#setting-and-exporting-fonts) implementation is required to read the document fonts and draw the image. diff --git a/libraries/radpdfprocessing/formats-and-conversion/ocr/custom-ocr-provider.md b/libraries/radpdfprocessing/formats-and-conversion/ocr/custom-ocr-provider.md index 2c2b60c5..e8ad8853 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/ocr/custom-ocr-provider.md +++ b/libraries/radpdfprocessing/formats-and-conversion/ocr/custom-ocr-provider.md @@ -18,7 +18,7 @@ However, it is possible to implement your own **IOcrProvider** that uses the des The [Azure AI Vision](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/overview) service gives you access to the [Optical Character Recognition](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/overview-ocr) (OCR) service that extracts text from images. We will use its [OCR engine](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/overview-ocr#ocr-engine) to implement a custom **IOcrProvider** that our RadPdfProcessing library can use. -1\. Before going further, you can find listed below the **required** assemblies/ NuGet packages that should be added to your project: +1\. Before going further, you can find listed below the **required** NuGet packages that should be added to your project: * [Azure.AI.Vision.ImageAnalysis](https://www.nuget.org/packages/Azure.AI.Vision.ImageAnalysis) * Telerik.Documents.Fixed diff --git a/libraries/radpdfprocessing/formats-and-conversion/ocr/prerequisites.md b/libraries/radpdfprocessing/formats-and-conversion/ocr/prerequisites.md index e5f559ef..331e428d 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/ocr/prerequisites.md +++ b/libraries/radpdfprocessing/formats-and-conversion/ocr/prerequisites.md @@ -18,9 +18,9 @@ This topic describes the requirements needed by the [PdfProcessing]({%slug radpd >note Used images should be **300 DPI** for best results. -## Required Assemblies/ NuGet Packages +## Required Packages -In order to use the **OcrFormatProvider** you need to add the following assemblies: +In order to use the **OcrFormatProvider** you need to add the following packages: diff --git a/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/pdfformatprovider.md b/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/pdfformatprovider.md index d7b4a022..700e2032 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/pdfformatprovider.md +++ b/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/pdfformatprovider.md @@ -14,10 +14,10 @@ position: 1 __PdfFormatProvider__ makes it easy to import and export a RadFixedDocument from/to PDF format, preserving the entire document structure and formatting. -In order to use the format provider, you need to add references to the following assemblies: +In order to use the format provider, you need to add references to the following packages: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Fixed.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Fixed >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. diff --git a/libraries/radpdfprocessing/formats-and-conversion/plain-text/textformatprovider.md b/libraries/radpdfprocessing/formats-and-conversion/plain-text/textformatprovider.md index 0f479a66..c34137d5 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/plain-text/textformatprovider.md +++ b/libraries/radpdfprocessing/formats-and-conversion/plain-text/textformatprovider.md @@ -12,11 +12,11 @@ position: 1 __TextFormatProvider__ makes it easy to export __RadFixedDocument__ to plain text format, preserving the document structure. -All you have to do in order to use __TextFormatProvider__ is add references to the assemblies listed below: +All you have to do in order to use __TextFormatProvider__ is add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Fixed.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Fixed ## Export diff --git a/libraries/radpdfprocessing/getting-started.md b/libraries/radpdfprocessing/getting-started.md index 73e70174..4f490c89 100644 --- a/libraries/radpdfprocessing/getting-started.md +++ b/libraries/radpdfprocessing/getting-started.md @@ -15,11 +15,11 @@ This article will get you started in using the __RadPdfProcessing__ library. >noteIf you still don't have **Telerik Document Processing** installed, check the [First Steps]({%slug getting-started-first-steps%}) topic to learn how you can obtain the packages through the different suites. -## Assembly References +## Package References ->The libraries support {{site.dotnetversions}}. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names (e.g. **Telerik.Documents.Core.dll**). For more information check [**Cross-Platform Support**]({%slug radpdfprocessing-cross-platform%}) article. +>The libraries support {{site.dotnetversions}}. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names (e.g. **Telerik.Documents.Core**). For more information check [**Cross-Platform Support**]({%slug radpdfprocessing-cross-platform%}) article. -In order to use the __RadPdfProcessing__ library in your project, you need to add references to the following assemblies: +In order to use the __RadPdfProcessing__ library in your project, you need to add references to the following packages:
@@ -29,12 +29,12 @@ In order to use the __RadPdfProcessing__ library in your project, you need to ad - - + + - - + + @@ -57,15 +57,15 @@ In order to use the __RadPdfProcessing__ library in your project, you need to ad - + - - + @@ -102,9 +102,9 @@ In order to use the __RadPdfProcessing__ library in your project, you need to ad
Telerik.Windows.Documents.Core.dllTelerik.Documents.Core.dllTelerik.Windows.Documents.CoreTelerik.Documents.Core
Telerik.Windows.Documents.Fixed.dllTelerik.Documents.Fixed.dllTelerik.Windows.Documents.FixedTelerik.Documents.Fixed
  
To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add a reference to the following assembly:To export images different than Jpeg and Jpeg2000 or ImageQuality different than High you will need to add a reference to the following package:
-Telerik.Documents.ImageUtils.dll -
This assembly is not available in UI for Xamarin. +
Telerik.Documents.ImageUtils +
This package is not available in UI for Xamarin.
This assembly is required for the Image Exporting functionality. This is only available in the NET Standard version. This package is required for the Image Exporting functionality. This is only available in the NET Standard version.
-
->note The **Telerik.Documents.ImageUtils.dll** assembly depends on **SkiaSharp**. In order to use this assembly, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. +>note The **Telerik.Documents.ImageUtils** package depends on **SkiaSharp**. In order to use this package, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. ->note The **Telerik.Documents.Fixed.FormatProviders.Image.Skia** assembly depends on **SkiaSharp**. In order to use this assembly, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). The **SkiaSharp.NativeAssets.*** Nuget package is required as well. This package may differ according to the used platform. There are version for Windows, MacOs, Linux, WebAssembly, Android, iOS, and others. +>note The **Telerik.Documents.Fixed.FormatProviders.Image.Skia** package depends on **SkiaSharp**. In order to use this package, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). The **SkiaSharp.NativeAssets.*** Nuget package is required as well. This package may differ according to the used platform. There are version for Windows, MacOs, Linux, WebAssembly, Android, iOS, and others. ## Creating a Document diff --git a/libraries/radpdfprocessing/model/image.md b/libraries/radpdfprocessing/model/image.md index 41641ca3..b4c30750 100644 --- a/libraries/radpdfprocessing/model/image.md +++ b/libraries/radpdfprocessing/model/image.md @@ -73,7 +73,7 @@ __Example 2__ demonstrates how to use one of the factory methods of the __Conten The Image class exposes also the **GetBitmapSource()** method, enabling you to obtain a [BitmapSource](https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.bitmapsource) instance representing the image. -> The GetBitmapSource() method is not available in the .NET Standard version of the PdfProcessing binaries. +> The GetBitmapSource() method is not available in the .NET Standard version of the PdfProcessing packages. #### __[C#] Example 3: Obtain BitmapSource__ diff --git a/libraries/radpdfprocessing/model/imagesource.md b/libraries/radpdfprocessing/model/imagesource.md index bb246384..29e4d61a 100644 --- a/libraries/radpdfprocessing/model/imagesource.md +++ b/libraries/radpdfprocessing/model/imagesource.md @@ -19,9 +19,9 @@ The ImageSource class has several public constructor overloads and can be create * __public ImageSource(Stream stream, FormatProviders.Pdf.Export.ImageQuality imageQuality)__: Creates an __ImageSource__ object from a stream and allows you to specify the image quality through the [ImageQuality enumeration](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Export.ImageQuality.html). More information about the ImageQuality and its behavior is available in [this article]({%slug radpdfprocessing-concepts-imagequality%}). This overload might throw an exception if the image format is not supported. -* __public ImageSource(BitmapSource bitmapSource)__: Creates a new __ImageSource__ object from a BitmapSource object. This overload is not available in the .NET Standard version of the PdfProcessing binaries. +* __public ImageSource(BitmapSource bitmapSource)__: Creates a new __ImageSource__ object from a BitmapSource object. This overload is not available in the .NET Standard version of the PdfProcessing packages. -* __public ImageSource(BitmapSource bitmapSource, FormatProviders.Pdf.Export.ImageQuality imageQuality)__: Creates an __ImageSource__ instance from a BitmapSource object and allows you to specify the image quality. This overload is not available in the .NET Standard version of the PdfProcessing binaries. +* __public ImageSource(BitmapSource bitmapSource, FormatProviders.Pdf.Export.ImageQuality imageQuality)__: Creates an __ImageSource__ instance from a BitmapSource object and allows you to specify the image quality. This overload is not available in the .NET Standard version of the PdfProcessing packages. * __public ImageSource(EncodedImageData imageSourceInfo)__: Initializes a new instance of __ImageSource__ using the [EncodedImageData class](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.Model.Resources.EncodedImageData.html). @@ -69,7 +69,7 @@ The properties exposed by the **ImageSource** class are as follows: The ImageSource class exposes two methods, which could help you get the data from the ImageSource object. -> These methods are not available in the .NET Standard version of the PdfProcessing binaries. +> These methods are not available in the .NET Standard version of the PdfProcessing packages. * __BitmapSource GetBitmapSource()__: Gets the BitmapSource of the image. * __EncodedImageData GetEncodedImageData()__: Returns the encoded image data. This method can be used if you need to directly export the images from the PDF document. diff --git a/libraries/radspreadprocessing/cross-platform-support/cross-platform.md b/libraries/radspreadprocessing/cross-platform-support/cross-platform.md index 5b2212a9..461ef2be 100644 --- a/libraries/radspreadprocessing/cross-platform-support/cross-platform.md +++ b/libraries/radspreadprocessing/cross-platform-support/cross-platform.md @@ -11,31 +11,31 @@ position: 0 # Cross-Platform Support -**Telerik Document Processing** comes with **.NET Core** & **.NET Standard** support. There is a set of binaries built against the .NET Core & .NET Standard which you can reference in an application. +**Telerik Document Processing** comes with **.NET Core** & **.NET Standard** support. There is a set of packages built against the .NET Core & .NET Standard which you can reference in an application. ->note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can obtain the assemblies through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. +>note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can obtain the packages through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. -## Assembly References +## Package References -To use the model of **RadSpreadProcessing** in your cross-platform project, you need to add references to the following **.Net Standard** assemblies: +To use the model of **RadSpreadProcessing** in your cross-platform project, you need to add references to the following **.Net Standard** packages: -| Assembly Name | Notes | +| Package Name | Notes | |------------------------------------------|------------------------------------------| -| **Telerik.Documents.Core.dll** | | -| **Telerik.Documents.Spreadsheet.dll** | | -| **Telerik.Documents.Spreadsheet.FormatProviders.OpenXml.dll** | Required for working with XLSX files. | -| **Telerik.Documents.Spreadsheet.FormatProviders.Xls.dll** | Required for working with XLS files. | -| **Telerik.Documents.Fixed.dll** | Required for exporting to PDF files. | -| **Telerik.Documents.Spreadsheet.FormatProviders.Pdf.dll** | Required for exporting to PDF files. | -| ~~Telerik.Zip.dll~~* | ~~Required for working with XSLX, XLS and PDF files.~~ | -| **Telerik.Documents.ImageUtils.dll**
_This assembly is not available in UI for Xamarin._ | Required when you need to export to PDF documents containing images different than **Jpeg** and **Jpeg2000** or **ImageQuality** different than High. | +| **Telerik.Documents.Core** | | +| **Telerik.Documents.Spreadsheet** | | +| **Telerik.Documents.Spreadsheet.FormatProviders.OpenXml** | Required for working with XLSX files. | +| **Telerik.Documents.Spreadsheet.FormatProviders.Xls** | Required for working with XLS files. | +| **Telerik.Documents.Fixed** | Required for exporting to PDF files. | +| **Telerik.Documents.Spreadsheet.FormatProviders.Pdf** | Required for exporting to PDF files. | +| ~~Telerik.Zip~~* | ~~Required for working with XSLX, XLS and PDF files.~~ | +| **Telerik.Documents.ImageUtils**
_This package is not available in UI for Xamarin._ | Required when you need to export to PDF documents containing images different than **Jpeg** and **Jpeg2000** or **ImageQuality** different than High. | >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. ->note The **Telerik.Documents.ImageUtils.dll** assembly depends on **SkiaSharp**. In order to use this assembly, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. +>note The **Telerik.Documents.ImageUtils** package depends on **SkiaSharp**. In order to use this package, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. -> Note that for .NET Framework, {{site.dotnetversions}} with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core.dll**) +> Note that for .NET Framework, {{site.dotnetversions}} with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core**) ## What's Different Between .NET Framework and .NET Standard versions of SpreadProcessing diff --git a/libraries/radspreadprocessing/cross-platform-support/images.md b/libraries/radspreadprocessing/cross-platform-support/images.md index f2d9d6d7..a5daad6d 100644 --- a/libraries/radspreadprocessing/cross-platform-support/images.md +++ b/libraries/radspreadprocessing/cross-platform-support/images.md @@ -13,7 +13,7 @@ position: 2 .NET Standard specification does not define APIs for getting the image properties. SpreadProcessing needs to have access to GDI+ basic graphics functionality when exporting spreadsheets that contain images. That is why, to allow the library to get the image properties needed for **saving the workbook**, an implementation inheriting the **ImagePropertiesResolverBase** abstract class must be set to the **ImagePropertiesResolver** property of **SpreadExtensibilityManager**. ->note The **Telerik.Documents.ImageUtils** assembly provides a default implementation of the ImagePropertiesResolver class that could be used when exporting the document. +>note The **Telerik.Documents.ImageUtils** package provides a default implementation of the ImagePropertiesResolver class that could be used when exporting the document. #### [C#] Example 1: Set the default implementation of the ImagePropertiesResolver class diff --git a/libraries/radspreadprocessing/cross-platform-support/text-measure.md b/libraries/radspreadprocessing/cross-platform-support/text-measure.md index d4dd9107..a640bd72 100644 --- a/libraries/radspreadprocessing/cross-platform-support/text-measure.md +++ b/libraries/radspreadprocessing/cross-platform-support/text-measure.md @@ -40,7 +40,7 @@ This implementation uses PdfProcessing to obtain the size of the text and provid >note Due to the [Font Limitations]({%slug radpdfprocessing-cross-platform-fonts%}) of the [PdfProcessing]({%slug radpdfprocessing-overview%}) library in .NET Standard, you should provide a [FontsProvider implementation]({%slug pdfprocessing-implement-fontsprovider%}) as well. ->important To use the **SpreadFixedTextMeasurer** class, you must add a reference to **Telerik.Documents.Fixed.dll**. +>important To use the **SpreadFixedTextMeasurer** class, you must add a reference to **Telerik.Documents.Fixed**. #### [C#] Example 1: Set the SpreadFixedTextMeasurer as a text measurer diff --git a/libraries/radspreadprocessing/features/charts/pdf-export.md b/libraries/radspreadprocessing/features/charts/pdf-export.md index 0b32359c..49c9d6d4 100644 --- a/libraries/radspreadprocessing/features/charts/pdf-export.md +++ b/libraries/radspreadprocessing/features/charts/pdf-export.md @@ -14,7 +14,7 @@ platforms: wpf You can export spreadsheet documents in RadSpreadProcessing using the [PdfFormatProvider]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}) class. The charts functionality relies on a renderer that implements the **IPdfChartRenderer** interface to draw the charts in the PDF document. This topic shows how you can implement this renderer using the built-in class in WPF. ->To use the functionality described in this topic, you will need to add a reference to the **Telerik.Windows.Controls.Spreadsheet.dll** and **Telerik.Windows.Controls.Chart.dll** assemblies of the [Telerik UI for WPF](https://www.telerik.com/products/wpf/overview.aspx) suite. +>To use the functionality described in this topic, you will need to add a reference to the **Telerik.Windows.Controls.Spreadsheet** and **Telerik.Windows.Controls.Chart** packages of the [Telerik UI for WPF](https://www.telerik.com/products/wpf/overview.aspx) suite. ## IPdfChartRenderer diff --git a/libraries/radspreadprocessing/features/shapes-and-images.md b/libraries/radspreadprocessing/features/shapes-and-images.md index 3a69c7f6..69414747 100644 --- a/libraries/radspreadprocessing/features/shapes-and-images.md +++ b/libraries/radspreadprocessing/features/shapes-and-images.md @@ -120,7 +120,7 @@ The next step is to configure the other properties of the image as needed. Insert the image into the collection of shapes of the worksheet. Note that the worksheet needs to be the same as the one passed in the FloatingImage constructor, otherwise an exception is thrown. ->important When using the **.NET Standard** version of the RadSpreadProcessing binaries, in order to **export to PDF** format documents containing images different than Jpeg and Jpeg2000 or ImageQuality different than High, the **JpegImageConverter** property inside the **FixedExtensibilityManager** has to be set. For more information check the FixedExtensibilityManager in the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) +>important When using the **.NET Standard** version of the RadSpreadProcessing packages, in order to **export to PDF** format documents containing images different than Jpeg and Jpeg2000 or ImageQuality different than High, the **JpegImageConverter** property inside the **FixedExtensibilityManager** has to be set. For more information check the FixedExtensibilityManager in the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) #### __[C#] Example 3: Add image to worksheet__ diff --git a/libraries/radspreadprocessing/formats-and-conversion/data-table/using-data-table-format-provider.md b/libraries/radspreadprocessing/formats-and-conversion/data-table/using-data-table-format-provider.md index 30d07e05..ba388fc5 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/data-table/using-data-table-format-provider.md +++ b/libraries/radspreadprocessing/formats-and-conversion/data-table/using-data-table-format-provider.md @@ -12,7 +12,7 @@ position: 1 The __DataTableFormatProvider__ allows you to easily convert existing [DataTable](https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable?view=net-5.0) to a worksheet and vice versa. Below you can see how to use this format provider to import/export data tables. -To use the DataTableFormatProvider you need to reference the __Telerik.Windows.Documents.Spreadsheet__ assembly. +To use the DataTableFormatProvider you need to reference the __Telerik.Windows.Documents.Spreadsheet__ package. ## Import diff --git a/libraries/radspreadprocessing/formats-and-conversion/general-information.md b/libraries/radspreadprocessing/formats-and-conversion/general-information.md index ed51ba42..db335b44 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/general-information.md +++ b/libraries/radspreadprocessing/formats-and-conversion/general-information.md @@ -9,7 +9,7 @@ position: 0 # General Information -__RadSpreadProcessing__'s document model allows you to easily open and save files of different formats. This article will share more details on the [supported formats](#supported-formats), [available format providers](#format-providers), the [additional assembly references](#additional-assembly-references) each provider requires and the [Format Providers Manager](#format-providers-manager). +__RadSpreadProcessing__'s document model allows you to easily open and save files of different formats. This article will share more details on the [supported formats](#supported-formats), [available format providers](#format-providers), the [additional package references](#additional-package-references) each provider requires and the [Format Providers Manager](#format-providers-manager). ## Supported formats @@ -35,7 +35,7 @@ The document model exposes separate format providers that work with each of the - [TxtFormatProvider]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider %}) for tab delimited `.txt` files - [DataTableFormatProvider]({%slug radspreadprocessing-formats-and-conversion-using-data-table-format-provider %}) for `DataTable` objects -> Some FormatProviders require additional assembly references. Check them out in the [Additional Assemlby References](#additional-assembly-references) section. +> Some FormatProviders require additional package references. Check them out in the [Additional Package References](#additional-package-references) section. ## Import and Export methods @@ -107,21 +107,21 @@ byte[] workbookAsByteArray = formatProvider.Export(workbook, TimeSpan.FromSecond >note For more examples of importing and exporting workbooks check out the [Import/Load and Export/Save RadSpreadProcessing Workbook]({%slug import-export-save-load-workbook%}) knowledge base article. -## Additional assembly references +## Additional package references -Unlike the __CsvFormatProvider__, __TxtFormatProvider__ and __DataTableFormatProvider__ classes, the other RadSpreadProcessing format providers require references to additional assemblies. +Unlike the __CsvFormatProvider__, __TxtFormatProvider__ and __DataTableFormatProvider__ classes, the other RadSpreadProcessing format providers require references to additional packages. -- **XlsxFormatProvider** and **XlsmFormatProvider** additional assembly references - * Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.dll - * ~~Telerik.Windows.Zip.dll~~* +- **XlsxFormatProvider** and **XlsmFormatProvider** additional package references + * Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml + * ~~Telerik.Windows.Zip~~* >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. - **PdfFormatProvider** - * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.dll + * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf - **XlsFormatProvider** - * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls.dll + * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls ## Format Providers Manager diff --git a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xls/xlsformatprovider.md b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xls/xlsformatprovider.md index a9c1afa6..b888331e 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xls/xlsformatprovider.md +++ b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xls/xlsformatprovider.md @@ -13,12 +13,12 @@ platforms: core, mvc, ajax, blazor, wpf, winforms, xamarin, winui __XlsFormatProvider__ makes it easy to import and export to XLS (Excel 97-2003 Workbook) files. The functionality is available since R3 2020. ->The __XlsFormatProvider__ requires references to the following assembly: +>The __XlsFormatProvider__ requires references to the following packages: ->* Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls.dll for .NET Framework projects ->* Telerik.Documents.Spreadsheet.FormatProviders.Xls.dll for .NET Standard projects +>* Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls for .NET Framework projects +>* Telerik.Documents.Spreadsheet.FormatProviders.Xls for .NET Standard projects -Once you reference the aforementioned assemblies, you need to create an instance of the __XlsFormatProvider__ in order to import and export Excel 97-2003 Workbook files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls namespace. __XlsFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. +Once you reference the aforementioned packages, you need to create an instance of the __XlsFormatProvider__ in order to import and export Excel 97-2003 Workbook files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls namespace. __XlsFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. >note For more examples and application scenarios of Importing and Exporting a Workbook to various formats using a FormatProvider check out the [Import/Load and Export/Save RadSpreadProcessing Workbook]({%slug import-export-save-load-workbook%}) knowledge base article. diff --git a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsm/xlsmformatprovider.md b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsm/xlsmformatprovider.md index 4f1bc14a..0e9b973b 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsm/xlsmformatprovider.md +++ b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsm/xlsmformatprovider.md @@ -16,13 +16,13 @@ __XlsmFormatProvider__ makes it easy to import and export Xlsm (Excel Workbook t > Currently the Macros are only preserved during import and export. They cannot be executed or changed in the code. ->Unlike the CSV and TXT format providers, the __XlsmFormatProvider__ requires references to the following assemblies: ->* Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.dll ->* ~~Telerik.Windows.Zip.dll~~* +>Unlike the CSV and TXT format providers, the __XlsmFormatProvider__ requires references to the following packages: +>* Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml. +>* ~~Telerik.Windows.Zip~~* >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. -Once you reference the aforementioned assemblies, you need to create an instance of the __XlsmFormatProvider__ in order to import and export Xlsm (Excel Workbook) files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsm namespace. __XlsmFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. +Once you reference the aforementioned packages, you need to create an instance of the __XlsmFormatProvider__ in order to import and export Xlsm (Excel Workbook) files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsm namespace. __XlsmFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. >note For more examples and application scenarios of Importing and Exporting a Workbook to various formats using a FormatProvider check out the [Import/Load and Export/Save RadSpreadProcessing Workbook]({%slug import-export-save-load-workbook%}) knowledge base article. diff --git a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsx/xlsxformatprovider.md b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsx/xlsxformatprovider.md index f542eb8f..9e9ca657 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsx/xlsxformatprovider.md +++ b/libraries/radspreadprocessing/formats-and-conversion/import-and-export-to-excel-file-formats/xlsx/xlsxformatprovider.md @@ -15,12 +15,12 @@ position: 2 __XlsxFormatProvider__ makes it easy to import and export XLSX (Excel Workbook) files. An XLSX file is a group of zipped files that conform to the Office Open XML schema. That said, the format allows you export all parts of a workbook: worksheets, formula values, formatting, hyperlinks, etc. ->Unlike the CSV and TXT format providers, the __XlsxFormatProvider__ requires references to the following assemblies: ->* Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.dll +>Unlike the CSV and TXT format providers, the __XlsxFormatProvider__ requires references to the following package: +>* Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. -Once you reference the aforementioned assemblies, you need to create an instance of the __XlsxFormatProvider__ in order to import and export XLSX (Excel Workbook) files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx namespace. __XlsxFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. +Once you reference the aforementioned packages, you need to create an instance of the __XlsxFormatProvider__ in order to import and export XLSX (Excel Workbook) files. This provider appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx namespace. __XlsxFormatProvider__ implements the __IWorkbookFormatProvider__ interface, which in turn appears in the Telerik.Windows.Documents.Spreadsheet.FormatProviders. Depending on the whether you would like to work with the concrete class or the interface, you would need to include either the first or both namespaces. >note For more examples and application scenarios of Importing and Exporting a Workbook to various formats using a FormatProvider check out the [Import/Load and Export/Save RadSpreadProcessing Workbook]({%slug import-export-save-load-workbook%}) knowledge base article. diff --git a/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md b/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md index e0465519..9b367395 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md +++ b/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md @@ -38,7 +38,7 @@ public class WorkbookFormatProvidersManager The __WorkbookFormatProvidersManager__ class contains two methods that allow you to register and unregister format providers respectively. The manager has the `csv` and `txt` format providers registered by default. The snippet in __Example 1__ illustrates how to register the [XlsxFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xlsx-xlsxformatprovider %}). -> Some Format Providers require additional assembly references. Check the full list of the FormatProviders' additional reference requirements in [Format Providers - Additional assembly references]({%slug radspreadprocessing-formats-and-conversion-general-information%}#additional-assembly-references). +> Some Format Providers require additional package references. Check the full list of the FormatProviders' additional reference requirements in [Format Providers - Additional package references]({%slug radspreadprocessing-formats-and-conversion-general-information%}#additional-package-references). #### __[C#] Example 1: Register provider__ diff --git a/libraries/radspreadprocessing/formats-and-conversion/pdf/pdfformatprovider.md b/libraries/radspreadprocessing/formats-and-conversion/pdf/pdfformatprovider.md index ac7eb471..1de8c3f3 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/pdf/pdfformatprovider.md +++ b/libraries/radspreadprocessing/formats-and-conversion/pdf/pdfformatprovider.md @@ -23,13 +23,13 @@ __PdfFormatProvider__ makes it easy to export a Workbook to a PDF format. Each W ## Prerequisites -In order to use __PdfFormatProvider__ you need to add references to the assemblies listed below: +In order to use __PdfFormatProvider__ you need to add references to the packages listed below: -* Telerik.Windows.Documents.Spreadsheet.dll +* Telerik.Windows.Documents.Spreadsheet -* Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.dll +* Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf ## Export diff --git a/libraries/radspreadprocessing/getting-started.md b/libraries/radspreadprocessing/getting-started.md index 120fe2c3..45f6e4f0 100644 --- a/libraries/radspreadprocessing/getting-started.md +++ b/libraries/radspreadprocessing/getting-started.md @@ -13,7 +13,7 @@ position: 1 This article will get you started in using the __RadSpreadProcessing__ library. It contains the following sections: -* [Assembly References](#assembly-references) +* [Package References](#package-references) * [Creating a Workbook](#creating-a-workbook) @@ -23,11 +23,11 @@ This article will get you started in using the __RadSpreadProcessing__ library. >noteIf you still don't have **Telerik Document Processing** installed, check the **[First Steps]({%slug getting-started-first-steps%})** topic to learn how you can obtain the packages through the different suites. -## Assembly References +## Package References ->The libraries support {{site.dotnetversions}}. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Documents.Core.dll**). For more information check [**Cross-Platform Support**]({%slug radspreadprocessing-cross-platform%}) article. +>The libraries support {{site.dotnetversions}}. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Documents.Core**). For more information check [**Cross-Platform Support**]({%slug radspreadprocessing-cross-platform%}) article. -In order to use the model of the __RadSpreadProcessing__ library in your project, you need to add references to the following assemblies: +In order to use the model of the __RadSpreadProcessing__ library in your project, you need to add references to the following packages: @@ -39,40 +39,40 @@ In order to use the model of the __RadSpreadProcessing__ library in your project - - + + - - + + - - + + - - + + - - + + - - + + @@ -100,7 +100,7 @@ In order to use the model of the __RadSpreadProcessing__ library in your project
Telerik.Windows.Documents.Core.dllTelerik.Documents.Core.dllTelerik.Windows.Documents.CoreTelerik.Documents.Core
Telerik.Windows.Documents.Spreadsheet.dllTelerik.Documents.Spreadsheet.dllTelerik.Windows.Documents.SpreadsheetTelerik.Documents.Spreadsheet
Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.dllTelerik.Documents.Spreadsheet.FormatProviders.OpenXml.dllTelerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXmlTelerik.Documents.Spreadsheet.FormatProviders.OpenXml Required when importing/exporting from/to XLSX or CSV.
Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls.dllTelerik.Documents.Spreadsheet.FormatProviders.Xls.dllTelerik.Windows.Documents.Spreadsheet.FormatProviders.XlsTelerik.Documents.Spreadsheet.FormatProviders.Xls Required when importing/exporting from/to XLS.
Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.dllTelerik.Documents.Spreadsheet.FormatProviders.Pdf.dllTelerik.Windows.Documents.Spreadsheet.FormatProviders.PdfTelerik.Documents.Spreadsheet.FormatProviders.Pdf Required when exporting to PDF.
Telerik.Windows.Documents.Fixed.dllTelerik.Documents.Fixed.dllTelerik.Windows.Documents.FixedTelerik.Documents.Fixed Required when exporting to PDF.
- - Telerik.Documents.ImageUtils.dll -
This assembly is not available in UI for Xamarin. + Telerik.Documents.ImageUtils +
This package is not available in UI for Xamarin.
*
->note Needed when exporting to PDF format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High. The **Telerik.Documents.ImageUtils.dll** assembly depends on **SkiaSharp**. In order to use this assembly, you will need to add а reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. +>note Needed when exporting to PDF format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High. The **Telerik.Documents.ImageUtils** package depends on **SkiaSharp**. In order to use this package, you will need to add а reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. ## Creating a Workbook diff --git a/libraries/radspreadstreamprocessing/features/text-measuring.md b/libraries/radspreadstreamprocessing/features/text-measuring.md index f3fae634..e4dfb453 100644 --- a/libraries/radspreadstreamprocessing/features/text-measuring.md +++ b/libraries/radspreadstreamprocessing/features/text-measuring.md @@ -21,7 +21,7 @@ SpreadStreamProcessing is designed to directly write the content inside the stre CellContentSizeHelper is a static class and exposes two overloads of the GetCellContentSize method. These overloads allow you to pass the formatting applied to the cell as a SpreadCellFormat or as separate values. ->To use this class, you must add a reference to the **Telerik.Windows.Documents.Spreadsheet.dll** for .NET Framework projects or **Telerik.Documents.Spreadsheet.dll** for .NET Standard projects. +>To use this class, you must add a reference to **Telerik.Windows.Documents.Spreadsheet** for .NET Framework projects or **Telerik.Documents.Spreadsheet** for .NET Standard projects. >tipTo achieve accurate results in .NET Standard, it is suggested to use [SpreadFixedTextMeasurer]({%slug radspreadprocessing-cross-platform-text-measure%}#spreadfixedtextmeasurer). diff --git a/libraries/radspreadstreamprocessing/getting-started.md b/libraries/radspreadstreamprocessing/getting-started.md index b01dc507..75aa053d 100644 --- a/libraries/radspreadstreamprocessing/getting-started.md +++ b/libraries/radspreadstreamprocessing/getting-started.md @@ -11,7 +11,7 @@ position: 1 This article will get you started in using the **RadSpreadStreamProcessing** library. It contains the following sections: -* [Assembly References](#assembly-references) +* [Package References](#package-references) * [Supported Formats](#supported-formats) @@ -19,9 +19,9 @@ This article will get you started in using the **RadSpreadStreamProcessing** lib >noteIf you still don't have **Telerik Document Processing** installed, check the **[First Steps]({%slug getting-started-first-steps%})** topic to learn how you can obtain the packages through the different suites. -## Assembly References +## Package References ->The libraries support {{site.dotnetversions}}. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Zip.dll**). +>The libraries support {{site.dotnetversions}}. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Zip.**). In order to use **RadSpreadStreamProcessing** in your project, you will need to add the references listed below. @@ -34,8 +34,8 @@ In order to use **RadSpreadStreamProcessing** in your project, you will need to - Telerik.Documents.SpreadsheetStreaming.dll - Telerik.Documents.SpreadsheetStreaming.dll + Telerik.Documents.SpreadsheetStreaming + Telerik.Documents.SpreadsheetStreaming   diff --git a/libraries/radwordsprocessing/concepts/fields/fields.md b/libraries/radwordsprocessing/concepts/fields/fields.md index 8d8272d2..014ba065 100644 --- a/libraries/radwordsprocessing/concepts/fields/fields.md +++ b/libraries/radwordsprocessing/concepts/fields/fields.md @@ -160,7 +160,7 @@ All fields in the document can be updated using __UpdateFields()__ of __RadFlowD ### Updating PageRef, Page, NumPages, and SectionPages fields. -In R3 2022 the above fields were introduced. Their evaluation requires calculating the size of the document elements. This is why to update them you need to provide an implementation of a [**NumberingFieldsProvider**]({%slug radpdfprocessing-formats-and-conversion-pdf-numbering-fields-provider%}) which can provide the needed layout logic. In the default implementation we are using the the layout logic from the [RadPdfPRocessing]({%slug radpdfprocessing-overview%}) library. To use it you need to add reference to the following assembly: +In R3 2022 the above fields were introduced. Their evaluation requires calculating the size of the document elements. This is why to update them you need to provide an implementation of a [**NumberingFieldsProvider**]({%slug radpdfprocessing-formats-and-conversion-pdf-numbering-fields-provider%}) which can provide the needed layout logic. In the default implementation we are using the the layout logic from the [RadPdfPRocessing]({%slug radpdfprocessing-overview%}) library. To use it you need to add reference to the following package: * **Telerik.Windows.Documents.Fixed** diff --git a/libraries/radwordsprocessing/concepts/fields/numbering-fields-provider.md b/libraries/radwordsprocessing/concepts/fields/numbering-fields-provider.md index 4053d92b..7ecfbaff 100644 --- a/libraries/radwordsprocessing/concepts/fields/numbering-fields-provider.md +++ b/libraries/radwordsprocessing/concepts/fields/numbering-fields-provider.md @@ -13,7 +13,7 @@ The __NumberingFieldsProvider__ is used for calculating the layout of the docume ### Requirements -To use the default implementation of the __NumberingFieldsProvider__ you need to reference the __**Telerik.Documents.Flow.FormatProviders.Pdf**__ assembly. +To use the default implementation of the __NumberingFieldsProvider__ you need to reference the __**Telerik.Documents.Flow.FormatProviders.Pdf**__ package. ### Setting the default implementation diff --git a/libraries/radwordsprocessing/cross-platform.md b/libraries/radwordsprocessing/cross-platform.md index b897a85a..63a43efb 100644 --- a/libraries/radwordsprocessing/cross-platform.md +++ b/libraries/radwordsprocessing/cross-platform.md @@ -10,13 +10,13 @@ position: 2 # Cross-Platform Support -**Telerik Document Processing** comes with **.NET Core** & **.NET Standard** support. There is a set of binaries built against the .NET Core & .NET Standard which you can reference in an application. +**Telerik Document Processing** comes with **.NET Core** & **.NET Standard** support. There is a set of packages built against the .NET Core & .NET Standard which you can reference in an application. ->note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can get the assemblies through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. +>note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can get the packages through the **UI for ASP.NET Core**, **UI for Blazor**, **UI for Xamarin**, and **UI for WinUI** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. -## Assembly References +## Package References -To use the model of the **RadWordsProcessing** library in your cross-platform project, you need to add references to the following **.Net Standard** assemblies: +To use the model of the **RadWordsProcessing** library in your cross-platform project, you need to add references to the following **.Net Standard** packages: @@ -27,38 +27,38 @@ To use the model of the **RadWordsProcessing** library in your cross-platform pr - + - + - + - + - +
Telerik.Documents.Core.dllTelerik.Documents.Core
Telerik.Documents.Flow.dllTelerik.Documents.Flow
Telerik.Documents.Flow.FormatProviders.Doc.dllTelerik.Documents.Flow.FormatProviders.Doc Required when importing from DOC or DOT files.
Telerik.Documents.Flow.FormatProviders.Pdf.dllTelerik.Documents.Flow.FormatProviders.Pdf Required when exporting to PDF.
Telerik.Documents.Fixed.dllTelerik.Documents.Fixed Required when exporting to PDF.
- Telerik.Documents.ImageUtils.dll -
This assembly is not available in UI for Xamarin. + Telerik.Documents.ImageUtils +
This pckage is not available in UI for Xamarin.
Required when exporting to PDF format a document containing images different than Jpeg and Jpeg2000 or ImageQuality different than High.
->note The **Telerik.Documents.ImageUtils.dll** assembly depends on **SkiaSharp**. To use this assembly, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. +>note The **Telerik.Documents.ImageUtils** package depends on **SkiaSharp**. To use this package, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. -> Note that for .NET Framework & .NET Core with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core.dll**) +> Note that for .NET Framework & .NET Core with Windows Compatibility Pack projects, the references contain "Windows" in their names (e.g. **Telerik.Windows.Documents.Core**) ## Limitations in .Net Standard diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md index f40fc929..bc13395f 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md @@ -29,7 +29,7 @@ This article explains the requirements for using the GenAI-powered Document Insi ## Required References -In addition to the [standard RadWordsProcessing references]({%slug radwordsprocessing-getting-started%}#assembly-references), you will need to add the following references to use the GenAI-powered Document Insights features: +In addition to the [standard RadWordsProcessing references]({%slug radwordsprocessing-getting-started%}#package-references), you will need to add the following references to use the GenAI-powered Document Insights features: |.NET Framework|.NET Standard-compatible| |---|---| diff --git a/libraries/radwordsprocessing/formats-and-conversion/html/htmlformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/html/htmlformatprovider.md index 8e46f198..e228416b 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/html/htmlformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/html/htmlformatprovider.md @@ -11,11 +11,11 @@ position: 3 -__HtmlFormatProvider__ makes it easy to import and export __RadFlowDocument__ to/from HTML format, preserving as much as possible of the document structure and formatting. To use __HtmlFormatProvider__, you should add references to the assemblies listed below: +__HtmlFormatProvider__ makes it easy to import and export __RadFlowDocument__ to/from HTML format, preserving as much as possible of the document structure and formatting. To use __HtmlFormatProvider__, you should add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow ## Import diff --git a/libraries/radwordsprocessing/formats-and-conversion/pdf/pdfformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/pdf/pdfformatprovider.md index b04d8d79..67b00b05 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/pdf/pdfformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/pdf/pdfformatprovider.md @@ -11,14 +11,14 @@ position: 2 RadWordsProcessing provides a __PdfFormatProvider__ class that allows you to export a __RadFlowDocument__ to PDF. -All you have to do in order to use __PdfFormatProvider__ is add references to the assemblies listed below: +All you have to do in order to use __PdfFormatProvider__ is add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll -* ~~Telerik.Windows.Zip.dll~~* -* Telerik.Windows.Documents.Flow.FormatProviders.Pdf.dll -* Telerik.Windows.Documents.Fixed.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow +* ~~Telerik.Windows.Zip~~* +* Telerik.Windows.Documents.Flow.FormatProviders.Pdf +* Telerik.Windows.Documents.Fixed >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. diff --git a/libraries/radwordsprocessing/formats-and-conversion/plain-text/txt-txtformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/plain-text/txt-txtformatprovider.md index 51a45a35..4180f5b6 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/plain-text/txt-txtformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/plain-text/txt-txtformatprovider.md @@ -14,11 +14,11 @@ position: 1 __TxtFormatProvider__ makes it easy to import and export __RadFlowDocument__ to/from plain text format, preserving the document structure. -All you have to do in order to use __TxtFormatProvider__ is add references to the assemblies listed below: +All you have to do in order to use __TxtFormatProvider__ is add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow ## Import diff --git a/libraries/radwordsprocessing/formats-and-conversion/rtf/rtfformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/rtf/rtfformatprovider.md index 8a4b41c2..d6bc8af4 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/rtf/rtfformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/rtf/rtfformatprovider.md @@ -14,11 +14,11 @@ position: 2 __RtfFormatProvider__ makes it easy to import and export __RadFlowDocument__ to/from RTF format, preserving the entire document structure and formatting. -All you have to do in order to use __RtfFormatProvider__ is add references to the assemblies listed below: +All you have to do in order to use __RtfFormatProvider__ is add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow ## Import diff --git a/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/doc/docformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/doc/docformatprovider.md index 0ab6be76..be92e774 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/doc/docformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/doc/docformatprovider.md @@ -21,12 +21,12 @@ DOT is the Binary file format developed by Microsoft for representing templates **DocFormatProvider** makes it easy to import a DOC or DOT file into a **RadFlowDocument**, preserving the entire document structure and formatting. -To use **DocFormatProvider**, you should add references to the assemblies listed below: +To use **DocFormatProvider**, you should add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll -* Telerik.Windows.Documents.Flow.FormatProviders.Doc.dll -* Telerik.Windows.Zip.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow +* Telerik.Windows.Documents.Flow.FormatProviders.Doc +* Telerik.Windows.Zip ## Import diff --git a/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/docx/docxformatprovider.md b/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/docx/docxformatprovider.md index 9bcdc7e7..3fe68495 100644 --- a/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/docx/docxformatprovider.md +++ b/libraries/radwordsprocessing/formats-and-conversion/word-file-formats/docx/docxformatprovider.md @@ -19,10 +19,10 @@ DOCX, a part of [Office Open XML](http://en.wikipedia.org/wiki/Office_Open_XML), __DocxFormatProvider__ makes it easy to import and export __RadFlowDocument__ to/from DOCX format, preserving the entire document structure and formatting. -All you have to do in order to use __DocxFormatProvider__ is add references to the assemblies listed below: +All you have to do in order to use __DocxFormatProvider__ is add references to the packages listed below: -* Telerik.Windows.Documents.Core.dll -* Telerik.Windows.Documents.Flow.dll +* Telerik.Windows.Documents.Core +* Telerik.Windows.Documents.Flow >note As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. diff --git a/libraries/radwordsprocessing/getting-started.md b/libraries/radwordsprocessing/getting-started.md index aaea79d8..df725c1f 100644 --- a/libraries/radwordsprocessing/getting-started.md +++ b/libraries/radwordsprocessing/getting-started.md @@ -11,7 +11,7 @@ position: 1 This tutorial will take you through the creation of a sample application that uses RadWordsProcessing. -* [Assembly References](#assembly-references) +* [Package References](#package-references) * [Creating RadFlowDocument from Code](#creating-radflowdocument-from-code) @@ -19,11 +19,11 @@ This tutorial will take you through the creation of a sample application that us >noteIf you still don't have **Telerik Document Processing** installed, check the **[First Steps]({%slug getting-started-first-steps%})** topic to learn how you can obtain the packages through the different suites. -## Assembly References +## Package References ->The libraries support {{site.dotnetversions}}. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Documents.Core.dll**). For more information check [**Cross-Platform Support**]({%slug radwordsprocessing-cross-platform%}) article. +>The libraries support {{site.dotnetversions}}. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Documents.Core**). For more information check [**Cross-Platform Support**]({%slug radwordsprocessing-cross-platform%}) article. -Here is a list of assemblies that contain the __RadWordsProcessing__ functionality and need to be referenced in your project: +Here is a list of packages that contain the __RadWordsProcessing__ functionality and need to be referenced in your project: @@ -34,45 +34,45 @@ Here is a list of assemblies that contain the __RadWordsProcessing__ functionali - - + + - - + + - - + + - + - - + + - + - - + + - - + + - @@ -97,10 +97,10 @@ Here is a list of assemblies that contain the __RadWordsProcessing__ functionali
Telerik.Windows.Documents.Core.dllTelerik.Documents.Core.dllTelerik.Windows.Documents.CoreTelerik.Documents.Core
Telerik.Windows.Documents.Flow.dllTelerik.Documents.Flow.dllTelerik.Windows.Documents.FlowTelerik.Documents.Flow
Telerik.Windows.Documents.DrawingML.dllTelerik.Documents.DrawingML.dllTelerik.Windows.Documents.DrawingMLTelerik.Documents.DrawingML
 
If you need to import DOC or DOT files, you will need to refer the following assembly:If you need to import DOC or DOT files, you will need to refer the following packages:
Telerik.Windows.Documents.Flow.FormatProviders.Doc.dllTelerik.Documents.Flow.FormatProviders.Doc.dllTelerik.Windows.Documents.Flow.FormatProviders.DocTelerik.Documents.Flow.FormatProviders.Doc
 
If you need to export documents to PDF format, you will need to refer the following assemblies:If you need to export documents to PDF format, you will need to refer the following packages:
Telerik.Windows.Documents.Flow.FormatProviders.Pdf.dllTelerik.Documents.Flow.FormatProviders.Pdf.dllTelerik.Windows.Documents.Flow.FormatProviders.PdfTelerik.Documents.Flow.FormatProviders.Pdf
Telerik.Windows.Documents.Fixed.dllTelerik.Documents.Fixed.dllTelerik.Windows.Documents.FixedTelerik.Documents.Fixed
-Telerik.Documents.ImageUtils.dll* -
This assembly is not available in UI for Xamarin. +
Telerik.Documents.ImageUtils* +
This package is not available in UI for Xamarin.
- \* _The Telerik.Documents.ImageUtils.dll assembly is needed when exporting to PDF format a document containing images different than **Jpeg** and **Jpeg2000** or **ImageQuality** different than High._ + \* _The Telerik.Documents.ImageUtils package is needed when exporting to PDF format a document containing images different than **Jpeg** and **Jpeg2000** or **ImageQuality** different than High._ ->note The **Telerik.Documents.ImageUtils.dll** assembly depends on **SkiaSharp**. In order to use this assembly, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. +>note The **Telerik.Documents.ImageUtils** package depends on **SkiaSharp**. In order to use this package, you will need to add a reference to [SkiaSharp](https://www.nuget.org/packages/SkiaSharp/). With the [R2 2023 changes](https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/changes-and-backward-compatibility/backward-compatibility#whats-different-in-2023-r2) SkiaSharp replaced ImageSharp as the required dependency. ## Creating RadFlowDocument from Code diff --git a/libraries/radwordsprocessing/model/imageinline.md b/libraries/radwordsprocessing/model/imageinline.md index 7cebb8ab..e6d47b62 100644 --- a/libraries/radwordsprocessing/model/imageinline.md +++ b/libraries/radwordsprocessing/model/imageinline.md @@ -114,7 +114,7 @@ The __ImageInline__ element exposes the following properties: This section explains the behavior of the __Size__ property of The __Image__ object in an __ImageInline__ and how the image sizes are exported to the supported formats. ->important When using the **.NET Standard** version of the RadWordsProcessing binaries, in order to **export to PDF** format documents containing images different than Jpeg and Jpeg2000 or ImageQuality different than High, the **JpegImageConverter** property inside the **FixedExtensibilityManager** has to be set. For more information check the FixedExtensibilityManager in the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) +>important When using the **.NET Standard** version of the RadWordsProcessing packages, in order to **export to PDF** format documents containing images different than Jpeg and Jpeg2000 or ImageQuality different than High, the **JpegImageConverter** property inside the **FixedExtensibilityManager** has to be set. For more information check the FixedExtensibilityManager in the [PdfProcessing`s Cross-Platform Support]({%slug radpdfprocessing-cross-platform%}) * __Insert image without specifying its size__ * Model: Size will be Size.Empty. diff --git a/libraries/radwordsprocessing/model/shapes/shapes.md b/libraries/radwordsprocessing/model/shapes/shapes.md index 529783b2..0d8805c5 100644 --- a/libraries/radwordsprocessing/model/shapes/shapes.md +++ b/libraries/radwordsprocessing/model/shapes/shapes.md @@ -11,11 +11,11 @@ position: 12 **Shapes** enable users to wrap text in a container and visualize it in a specific manner. There are different types of shapes determined by their visual appearance (shape, style, size, etc.). Their variation makes them very useful for drawing attention to specific text. They could also be helpful to manipulate the text appearance (e.g. inline with text or with text wrapping) according to the rest of the document content. ->important To use shapes in your application, you should add a reference to Telerik.Windows.Documents.DrawingML.dll for .NET Framework projects, or Telerik.Documents.DrawingML.dll for projects based on .NET Core. +>important To use shapes in your application, you should add a reference to Telerik.Windows.Documents.DrawingML for .NET Framework projects, or Telerik.Documents.DrawingML for projects based on .NET Core. ## Backward Compatibility -If you would like to, you can skip the import and export of shapes and avoid the need to refer the Telerik.[Windows].Documents.DrawingML assembly. To do so, you should set the SkipShapes property of DocxImportSettings and DocxExportSettings. +If you would like to, you can skip the import and export of shapes and avoid the need to refer the Telerik.[Windows].Documents.DrawingML package. To do so, you should set the SkipShapes property of DocxImportSettings and DocxExportSettings. ## Limitations diff --git a/libraries/radziplibrary/features/zip-extensions.md b/libraries/radziplibrary/features/zip-extensions.md index 8cecff01..c34792d5 100644 --- a/libraries/radziplibrary/features/zip-extensions.md +++ b/libraries/radziplibrary/features/zip-extensions.md @@ -10,13 +10,12 @@ platforms: ajax, mvc, wpf, winforms # Zip Extensions -In addition to the main __ZipLibrary__ control, you could take advantage of a set of helper methods, divided in two classes, which will help you to implement your scenarios faster. All these methods are in the __Telerik.Windows.Zip.Extensions.dll__. +In addition to the main __ZipLibrary__ control, you could take advantage of a set of helper methods, divided in two classes, which will help you to implement your scenarios faster. All these methods are in the __Telerik.Windows.Zip.Extensions__ NuGet package. ->In [**UI for WinForms**](https://docs.telerik.com/devtools/winforms/introduction), the classes are merged in **Telerik.WinControls.dll**, so you will need to refer that assembly instead of Telerik.Windows.Zip.Extensions.dll. +>In [**UI for WinForms**](https://docs.telerik.com/devtools/winforms/introduction), the classes are merged in **Telerik.WinControls**, so you will need to refer that package instead of Telerik.Windows.Zip.Extensions. In this article you will find the classes and their members. - ## The ZipFile class With the __ZipFile__ class, you can utilize static methods to create, extract, or open zip archives with minimal code. Starting with the **Q2 2025** release, some methods now include an additional optional parameter `(TimeSpan? timeout)`. The older overloads of these specific methods, which do not include this parameter, are now obsolete. diff --git a/libraries/radziplibrary/gettingstarted.md b/libraries/radziplibrary/gettingstarted.md index cdd20117..e161f23f 100644 --- a/libraries/radziplibrary/gettingstarted.md +++ b/libraries/radziplibrary/gettingstarted.md @@ -25,7 +25,7 @@ The ZIP archive is represented by __ZipArchive__ class. It can be used in 3 mode ## Assembly References ->The libraries support {{site.dotnetversions}}. .NET Standard-compatible binaries are available as well. The assemblies for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Zip.dll**). +>The libraries support {{site.dotnetversions}}. .NET Standard-compatible packages are available as well. The packages for .NET Standard don't include 'Windows' in their names. (e.g. **Telerik.Zip**). @@ -35,13 +35,13 @@ The ZIP archive is represented by __ZipArchive__ class. It can be used in 3 mode - - + +
Telerik.Windows.Zip.dllTelerik.Zip.dllTelerik.Windows.ZipTelerik.Zip
->note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can obtain the assemblies through the **UI for ASP.NET Core**, **UI for Blazor** and **UI for Xamarin** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. +>note The binaries compatible with .NET Standard are distributed with the packages targeting .NET Standard and .NET Core. You can obtain the packages through the **UI for ASP.NET Core**, **UI for Blazor** and **UI for Xamarin** suites. There are **NuGet** packages as well that you can access if you have a license for one of the above mentioned suites. ## Open Zip Archive diff --git a/security/overview.md b/security/overview.md index e715b3a7..2649c540 100644 --- a/security/overview.md +++ b/security/overview.md @@ -68,6 +68,6 @@ We closely monitor the [OWASP Top 10](https://owasp.org/www-project-top-ten/) li ## Redistributing Telerik Document Processing -Telerik [Document Processing]({%slug introduction%}) is part of several Telerik bundles and is licensed under the conditions with which you've obtained the product. In the article you can find technical guidelines for protecting the Telerik Document Processing binaries when redistributing them with your integrated product. +Telerik [Document Processing]({%slug introduction%}) is part of several Telerik bundles and is licensed under the conditions with which you've obtained the product. In the [Redistributing Telerik Document Processing]({%slug installation-deploying-telerik-document-processing%}) article you can find technical guidelines for protecting the Telerik Document Processing binaries when redistributing them with your integrated product. For more detailed answers to common security-related questions, please refer to our [Security FAQ page]({%slug security-faq%}). \ No newline at end of file diff --git a/troubleshooting/pdfprocessing.md b/troubleshooting/pdfprocessing.md index 3eb0c3ee..2673b40a 100644 --- a/troubleshooting/pdfprocessing.md +++ b/troubleshooting/pdfprocessing.md @@ -20,7 +20,7 @@ The **.NET Standard** version of the [RadPdfProcessing]({%slug radpdfprocessing- ### Solution -In order to successfully export images different than **Jpeg** and **Jpeg2000** and **ImageQuality** different than **High** you will need to reference the **Telerik.Documents.ImageUtils** assembly/NuGet package in your project. The library also exposes the **FixedExtensibilityManager** class with two specific extensibility points: [ImagePropertiesResolver]({%slug radpdfprocessing-cross-platform-images%}#imagepropertiesresolver) and [JpegImageConverter]({%slug radpdfprocessing-cross-platform-images%}#jpegimageconverter). You would have to set the [ImagePropertiesResolver]({%slug radpdfprocessing-cross-platform-images%}#imagepropertiesresolver)/[JpegImageConverter]({%slug radpdfprocessing-cross-platform-images%}#jpegimageconverter) property or create a custom one inheriting the **ImagePropertiesResolverBase**/**JpegImageConverterBase** class. +In order to successfully export images different than **Jpeg** and **Jpeg2000** and **ImageQuality** different than **High** you will need to reference the **Telerik.Documents.ImageUtils** NuGet package in your project. The library also exposes the **FixedExtensibilityManager** class with two specific extensibility points: [ImagePropertiesResolver]({%slug radpdfprocessing-cross-platform-images%}#imagepropertiesresolver) and [JpegImageConverter]({%slug radpdfprocessing-cross-platform-images%}#jpegimageconverter). You would have to set the [ImagePropertiesResolver]({%slug radpdfprocessing-cross-platform-images%}#imagepropertiesresolver)/[JpegImageConverter]({%slug radpdfprocessing-cross-platform-images%}#jpegimageconverter) property or create a custom one inheriting the **ImagePropertiesResolverBase**/**JpegImageConverterBase** class. #### **[C#] Example 1: Set the default implementation of the ImagePropertiesResolver class** {{region cs-troubleshooting_pdfprocessing_0}} diff --git a/upgrade/upgrade-instructions.md b/upgrade/upgrade-instructions.md index 4b889242..aa1e95c8 100644 --- a/upgrade/upgrade-instructions.md +++ b/upgrade/upgrade-instructions.md @@ -44,7 +44,7 @@ Telerik Document Processing is part of several Telerik bundles and could be upgr [Upgrading Telerik UI for Silverlight](http://docs.telerik.com/devtools/silverlight/installation-and-deployment/upgrading-instructions/installation-upgrading-from-trial-to-developer-license.html) ->Due to the specifics of Telerik Document Processing, a project that uses only assemblies of this product cannot be upgraded using the Upgrade Wizard of Visual Studio Extensions. You can manually replace the assemblies with the new ones or change the project's references to point to the location of the new version. +>Due to the specifics of Telerik Document Processing, a project that uses only packages of this product cannot be upgraded using the Upgrade Wizard of Visual Studio Extensions. You can manually replace the packages with the new ones or change the project's references to point to the location of the new version. ## UI for Xamarin From 234903ceb493d125001dd8bd18f0c7c5aca80c3f Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Fri, 24 Oct 2025 18:09:39 +0300 Subject: [PATCH 15/36] Update Skia version and HarfBuzz --- _config.yml | 3 ++- .../cross-platform-support/text-measure.md | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index a508439b..f6f85caf 100644 --- a/_config.yml +++ b/_config.yml @@ -387,7 +387,8 @@ defaults: mindotnetversion: "8" maxdotnetversion: "9" dotnetversions: ".NET 8 and .NET 9" -skiasharpversion: "3.116.1" +skiasharpversion: "3.119.1" +harfbuzzsharp: "8.3.1.2" # Feedback Form Product Code productCode: TDP diff --git a/libraries/radspreadprocessing/cross-platform-support/text-measure.md b/libraries/radspreadprocessing/cross-platform-support/text-measure.md index a640bd72..495ef8b2 100644 --- a/libraries/radspreadprocessing/cross-platform-support/text-measure.md +++ b/libraries/radspreadprocessing/cross-platform-support/text-measure.md @@ -66,9 +66,11 @@ To use the **SkiaTextMeasurer** class, you can reference it in one of the follow If you prefer to reference assemblies directly, you need: -- **Telerik.Documents.TextMeasurer.Skia.dll** - Main assembly containing the SkiaTextMeasurer class -- **Telerik.Text.Skia.dll** - Required dependency of Telerik.Documents.TextMeasurer.Skia. -- **SkiaSharp.HarfBuzz.dll** (and all of its dependencies) - Required dependency of Telerik.Text.Skia.dll, along with all its dependencies +|Assembly|Description| +|----|----| +|**Telerik.Documents.TextMeasurer.Skia.dll**|Main assembly containing the SkiaTextMeasurer class| +|**Telerik.Text.Skia.dll**|Required dependency of Telerik.Documents.TextMeasurer.Skia.| +|**SkiaSharp.HarfBuzz.dll** (version {{site.harfbuzzsharp}}) (and all of its dependencies)|Required dependency of Telerik.Text.Skia.dll, along with all its dependencies| #### [C#] Example 2: Set the SkiaTextMeasurer as a text measurer From 1e10e916ba4cda712b73610089e58ce04302fb68 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Sat, 25 Oct 2025 23:45:41 +0300 Subject: [PATCH 16/36] Documented JsonFormatProvider. --- _config.yml | 9 +++ .../general-information.md | 11 ++- .../import-export-format-providers-manager.md | 2 +- ...processing-formats-and-conversion-json.png | Bin 0 -> 112530 bytes .../formats-and-conversion/json/json.md | 17 +++++ .../json/jsonexportsettings.md | 64 ++++++++++++++++++ .../json/jsonformatprovider.md | 30 ++++++++ libraries/radspreadprocessing/overview.md | 2 +- 8 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 libraries/radspreadprocessing/formats-and-conversion/json/images/spreadprocessing-formats-and-conversion-json.png create mode 100644 libraries/radspreadprocessing/formats-and-conversion/json/json.md create mode 100644 libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md create mode 100644 libraries/radspreadprocessing/formats-and-conversion/json/jsonformatprovider.md diff --git a/_config.yml b/_config.yml index a508439b..622332bd 100644 --- a/_config.yml +++ b/_config.yml @@ -187,6 +187,15 @@ navigation: libraries/radspreadprocessing/formats-and-conversion/data-table: title: DataTable position: 6 + libraries/radspreadprocessing/formats-and-conversion/json: + title: Json + position: 7 + libraries/radspreadprocessing/formats-and-conversion/json/jsonformatprovider: + title: JsonFormatProvider + position: 1 + libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings: + title: JsonExportSettings + position: 2 libraries/radspreadprocessing/features/charts: title: Charts diff --git a/libraries/radspreadprocessing/formats-and-conversion/general-information.md b/libraries/radspreadprocessing/formats-and-conversion/general-information.md index db335b44..d3fa9d9b 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/general-information.md +++ b/libraries/radspreadprocessing/formats-and-conversion/general-information.md @@ -16,9 +16,10 @@ __RadSpreadProcessing__'s document model allows you to easily open and save file * __Xlsx__: Rich text format, which exports the whole content of a workbook: worksheets, formula values, formatting, hyperlinks etc. * __Xls__: Rich text format, which exports the content of a workbook: worksheets, formula values, formatting, hyperlinks etc. Supported in older applications. This format is not supported in Silverlight. * __Xlsm__: Rich text format, which exports all that is included in the Xlsx format with the addition of macro instructions. -* __Pdf__: Fixed format, which preserves the content of a workbook in independent from software or hardware manner. +* __Pdf__(*export only*): Fixed format, which preserves the content of a workbook in independent from software or hardware manner. * __Csv__(comma separated): Plain text format that saves the content of the cell in the active worksheet. The format strips all formatting and keeps only the result values of cells. These values are separated by a culture dependent delimiter. * __Txt__(tab delimited): Plain text format, which preserves only the content of the cells in the active worksheet. The format does not save any formatting and keeps only the result values of the cells. These values are delimited via tabs. +* __Json__(*export only*): Structured text format that serializes worksheet data and metadata (values, number formats, named ranges, charts, active sheet info, etc.) to JSON. Styling is not preserved fully as in XLSX; * **DataTable**: This allows you to convert the DataTable that is coming form your database to a spreadsheet and vice versa. >note In **Q4 2024** Telerik Document Processing Libraries introduced a new timeout mechanism for importing and exporting documents. The **Import** and **Export** methods of all FormatProviders have a mandatory *TimeSpan?* timeout parameter after which the operation will be cancelled. @@ -30,10 +31,11 @@ The document model exposes separate format providers that work with each of the - [XlsxFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xlsx-xlsxformatprovider %}) for `.xlsx` files - [XlsFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xls-xlsformatprovider %}) for `.xls` files - [XlsmFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xlsm-xlsmformatprovider %}) for `.xlsm` files -- [PdfFormatProvider]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider %}) for `.pdf` files +- [PdfFormatProvider]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider %}) for `.pdf` files (export only) - [CsvFormatProvider]({%slug radspreadprocessing-formats-and-conversion-csv-csvformatprovider %}) for comma separated `.csv` files - [TxtFormatProvider]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider %}) for tab delimited `.txt` files - [DataTableFormatProvider]({%slug radspreadprocessing-formats-and-conversion-using-data-table-format-provider %}) for `DataTable` objects +- [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider %}) for `.json` files (export only) > Some FormatProviders require additional package references. Check them out in the [Additional Package References](#additional-package-references) section. @@ -117,11 +119,14 @@ Unlike the __CsvFormatProvider__, __TxtFormatProvider__ and __DataTableFormatPro >note *As of **Q2 2025** the Zip Library will no longer be used as an internal dependency in the rest of the Document Processing Libraries - PdfProcessing, WordsProcessing, SpreadProcessing, SpreadStreamProcessing. It will be replaced by the System.IO.Compression. We will continue to ship the Telerik Zip Library as a standalone library so clients can still use it separately. -- **PdfFormatProvider** +- **PdfFormatProvider** (export only) * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf - **XlsFormatProvider** * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Xls + +- **JsonFormatProvider** (export only) + * Telerik.Windows.Documents.Spreadsheet.FormatProviders.Json ## Format Providers Manager diff --git a/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md b/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md index 9b367395..c31c621e 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md +++ b/libraries/radspreadprocessing/formats-and-conversion/import-export-format-providers-manager.md @@ -186,7 +186,7 @@ You can achieve the same result through using the __SaveFile__ command. In fact, ## Retrieve Registered Providers and Supported Extensions -Currently RadSpreadProcessing supports the following extensions: `.xlsx`, `.xls`, `.csv`, `.txt` and `.pdf` (export only). The format providers available for them are respectively [XlsxFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xlsx-xlsxformatprovider%}), [XlsFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xls-xlsformatprovider%}), [CsvFormatProvider]({%slug radspreadprocessing-formats-and-conversion-csv-csvformatprovider%}), [TxtFormatProvider]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider%}) and [PdfFormatProvider]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}). +Currently RadSpreadProcessing supports the following extensions: `.xlsx`, `.xls`, `.csv`, `.txt`, `.json` (export only) and `.pdf` (export only). The format providers available for them are respectively [XlsxFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xlsx-xlsxformatprovider%}), [XlsFormatProvider]({%slug radspreadprocessing-formats-and-conversion-xls-xlsformatprovider%}), [CsvFormatProvider]({%slug radspreadprocessing-formats-and-conversion-csv-csvformatprovider%}), [TxtFormatProvider]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider%}), [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider%}) (export only) and [PdfFormatProvider]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}) (export only). The __WorkbookFormatProvidersManager__ class offers several approaches to retrieve the registered format providers. The class offers the `GetProviderByName()` static method that searches through the registered providers to find a provider with a specific name. Also, the manager exposes the __GetProvderByExtension__ extension. The class also contains a static method __GetSupportedExtensions()__ that returns an `IEnumeable` of the currently supported file extensions. diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/images/spreadprocessing-formats-and-conversion-json.png b/libraries/radspreadprocessing/formats-and-conversion/json/images/spreadprocessing-formats-and-conversion-json.png new file mode 100644 index 0000000000000000000000000000000000000000..926a41f4f52d23605589ed871f2fa1db4a553512 GIT binary patch literal 112530 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 literal 0 HcmV?d00001 diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/json.md b/libraries/radspreadprocessing/formats-and-conversion/json/json.md new file mode 100644 index 00000000..5c55b778 --- /dev/null +++ b/libraries/radspreadprocessing/formats-and-conversion/json/json.md @@ -0,0 +1,17 @@ +--- +title: Json +page_title: Json +slug: radspreadprocessing-formats-and-conversion-json-json +tags: json +published: True +position: 0 +--- + +# Json + +[JavaScript Object Notation](https://www.json.org/json-en.html) (JSON) is a lightweight, text-based data format used to store and exchange structured information. It represents data as key–value pairs (objects) and ordered lists (arrays). JSON is language-independent but closely resembles JavaScript syntax, making it easy for both humans to read and machines to parse. + +![SpreadProcessing Formats and Converstion JSON](images/spreadprocessing-formats-and-conversion-json.png) + + + diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md new file mode 100644 index 00000000..c7b99be9 --- /dev/null +++ b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md @@ -0,0 +1,64 @@ +--- +title: Settings +page_title: Using JsonExportSettings +slug: radspreadprocessing-formats-and-conversion-json-jsonexportsettings +tags: json, export, settings, spread, processing, excel, xlsx, xls +published: True +position: 2 +--- + + + +# JsonExportSettings + +The [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider%}) exposes an **ExportSettings** property of type **JsonExportSettings**. The settings control the behavior of the [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider%}) when exporting a [Workbook]({%slug radspreadprocessing-working-with-workbooks-what-is-workbook%}) to JSON. By adjusting the available properties you can tailor the size, richness and focus of the generated JSON payload. + +## Properties + +| Property | Type | Default | Description | +|----------|------|---------|-------------| +| **ExportWhat** | [ExportWhat]({%slug radspreadprocessing-formats-and-conversion-json-jsonexportsettings%}#enum-values) | EntireWorkbook | Portion of the workbook to export (entire workbook, active sheet, or selection). | +| **IncludeHiddenSheets** | bool | false | Include hidden worksheets when exporting the entire workbook. | +| **IncludeDefinedNames** | bool | true | Export defined names (named ranges / constants). | +| **IncludeNumberFormats** | bool | true | Emit number format codes for formatted cells. | +| **IncludeCharts** | bool | true | Serialize chart objects from exported sheets. | +| **ChartDataMode** | [ChartDataMode]({%slug radspreadprocessing-formats-and-conversion-json-jsonexportsettings%}#enum-values) | ReferencesOnly | Control chart data representation: only reference formulas, only resolved literal values, or both. | +| **PrettyPrint** | bool | false | Indent JSON output for readability. Disable to reduce size. | +| **ValueRenderMode** | [ValueRenderMode]({%slug radspreadprocessing-formats-and-conversion-json-jsonexportsettings%}#enum-values) | Display | Export raw underlying values, formatted display values, or both. | +| **IncludeBlankCells** | bool | false | Emit blank cells explicitly within the used range; otherwise they are skipped. | +| **IncludeWorkbookProtectionFlag** | bool | true | Include workbook protection state (Workbook.IsProtected). | +| **IncludeActiveSheet** | bool | true | Emit the name of the active worksheet in metadata. | +| **SelectedRanges** | List | empty | Ranges to export when ExportWhat is Selection. Empty collection falls back to active sheet. | +| **IncludeChartStats** | bool | true | Include min, max, average, sum, stdev and count aggregates for chart series. | +| **IncludeChartSummaries** | bool | true | Include natural language summary strings per chart. | +| **IncludeChartTrends** | bool | true | Include simple trend classification (increasing / decreasing / flat) for eligible series. | + +### Enum Values + +| Enum | Members | +|------|---------| +| **ExportWhat** | **ActiveSheet** – Exports only the currently active worksheet.
**EntireWorkbook** – Exports all worksheets in the workbook. (Default)
**Selection** – Exports only the currently selected cell ranges. | +| **ChartDataMode** | **ReferencesOnly** – Only formula / reference expressions are exported. (Default)
**ResolvedValues** – Only resolved literal value arrays are exported.
**Both** – Both references and resolved value arrays are exported. | +| **ValueRenderMode** | **Raw** – Underlying raw cell value is exported.
**Display** – Formatted display value is exported. (Default)
**Both** – Both raw and display representations are exported. | + +## Basic Usage + +The following example shows how you can create a **JsonExportSettings** instance with the desired settings while exporting a [Workbook]({%slug radspreadprocessing-working-with-workbooks-what-is-workbook%}) to JSON format: + + + +## See Also + +* [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider%}) +* [Timeout Mechanism]({%slug timeout-mechanism-in-dpl%}) diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/jsonformatprovider.md b/libraries/radspreadprocessing/formats-and-conversion/json/jsonformatprovider.md new file mode 100644 index 00000000..099fe0b4 --- /dev/null +++ b/libraries/radspreadprocessing/formats-and-conversion/json/jsonformatprovider.md @@ -0,0 +1,30 @@ +--- +title: Using JsonFormatProvider +page_title: Using JsonFormatProvider +slug: radspreadprocessing-formats-and-conversion-json-jsonformatprovider +tags: json, export, settings, spread, processing, excel, xlsx, xls, settings +published: True +position: 1 +--- + +# JsonFormatProvider + +The __JsonFormatProvider__ (introduced in **Q4 2025**) makes it easy to export [Workbook]({%slug radspreadprocessing-working-with-workbooks-what-is-workbook%}) data to a structured JSON representation. Unlike the other text-based providers (CSV / TXT), the JSON export can include richer metadata such as number formats, named ranges, chart data and workbook level flags. Currently the provider is **Export-only**. + +The provider also exposes an [ExportSettings]({%slug radspreadprocessing-formats-and-conversion-json-jsonexportsettings%}) property, that allows you to control the export behavior. + +## Prerequisites + +To use the __JsonFormatProvider__ class you need to reference the following NuGet package: +* Telerik.Windows.Documents.Spreadsheet.FormatProviders.Json + +## Export + +The following example demonstrates how to import an existing [Workbook]({%slug radspreadprocessing-working-with-workbooks-what-is-workbook%}) and export it to a JSON file using the default settings. + + + +## See Also + +* [JsonFormatProvider Settings]({%slug radspreadprocessing-formats-and-conversion-json-jsonexportsettings%}) +* [Timeout Mechanism]({%slug timeout-mechanism-in-dpl%}) diff --git a/libraries/radspreadprocessing/overview.md b/libraries/radspreadprocessing/overview.md index 688300ef..79fc14da 100644 --- a/libraries/radspreadprocessing/overview.md +++ b/libraries/radspreadprocessing/overview.md @@ -69,7 +69,7 @@ The following table describes the most popular features of the RadSpreadProcessi * Excel formats: [**XLSX**]({%slug radspreadprocessing-formats-and-conversion-xlsx-xlsxformatprovider%}), [**XLS**]({%slug radspreadprocessing-formats-and-conversion-xls-xlsformatprovider%}) -* Text formats: [**CSV**]({%slug radspreadprocessing-formats-and-conversion-csv-csvformatprovider%}), [**Plain text**]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider%}) +* Text formats: [**CSV**]({%slug radspreadprocessing-formats-and-conversion-csv-csvformatprovider%}), [**Plain text**]({%slug radspreadprocessing-formats-and-conversion-txt-txtformatprovider%}), [**JSON**]({%slug radspreadprocessing-formats-and-conversion-json-jsonformatprovider%}) (export only) * Other formats: [**PDF**]({%slug radspreadprocessing-formats-and-conversion-pdf-pdfformatprovider%}) (export only), [__DataTable__]({%slug radspreadprocessing-formats-and-conversion-using-data-table-format-provider%}) From f4dd7cac0fe5fb1e3cf4304b679d15c1c7ad7eca Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 27 Oct 2025 11:57:15 +0200 Subject: [PATCH 17/36] Add support for encrypting documents with an AES-128 algorithm --- .../formats-and-conversion/pdf/pdfformatprovider/settings.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/settings.md b/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/settings.md index e090aef8..b77b15b1 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/settings.md +++ b/libraries/radpdfprocessing/formats-and-conversion/pdf/pdfformatprovider/settings.md @@ -51,7 +51,8 @@ The **PdfFormatProvider** class offers the **ExportSettings** property which all |**StripStructureTree**|Specifies if the PDF document should strip structure tree on export. *Introduced in Q2 2025*. The default value is **false**.| |**StripJavaScriptActions**|Specifies if the PDF document should strip JavaScript actions on export. *Introduced in Q4 2024*. The default value is **false**.| |**FontEmbeddingType**|The property controls what part of the fonts will be embedded in the file offering the following options:
  • **None**: Does not embed fonts.
  • **Full**: Fully embeds fonts.
  • **Subset**: Embeds only the used characters subset of the fonts. This is the default approach.
The subset export option is currently implemented **only** for TrueType fonts (.ttf).| -|**IsEncrypted**|This property specifies if the document should be encrypted. The default value is *false*. You can specify the encryption algorithm by setting the **EncryptionType** property. The supported values are **AES256** and **RC4**.
**All passwords for revision 6 (AES-256) shall be based on Unicode**. Preprocessing of a user-provided password consists first of normalizing its representation by applying the "SASLPrep" profile (Internet RFC 4013) of the "stringprep" algorithm (Internet RFC 3454) to the supplied password using the Normalize and BiDi options.
This setting is ignored when __ComplianceLevel__ differs from __None__ as PDF/A compliant documents do not allow encryption.| +|**IsEncrypted**|This property specifies if the document should be encrypted. The default value is *false*. You can specify the encryption algorithm by setting the **EncryptionType** property.
**All passwords for revision 6 (AES-256) shall be based on Unicode**. Preprocessing of a user-provided password consists first of normalizing its representation by applying the "SASLPrep" profile (Internet RFC 4013) of the "stringprep" algorithm (Internet RFC 3454) to the supplied password using the Normalize and BiDi options.
This setting is ignored when __ComplianceLevel__ differs from __None__ as PDF/A compliant documents do not allow encryption.| +|**EncryptionType**|Encryption algorithm applied when the **IsEncrypted** property is *true*. The supported values are:
  • **AES256**
  • **AES128** (*introduced in Q4 2025*)
  • **RC4** (default value)
| |**UserPassword**|The password to be used if the document is encrypted. The default password is an empty string.| |**OwnerPassword**|The password that governs permissions for operations such as printing, copying, and modifying the document. The default password is an empty string.| |**UserAccessPermissions**|Gets or sets the user access permissions. These permissions specify which access permissions should be granted when the document is opened with user access. In order to be applied, the **IsEncrypted** property should be set to *true*. This property specifies three types of user access permissions: [Available UserAccessPermissions]({%slug radpdfprocessing-formats-and-conversion-pdf-settings%}#available-useraccesspermissions)| From d9858dfd79c98be3209a19917502a0cbba7a489c Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 27 Oct 2025 16:11:01 +0200 Subject: [PATCH 18/36] PdfProcessing: Document API for signing a document using a TimeStamp server --- .../digital-signature/getting-started.md | 11 +++++- ...g-features-digital-signature-timestamp.png | Bin 0 -> 91739 bytes .../features/digital-signature/limitations.md | 2 +- .../pdf-sign-timestamp-server.md | 35 ++++++++++++++++++ .../digital-signature/pdfstreamsigner.md | 2 +- .../digital-signature/signature-validation.md | 2 +- .../embedded-file-streams/zugferd-invoices.md | 3 ++ 7 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 libraries/radpdfprocessing/features/digital-signature/images/radpdfprocessing-features-digital-signature-timestamp.png create mode 100644 libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md diff --git a/libraries/radpdfprocessing/features/digital-signature/getting-started.md b/libraries/radpdfprocessing/features/digital-signature/getting-started.md index 1b441aac..f5ba6392 100644 --- a/libraries/radpdfprocessing/features/digital-signature/getting-started.md +++ b/libraries/radpdfprocessing/features/digital-signature/getting-started.md @@ -7,7 +7,7 @@ tags: digital, signature, getting, started position: 1 --- -# Getting Started +# Getting Started with Digital Signature RadPdfProcessing allows adding a digital signature while editing a created from scratch document (or importing an existing one). @@ -100,6 +100,15 @@ The following example shows a full code snippet for a simple signing of a newly >important When signing an existing document (after the import) we must be sure the AcroForm's ViewersShouldRecalculateWidgetAppearances property is set to false, otherwise, the exported and signed PDF document could not be shown as a signed. +## Signature Settings + +The **SignatureSettings** class (*introduced in Q4 2025*) provides configurable options for producing digital signatures in PDF documents. It allows developers to specify the digest (hash) algorithm used during certificate-based signing. The SignatureSettings are accessed by the Signature.**Settings** public property and it offers the following settings to be specified: + +|Property|Description| +|----|----| +|**DigestAlgorithm**|Gets or sets the digest (hash) algorithm used when producing the CMS (PKCS#7) signature. The default is *DigestAlgorithmType.Sha256* to provide a modern, interoperable baseline (SHA-256). The supported digest (hash) algorithms for producing CMS (PKCS#7) PDF signature values are:
  • **Sha256**: SHA-256 (256-bit). Recommended default: strong, widely supported, and efficient.
  • **Sha384**: SHA-384 (384-bit). Use when organizational policy or key size (e.g. P-384) mandates higher strength.
  • **Sha512**: SHA-512 (512-bit). Use for highest SHA-2 family strength or long‑term archival policies; may have slightly higher computational cost.
| +|**TimeStampServer**|Gets or sets the [timestamp server]({%slug pdf-sign-timestamp-server%}) settings used to obtain a trusted timestamp for the signature.| + ## Signature Encodings RadPdfProcessing enables you to sign and validate signature fields using standard signature encodings: diff --git a/libraries/radpdfprocessing/features/digital-signature/images/radpdfprocessing-features-digital-signature-timestamp.png b/libraries/radpdfprocessing/features/digital-signature/images/radpdfprocessing-features-digital-signature-timestamp.png new file mode 100644 index 0000000000000000000000000000000000000000..52782e2ac9f2d8de0f069ff566ed6da373838743 GIT binary patch literal 91739 zcmd?R2Uk;D+ct`#TM@CLAcBC>M0%GNL}>wp4M=a&f}w~ssUeC5>AfVBC{?6H2t{ga zfIvbdH0e@9r~;v-eqopAdEarqA8^Jw8DS)A&Xrm2Iqz~^^IpXMX`;_@>dGk=78VYm zfsQ!~%P}kq3#y3W z16f$kd_DX-(&hKgorQ%_0@TsIAL_J9V+*=E1l!>7Za7VBY2T^xtJ)Cpn~rL^t9J(v zapM?vU&>Vk8%XDy2to#qaAav5A(||`QUsDkA9#N_-buWzcJ12jqYWiOJe;R_PO>SU zbGKLPQnq<@`>E_@4TG&4xx&9&DWjGxUe@`Jo;UK-`c%n`5waA*qP|N_zmr@OV%bfn zQP?g5($mvl2pa7F#-$KF*_nere0`!G!&e&Y&j~OdGM1AC4RZc3wYSf?FUrw;j{N-# zmK?-w_$9WJ(HMJzK9-OYHk2ew( z5G}8&Tgh7G5TZ4BvYGMbs(Rn7-$AxgSc2 zV`p>B*+h_69A2Xw7U-0XGANw@&H6UyPq`6|N#2K63&y0)oDlle{P&1c3cC0s66jh0Z0Cch)pYTjR{>l+FWNB??WE8K_=k#E*IhfQkP3!xqC;gGUTtRHxfFOld zgRClTv}M}&3u~r~KW_J_6IliJpRUdg+xum1x2#mRMl?b2_O+Al~$knSLezPk?`Kf{4=ZZJ=EDu#&1$QFPy8}8HfyY(d z{}?$`L>88(gTH&Ev$Q39+vz*VfvL8LbgK-19+4p%pEiRULEm7QY(z{`=6f2X z>>Iu_*!sGfHcX?o(gSwvt0^Gc(Dfz)ewsEp4U{1j?6t-)YY^^1lHBoeHaUvLhWnazeUTi-J-kqZuR_qNAtEk1iPpAcM5GHu&3`yI)L;wlNsI<4D@6_8Vv~ zL+nJFq=3$+8zwE7=Pg|4vYtl`!#Aae`tX_h+$GJ`^5}>`ycp}*xutVu}Fhbc2j2m&E zU46r-KVTydE_Rh4EZZ+RZZHs}GN{#E2F+AUM@hh^u-@A7Zc9VwyNJ>3C44+uhmb#_ ztpsKMWN&2{A1~8ms_kj zSMt`YgGYcpm%#5}k|-jXEqO)dMh8hyN(NlafgAM`GLMfO4 zJSzTqy7Le4p%rIgxh>mz?q%cM<#Fk-mRT{tCYyK{V7Df@9|xre>X+6`xOR6|e2$`w zPlu1e*;=KxXd6&y&l&=j!S>a`7Z*wH$R?(}T_c4&7b3wvi!I^biY?9ZJ}Ntlpp1|T zP%A`%K8mmuW87#dV#ML@*{Mh&&F#4(&ESrqpl*FeD&0KeK!8B!Nc2foNB1toD!QpY zx#k%9cE3cn^r}FU8Qhb>1)$;EGzp-E)MG59<4gBAsE_0 z@A}&3g#eMP^{k(+xO)LI*e{JQ=j9EPHW8A&K`xz8u3E)-$6)1rh>I2n0G7)bpSw_0 z(bs+f|F@le`r4*7)IW{IEjDN}cm&w>c{ah?y6yKD_P((C#I(kHrFO6^4yyWj_L`ZQ znNOE|CZkH0T8w|k4wg6GPX`UJELWzepWKf*+? zk6JekaqnwWd1ZRK7QckpR!B?V_b72_Nvoc>1V@^*W=Ras`?syX44O$4 zGNG8A*Nev9&-36F`5t7GLfn&^6R-n-Ze~m4d>!ez{8UYATaX@tCtGM-~J!4<$< zEpdJAOM2n>`_OsO=B4YKdy|>map;vwd7-hmI(8)AMOr}9Wyj#uU^g?mdJO~URMPnc z0}%aFVkBXQM)UetO&`2!6y53(Z%>AShccQ+V9xOJIqjVfFXxU>^+gQ#86Au{i^n>k+r9S9^*jPQ$D*VZ~=oNw1cz!y0WT|o7RqlhlRK{bZz~v~{j2|ro3k-BvuNsQ?NV19cIfIeLbMl2# zi9*BvQ_JEDKly+P1q#q#qdhW?c^(lmAAO1%T;-?9!;Py&pUvc>yC0T}2J#lCxOQi@ zwi~B|YV$5Ulzbn=)3H$Ln?DR*X$!V%Yq0a&T%2;lOx+=peC@85CO(@3t6M@W?7utc zaeEruxO6hjm&eVReSQ#mIwEr8sGe39RPR~96-w)E)C3}?$+sM-`BJ3rZJCl4J7nRG1S7V9 ze_#44k3b3Jt5)$_C|OL6_l{{fERmee`d~RYtwa;UuHW1 z7Yp2o9e03TsUT5RWqo`C0qZvBT`B-2_3JOl;JsF<@MNOL$1{jIWzrn+WV$|o*f(4M z&WfIWZ5H}(xv8{nkB^cg-M4U>2E407c8R?zKaa*0u}Ne(CXT7%A`m|>xRi@-h%F+^ zdMob}@`M|uth@Z%GIp+Ex1_es;oyoNA6G}mAh^rk$9dRg{Y|c-KTO}iMz8Ra8=fh$ z{$=bwC8U9<5wXruo68k%C^4IB2{wWY=J3t7fqhZNL<3RdE5T;if7D^p)K|L17U$Md zJ|`wLxcMu+j#Or9KHkt(zU_%F-L`Tv6`(9>{a`ftT=G5Gs;}GApDvk^fyA!c`HQse ze>$fr(DK}Aly*#tfpjEoxD?ygJ(R$NDvc%znLoDOQ`t6DC?fSJfOi*UprZ#1=~|(| z6O8z}aAY6S7S&na<@;_9c21dkck?h}O1iZjlf0=a{ng{HF7@1_UzgnVcos9Q&xSVy z|6!yc{?V|mDoxozDa`vJ2yfi2ym9$f3h3a<-|>&^Eaoqlpo`WVkiZ&8V*@8F#BAZm zPc^d$GDG>pm+aTQ6NF5A39Cv2yQYpiYXbBcfu*-G{D#ebqd$J6Of)~d;N|kbzhmyf zwGuy8rOzIrJG>*XZU`)R(JKNp&DjDT#pyllz#-mbo~6O7_d7U)hH&)wz7?`Ose%`+om{<9f*|evpzAmGLni|`A$$G$?=AK{F(( z_@UIzyw?&#{Ol4IP_<O?#$535G67I(lJ{4FN8pNUiH|n1R3G%a1Tl@ z=paG!caAhKLPPL-R!-Wx1KAD3FGN^8ePux1j_Acvm9;zjEw6^AEnQ%r);5=`j2j)cHt>?G za?JrNxTWXN?PO9PgKkZlVQk9TJ(=-bnx=>FPVRJ6JnRY?89>>q;8#qkIlGTynNbY& z9K_q_>>Ag$bz?<$dIbEE81?P8(#dcf@*pQ%%Nn16c-6f%Lz!l@6UyPsm(hLmv9JP- zkI$~~)>oysMjNY2C4Zzz?wfSPnxoRwtQww1|LCRo(o!M?AzN-9r%%O z+|G9-=!<^Dcm(w#jnp|r8vJ#3DYHwUm==3A=vRnL|6A4*8ot_a-ILH6Qbf*X1l=Nk zBv~#oF>#CLW2i9YS0xOS?g_0Zjml$#n4&Jq`Mxv;aOtMK|z?H21_lE8wQxG>FGm5Sud3 z6s^q}P0A_?*hNr?)cn^3f9G>b!HUWqqEA+kX5-OC z*3N8PS^uREyqIJ}T_B;acy61goj=minDFvA zz)fu7-6(0dUoX~~6%Su;;{HZ;E*&{)l_M^QjXQQs8^q7RWnR$1X)z-4O$R5PPrTOo zyTMP9N0{WvKlF$u>Brrq8}MX%rLd-3ID0mocK*^s-stf4r_X%bKd%MbZ^N(sk9xt^GAW?{ zd3|!0{r?+H9M2eWibxEPh#+nw7#fiEKt#F&WM_!<(=EAQfU&RNa=$LNYfhE80`n|* zy8+pVsB`)HDq$bTpqhqLH@k>Tu>E}UPS7*OyZ;sMG4Yg%kZH($YioT^1Vs6eOER2A zFb)vJU!R|ocE|n3l?s8?#iMJD)6%*>zn;}HHU%6APlgflNm#!qi#WL`p`z`$1M z{q9UfH#TKi+1qFaZDWB_W#5QDbmKpW17!;lmx8HG(yPP|N*S-^M}CYqKePBJT+?`@ zb;Y%L?KorQ#)V)?6NWu#ykn!#o4;ZD`hS++z-0S6?H4|9saGq%R7J=(bo(S^X9D*l zq|>xtpwO{3qb%%2`|ew#C3RENfsN_fvmShAdtY5v!UI=-%6a+tWJq8RX+poY%n8Bl zruj6Z;#)0DzVPb#OS*+wph!usc-2UP`gE!U#-?=hCd&R%Q-_62+=~=Y*0J!Bmg;NB z6FoZc1w%omk+m54)Z5W{gcvy7rKvB!c3kdNyv%Nby4H&+ALnErz}Stdw?{#IbhpUE(p$&fN|-;+YCY?vnT-7 zxps6XWJ6QQjd&4oa19%3FN&0>>_HiO#g;bVHt!(6p9>V@qIOZK)yna9a3=U1Fbh0u zmzvew0Lr9Hu{>Ow+Kjc*NzOq^0qmbQd{YAXwK})rMF7h>07p^nR z(f;b+t%E5mP6H)Bl)zSwj7*SaNacHNF;h}eG5hmFT5ktTO1O!sNT)j+P+Uv?v}QFu zc1m;vs@2v7*sC_3GMp=8-1bA?NOImf5}xcp+yyq1hdr0>d3;$7+^EMvx>d!J)bYj% z&Lm3vo*ixLRFefzG_g1SNnQJ10l96cF{fpKE=5_o2TpUk5ZIIf5E`2g3&$N;!`pO1 zBG=5r(aVgiHbokR`*hdQV!Tmdn-Oj^VWw`GaCf9Xg#Y6!0HiO1IBQ=pJoce@RLS`Q zq9bD38^Yxr{_&5nA|AzET zZ5QnQ*qrNH6Z&lCaSaQ~k}Tng|3l=Y04B5+yGYJ|Ko*L)x6%H{% z2KUh>ZlNMIYl+F$)>~A~Im?-*pNMivLR7otMaR*s*(?95vwU(|qGE&=WO*3zLjk&9 zB$C$`rsXKqky9VNy1~%R<4kP5`mqoLo$%U*pXlnKG)e)V^qu$?0l*RVgFmU-!!<)F zp2R#EMn>malyl^!ul#h(BpRPE{%dzPZqE-G=CRX7Sli9KyqzCdGHO(aJ&P|x(*)Nj zGy!0FY4-a53G$oE15*Q$t0LjVlE&|?=i(PeRD-ar5yU#pS4c?8G~(PwRp15<&q}KE z(N7Luw=gXBZws{4q)=lHXalvA+587r@+10`NS`(bNcv$WK$QO4h}c?K++J<|p>j`{ zEI%lLsT_!5Bcs2y^cbX{C>RNkEc_xEP<(98t-KGs*6SwemPU?~AJ!1ebD@$^N=MFaf#?&LXJPZ+q-)h$Rms|e3sI%ITCK+e zkzigCBZUpFUj6pnYt8fO4LY1_QTu5dKL$)%Wcsf%9!oc%s&b1-g1(=UXn1K_Oozi<|2W5 zfpENjVQqFa&GU1#SeS`+?ZYe)v$StpqC=jkOf!jW%BzPPHxL-rC)1G6dnBEcFVey~ z*U=!E*WuK_Uwk8k+5GH1^*r)_cdD~15M|ux2`?U1Xmq@89dS>c!(9|xEVw<$S))7l zoN=&6diFH1S#hqWb^kdMFR~FK(?&^mEN1m?O3ftNa1Q@Z&n!U|V!df2q_O*E`!|X2cmsv-!3&RI z1`0GH3{4(FCVY8sQ&7-t+QY}kNBS<$EX~tM2Z{Ed7d~z5p$af_xuCji^FFY1x5F&! z;%p=dDCD3qH{82Ccjl20{PDCnxpyl(;zcqYR(^&w0+fSBp&~RvcmyD7!=d$y)I&<` zB?E1QYSts%IT(*KQ+=2V^3be0#22BWVyH5s5VB4vjW-8BVuaf^K~OJEU>q~ezUI+0|I z13aJpRi;CAEy@#Ss4xl`nN!v&dKCfRR1I@uyorFf{XW_DTX|1Bj{2)2sBan?(}`$G zlx~_=4(}AgVfGX$gH;j4i@Ze__Y@;yJtj{8bQ{0#B|qF#oEs@jw2$0VkkxngTJcN>Lr`iqmP67tMTB3h2 z<%uZtBTC@pPx=j1R#c=*^yTUDUb%Pgo_U^Q=*&w}C$FE5XrCaq?zhao-e*DG)9lBL z?g*oIJ8ff&tdwf6V^sb6BI#UNAU0fpo1iKO)LIn4Tw!8XtG`H@vu96@}M znBa&o3drSF_ZV=#`!66^yc=*0>r)=wO<5~@a0+k$Y~JB%tc;sTJ7^EV{U*X(F$m3= zsl9cX{;IQ1cQ+`XBGv#M6wj$*Eh^qlZqeDl(_Y?kx*Sm;p5$#hPAz`8S4NqtYqS9r z0u?s1bh8Iu?G$4mXCW^E?-Gewkg|pMb;Xt*e70IkM3_qn>@}Ta%s-ONe{N(vT=vNH z^eSz3O!G0-GiWkKcX~_%`UT-<4kd1nc_YpI{A3{XZA2N48K$RIAlu>m5vy|IwS#wA z3om*e;uCj1aazXdtgz3IPydT{ia%Z#xcm$4Y-{BLE{(0>`xeTmRZX5L0G${0^3Re0 zKVcps8TogfWeMHt79;klZ)9{0MjRJlEUKW1eCV}?ad%Co7K%U3DTZx6dDG} z7||2lPir&bLP}mon)?>8`oiYeXjB@=W28_fpg)q9Wh_~tP~`Q6kBVQai3 zg7yEeAnoL=Q8)ASmhE5g%l!Oh9zZ66;WGab+~F4k(f^IZw9h#U{x9%!?i-Vr`*-92 z6(_cscht{0^qJE*L+zgN)wgb4rqQ;)-X#YSp7oJV%hqR~vfvH-#3oQG zuSVZW^*8()G?iT58YKx6!uSi&w*{pv{xDv+NbFf!!z2vwr1^%WT=g5v>3gYNuhPf| zS2IDj`==B@H$%3jwUBMQSK4-l?RU{}AeDbXd05^weYcTBnraIQb(IJHd^)Nf%QK+b zDdG3D_doqV)z=v9GM|wV;E}90?z(rQ-$SkI<8@5(MWu5fg*)7qrQ2%ZwiaQG1DMMN zY0+A#vs2u& z@~oU{EW49>V*hx0d4fsv7JWOlFkX5f>}s1&c+e=Tc~NmXvp>V~QN3)5^264pM9+JC zxt}eUna^IyWGpud=em+{%bHAs{5RIxl8xN9Z;yciF;A%-l0l0S1LCro2)0td77N-z zKC>TaJp~1r2Qh_*EXux@45UAO9I89)_Ir{t${=D%eQSU zSD>25{yUBBRTQo#m!A9W^mk{>9Z!J5)u-jFhjS47YYtzWtz`VvxUXbcm(GdGi?3w5 z5@ovuQX*OlCAjmr*2pD>Y7@a`Anf~tFb}my*VAjA#Iw$%|2opt zCD96s6Tw`pUNv~x2>7moalN_kP~G2^W{aTS$2zt=!7j5N`LCSD8~wUiSpqui5{Z1A zkyA3Bpm2Vj?jZVH_B~>s{wwJkV**OoPexPpGpqbv;Ee%QPAC6M{Ej&#+@7V%#tWY& z+_EhC-L9~^-CXhL>dQ|7nLYbUo6T=LQ|uK<0d;f-v6S~=<)TJ2)+6U{qiuxl@RsXDT%=~FU_6CfYY%+BtGHp)&j=xYjTk4!b&vTxqJx%BJ=^!oVB z?g5QS5;^}+sYX9zX5>sNss<0*sEpjVvNG4G=~WO=YLD#}VrHSVnEB$;^K+9A4S?qtiT4i19y}JdqUtW7M_=R1`Cs!p z-h%a&-9-xUr{9`$%aWaQi*n(bI2`1QMCdr*-}`*9TMxb&SK&}eHWa~{=l8yn#V1%d z(Xhw4Ll?i#h5Z)O%HIsF6|tRqN-`d2np53+7~5!8^0|MP8CrWWmrb-u!PyMo9n|;2 z`hE%0`zFp^8jIOUmm50XU&Jmpa1gY#RQ4vgZV^}Xo* zfoY(&WSDWNlShNk=vGEWkB#hR+u3~IT>WJA>&ry~l*?^K)UP`-^jSv}7~`Nn8K3bG zSy+o7qrV$+ZmzR1lvz*jeN2)3vcGXYxFC5Y_@gG5Q@HA@@kMeg&HSpxxc1Iwg}hh1 zs2_HIH&chQKTWR^`mvukHD#kQ;~=EuBn_pkX{F4X)OWba4J{}S8LBv8_n__mn)l+K zq=}r7RapCaU-UHn3Hvd$k9?*Jb)oROCk?(}ZDSnJ(11SLV5XHJggQSa_w`Auf(m+Jv=gRDCkOh>^=-`@@tRb9Wl*PS-*Ub z@Tu;IMU#(Qy**2)PC7*L5`F8?!N|@RYoe&9;(@>vB>Pnln zd(If!7iaE^{MAgO;RWu@AzRvb2x70hm-?5CnuYJqxHQwo*z*{i-FZV}rZrVXb<-%D zIVm;r@8BS-Zrh;GYm{#-M|=8Xh-0X46MfA|`~Y~e5Hx)^d1`~g*HS#M(=1u&EdX%m#$4}e zv|t=~mhDfus|Wlm1+bpmLRPQAUIy5V3oDeT(!wet~ zvK^`v=c;n)Xr!$yZIy7gI}_BrdP)dO4Zi502bFzhr(N1B!^Nat5B$iuC3{8NG$Q0C zxHC|`zANxgkNxmT|E~N)qPa`8&$s-<)%_Lzf}E{{Q5ipyoIHK|ff|d&D069Y33IljybSzHqF}|F=^(dfugO~dpjh0F2Y7klY!AsoAkM@)Jkg; z%6&k^Qw2mBzvbL#it!mAW}vdF(Dt31nvwa|St9;)l_eMbTga3?D z@GEk8cJ*F(@V?=u>gAp|+#;2}#(#||cf>$&bHdhRX{oDG-P^Xc_nSZ2WU*bt=55&i z*b{9z$VsPPIn(Cq_!UzOyS%d3C7z3JpAV+5gv2#xC zIF>?;Q!qdoz`%xv@A=GJ?EFc?^tGU}HdjKWw*VI!&K)gLD)g`*q1$tHd)|J@E(X>xgYyx6neyWsasoOm^e0 zmdT1eE;I0C21o-DQVPSRDk5Mt9Oo%l4CU&BUONE?P8*e$NW%J@P1Tc2#8aET3zbZ) zL^V=Ad-Ru>#}=eJ$hMeCx?KOxmMhdPyJx$dj61g1 zu}$sVQ3>sl0C%o!?-~z4`a}6Nw3t@JSxlsRQ2Czp*KviW_48)gx(V+qj1;1fy;m&t z-Xd5rK`f=U3ZDn{3j)4$2K6Q1dU|U;LT}^#xVFrj3M8#7 z!!63QCy;o|>AkYf{*@?d{?--x^~^}O?z)Ud)#eI3UbovLD?o(c3>-1k&M|>+_B2;4 z<(DAdOl=_FvKxN&#noA*wx#!N(3E$afABRBh{=s)4>&fF5 z@<|lSxtRuh`;Ls=dya78nu3>xL(+zKDZ2{#0sH%vY>--1So-n=)#IOV z^x}E3$YOOZ&m0e%QX6wUZr5|p2d`{jcsy^9#!BA(cD=(N~|jix&a& zAjqw@EIZu@tE=rXL;0lRZ@;3d(%RYYo1Oy0>)yfA_0`b4T~iNn z>_^;8ly`~60|a^Jr!F$-j0L*k{W8@Xdik+dtjcEUZo^KV#C-}|GHYW2%CIZ#` z$E?7)XXd?dQ}FwP47=^_b-HW#{*~d^fPE)7?dw0ru9N%B`Q1v#<$Z0f!;d&dbUhhk zWR07CP_(G{T50Kows!56!TR)fjV!>O`HF=J!IA2d`y(60AzRB$)8ihR_=K+AOWuG^ z-_poQEr}>`%wq}gv*QxjbHa?YDn-`7=gw2b>SqhxoA++^`Vj>H~ADn7r}YfZ&_Eq=JAa20nZB;l{kD;ZR&W#NZY6uS-Y&TZvghXoI7 z;p?qYt?~w_&TV3(z5y{Znyg<|S$8Vb9H) zR*MTP-`Oo&U4yRgJk&s&IrSEA5s+nOo<{DkZ^SNCUNk~okX-1Ihh{t-7^_`D1p6j5 ztf(v!e3QT0PGm5uXcvqg#EhY>;mKh zG1JWAfHn)P>zA(`#tts$zqq@e`E~t@dANj&Un43ThNu7CaXUlJ72QFQl;}w`b zu}oN5%k(sqFJJlGMT&T}>DB1cV!D0mJ*Mzc3Uazqi%Gvvq2rIko}d-$&9UT(G}Ve7 zldHPyG zX|Z(u*gUVOztV_}+jGVEln*YOZyDlI5v6lDdfY2FvX#zDX~eBRz@@^8VBJii8e=?0 z5JLST2F}b>$@*pH=HHb?t<&{AZl?y$@&Y7%Gj}yj2Las_9V#lXceZYr9Kb^PkG`n} zGOHgIcq!#?USpB$dh~XUJZ!H2;T0@-sM-up+y;tZLjgqoKTj*h}M|b1IkjEog#lOFsxF0AI^FnXxkYkYmhw-x%;e&hg#Uc-E`>FhYTK zW`gK^C7uFP%c&2m>wsL^ULI)&{B~X?Ioixz)SQhxuW^a3v>LK9sYL89EF&Cny+E$? zf*UisfXjOCAXj@n8!G7MNR^E5@pytwuEg@>UBpY)W-@CzM;>cD4$jkTs9g8p$`Aza zimpNTc{|H2K|FY=gNfgf-3}Q?C>V*>A0W>Q7ia01Nw2iq}K0v zco5;UkDMc4-tW})$SKz>k5fk9a$fMvWhy-Y-2gK|HJj7sCH{2b?Q}`-ZBpp*`{AUm zgCmDPi-Yl{k^z(70!K&s$%qtEuN$->?7^T+>n)MnaPgURb9hN^vcWtab3wB8W?$>2 z01!T*qc=Ff-aG3{LVCZFVn;I|Gf% zpdm;4jLE)12*6LSSN^4lyYZI<|Cby&s?~L;Vx-%@xMjIVr5)#BV#wRDK1zQt;RMsH z$)j3z8Eep8cfla)teEXFY^NdW_Ok`xdFE-#`by{CW8Q|1Y3s&OIN&7*Rt)*A9X^l7m5_w<1Vjcci5y` zm0i;RSB(yyOM9E=v!c3#HXnZx9ct3}B-uI`##9`eJDm>GGQOWCT(};T%l3XS268D1 zGGyZ`nvUTm?|gX$Ezg3|8yVnkfw{Jp`_$__g3%c|^7Tc+Mh4);*1d@ki5u%b(>B1O zeeW&3i7%1|%E}#nXktOq*t|;*A_baeAg^L%-@RB$M>K>wie3lW?_7GaQYJV25rdap zZJKwF;;>xZ4Xjm4=M==6zd&b?YM%UbPGo_4)Hu?~IjZd8I66PQs1IB0d`vqVb?5Dm1T5 zCo2ysHQ63~zhwr^bgaagab&%I}Wx6dTfy}rhhV)GH!vI`EQo@9nAVXZ+luDu|G8Ep}MS=KV(SL zvNly6LR@%nBqKupMhKk5wITe?2Xn&K+nG6|*tvzBGdA7X@(p>Xnz=LtrlMh90Ahm) zD1yUd@TQ7fnKNHqGFCWD6q_gJ9xia~0d4j7bCx=>$6U7mS;tuCF{YOQr4wiGo+@wZ z67C5yE;Q~E2H%c)z~xGm1Ag$4i@ze0$`7&?QIuf0)oB93q(p z^;kFhaGIjFhvxkMIn9?zhcOXziqy}NRf|`cQ)J_%m)J5C#%{pQKTekXi{Mz)wShCw z?fO%N^#3{tc=|xB*ft2GsG80MaX)RV>Y`fO!*wIpalY*wgtdLChWS$KQ|Nd^#iuF^ZCP0o?5;hC$1F6B-N$uQh?)Nlp&t8j=5I z;r>aMZ2gORxnY}S|IZ1~1-^gMi5|&cMf^( zz<;;)UlVg;@*u)Khegb~lu>4O;9>DoZl+icOECYJmJf>#>p<%Nr1>7UaabaE;;%sT z=>O>O%OA|5!#dd7KM%ni3g@uo8{c2(j+smNpAOl0nMH?n?*FeDG$vNjh}1tD7jB1g zixw?AO|Xz1v;{5%SAe@_fba`zir=4{Ink&v2+Ujvu2Zvw!M;H5zXmkK14tugJJzp- zht1te_A46%3S-|@_de#9dRJM*s~0fP^?2my`^uJQdS~wa$e4+=dVQc`8GDe-R~&my z$z(J9)tvEZ8P1XVJTJe{v@<4{w^WnLqSE8>;GOgn#1Asc5?5ji%uJ=FYI!OF}>ewjOe z|HRqDy?oAHIlUqi6x-f$-)vYf_pHQcS)Ke#3m~vEs|FtP7{IiIDW@&0EsxjxT|n0n z)?{p56WDK-L*|ZnCj?%{M!LynZO$YFzQP;FeLUsG3Bl2Oc#IP2r`=Mx%->j==Mo({ ziyvy;Ia&gXk*f2#mb@0Mb`hpHey5jP`ps^ObJ_FM9kWj_QbDQ@tQi;7ir!~Nk(Q6Z zQ@R>{#D(0))hf1RThY7kcrj)qNP0KHrGYZVwwM36)?KJqtf(k|i^rSa6fb`}tfUTh zH76+z0xvBD4;!LB-e~+d;Z$YimSrCcs7iR#nFVS-H}^yb>Jf1K>5_N-c(ye5!Ypkz zPX1=*S{=SL-?gWk%O>l70XMZF9GUm08h}*1 zCQx4ocGIjhctE?!4*U@ncXLdo|8u_Fvd^Cq2jA*9U*Bp>d_M6i6m1oOqbV=Z-mj=l zh>&MDZC$}1jYyV_@P>$QDI%E4uv2!rxwGM7I*x9+CYo}u^de3dwuU>SLF!kpTnuzK zbKlFg>GjR*ZSaytYeyCo4UXLC#5eT6@13iZEbCRV!<(F{+)WI+-Qb<<|7^)9aWlaG z(Sz~~Go|bib8yp6{=jkgayp^jU>BU?5?engQXLisn_Rzc4Hp>^C^lhS{^mJsS&}4G z*z5PxBqr=qj&u(x6XY*%qD8FVvYuovpM4z2DF!?_yruA|&)) z`Fd@@P*HBgBXQTELj$34OMA1v_nld85!LCmOwsatwPxy;^7}bNiI|F6SM*Kasl6Y( zx#}LU6$pXrpwUxwI2N#WAl+P0Fafv$(6@9-*a?>#{(9FuCv1#6cqq%%+h-)c=D_;- zW-HBiv));cyMUubu*aSjkdOCO7q;J2_S*&l7BaLyT~f$S@ls~Pn}o#P@s6hlJw->@TiFyQTEjW)k(zUu2gmJF z6e}3t_20F&I@E2SCsRkDzB^*Q$TwUR&rKl&qj}$n$NeYMuJvE1M_EXW0%i?S^JLaK zswtOwNnY-+ZLMN!J=eM|<6z7(Bk_45)G>pZrZ>BX@8L3Y+TA<^SGKmEoTfT^BNL$uH1e0v~;rEE^kAU;5yqPd)n93Lf?% z=Uwi(;0_s2$na#^raRn?}|dljNFukD>_X|g?Y}W!pIK}itBTQ zv8yAsXrO&SEWII~J`3S+b?`Os>G+n%H8S)kcpRj5>wJ+(#LJOS=9@;>*{hyFQ1 z_Oy%6dY8Yg%^S06?XdaML^FhS(hQHJ#VT@sU(2wH@Vb;eBpj#reZEwbs2tZUCnrsS^CiKo1N|wxh7ypH(FNW$ zxt^v`yioxsBLx*u>@oAFcQ*H&5>j!X>jP$a1&BzPYi8G(8#rp$N(QRk z`YDo>J+R=A)$zI#SJABlslR~X@*dgV#e57YfuS@5^^w8U@T#i}8`iPk$-a&#r3O|L z_0ooADOF{6He~O{dBli&-mnzsNGm-&Jgp-qM<2CRwo7*IZ8&NTSH&kB=kyD%EVha$ zfi))0C}adw=C9M07?{nU6&*iyp|j0~2f-?S$V+o}PEuVW<1_yL0$wGfTt*p9_{wN$ zPB*K<9xsHJTNQ*h_7Ly$p*PEUEHozQTIu4iK{;l2pxwAzdH{yYcRg=^>;oTaaj^D7 zoE>`e*i{Yp||=$LhV) zL_79CBUzWst08l2))_?nYOO%*M#^PRMx25>t&8~&C^82clW&7}ce;o>chl=UIxf7g zuEWK*Pn%7eXhk}-7SuI_Do;Gf3>=%6D)N+kW7pE|Su)yINWWvokfXQg4r*-}Grx_Y z-LB?`EFSd=wt|DV+d@S0!52KnR-P?DUHANdG+XKGI4be~I`Y5cMpT1lx`;(sM4BS+ zO1)Lc&|n?@Q(u2^&4;8XwMz7q%jsu!j8zkv1KgOO-=w@|EI0$AFsg+!nY+<(tkE_r^m=ujj7T z9lZIdY#wJj0@_Z>ca@~$z(3FXsCP_MwujcIQ0#VAUdwY?E!XGRGf!c9WFJ{%x?L-- zcdO*)^awR+2r|d})S1>U2|-f91`vRZ4wLuRMoJ=(0GIRm}FajS{u=##cghQM=ncZVHFL^XWZR5yi|* z^}*HY@*o5j{ts{O9S`UBy$wq{Qlv?UP6~-045E_|o#;kA+AtV`=rwT=J<*LCjLt;w zBvD2iV)Pj$F-jPtGrH#{=lgrk_dL)0*ZY3n|CqVwzW40ed+oKZb**caU-Q^b7OLq# z`CuaPqffQECNtjeNjEd~swb6NtSy)GiPiyoZ|etuaAkeAq=(FV z;**<%+v}u+V}XlremiH%QD?Le{*+`pXon`pN17}|IH91pGR{EQn>FHu2_l2Bf6dP9 zScM&BzLgmd;DKy;Z60YQA6T_5koJQMoxXbSC54jrU-7GWr)k1fuWMPeUPG!5HP`0-T)-z`-Vgj{p+-o^D@H=U@o*0v!v$A?q_i&o)n}R@s_6W@lu*GM` z??`{O1Qxq&?;Ok51f5Wkr3b3!*UC~ADwMP`5(g!mi;epIk^%~@8@{>Z=cnlrTJ3R- zLHY4`LTx%b@Kp7fppOtA$&X{tja6q>@2%6C%r}hE)-0ATJ4YLGemB~q0*W{Fg16N3JNjgM)V#UDZBn_%5Z>lb-?O+mK0yylKLt?!5mtzpLaCXvYJd5M z_2?yNrJ3rM{l&qXJ%S!t3Mod=B7bdkayPrv)KJ}n=_r_4DuV19AV+XZa4wLQ>?`D( zw##cFg7|3j%)tIt4+nN79A%1OIF*pc9kM6awM`9`t9EGgbKCN2i>tDV9kzF7%hsQ@ zxpG#mda@y_;w*#xz`GunG{~^>QfpBtM3KJ;-8zw*Zyg6aul%`6!w$;m%2|-BD8RlV zi|adTZmZHW#Olu!*g5}NqbY&CK`LT=>wLa(#DglT^_(*vD*B2N3;5|hw}YVGxu1Z= zKnr}dp%|a-L=u?i&R10bwiTghM6ybFtx_c+a0hr`sq<>n_hk!b`dmpAAkRQ(w$4&N zD1h4*12lAN`@WIB*?wNY2GnuiC7QVPBj-|Ilz^1&Z)e;;VbH&MIlrdH%WDaXW0$Z1 zlCu?kP@JIZG)xsvjA+0c`*oZbnfjP^Ncv0~qZb?13}?8YENB9TI5J;nM;8;*sVaZb zV|SDf#;p2AlsCuvi`7aKS24ZVbg*K^$v%EZqL0GxeqHZ#jrowQh~3ra8#^kcCrLGa zG*D{y=+*br%Ik{jq}U_rw_XFse$C`?NgkFnNaTMb2QJ*`SqbzkI!`%2*Hw_1`uVSz zJeY=`Q=RXH{TRAJumlStn01H?3MskE>8=;nMNH4)b)9H-2REwQg*!r4BSxE1$zEdt zzfg4pEdtaI%7&30IJPv&HYd-Pav6iAMj=w3AGCZ$v4gYoMi-T(^RRxhcdI|4X)>`^ zNQ`2%gU%hXBTd#otV$coBzeF0S1j+lzPTe)*RE~U1J~pboJfhlF|N$S3m|5^42#-l zBiAlqx4t|mC{IeUeSAk}Dr-4!IXyrDXJQ_4<)oL^G;8jHS0pjinnf}0X)?7u*uhicc0;|&#a(n+cr-t0Z^H>JQsf0w`Qeo;f^g_@Wl3ZN54vrvnyaE_*yO|xJ9K|u&x};y zuz?(UvOwz={d2kE>fgLC+{fH08D>DeGcX65JhUd23X$N1oV5 zy*Ti%guTwu)lWw=VwT$rMZ9`p#4K;U>hI6jE7oqaHwHuJJeN9-S$C?HosJ}mdRD5s zhy2o-r|P8-jV%-BLasG_B?)atUC{>ufK%?C`Hizw3acKb`1?na+F-SVm&4ZT!6hE# zXFY&>_Vi>#^%T1L>%tjs592)}rgho_LIU5gUIo>*SW2{CJ;HxjLGr#{(IScWRFdOM z#J}OM}A2Qq4Ze5R5o!@%~fQbR$&Y#}>|7#SjU|ovki#FsX zg}WxJ6vE|zOB~@+8(wH>8e(Hkz4BIQLWdPOxg+kMbXrRMgZ$q^K(Oh<*8?vkX!c82 z-@NvHNi~dg={}mWvbsnsV(+QyT2iD{Ocx;2B77>j#6kf8m8Wx)6c`V=9OM5Mq^$ZG zM4#2yebsh4t|WlYjX)IvqR%bmVA_-s6}JWo`OIWks~p8Y4ATG~4|sYOkDY>|r@lZ% z8gLBCGQ0BdWS3(oISRlp#Ms!_C5IHldwTM<4-ay4a^rwC@qx@+i!?=y*=J7GJdG$0HoErq6ArTiWq@ z@1-b9Dek<+&PGo=>7`G`NW^kxdN45Q{4(%iDR!dqnTSz_EFIa;608uQZ#Ae2J$p54o9Rx5$=F(-&rnTvfo=sk(X4cyj+yckA*^M1x(b3exPhZYF>m?;rQR1K!~3V(lK)?E9RSH%!79P9el65H3N&1%-#>sphmt>c=Tr3mJh8{5t1w#^oHQSM>1`Y{qNcp?}s3 z*ItVU*^eqynt&Aq>{3`wuQ?1hQG0oF_0DKbpq{$w>bxhE8ynp#NsoK!Cc)ma1dXha z804^kIcgh2T;WUZgd4mujch ztoTEg`oSfLVS2ZvvLEG47ypcdWHlbMkhy02yQa~AO&WN_mI=jDm%kLE&O?*x>GqDD z6FS4}gg4!L-q*MK#QF)|H5L$iCF~gXv-7ETt(UQowiraP=&;_CG0|*lSQBYaoYB78_CS$eQ*cc zeGTB4?7jTo`Kr6szXh;5CC)bUX_f*wJ38&j|B-<^edTY)`+w!y{^z7&{70hgzs|4I zfs?JB=0MC&kF?YGdfonUkJDHFb{>EdqtlDeQhtA32mFcC_xN#t>vNsm19;`{Jj#EB zgHAJhltTaS2hAV*#3@*6eZl@{4^W=af|GvfkL{R zRXZ&R8yMK1nVB9elgjEPW~`su8y* z;<1*=B_$#PweNXh&Mhdkh3RXJ1zCwQQ+c(xfP&kwFAKSN5hJSPP;-n?E{h_N73(m; zI@vrR5R&yrLxNS1iKfVC*S&2%yoUMsp|D2yv z1lSyQLFWyHepW;@E9INNP+CJ6`y^4$M9i1_u@u)hyWcnuyyT(DUHU2Q zPAmw>S1OY)$1A)@(*{qerNBh+A`6vLvT4_;)NpogYTqAa^uL0$29IdIcp(z+d^DnJ zei+;A1j}ljNg6gGuc{i>0{aTXq{J1JIpta!3)Q~YD@NFSt*Fv&Hk?k3q>($1(%Wdb(XDQP^$V*HN9T+A!P1Zaldw7*^V=|)AxOIU9+pbV5CQm!MhPb9gU#n ziUi$ghOB|A5nWZ0;~qUb{OE#>^5=o7oyP8hMwLnp3ljT+1*r!mXDC=CfA$L~{GBP2 zxs~%O<|a;HR7m@kr!i*l-`h z%53Yhhtt8L^iU^X#;WU|8)=<&T|L|N-cg3K4+MKi3@Jv2d&kIufg=C~iTo-l#D&!t zWw|tUx4)nwMpS>O>{gMH%4CWgW;Un3uQ?u)?zg35j>>D=@=OiA3xqc-P!@tGwaVz<(syaijdv@ z@|H1mi4f}0wp-k=Cwb+fCQWf%#k=#n*PFzk){cRPo1ZCP6;AY-*nXHJhe9owuT#AF zKGUorDn23~sZ753I)=im3^A!(GV&eiNKsfy7cTI}0nK!yX|)yJST48bV-tw}4zXfr z;GlB;`>*8I9T0|VCGo}5M3jjwNHI?un%lyRs4{ML>g4|e3R$xF91G_l6u`D2hN9Rb zky?yB7jC^L9@2$!-!d50syd@Rob4IskHS+PFT%=C>m)1vPyF`c*axM=&zKr_4_7Z8 zyI(jtczaSt+9x1!C*_ybniT}XFP6aUGpEu*p!_TGs!+uEPrfC5{e{WOB-U}83~|Zt zO-TtiHaH$Snli0ZJ?buxgB)8>TF?U|m5DqTuCl(Em%!c^3b&ic?DpygLRQPBi`U)D zJ?yh13mY$-THS#0Q#u9&4hUSQ@2pI6p2$G=QEaD^E-kt{efx0rib>fqpr|~4(yh>! zIz7n6C+jrO!fF+scas1#f+=!@ZuO(V4;@m5E*G4cg zIo=tE|7%#Uo1D&)7p;O5XjQ0)!wINj6cZJ^#6rysM)hUF8*02S#mPrlv7y}}I*6+* z(=Ejxz1(+Kq)b8W7_<(bx$ z<+YQBcX}C@tN`X@dz#$NTY4Nkk+QHEIb|rknsX)49>bcrC_|>H zK+8n-%EZyJq4L0m*4Z(O7dQS0Yvzd}N#8-up^q%EcB_Ih_|nfP?tX9Pi(d@y3Wxe3 zmVx}{h(!PHA6s39&w!~Ub&84<`g1LZ#X<$~ zj;%w(v-BaU;WYAzf;RxozCWNNI0YT5k&!-Zk1*!G#^|CJP_hp0Ut=M2^3kuREnRTx&+dtKm7I9 zT6opc#i1wRttkL2;_FwL{XX~R7raedF=hVkUjxY(t8ot5Vk@<+57E-+e%`U`;6ME& zVBt@xW5P!Z-XD^VKb=)O-=aPyU6Nw>5(m_m&6hT;WN{)JV*rIGx=t!RBbgK-7~IM9 z&l_i+#8dTvQ^wIx@2It%D}z#QXKVZ0x0B`{dA7|*JGh+|(TUmT@VB1N&69#dI&3Hn zX@E=a0_O|hXEeH=SMR!bHvXUfrjIDE{C0Z+D9-LlOH0dl{Nf()Hrb!KpBVyw`&9}z z&q$)b{fDgcznvTwfioZew$ z9;h}rCTrP4JBsGxrS=D+ZES2hwW>dSUuZjIYv;XIq58?x5O{ddCFQbJ|C584P6K{LRDqd%XPdki(zo_OQJ11PFz4MV$fcOe&g%`8z8Z5Uu^&A+r4A^c$-R0lSVT z`L7#2psJ+^t61!O=Z2zGo=MSWrlo_>=0tZbJZu9q>PyG-Pdc2bj0pLgSK`rMtL|r5DXZPRvS7Dz<)>FEvpr6*46b z<1~H|*_{x5PHEZz!k^1gWJ365G1DB^tHrOJhUZ&^Jpm(Hbn!bGgO~0nYPf7fk4u@J zR0*O{{-=ueotOTe-3s!C3kntQFQ?celAqs`Ra*XBtMNeolQQ#B)k#x~%2n41-j6CX z3QeP?n;Bl-SDQ+oOCh7B;=gEqrofj0GBkcsxbFvlYJ*RJiUActW}a504kK{?KXd=| zKC^URmd{-1JG$`27=?Rceoi^zY%OmzSL?Wqbr>$2A8A*KZW z(Dq0UR947zk&EAA&eTCrtVzg;_R&)#wKTk!k*?z7mVgXF4jPoYa;dX#_f@!rxXSM1&{?sT)4-;Zaw_7Er?KYJd3;3PnsmIc-aCtAPr^P$w6j=WX7QB!88FzK!M2$@P`JD8K_L<2Q5!Agu;!b)EgNBj3i|NR~1Js#s#N> z^?a9o{lo1oPx8oQQ*z^LFVXU=gHk5IBUtEH8VRLwni1{eY3@`1*NtRWV-2|)&UpMo zbs_8uEBZ|CFktU*A72`BhN8)`qdkJ|BK`Q&IDxJKzE-y6;ah?tq1 zf7@-Mm|6STdU{fN5vxY$8O0sbTNY0{2mB6sVu4iLi~@|xa;qey{r9r`pc02!E~%L+ zH+=D7T$xnwXvK}zXGjxu4V&`WM0=9=A8e1B3Y(l-k>7m7tf}-<8yB#rJcQ|eb0Z-C z2f%%5oC!N=a)?pdeEZzUDo?jFxexvL>XGQ()`j=0=C(uId`FXp@6W!*?>))F!Gf0N z`wCQYGaVyFwn#4|TW^Z7w>d4)xia$m?kYEb#m~n_1&R9Q(#+ptUE06f^p;DcMNYUx>n z9pypf|BqwNs?7nDUuS}UUSexI2zKVM15#vcSw|sWl^A>W>kO%xihh6$7d=N?s?dOp zQ)I6z=04WOK63{xmfC-xuQ7^_v%A0nz0--*8G4=d0fHx_6cpNxQCZ>fTad7gppI1K zib-KjEsKoZ@r*2s+|6^+aIiESx?C4(06(xf_^K#sE6RM^WuJB#tiDjSHPHDs6rAQF zBn=M&=J}7`fwHuAZ~Q4*Yl5Ly;)kj+^R0I_JS<*> zJTsY>D6L9+gif^xFR(_L!Bc0B8HHg`xcIninat-l+?1G2Ai)I{E@VqiCQ`Gh^^$o2V`2 zXrcGPefayET6z{if^5U3hYYgGFZrgby*P?ibBQwss8LtXgBq#CpQUUt))Zd{YhFS4 zl3twQHt)1T$c=EPFu&RpXHQk#!OQ-+xfa-6#I9X_CLj**CI_=T)}=M&f+rNz6=b+E zW+d=O_6TkRY8C2}kD_>U5i=Fsymu^07ZIP#`1HI5Ema-gMX84$TOI}9otts1JAhhg zA&hg=yxh|=7Y7SZc-DQ3^EUP+!n8Sp&awPxwD?RUUX5Zomp&1heSdxP!^S-i<2bno=(gQ^ws_M=e$8$wm;sC2a*fu} z98;6nhleJ;HFX8*hmDrP(=3`-QmCv`WvKeB^YvwmNF%-9Ws(J`rP*+xy^%Lbk4~-!kQ5$>2sus;}}UV=RY)W{JkNS1qMUT zL{y(@&C9~C^B}@D+^~%=4g-BSWL~6EX-_pL--zDPcp*pb8jg?MSwD;W^qB?WQ8-Qn zmkMV2{S!kVY`!rdTO7-A-Is|@UkQj|W_bx(@|2aj468pj{0bg@D7RlXw`Cqv%$~vK z`!N81q7Ha~$B)nbAm3&h$PP5pwU5=e^LmLNoAKoarxVSa?a-(+&*Yr(+Zv@xy^EQt zT2!RG;f3QHSeNpPKztjDXEgG&XB2e1VQ@ZDuSCSWI9`ZRT&0YsXtFiSNXvqk_+eDD z5@%J@P|;6mm$Iy5+iL7~!nIcEoOQx6aN=eHMwKh~I!RYb6||-5wuGYC^?rmph3$*? zy+!D3h<55YhF)a6J?f<&QS!;U%|*rdCi`KbsLf`lnU}IpeD((bb9M1`q0$+u(pp_( zf=gN@s+^Y?Vsh0tNBTGlmn&=DI5Rpq?2ajlTD7bwf4+EUP8U0;Ha187-dSG# zJNv-N?z0oM`}>Xltb)R&75i~kbosp1J&du>Oq-TXL^-e?n`mH#Zu8gcRezd~QTYra z+--S=du~?aF|E()=g{WvrFnGT;T^#>G^3qMR@M?o2enc^XjnB?yGG~LPU08N;t;DA zwFrF<&!H9)GSvG{YaICI&zbjoJ{_OiC|yKY{5m2QDjqk1?i@9lZP&>6T9{efl%U-@ z>IQ;CmnUeTiw`KtG%RxSbHj+x1eX|k>Cynf={j7xZ`Bk zo;;ByB5SPbTd8GKvs=%$#2`K!3n(WX`H>^pYT#}stKRx-O;pz}qh;Gc{O zbM!YcKlSek>WpaNme76fGFOF8_~?BZQdcfBUwkU*C&j%$W$M}#_X@-D8j<|-8Imsc zd}-*uJ7eBr)4A=VIkoUn&Xl$V+i9(m+{BsS;}WO(tYxUW_f*|4%Tp_QeW=0MCm0nq zxI&*ORy0Fhyl0y0~o-!(#0VD9+S(y1-8EX?LICXc0xscE5zP zDuVcSa+L__Z^L<}0lHDt_mR141$JwhyPg%;vHHg3ktn9zGQXx}TkL(mc@LF_nlL9} zZB5!}ol2+I+Py6WVH~q#ym`Z79;IBp6Y-jdj2S8(dT?U1Q&5fXfhb7WRnrg_G&t4K z3ekwK0>s;DUgKcf+8WcU55@NLLs2dYk$FMz{kHxgeW{Yy^DY-68R)XCu!YDTVW!M0 z2L|ZB?15yuf9|%V-{4i->eYkVUmNr`4Z96*^%5_YfN&K$helzmS=*kIFC3SR79{)! zm1>%LRz3xWv{zBWitS6Yx}7x^9twX)rme;%e#S%`*n?S`SF`$~jogG8Z%tp3^qcP9 zwE46<9wW87F|j@45;hQ)5VWJulTDCs^Dol(LBv4_HmF=RTdu_Nj^8kH0uRGVj{E2pM z^zN7@-7Qqdp(_Yl{j7kS8R)SxVIiK!0v*X@u2C%3!l?9yTnd^{5-C=!;9t6#r(?j@mJ0Tx^~_WSmnnc!|!}w0Xg+>iX6Qt#JH9)6y>S` z0g6e}%$DqIDiJA?$Cmtw5Y*z--0%>sm~3ooPeFm*2RAh)goX3L&+`VNPokLTyo|9* z6_b_TBtFrOtYs68ke1EryZnk3+*wD#Q$)~LoV5FDE}q@;RW&EN){(uijR4`>VVv=X zMm8Bl9A%~sK6g6IeAbs`;kju*$EdF~tixCdwTy{kz^NL_jThdawzMm#GdSex#uuu? zN)6?h4}BBOduuQ%SNRNq!uWzqjFnEZKGtIqv9}zu)@fV@|Y?JLcQcjrs*er^8=NPQKKdt|6@7A}|rA zyvsRgbtbnOx21)e(j3+v{T=4p(}@yq2D=6FU4C4r(|2PN+&(n$c^nnC;r(k@W0Rxj z6{dH^rEPG5@W#V~wdn4y&;F3*l~$JUEfZx15(_jBi7bC7kUU*s`v{?WbHe6Ut4&+wxdF-wUI}M_V6-h z2HxQtD0MXj>3xXAU`wk&OA`&f35Hqyu8~xg`dgj~5qgOxjr%>d5}N>5%5KIxZ%=R8 z6OmkO3ZRz6gNgztwziBBcix|s0(9z<^Ob1g%SMSz1DSm z+JIBYvDMxvG06p*yArRfH=5|vCq0j`7oHrely>lBGRDbX;~>U63OQRP%K)syRI5DW z1ifg)2MAXsywF4E)2>L0`Te|oHMS;@i(V7A?Xd3q$+1+>PLJ^VRRL9pvMmEKC9!>Y zj z(o99IS;a1w{!?c|m;306VOTizq;yJ+x@Kcb5d5HRTG_T}jmbM`d`Hq&NTI@5nET@# z;!qQI(3hbxccfZ#?voa{*mWbK2ctMRm26`7|T}W>Fv1d=m%W* znA#B=NH#;ruh1~!^|bIE;0c#*D2;nHW6)jij7So!d9>Jm1XL=1nZh7CU?ga%u-4R%Akd$MR=s2%|Pj5N)40q5m&7=NK1(M>kK#Yg5Fe{q&kZx7Y$4(B~tb4EcSo?Hh{sfvL9 zQ5IDB*A}AY)so=!??kH$kFP>?JuG*~$mG~C_M{bWDAm zK=c-fg*3>DCHRb~3JVEqPWQFGRrl=Ghli4!U1^b(mOoiKn!k@bvv-SH+(XuEP@`|u zH#R4}1naLKP}Eole}u5tSoh_E?qqC3U=)qqE~qgcQiTmPtC=xmRsy>r17G*)>s{Yb z8J|J|3N5<55;OhT&dT#l^-x8DZJ3loY+>_D8fXVjVEQZWprPvEKuIaN%n7t*F~s(2D#J-Z>S!6ZqE;C=u!Lv65S>5Q`mOXUpC4)om)qD zrxD?*JAq`fB7T1cG~R@>bw?F6x787wuJ?^7@_0XkQbj2XVR~a;Uz^pnpjO`xB%2+( z8Q!vLDMD?equqjS@=qdtItRS$!C5f*2e7=E|N5d1)^Ta_$zEuN#!~@k-k%9M$$t_e z8;Q}#g9iqc`4P4a^0OmDw%$Dt`sZ$q&eav?=W>W7)_L3t=wTWRB&$749@aLiA2=C_ zA2KSDL=FLCCTE^_7=@~Wr7&yUB>&!#slbb#NFgZmG^Ci^g8`}hAH)QA=3D-bVWOlG zAE4H+vImeOWTuuVG*&{{evhgXqk<-I&U=?1sheyx{7c+hqRl zFA|myaL`T@{pIAC;?HkEDc)gbH#7hY^S_4^eAn8g!q4&vjae|_6W+9 z+>;xYSN{d6vsa%5BWu~nKR`$BEL#5n*H57#qw^DO^>wEq8o{fiIFl$LUp zgcBSSjq=Vftqz&d!j>6*BaUu=*ViWYQ>~kLoBZ@2zeLu{4D^IC|6TAaby^oX)++_2 z&eQkij*pAeuS7lRL*XT~d(N{0x}NW~)V*)EM=U@TsPU0iiLbnS-HnjUc8R0k4B1{1 zS&6}A1k_%YFC%N!(9|7Le1CvKX;b2p9B^Y^)RI?6BW&sQ!6yVbLR3k)X|!5Q&Q#>l zlwCik&BP}}vS6MjObsRuw8oQL7nszLM<5Iu0xMif$jBA}3E432vt@e-tR^xu0ie9R z=Z<_F-}Cot9T& zb~p_^j#A>EHy&x(W&tTl7ml=n)Y?c<+tEj0akdUU1EngF+s1qL1!R}iS zC)qbhvr7V|wM;;CkNrzF6X6ViV&j=Jbfm5974Z&ct` zr+(nmn3rZttgl+^;52DCY9Kc3&Qc=-ib{q%*!!Hk)A^4@bMd+SJ}OnPFTx{y2l~J4 zcrQ2VdYSt4@z%EOiCVkHOx`q2sn=ZhtZV6P$2P4}0Xph@Lr`MA=kV~bSBH3K3rjbC zs;(1nfb(ILc-JMOD=%R&Qs$u^B5;h|agguxjLy5K$(1bX(d%Yf4+ zBaO3#Wmq9^6Q9%tDa_pIroH zfx+qEsitc%1_b?ACsXnEJ9T^qE|r96w&4XQgQI6hxVZ>apxGTecV;qJ7YPN}!{5Ebl(>nmSWCQU^RGa2N9f3r)3CI^}WeMvtJ#@{I?+#A(Sa7Vhvfbf2>bFHv$9rYcW;&SsSTM94Zw-3>^jZXyf zBUP(gi3E$4&mGH53#Qan`1BpsccF8Uf-MF5A(MHyU^;I`Qz>sXiNeN_;OE`^38sM- zBip*Dc+j<_K&y`u$Lt5STu5|}%LGusnXHB6l49Q{AnI?di>y0E)7WKy?PAwx>E&K1 zj&Q-H#ck$iJ5(vDZka-U`8&U2SfzPmrI-BVAvTeiFuv_c@q*D@JWx%lY2xI^qw8T( z1h1DwCxhv|`>lNB%U%?PBjcS~`QDl67S6R1PNLx~yHD@0u z?d31_WdFx*|4^UMW zJM(_kb2u9&w%zJd-qV2Jxymz+OsdgAakVv~RILs-&>_&`=DLeY0+NCv8& z^ZALS&W8iJ*50|BCcQl?fJ}>~1U)Od;}8d`V@v=!vr_iZIeM}us-SdyLlvKf+8OF8 z5d+1gTrvWEBr2&iHoV?%OnFxPS$HSoT+bb1ZDb6juQ8Qi(ev2aWMqt?YreO~ePXdy zJkP{iP39{Xi=D-;-+DB-g?H&reC9S?5 zNAu<+yx9Efyc8tXXL7>Ad62O-y(4K4BBJqw`c5 zkb7vSK1L&&fzk@4HLUP4TY|zpX0KDj({%?1q`z$CGWu-EPUmKInL8BX0Fg zSs<^8#mCj7Dy*tRgU}xc=R7IsUfXSKnQhoseGYW^&}Pd|50=zDMobFaW6Ega=Em6} ze@c~3dC$oJsb%~ISC9FQpumZy@ByY*B0&kxS~K?$nUgH^*x$23%37_ttbWc@ve1+y z=x9CL@6dswY&9Y-%aYMbJ`YSA6{KJp0M%czP; zY~Pb;C#k+}{$N6pj=9W+veXK9w(ja;d3Ur^ar&OMJ8`ZX#1zLH*zxNk^~qM2<`Rwo1&#v+;h=vNwZZYgB^+HoY~$+aRR>X_Nl~V zNzZwO6m5V*QQn!HxLP~twvpW#MMtY)KFQ zk7*HuviY6U6OOFW60(FIgmd>SYY z)N?jK!L7Q=Da=JlMa0I{gTZS$-C5K~KCY}I>l*)cC*NXNDp%X`F;zLtIBu_dcl8bm zw%1|7UgMO=UFL`ua1B`EZ*I8@*o5Xr^JDY=1#GinajCZtW{7x)WKBgEK^@VSJf*ow63 zYIIXZ5}opw$lY!HNNRDJ=r_fPuBNhPn;OGIibBs#k2Je3&h}-=BMhh9iH|?XI{ZnE zBPqGCneMSEc@<1cf`Mf%Delco)kHJ2CU!@L%$#B|2h0Tw$w+>iAVn_C6Y#I2{7w*v zu(FaX7f!9{&~oHvk?iyG9{+|!&pp+#fZjDzluBoY9rHCGvVa&^6ay!@r?kU3~z2^yimUih>5+`kMN+bG6V_R7-sA%Y}~ey|5}6X0oHJ z==~vQuC(a+YH;pXgQmHrot0QF>zgJ=?Hdl&2bb>u;7&YDAUbv(t{*uoZ_j;sluIbCrj*2gijf@2#!Tz^b2y`xpdork(dMbC{Q4V+?WKSIa zz365&;bjb3SZ;K2oeQ5T-qi2WhQ^321>&?{yb&?#`Y^ zL)(%JB>C8#mLH`Foh3sP)*7Rz#~aBy`Of@5ARWEi4Efz3FNyiowk7O6L3=Ep_Ampw z>>}2F4P?`P@_Rd5A0+M%Ih?1qT~YsD7JF_p=_3gDlJlOfMv$-ibW9ALEkW`7dS5^4+d}4Jv0EaLm=0Q z^Har62ShR4!QVYH8qk!B-+;gAah|9V*X4=gE{}%dr)yLrN<7cS zZ|;qpgWn=9-+}RhUn$OI5#>tkY$8x>SP@6X?ArM`H$yuc7kgSk-pZbmaT%@0Y6B@Z zjbs*(G`VE}(CDhvpvIzkcItK^Kw82l)=VBh-sZ$x8_fgk>O^E6m$IPWt1rR;mnrA0 zSL5jtJN>CR&~A|q*``w`$eD!|S0^f!cfGwILoZI&*PDb@w1(X5(Xj(s3^2;WVa77o zibUC|rDO*4P*7aAZQ)YHz(*i^uIzemJ2EX3$WwN>TD-CE_u6#o@8*dGdB;|l7%24A zFnq$3O0t5ki9%m5*A6cf+8TTpQIN0Z%1f9teB$H-S8EYb6As7s)E-vi0AH~@_m3q8 zrSB`y^@D6tpjmd(C~dH0Zd+r5Ht!w0ltZK`gQJ1iOZoQ3h_h@ZZT}(#Umm;2}-cpbYaz^RlOK=~FL^NeED*R#2DcSMM4EA?HJ zb{CvP`M8?{ak>M^!)c%|M;VlJrTPlPX%|53`%+q4QeO7h7~^Y+0|{LgAoRCxt&^*w zj_ps|>r#JNw^CVuFaN1XXX3;rh@4cE*Eb>JCS52`t1q5*l#7-FM9f`)zGuNPN% z26n_e>^Eqli4+E7b;)d$!d>M}GrL!u4$mFz_E|ih)9;tksuXaFQ0sPMzBO8!OxN!2 z6476DENyva3t~B;xz_|(+v8X)JmzQ<@lt!f?(Q{lR)_F*TF2?O7r$)-Kz2K`4IQLM z-itwbznYnkA2w~Hj%GNLE`e_mnh&i(^)9lmT|BXTYp!)32U`utLK|w|I`byZE<(4-GJ88$Z_153L4&-isc8Ehc`0eW=nxc^@@l zF+qy)TR(7?;{GX>#+S<5(=}|xwbEz${K!J<&2v-Z>eX}g=86KYJ5d7zcn4+{fHng} z)<7}H{5=Speni=m!Rd-e_+guV@y&>foPB5Z_xBu+0!6AEW!|fY3`grXk+++CUu|H* zoxEm09{kd4!7iDZ&j@er80ykOwxx6iEl##Mfi7~1v)e#Bjn&>};Cv{WEyHhBwnVX^ z;W5~ak9vUXx>MQG$cFY%a}cA(N6k9RjYA#!KSGLZj?(dO%vUK8;{y_vegNAbrfAGI zANJ!iqs0~I2Z-PJ+-FB-nBn;I;dn;Smv3l)`)`tL0U%DM-_{@q5TA`NyNo|bT(4GP z?RfXY+1rHXldG7d{K;DE$;*3=oFCWhBzF$qN_6<0*>Ir3^tTO9>grOgCzYP4`tP^zd<^{r1-S7xxx25~WDFJDZI1ZU}687bQD6#@@$=zQm?9tKD};s1NoPCoqZ6 zN?UjG68PZ_2rz7Q37lP;d;w5wHyCe}?u8C#AagEO#lE8W$9a0 zf|&vUheIe#W=fvEuL3(>A-tC~C{&Yz-suHO*{ZGkM9+?OfNEOy#Nu{`a_R6vI8S{i zSTz?ZiywwO>_6&#*mJm6CxMhm7`k~n6<4pFhUWaH2-=fICFst9UR(bZeVl^0O3VHn z^}ZEZi!ab3vVGMR?6xh%of+c4F2Ih~Z%)ScJL*SqXLh(cv6sCAvfOu|x^h&uMW(9s z+Z4py*qu8Ml2w>4zS10g5tzm7Zl%XRMSf1-S!FW()J05I7BDH(ZL;r7FuW%2vc!aq z7taF$*l5b)O(v`4e2L3{uKr;#{Gc@Pi0s|U6nEvqU)<;CUYsi|u5Z+||BzAXsnpFL z4Z5>@&F9vaWNqV5kz#%-JBuG7<;@2yWK0VI&qzamxZ@zIMcc2*OhnvX>ePu>D@avy zK_<8Saa5H#*!pDuee!dbEa(+fAldx+GXT$dk0n6mhmK{zU&-%!{%k)bd%ha`y-c{! z)f3w-izLTmwW(1q`Z$pHO5MU$O?VZTk%B9+nn56yS3y5mM^7`2?MKAi#+ACT;Lz?Pb_lVZ#NO}86SYCRqThxMWMiJF0kMW*< zgRfEgCi*RIhQPa2Ga9xzvmNJGI#jr@g)g#R5mu9^LO5i^xP?J6D5B$cVn5r6i4wv* z)q?%e#}*X;M_gKNw!IG9ct%*RTYJ`k+D(+@>k}P_5_p-L_D99uB~7D{dQH31a#N=0 z<(~AG!9-THsJYh2*i2K`_W7s^kPFb&UHbBW=D>YoNI?t8S&#jkywUGN;@s+-I|L_B}PWfFGYQnU**b7kQ{AktU{^!^Eh!DPQ>xWUp!y^WBfjP;#FO>uw{;V2j!JG_;$g6PNcv1 z_&F6o9L>!C4gFRl#y81#a(rk4-u1i&YtakHC^5!<*yy6_w*}R0yiAR?!j|YL`50Zf z-{kNrIa7$}!elN9O&Ibk8S%T>F6(K%oyevKXgFgEKimI2_CQd#>_qpRq!09L62AC> zgQ3qO=VG65&P5!HE;b?4-yLvJp?oo+dO@s;TpiQo;q{^#rY5FNC6OE5JOXUpWAA## zck;U*RS|*^V8#qmbVVy&UY$vVsHl&te)A%6cUr)l$8`qop^LmUtc6z_23G%HWM?}} z58AO=yJvTDlj#5R-d2jlP0SC8>0Gq?G{@fJkvoRKD?#buLu@(rU%YqoDDJd0C64nSwtbuVkwxg^cJW6y8)<<5j z7i`tbSiQr7%o1Iv@}Q=UdiRW+3EB29dckq{VQ@Nsa%N;uP&Ut;I9~IY#lom2Hq@(6 z|8C<|)gsPrCB=s(c`GPA^-sgXqnkfDneC7jv+#T^l&e1Vx}9p9XLr7i*+kS6r0)B& z{5azNQnz!XoR-h(A4Klh8(!Y~P9c`ighvDw7)_fVMxxt8IX7SUNon2U?ihvNCxCwl z>~X+Z)PuTh{nDr>q-10=w)`*h-a8zwwS60w-Xn>SXdwmBB6=SY5uNCrL>UG{7@a|4 zCqk4&H(GRp5oJavi89IzF}T(1@85fT??2yn9Pjb|>tI>yUiZ50 z^SrL}ysnuX!!(~D3;5cn@F92d7+$t={|sexTZC1{`;BJm>1`VYK!OiUct1$)oq@Fe z;1MDQ6m$v);4qm+Po_dDOWXTRRNps?e!6t#f|)PlvzuNkr2jm>9lpW8`~H_fckBy$1bk+luDLsFcX#izlV5W}Ha+ZGmCXsMpnr>05WRZ~1KmEOiQ~9m0$k zeJKHC;6TtkcvxPb$G3f1%gvyTs_4rDyX7`MT8tVUGnn9xqbSIYcxDL0?Qo&b4xPf9 z`&Ba3bCa@F)}(bAP}IaF=w84QlMrdcq z+aQ7QB5AdauOT7PFq0#OvZh{0OSZ6G+jL*;TfK`uK|}NXXKG_vAE5yZFV9d2naML9 z?1``hy>5UvZ69N6OH30;Q`vXjRhkK@^nZE2t~6aUMMC?>AmE+3{Od>+hvbgk-aT0& zrYnwKZ@XRc&GqCZ14fnNATf<*ph33{a~(osH34^oc7jKSL3>YXcr_Ycz@L6-62<(j z(^a~VT!r+7W~uP0d4~o>15WY6D-xRf9)jOywG_g8tMKX}o!$l>p?eSfJb=zq?`3Q! zC3mIsni2YU?BkNI1dGI!@dFL+b;l9z%1;>ja!mz*lw9^TKy{xD_@006!&cI?7A zBob-K>lKhhiVavTw9J`&t8^`cE6w}c0I8!p`8;fhY5$KOSDA)MV17`;cf)A$xQ6&TWBPl~lK z)2a;^(AW#^^h2URme+zoa<%4B&8l-sEX#eQ05uedkz?3>mLaH7?#0Z_nKW>kP#PsE zXI%K=1XqrA)rpvuiB&-^7^l_2G$`h0+0dzZH^D@wqk$2nywfB53 zNAf)282?WM`Yygyw0f6k?wfhtOTxGE1tJ_FWNMqh-u{)hG?Q6!i{?|qBAvmmM z7xAMy7~U5$yp8uSC?*4V<6Z+Wv-7g)RPBLd>do1oKQJW{YgM+`@gG$|C>L*r`qb08$T7G$|9|jr!n0t*tlZWdQd(4OZ>v=liEn|6s`&l*@g>wGa_wb26Lnj+q!J&-a8j7&^s)c>LMr8p$)@==Wms5xIXV## zlH%Tlk33Jh1!TmKMUh+T>*_~nCV&BiKymtK^_}LxWO7in9+Cm__K0md_xWrptpDg$ zwQ_e`EWYTq)Etk!>zI+7In6zb!v{$5++U`+g9<**+MghN#lS_2Yn|Jt8xSg4kJ)AkRnJsNS>y!lJH zK$1M5BG`YW$-xSUmSMGg*(vEX)$rMAomg0QQl5H>@37zPDc)p6)m7`?$_4ys>4Pi$ z3bVgd8^2gXQIW`Nl-k7{HnnP1r-!^at3C^STAT>UQznxyvj0H+@$X87urxt<_XaP3 z)lq$PbQniUzd4H1M_1XM2jq~6(jG^Nz%aciKcsByuD4-zl0iMtoRKYNV`~lRRM_82 zR46r)?jPQjx*)gpr3LP7-dl0w^QseSkG|*1 z@ydvkTRx|gXP+ExqQv9F5pUiqFe6hqva_W5r2RH`k=5E&My=Y0y$8|*65ft^`Gp4W zho)`VlH%1oSiKvz67g8f%FhKA{>VOo%qLG@i6VWUDG3$Mep3=dQvhWiYE!4O?OJKbPVU z;7F9O14KNmtuD^FxqIgBJK3J2K;WFp4H)*=xs^K5F?Gz!i66HcD-j=JoqWp5Le1Mk z32<`JOkDj1Q?-C81bOx5kD&rsWro=j9~9FWLDS2UtFms~#t7qSMdRQgEAJOcuoT1O z0{(Yq-Lu`p7D*%NF4xN0aYdw0KcB`8h{Vsmh2?UFb}Pz!8AttAj;0Ewb<1vY;(+_g znA$ta+Kb5&zIjm1xKosQ8b!{|emU%WiCC@F{J&M}VBJL>K4=4Vpti{c5Q5Uq#E%u4=56=0eRd=Ss^=Heq-)_(NODwS&iNzr(?# zp#`3P#vRg1azR#L#s(BZ>8v7k5TcKi%o+9D$X_0oT65W(T%%qBX5?aIDceA0+Nu9D zr-`^{xMteao?$46cLbD5e$U31Z4LROZv&kSX;}&wrt|>~i%V&_adpc~GQMVAjw;JS z-E|YLc>?Jout?FK;hwC8l=pgpqeMwb%!%3jlwJv_5&r(J>tc0S%~lGLW$d0BgP2Z< z{d%)SPsj$SO>l_P8ugk=0cqzdhF4k(>hmq+XfK)*|5G0Mtm93fSIZwZZU?6m`nC8? zc2md8hiku|F5aVImE>&Y-m1>b3FDa*osFNYa`7oLV==X1>uqgxNxo{je3)l?x%i04 z_2D6|VT&6Lu$eGgP zbFbMdU#Qjq2qAOqm|j0)R+eeJF3Ns6Kh{NNV6sB-bVG81t^Ad9+qV?20^Y0E#t-jf ztQP4+;Jzv7(CX!@k@F32P2Sh$yUhP_wb7%_b@VDLp`7S%mY$%Es8=Bv@Mlk&Mt)h` zHt6|$ELB9pb7T&tFUmi|l6}*P$ZthF6(8%*-vZP)0*0Xq*KLh;k9eHtu&>-m*${pU zh-~PVrJBBAViN~1Ee@@RlH7L2y?ciRrFf=nWfriVw}2e8-786rcFFd=hx&nMiuamR z;_YF>?2!VbB`ueC9K2N2QKk|TShErHxiHXzF2$`nJ|L`9|Lt~)Czsc#O(^P_L~0_# zSPZmq20N$8^leWo)Xk7Dd#>vc;__}f_ZFM17_=SvqSL-}LJ$FdGFcFKEVa@qaokLE zrTlxCu>H`FTjxq7Vi1E1**AC0M=GO;G9IcGss4cHE8b~3wKUvHT9HllX()Q^lXVQn z+sW?B=PsPc+bWfK3Oz>a6^ZsM#_O6iH^z4_DKj$}~MZ0&Ecdg8{B zpG9e(>o}`n+0L*at7IU_7PJFYPUY*8)`5PnmMS>?)rtzQL{F{qjZ4!Sn8Vpa$URO< zfF1*-G^=9!Vacsddp}M!!GJ&~-r^66L%rgaZNAS4w-qw~Q!-h+>b-51nT|kFk|J%a zAz-Nm#&i`#L@$oNzfaWtff=(UYi)N%!*P>Gv-R=N-~;cKqL{Yb*aZrx{f4SE*CV_- zuJf%$CT%spF0K<8EvhUA42&jq)u|r@rS|(KVj_yQ&P#EX+cB{BOWo}}V|cc_EUq;Z z-maHM7Q2ZC{MDhJq1|xmOOA>qVis`y;ZeKBsAW~b^$n0V(V?5c=>5nSA(N{B3ajIP zybhI!>iQ7{dmJ4(>UAvDus%_$#=3%h^o(ea*qH-UmU9T^`U`}olgfUgU--5KUd!5g zx8jd|_tvKkd|ZYJrB%{_r&gmhd<=~i{DP21c=gnJYxk8Z!ij@ERtFJ0ijo8bM4FR8 z%VVip`p%j=+c^4cZ&yeRm~7;C z7cy4W7j+rf}Z^z`WBlEySCdMm`-_p@&oeusKAQYhL>lZJ-=0~M2 z@5QA7Qk|iVU3Zu+z355{Kcx9aLBX@RxvlI6%bgiX<84SliDP_Y@*W~0$|Z{)r(aRk zO>C{^_x8*6Gpoo#=JX<816|v=x><(e9Q?q5oT3|IyL?zMPrEQYQTNMVc9pUFx)>@Q z#bjL(c5LXHNuz@-MKa*NzX0Hxa$$zrUmUBo=;4Yoi~$1@o+v=2EKPZ(1@Zy(EZ1UI z`_Za?gh|liGIZPFCS6o~-PR2q(RMb{)&~EgrW#EN-Kk>e4V_(#mK&0UiMlp5m>m4aq)mmph zTnZr6UX~rN<4ljfM)UCoKi9g5wIo&_B^ov z4INpuF4Kw$9>InPv7*LqbK`jTUs@c|V%B$6@TLHZMby(F284_ll#e#(@W1ZuV9*q4eN4+w zYe;M1=yJj$w1R@s>J@Qm7fIFX1Pwn`d|hAswHDfIc8%uD-zn+Qf1=o5YWb5u>GJ@V z0!QaB+0Spr{%a-vMlF8xxj&x;2nxRx#J_U{@&FHiCH^-l^WXR1uWSAi5dP-vKu496 zG@Rp;lF)*BH^JgUe zJDUKSt6Xr*i(X6I28Cqi-_14-A66S))L4#6m z$W$>oEZ;kPySx*Y4AP!_CGJx<05y#b4K0<1I=FR7Xo?Etfx2J6NZPgda;Sg$9VV8|xD+D$oG}F?wEi>;oBOR-ixQQ( z)2zMk_OApQKWscdD$+JcTxdiS=pQepowqYXQATZwZeYCfBz^=d3HcJ3U(xbL#Ml@%}iNq3v+<2nA&A-{oA3o9kr? z@hBPqO|5XeNJ1!_LY>nL+jM32SgP?EUXQpA3D-HA>fUOEmw} z>$!zfjXfErTV%dt)qX#WBlNaiC?iqqDtnTu18eBSNr8o6Ll^`q^&BgSL|p_Vyrgk4 z8_E9jjpv#2G8#CB@kJseDeIjya%`BC^^%8KMACLShMYECgKUODyv(;je&NT8&SwYV6r)sL?W_ z3_}j@ObQvb_#)Bg6AHA5^L7bkvD{v}YQ<{XZryh`ZE%{sRevA@^x9&m@v@FtuKJ3s z!z#}0J4zv)q=UTxb`{5%y?kt6j$4Wd*b%!Yf&352gr5im{RwWFb zs))_V1P=2nB_bp=-zg5HR{aL(EV>iT2@FDE74(~oe`2O;5?8Qk3imygKfMAO)TU0J zt`otaYIHUryr9XQ-M2%J@0%X6l16i|;MGpN+auy+KUr8jtI<#m>6%%~TnPE5F=~Qb0`7 z{`-hgyax zI|2+TfoW7Me)ZV3-K-CQgDYf(uhH!e5qPTk<9W;YL3UBxGZK|e&+qLnQLk7+I;#L( zt*kNphd?}^?+Aa^f@^U@o_V>*GP>PbdwKDicsuj%@(cutwhYJB0VC7h~I9VKsMK$*9@NIP;VYnS}K(!`Y&;gp88hpD67=&8MH7wplo043G?&=UJ z)F?a~HR_-QEn#unLI<9&JqHXFNcA_D8Do3cj#44BsEKT{A7aog!(Q;{Ba@gul+e0F zxkpKgfA{+4yA`op?5pD+R{)Je^@%-(BcEY%L@raFvaP8~aN{1Z0nSTRhnm!WXIH^I zsp&(fMa%f(qv!UZMAzp-zaiJ}V#s7*vb#fbV}E2%dvC+ilk5ZwAX6Ch{OEt6-_st& zbpP(MZZ6am2OmacF>X!bHgN7=Xa;FYe}W|hC~Ht{*JQA zm>Il!o%6*Ky7ARnam?&gTz?;G@?@&FNsL87ho1N&OFnt7yq5LPH#_>s#TA*yKA#P` z|M!~Fp9mCZEdmh>fSu7djQ3f94KOULme(`JzBRoYlWlyYA2=$~XVW0So&B|7G&Fzx ztv|k~T23CLxdk%R2m-p%8@BS{Y5+0vbB6T@j=^L9sJ;9~pTO!6(y9;AJ3uB5VHg|% zWRP|k$%px3ghreJ6V;%fJzPyx^j^xLM;HD@whrFP!8i-QUCwV?0rBz>6b)ADyGZKBNZ%qXq1R#~&vn2|TZsWr_7@~CdZtzT*@l2(x zNC^Wj<4s>XF5H9N^V(xZpogqEIcZb_s23AN-1_jA`_v?zZ9%rNeFmT-QeusZAGWq< zu0Yz&tQ{3DNLF~BW1RBRS2|y_b`2UFMeza(!Vb$ofCqYH=w|72K-_liG?ubhbfB z*2O4SxL;g^d8?5YRp~Teyp^ZyvytbsZN*h+A!NMoxW%)0<81@ubu)fcp;$jlwK>H| zYlNQ)h|~n@i{CB#ngXs>ue0)lJ${tq#q>HdYutkSQm8Nhz+ri7>nNeVo_=m-9-e;w zU4YH;oR{sJk)`(CexH)gcd=@MbB}gkTaQ}ryw38{zcRSKhiBpYFfLoi)BfI&K!l#+ z1m;`%L_}<2@EXCv6lYlr`KcK3XYk{pWqNqNf|RSK(1MX`raA<$`ISIcKrO98=<|pB z7-TK_4>x&FilqHa=$*m(GaP8^>C;jRp}V5;GmSBjZ(b80nH{?ecTCd0|t%Vt2U% zx~fvD8dM(?Ncr)IG3B*w6~CouRs?i z9QwTVr9Dm6$g5~4ZVrMFFi}kd?*NOCxn^pj$r`+dZqLZkvl!4kg8s&Y@A4ssEq;Z% zv2{soj383GL=$+|<~mzMzr#c;z|*%P7+XI=`H<9iXtBlJB64nOW}saf&{y^+&iGro z*Z62+wsGjChpu6$*OvGF#>-gFTvOZmfd-j675JKrCPr(hKaw>@$NO4ssj`%ujj?6< zo|E2dVb|ZF@r9*@T*V|^>A247C=mC#{eALC+G3sE{7A@#t!X%n2U3?~Rk!mx=XUpJ zJFJ5)>aC|=u6@a!cl9+o3{C?AJ_oHdsD2Yyy^}LUOSro|X5Uzs8R+Dg4ADQ;>=U5J z_~=K^1#`q){zHZ+@4@OvDgEI6v{TZQwK^g@;ASkip)|3QTgY|Jw!K+L728rx^z|EO ziVf{n$0BIqa`j7JQ?+_%Qg+fMD;;F0s{pDbZlfBQ?(BI#meIsS0JLmU?cwRBYI?nuvg}>O zdaWDpCYW{#F|pR!Qbj3FfEXeQ1lyKmUb;!X4DGQn!BX-!r9HC#SLCT(e9SH*+xc?| zDFOVxXg{$ut%U82dH81M%=F0M5Xyz_uF~F%Ql;V#)_RN#<_Grqtch6KUZ24Iwe3XL zI^9-Bj0Ya*!SR$v%P)8&%`p1KP}=Ok#laVbf(0N4O8=A000+nvvg13w8=r4LV7Z7~a>> z!v~ycS0Y_4Oo&mn+yXAjRN|}JGnKeiH1C6$N}V(LVDlXoX>)N`SuzLY$PL+tdc5sIS2vK88h-q*XJ8o&o$; z9~4qjtr7J_XZoSvypUDbxK?#$)U+^Xmsj&dm=My`xr7MA2ww*Ux+JT>mCYczU0U|m zMnzFiJ|hDA{+)?pIAp9`eyf1gq{sQ;A1e#8OUY^s047;+_ZeLp!TFCtpfV%^O^`E1jOJf_zf8ev zwyFTk|7z$GYhenWSc-@uye;c+)~!c(a&&SDqzTCbYY{W--W3t*I;h+ISiHaV7D+!~ zeB-eft4FhUi}4Td9Sm*~XbJ^XagqxEE7@p#^q`BmB*T4&&Ns8ir_BrnnvV7_uUcok z77S$EO<9vFT!S8-0_q^+U1p>{T~jiVjBWL{px(R|vu+b(D$(Mt=2PbYjIy&}09{Ah znGjg@S!-p-7X5#AigAE13yg5SwGKVa@L=u96rZ{ovm50MR~JcdmyB zK<{Qf)`%+mZf@&J$D(O6=6R)($z*h;5kR@*rznJ@UD_3e&N2dz)~}J49UO14Emzvf zbi*Y~TOC^bM=ZmGky-1*2VGv4YrX+0-axpfZVS)FYat9Cg-k*D#ewAA&Y z7}bhP^aKt3ZGSBU8@whK~(hAbLnu*ivrk*`Z9$r*Q4T27{>+hZ47A z*Y$K^6UocT$dZ8G9WlzDV~t1*r3QGg;)J;;M|@4wn18@b%Rp*8u4Z-ViQy1Hdy({= zb7v$z+L#aB?8jX`H}FNX+k2#jL)0;4v02f4y2|WH!hOW%@FM6W03i>yH}(X?^Pu|g zS)%ng=aThS_2o${em=m&cvP7@j+vc+xNO!vA>jIS^i^z^s4JdxDk)DfQg^!aO{Wjk zZ1c?`5wDkcnRp8_6?T}{ntR=0YNGn_#{0Xa_H_FOvhuy}_ri+HEOboAndV4e(GJ)7 zjrjJGedn|Npp>mpesO#l=K}0aggR!xovrxPQWk0P+G86YHgd0PA$`tc!UGEvrMb5LNBE76 zCMkZ&66lXoocpQQ8?1Lyfev6g{*6&uuYI>ye2=)VB+7zacVs9V7hO|whC2MBz6c_x zschJT=EOljTbm=tj;NKhLr#PpE@|sz36$j?HtNHEyRwumX6%Xkpz&>--g9`hznQL$ z_E#;d6hFTgrw26m>{d-#Tt)vth+(Y(sgn_cKac;QBWSS`ND$Nzv6hCOI^d1`_A^;k zmkkN_lb;{{(okGWa4T~34o8oyTl;P`OzPG9pJ9E%m|Ka7F04+!gx(lmGjNi9$dy}N z%;{pPpu|_&w2CgyjL&TuZ;XR$noEiq%YCQlcD#pHIAl~ItuYYa67SKG2aa?j=uu)a zsREj8iirkij$GQ~d%#+|d#e=#NeSG)Tw?65FJ6plLFD_roUxwI7v1CNuW+*OU~P=d zuY7=ODd62=?Z^1WYF_1-lYoBxkf53JrBT6iEXzzO#j@odxqH$ zqUYbec3?P=?nQbzq?@}$M~0FN+ek`9q-kS}*XU8m@#jAU5i|NCQ&cKQC7Ix=Ume2&?Q|uuIo6r=c|`-hm`J*Z%qN?fKHC%cD|;y-*99cCBG^H zT5pUz*lhxa8W<@~);YZY)$13+z+7Meh%VK6lX;4y>KyXKktzrNLZ4^#rwd>DTEX{S z{PqV}FdkF0Sv1Pevuo_`tSSAt^0e9Vs4~qhTP>`9?R1&-XTfMA_Cv20(net<+PgPi zJXdB_-uKgLZdR|b%j6Hcbvk>LVRDoL!amVblgYR@bc4SqjaX}nz8%e8aD-z>$B$S~ zj0-Vw)CXt0xgFG2G<{|9kM{;hU2q)xw;q!uAu$lg3EG8t{@V0}DX#R6Rc~^x`J!%N zCn_WzA*h)s*lOeEemhOgoM}4O#$N(y=+c2HG%x7m=cz|)wM&|Fdw%~g@7@9wXJi;) z-+yQ(N$zLJRE#T5eidE{j*?!9Yb$~ay9LZvsY`q=?gz!2U1{id$Xf2BcS6G}R5dWr z7^7UAb#4UUi^2u;=JuWzyizNLt%xx2kldYF`~eS>yh0CC!(_s=A-SY$djV2N-`ZB|`s!0-ZX*7~$vW*}!_SM<_^?7id4<(D3b zC=1^{hkGfK!kh9D@M!O+`_S76DQ3+}Lrd_j-OxWZ7x68LtOyP07>n6tzaF zEyn zu@c6+RjIY_)1wAp+K1wm%d6BYvl@1=e>f4A{kLUtEGudDeq6b>-?OwPC^C>Kw74}z z+_NNL74|$3YvS@ ze(sD2k!_7Sj^$xdpC{vto1eI7C!y;N;OfH8_dK{8PsBVlsd5YnFRZZeF;3h{nr+Pz zZvah@{PgaU*0|5qifEv{Uo9V=c_kS(*bjmD5nA7Z7s(G|Q7YAcoP{v-m@LKxvZhMO zo!x4m5!dynAmR$o^m-ygZ>t#=`>gY;8Bx}-%842R&Ek7n+o5x%vUI-3@I^;2pZnQ+ zZRsB3;&@(Q_K-_v^1c>pY>&cNg4VTw1-Y~D&Op{2&5PrmOY|7aq#y&Xep3%s%bBlC z{2;nYx;v{}^QFDt=6m6ue`DFb=O{JaVz#kvK1yLzFwJEc+=Lewy|x&yGI?JOG3zaz zo1UQP$M4ei!X?Qu(CHXtYGh&zc@$P@(>hZ1R2~_~(9Yi&>0CO$Bu}G4@Xi_XFt-Iy z`HChw4&wP3rM)kF=M9CzrAZ<5x8|dLh2!0>obPP-Ufi>DUSxt)q;F^Nio=b6VK61QUOTYn z5`UI}*4Y;5B}jaQ7g++YUJ~4qM={OfkE%W2XWL$lbWVPN7-HT|?j{5n)Sg#{bJtu+ z<;4&|Pv)FD^Xb-6a?Xw9kN%F#xiGDAcQbx1phqJt6_-}XL7q)|i7pLv;Q0FVM>Wnw zo}q&9wnCbhO|q~v?P-UcO&ntppvX9QqbTfxdG*!ZeyHSEitG4Pq*huvw2-@;T7`H23Ji);h9)@*g8PSAB6&A@Sd_ysvQ z2k!CiBl#&}loQJAlZnc%cJpcRJJ7_1{#TThGY*^3D6GDO#-uNi~woF{hfpOzMPW zhrtE9T&R}yePy;yGLWw~FP^Z*Qy;zN8^D7dUq9~0Iu07vhJdGXtU2Mp5C|%Z`7k;E zE^PYo-fdwR>p9TtO{2^W%Jj|a*5qVZVZ>MRrH;Gxty#08V$g~``-l4)!U;W}Dx5q8 z_m1=ote1@X^Spd$`>50Ep+mXn4j8WUkhEO3T(LW7D@2idKi#E^abb;Wjq1`egjG)i z4tf~luH8x;7CI3Wc?Bowz#Jj$#-3#A7%tChUFs3x#0G9yUPc+z4jDP+@Z$6mQLW2& ztw+Q?gfS7_-N}ylN4Q;=oBTF^rRCRsp+B4&%q+gP?W-a-4?d`mbZW+#(uK4cO@G5Wnba-qb1N8gJzq ziA<`a?Ti62KdFWlkz_{Pwi`G~Dn?8vt?i4mI~^KLAYh9;_$CRQn&p?eM7B{D=8qZ^ zCugBk(X@s_{ZslQ8>{9OP@eafDjLdV%k`BMN9+stZA1ahAqylIb0W1L)-J=AFTo@- zmOkV|t*LnQX{yMqoD^c!5iXa|+ek3{!s#PdGI-bC?;c^Q&kN(!UX+WCha&AH%2(ZOqr(b3doHVHOu*ClOaveU z19{Peh9D8)8PR-EF$=`3oUCN5_L!|Go{wJQNovZLL0JyrG;Z}(i~dyNskQAat0Gj3 z@F&OVj{L~Oydf;7a`AlSP|e+W!PhF~MXpV5+5h8umia;k)GPZ?Hrj=93QeOgXIH+* z6^by<)X56xGj}zS2@PITblB^o#}f$+i6XCwWO#!KY0cd)H!|*3tnV${e8(MK7toNy zY>H_bFmLa5?-Hz!&nnL0S8$$*guEVn0mk<$D^EIQmtKL z*#=7sqnO^Zv;|%W(v@4#HGIcGS-pO!FdDp;*qaBjeqrRi{Y|PF6J1?#GRIiYb6g4|d*pNQamsS)W6qHI!<9_TQ z1|PV=PX38GoUYZyJ=wCD>{eDo%IXL`V5ZSyJAhaR#jp#{MR*S>0;}{@=7CmEN#z)^HT^@D=dOfCczZfF?$#L4_pTL~THllRU%|!3s=^1CMED*xrEu z*f;<<_fGx;Nc{bqI~eHHcI02z1fu#+(Dz?=1gMT>{y)6v>MLe08*1|zH%g4wVN zDO8iR&DJ(sdsBDnlBN|_b|Aw7EmC`(>wM!aIq!`E|Ajtt@jEGR;7tS@`^Wc=d-i8H ztULnkdiY}jfEPLQ6?x>`=EiqB`Q0PMTRxNR62pVSa<8_2Y^5ed$qCx3$Tq!jp~O=B z=E^ooVYu-%wQ0*(J5F@_K)cW8U1u-S=SmyuT5)cpx!b#jKF;ediPap?Yt7I*{$#E%!_^EE1q=JdYy-M}l-U1`SEOzTvf2bw!w#%!`tT3izy z1^*OFdDY>LEXQfhd+Fy4Jz1{b-4O0wuyd|0U;2(&Owrh+ldo1SZyMXb>u@EK7Jlkq zFFn4=F~kX+_Qnu}_ah{s^c9~6fd0Vv95ZX{%BfDo|Dn%mG(OqQ2Z@p0QTS;NwT;zQCQjdTHx zXV^NpLf=*Y;2#n%ReGqDo{)oHQ*+zv4!rHMzZpKCD9NT)erBmSb;_4N;6}Q+c*(kE zTPX)cdVwk~KJod5L9#L;$#;8|DOt>QA39QXU3|qwd)Y*BFf!D-)JPc0CTwlCdmFL8 zmnu~MWm0ssSw>uD1;e~#0gZepWoJB-+@nl8zP>X zcZ2*g<*W2{ffQ*jT~bq-t+L@ppUr|vT}?+EIOCo$l~&8?_3+GGns4u0uvFx%mf=}O zhX{KQLIhoitra2OUi4A%oxy8p8yzh{7@-ob+6CWu1gd>%NJRH0LKH@{y} zPsXS-^WxN#cXKuJ=&kN}dL%-ai|5?7dPv{5FT?KeOvOhkPG{oPF|s?m?q=pM#9$z$ zD#*6WZngjTTC(sOyfV^UTa5qAI_q`s@3fO%6&7VRd_I8zoV7AOv=@SZho-**!DN=H z2qsE=GNv0_P4t#zcp?`^7GI&#>rSJZ%Di^GYj2;ibYY8`PVO;iL;}<2cq+du;O!CX zjSWwxO3h!=icU0DTBsj0>^8`jv{E^w#%i2+qf6*!uyVTgd|M=MVbTljo3g)op#bHVH3g=f#sN1LBu zumLD?0M2ZUni&7$1iz#mnIgr$td@%n0B=)vo% zMb+}+oKl(H-1b2}*S&I#0ZYwAK#O#2=qGJf6@j70J0XLfF2bYHkYRpoL^3rUMlGwV z8|tK9)&nF(2hbXb&@>aj;6Tw4o|50Zd8;#YzUB_sd9Ahqeuc&Q(kbksQKYSMIr-Tw z@t@wLSCo}aR?5%2E=%U`F2F_&{&XU%`} zWJBN4N2Sr_HBP;1<;w0Fsl9%YEwVIgr4(OrnJ_A_tzv(Wt9sX-un_=;G_nG7-M8Hg z5gZf}e~c<$haO@`AKcsBnQ39EyZ*TnD=LeAE&_92axr{fZ7O8#Y*xiSDAzfRE->Y* z^}lcrFJ=MpG&f92s9)_Hezh@I$Qm!l^P-mD6Sbe$rrDQc&xpsn zJ8FxlwJrDTr25i8nFeA>QN!g?>#jI!m-M?HXxqNf?O`fb4gj7by?m^OoxPN#?`C#6 zo9#_&)h1so^dJv}vipf-uAFGW!u_HgZMHY`VIzG8pjfZ(*O=h%9- zA&2S>VlmMgf|kFe`NFXHEgYNG0l7u37kq9# z`p!*_P{Lkm5W$NZ8I+d=KI&MYkIa7qHPaJJqKx^XCRAzV9Gvf^3_rivIJ6GE6%ET4fS#}i-+~54Epx! z+fVtLG67jrjascLhKTBAVcU!!rwQT?SvoF>t~d$pWJKQ;($=sGQB|1Lu0nM1t?|Kg z{R{4yo+!&6x~DOx0UwKf$j_jXo7Rz~EH)dj5O>ctIk5ss;o8i*SukEY?-(ZnX5qyc zNaq&I-B^7n^HO1o#cX8r*6vr=)HpDd)M}+lrsce(IxT5GCx96I77 zse*4t&mrl`bI=&pHht5?$L* zcP{sW0F5}_@k7&Q)vlv?@7NJuAX~gF4)=%#XWUXi9J*&L|4)wU!OmbjyUijP%jqb0qZBRs(*=3-uwd{O1rsdkjWK~X?HNit7ZM$^jq%7QNJYoE|bu*$iiX0KIE>O zye1UsAcoe!k;{wq-2kY6WbjWQ@5K5@zAr+gyu^cS?bvBq6{be!G(EhVJYBg3gmVs$ zd5t-J^9C$1Ubc1Xs|7RxjufHtcQ^*-&+wEa%uWVT5rEVhdXqdYf9>CA@BUlm z@>(w{IG};%5r4pDr{xXYd*%O1(rY6|y?sj5>z-9oKQ= zQf#sh5UVuVjQ0S?apCO)uKFh+9MZ$jw|16!S*f0nbbiaPa75@sA?KNNf6LrTml*yd zQ}r3>A8%!L%oGQnBz>(>e5pQ!9DeS<^aHl30p2#MNU{#$LO+}w1|xyi;bU4i=eSCM z&bQ7fcdhH$2SJ;90Z`(Y#KqUB^ah*ZB%s1f#`lrLEre~GW>e+{uXW@#MsE2~epoOP zg={b%NPTl|l<#?NyMH7Nq6g{#RM~$-?1hM_ulyP%HRg3?!le9wE6ogGh6~dHN=U%E z{N%yu8eF)Sc@vvCT9f6LV{Zo27~>a7YD?{Qaw~?2dQYP@%|J_}?2cJLv8gyMZD-%Q zTy%&_@)|*7d#Wja_d6vQ-Wyg_Pr#^ea^;Q~ORfdmJr6)j@7nZH?;}!^!!Ug{;?8X@ z^By(V#hquyBo;?7QA!jnnN@f?r+}2acRsl~eGn!x38=V*O6a6YmZeJQ%DVd`*S`-N zjBMiPQ`D(fHFG9De!Sx|*Tzv@%d#({TP-Tcl_1q#T%~#IWBkO6S&~qom+^vazeZae zSj{cKx8$r#gyMKi-b6(0`oyOiWijDFM&UteUaW^kNZFF0{9@i%7vzT;cVxCf4mf~Z!*&wrAtLwIv zP)U-?#SN}?e$u5Tce59nn*VdVC2Jy#FRmKj%DiL@q(k|&a#X|3pXHYEX6>S`aE=FL zO4d#ingW>E+D!#GNn5M6CXn14&fb+QMd>k>ApO~#RegVrHnfeRaoJ&hB}6?OV5nmQ zAOYYzj%+**l(w!*E`KtwE=i|G`;-)ppHGQ4ebLVtU z!(s~UA4UvF5w$;(R6B)~KN0`A^|=d0U^xb=n%kOqzQXhm`zvs9JfFprwP9g8p}NU; zB1K1GQPmXZw$OTlZSv^h8a0QAsI1~VuC<{pwp!Ban@Bv?>i;3{y~CQy-gaTE%-FCD zDoRllkuD^Fbg@tcRC-rRAV5F}y*i>INRduLQ-J_dA_NjTjt(Ft2_%pRp^RV%5CT#H zLMUf5I`dO!-hbZnedjvwb^h`4BFWx+t-aQ>o^s#!)8QYlzmBI>4gyOpJ9C)fB^oyM z*rrZZ^oV~!f5UYazoEI5TF_M5pslJ5Im7@lgj~(%uMIR$6UvYU3_5OR_elG*jUW(@ zdEiX&{9_yN!u$H=XR2y-@&dD|w1AJpq#%SWwN^e#1#$r8;o`pQeKLA5N#)7Lapm+z z_%ZrY>KJNpk+Ue+U&l}iddu(Cbm2@04i<+cs;|ThHYG35KIIby9LI$OmV>jQz#>+kE&#J73oK(fxtW>B= z0WEoiV>%$6ZJ&8VMTWRWc+j;m#O<@Z5#_^bad8^C>r;**(s}~u11rby0ge_}kDj1# zqj0~;4AlxR!{G*Ap@_Mk`xTc_gL2f_=&-SI8{9jEGR|kre4{b9^K85;jXk!x5m9iT z63^?^7QQwTYUEj5Q@`{=wZb0Vhpky}PSmLPvqFUj6nZ=%GDp_>W$6Cn9TjO{chv>? zeihE6hS_(2xXTEptxpCI z1uKyBP-MXlr+SWdYGGjW4?gSWp4h1n`rESkDk0X07%>%6XG)?#VY?ca$jrIwo2L~{ z%h+(PhOgcdg&ytGo$-eJ+zQl0e5Xo(O)WrlRAl>1#Oldt14|+;JBsiwGhmj+N+Q!l zSuvFy@hTGFQ|nhD0ChPRC}3z20xwF4y0>n6Ujaw7o9Dej&0ibF*Cz` z1>3RsNr4{K8ECcuH@#NTBu1)z1tB0O%Xu_t=cx?OkcDR(Fs91Dd&fWOVgwxL2PKZ> zt+)z7)}93T%4d1b4W8yUwF;6G*DOFZt1YyfU$=$ZF5~d**^fIwl#Og|dS5dLPFisj zg4l5aR>w3Ttq~(J%Gw=LjpsS0RtVxPhF>_O&;#A*FeP7S52&4OAVy?!H_;#c$M{yV z1>{$TM~2cumeGj$?8>~Odn?=sizB^)ENH>teS<46|M;1ni;m}%sgG(VUrd8R@-~vn5$aJFGuNOF@VDZu1?>dbt0(; z$bqC01KpjOzimgie`uTo+Vss&ggc`WfJ~)@Ir06RHP6pAA5?$3go7(gvn|mfNP#{1 zh?o+VTu_}NY5L)0W2KZOFP8b(wzwJ)Kuk*`bf%QwIEgPB(M3AzqUorH3(2xkeL9$D zq1vy)C^4^W0JHWE_-A$P)FixFfH^v7$1$4CanZEJ5nF18xC0ErjF8a!kL#8QyHs%f zIhmOeF>d?yR2yZi#$o$tkC>MCCE9JyZ=?d^ozdXV^EepZ!e~0VR?(|Hbe^l_T{yKC-%uBKeur}wl^t>cM zXv7UB|h&^}}jcM_ctkUXr*Gc|DA8 z2!xf=;H9pu2Jjm9RNPfngE;q#DJgq4MR+yH1SIwOiU3*Xt>uB;24>31-Aad0WZxCO z_H+Llo?<6u87j(F=`Bvs6>%VDb*^g4*zoB#8+LBS*Y@>s-*bxuN<~CT(sbhUlCIVS z#gA5Nueoe(v0+mUp-$$7&bY~4+4=n>k`e-WJZ*^B*q?Mg2b}q|Rv*_goG!Uy_`BcX zL)Ay2D2Xm4Pf`?DMw5T6{(79`)->G}G|YXN-ya`2KXr1vvAz-X6yhK9aS7Srz=YNt z@<>=@gFA=X5t3AKh5H6kLJ}jf^E^^%Kt?Rpw-Ou)6*F#i=F$p!)EbD5rMZJd)~Lw7)bP4A&m4O4jf$`E_tE!)-^Ri%%)6LQ9vqw=P_@I^?p z$R^7qF+~qEVdqlD%16x<)K9+Me(Sk>;}t9{PH5*{Ba!QCr?}MGM2*_7ah$HFx}ydg z0=!n6eZ#GmS{1W#CGQMv!C@J-6RP~)e#2dk^?YZL+H3c=8I{()@jP9lxgjyU{%+ca zt;w}~y%}Xt)u=G+!?Ae;#)RPncRr)3*~_-g1TCM?-w3-29Umck+@@mYTd#$=YU)2I zAbG6(TDu!H%kmzXjO4QNOKu`_bDgDKHbo-bk#_aw!{D|>xJ}YAmo5g1fdE9U10R<(WlbGG?M!T>LVk5-B9hBzfM4q^7ELr)8d49e*b!4>F3t9 z9SNHuD>)rh8z`k}S&h~t6@Ks%V2X!|$@BUPmQ@5|I>c%zjPWZM(3{4$K_g_-u*7bc zAlK7-U(Ub36Cl)UK5XQp-ra7@Gx(VMU~68c1pb7al53OD$#WG7!43OPB+G%7WR~}a z3zoQOo{Ku?JiJB{2!F(E%R7Fg<4fp^*?5}{>Cg2(D*pW3xO4&Sa5}-D^Y=hCUbj2z zY~evc=r!y4d%r%L(Hf0GmyR`xIPS8pQNs{j+pE$(Nf^q1`&4oTmIiLsi4&VT8Pw=3 zH;TL53+G3Na0d6G*7|0zM7E1P)s4#^sS<)q@_}F{6Z$;@o!O|R=WisXLA@tfj`?yO zYU!T?6&X*LQWa&cV4k;)0-3Q$tUupEbV9-UB>&VCZ-EHAC5=a(wq*OvXO&c!3+g#G zLQ>|>>BJEAE2xQ#yvdA($&9?bGln!vgyKkI;%_y>9+Guc!?#tjFpW$C+Ai4R0cs06YEWwx(LY`z6fIkQc}=& zVb4vzl<;Xiw<)j+$!ljug;uBw1uAe6M7ufPVva0{INn| zaSP~p{GCtv{jVSQo}9C(yU2}3JJ~%6zRr+8t}87?O}&OyEwmjD-Hi_&^@j%08g}Cw z1oOwP&7W51=Gk10oyst~RMhR3i(3}5DD!HyiRI|FdQ|sq>SSV*BjqeIk4gMK>gazh zwaL&NSv{quvl`dQMA>jmi!Ztn)m9TC>Rw2q8)PThp!6kBI)%D0=~jTidhfaw8qPC7 zkWp4Zvwd2r?uhvG@N>TfqQaSQ+4Y@{+Ly&#rY*P%U|GQe=80th!K|ysJkR^sxhRha z^K3_dHswB|WbzDO0HL=8Kaw7_K$hT%)^uz9;FRF4AvEUQP^nkmFgR= zyBzCaa;-f}u(63jIYLi-Zm(`zB;clQVG>F=&x_+E0(@`tS6ct9ng3rdF>B200Zu6+-@71#r_Q=jMQCOP5mt(tMxqAyj za7bmR{n}`#dA&ES9Rpmh&ysoa7>UDMP7HXtpWflniD!SH1vu zPT=I5tE=Ii$-LmnhH-qvLDNh7cT>rE>#J9{xAIyk8%m~SVXe}XAZ=JkLr;&+-CgXY z<^5{ufqoe@uZvM1*BzqfOT$U4?Q1bQn2&ze98^~e!v$@0p~?0d>hN`q8`Tmsp1bd zB13TT0;MOOFlHNxC&*=F`o$-x1{S|xpOw$hv&Fx+fIf)p{FyIl1B~BoUQ(&SFU~z4 zdR4nX`j6$axesP&yg72G51(O|JxcOuf#0S1g3u4Pvy_+8584wo;Y}Zo>hr1$NFV;m zFQNdk=Rr;Q`O^6gNdcO_D1N}Kn(xhA(sFh_LW+l|^wfzdhOcZ*SS9z_i$7ij^@Oj@ zHK^~6T|Zx7SqQh&A@u7>*x!E0Xs|+5Cz47{514*|2UuSCq4Oo7M|fnq7opEm_*@y3x5HKe>EMWyRF%b4!G0Bc6oc+>=2v*5yh0M4<>;I$HAMEyn%>*#=DjAF9R zz(v1gDWgfChwz4ptB4;dlgfxMR;=^t$0Q>?IhAP4_>qxMBQO_pnzOyNtto1|Sfgw(Onvpt$lF+@6GPpq#mQYN zNoQ|1UWY2v6QF;GkU_h)+E8bXrzGRJ|=Qv@F*{^SaQ1gYkuj@%6=x@R3T-R!T6T zTJ5PF56FMG5pS})%oN%0*w4uFfC68u#V%(m|s5>{%wa*mjxenN@<1hpQotF+o` zYZ?CPEW=>sE)beLXIFW_ueS^}E)3y>GEIB1uk}Fp0ItLLIbI#i2EgX@cOOUal%BU% zZZgLj<-}uM{gWU^{AvS3`qlZ{u>BOPIEZ<0cAZE%W2qxP)<>f8{?ZZllewu%5v8Vp z%Tvd^I#V6_SoV{>g3#Sh0aWsfZ&AtIP)fvSAcTS(=sc=@eg8gHk;3Vt2D}zPmdo>3 z{y>`?Wj__GU(-(Gtw<$owRVZw!QpgBiF*Qg$2&m8`Og5m8vzOHRex?0(f&?3CklJA zOs2d}0H_3P|1*DYx%ojC6X-t9J&E5ubMq*yrsms=VW<%vEodJ zS{bhDtk4wk?Sc~BRu4me*oW0dZgcvYr(>RutBXCm*#^x&$40?R`;`@vREH|BgoTMi zRwK|__cJ-}_NW9D)c&Mw+fbo1B<@I6ryx$uk0l|7>&^dAMdX)hB`9XOT(Z#4T|}su z7rbR#RK_^MHax^J0(i5gkRTjsS~G-W zu8j5Sm_rCu!X$XMbKTYaD|UilKK%6jkoH0Oe1!|6?ZsA(4_D7Lz4Ga)tJX3;v7gsP zUfaPrVGPFvmq+eVK&!ep95+^wlRMnY^Aj^;IdYu+LaiJw;Bo9a9^#(kx$ZfD${1sR zDvlmk-j8Hf6~VgZdWsq&Y_;-ayJUoXYfB1E4l7;8vr5J;YS!-zu;I4l z9p8gX!Pd6jM;lbuR#9(S7Fr9El~E&_WUpbFU&QfA?v-^|h=*6xqgUZ(As}jxCdkEh zAje!LXv83biwg+Bx3F-)Rx1OmC^j0mLX6rA=$xhHOSbIluv@v62oL(sdvbq;DWWH& zYJ1NGRqjkS9%-V8^zA@pi!EGB*>k=SMjhM9Iy~roMEU1e&%*PLmf0-~Ot@?R?o5$g zuQGcwIq2Av?`LCKz+SYnm>f@Wu8tewROy3kw~Y_wb;T;ZT$nohZr=c*UK;@{Uj4Ur z%S%4C1!+~gxXw#_sV=Q1corar#Ff;5V*FL3SD}B}CtEYbwiMvZ*h+--2R|#ROM(F% z$4Zx0f3CBAWw#e=q~I2AKOSaIlJszC=Tn?+YvCgbf z7AlOErdSul@)RZnjEeBuv~%pW`2s|(bY8ISn#MR_U%M0jGR1Z2K=E(aS3A*o?(ofF zik3OJx{+8k`{9WcuT{>+J!j1T$DifX2GfyptcS#q3zuKre{d;_-luC8ZE1pfXnmUY z34Ns_24-HbMveu&q>7C3)He7FaCUH=SNu9&pql)5b%=S|U}$^s8xfm=0%7q(>f#Zj zoQL$j0MC0~1vkVis$i$8PL!YTGOUwo!FV}7VwP+O_r6(R?YAXC{ zpV_CY^dA2f9XIE`1g9G|3b)+Z&qvSya_RZ+ZYSGPf>`ry>;mfp9|C_aKS-upmh=rO z?;g4g#o5%2L9;F5CmTED&{yne*Sl6Ax|iUBd673q&Qu2l9qcT}G99j26#7e~?BGh_ z|GF^%4V!1pUo#x3Kk+(boBc|^StY>5wW#(llk<1!3`mCv0r<|1zlfRqRXZ_;%KSzyAgOT>o|`e-mYZvgWsM z_qzdz<2ODCZD&d z_7))gx}I+_Sb{+d@2y-Z+OTFGxp;Qc7LkCPJ6~b*RD>j4N=utr`T5kC#iVP;;6zdH zF_kQ@ekh?O*WCLw*DK3^;@(LqTCl6TckdQEN6@o3gYUGSM5e58PF}Dp-)F7ExY3{Le?#m?AOS$TCY7=*PDM2I zxjsrnDnXdN`3i^AGpS~eO2#iao=(0P7u9 zXNToMrdr_M3C;xlPNrc{{ipd=?5uYF@Vi+FfX=28pQ9Zn>tcxVcx7sYyW|$Kd7=yV z@tRh1&iigzE$+NA<<=KuPq3%UI6?%M1k32jz@Q9`r%-5370Tl-R0-bXY>VUZX{-Tx zb7JCgK={I(P-b}ZIDlv{ptbuFlsyMMrR!}m&nrdC(ex+Luk;66B#Nf9Ud&RSsWG^{ zb8pfTcUZ!`uif&^=~>}x}LGLfX-==+r8MkGXnfiHV6d@hXs|2CD@Hx}^kbbRpsFeLZPd zIy`hx)>>rXUSJvJPA><8+O!(oFSrtn9$vH6$}UUlm%y*dYT=KIzdM0SFnLAK zT7HIj+rXlQHUVi8*K4UUXR@t7M>*c`WT2AD`-WpmKHCWE7FsLk!Mzz-l%nYJ~><_zts2f{S7cywBdT=!}inGGKVZy!*8`%1UKouB6YFO z%!Dktfjvp~ax*hdgAaB4)rzUYC$`clE!(BblH<8w0s2$lgXBw>!O6TvmTwAsG?4{K zZO1hI0-TW&_W^BmO`v1T_49Zum~e651-Kzc4xTVY@6u-;h}9{Z@i1mTW|SR1J*k+7 zzE;L03E>C4?w^ccuE7m}kFY0#p**rhnnG9hM6lrLMN{c_8Cs=bTw~LB_ z7)PR$oIF1W#q$A?dP2PDy3|zdMTyBI_}qA@oDM_bc*TauhcMO)js(M82YeCqmbp` zx%2jM;01!pQE}aq`UAMMl6PXS0KG*0k-~*ft9`-ks#Y~{edmOZl2Tyh56)vNU1$8K zeGR>b8q{sKi}mh>q8M^1vYz8X=t8i&bcPQcmc+>p8k^!gsMg0UX0a3uS!c$qb}at% z<4a-+;2(J!_?jn*2*2UInD|r=XDXst$}?59^TwHhDL(3#oX3=m?axQIavmpX>Jy4n zG(@3NT8!c`xb%k|TqLQCwCSM9h9NmL@t0H!<>nR&rwblC)gSWgAyst2Dxl7+XFnMO zlq(pirTZ}JDBAG#=7s067aY$jwkuBTU-a8sq*uBK`6T|fLE#XKXZz#T&NK*w0I-UO z03MDB>TFnxoX7-q_@a7w@@+<1JgrWt8K7ns*@nVS7zWui%cd_ThT^*3Pi9%c1H24p zm->Z&(H(EhDV$W{XmSbcOd=amYOFNWW*49DoC#buu!gTUo?KA@AZHMdGR2foA+77V zy4g$WRulY>tl$=SB~enB;9i2INEVc+hJQx=(U|tPj+Q+lEsI097w@{^9D2ya$EPL3 z6JOdLblHBZYV;j{>!f}atg<@J*j!b_=;h7{o;6d4em}j-Ibh}~GS}Cd#W&zD7`V=~ zd+5zOanL;y$>!-pt>iwZ8$e&%?~M!qA>;a!()-_adnT@9)ZKCe>jp9@?kb$c-(wxQ zxSan1cMI0ZlRh)Ie}h}g?Ut8v8?wytOgmXlrI%XhagJy2@#8-W9(@*uP)DM|V88PR zr5L!z~Q}XYSYjDemI^BEZo&WMtTP;zm)vC(vL< zL-(qtiA1l^+{4r-lrniF$+hTWiPB+-5dLP{LT>?+S3z{kv6hTV;K+Iwe#xS(K?saK z#`4Z)-mbsxreM9`%M2hZwD6-9Bjw=PyYYTjy$a)>U3-U{rSp1@^Sq$m-0WxhaJGP) zyZ+&H`Tg(3r)FBIkal@XTWb(j(f*2sMoA-rIq?j!u%l2CZL7GxjVtAsANQ*D_YtVn z{r^S;I?76la|(gj(LOgC0rr&l_OMz?!Os^|W&fwqz&=+RE3*Oqz?bv8#{Yn%t8=PVWD?DD#``4mi;!8!um8 zz0FtpM|4LXD<-kG$ys4X$C3|VI9xw+0O z{dlyQ37b6jv)YxW-Q&;2)xG?qrTg!pR{z83{u}!8Eot+A%0-cOe}X!TqyeFz*`xV< z#a3J3*Dv%+jM<;Co-Kxj37`w|4Kvb@|+A-bxEr}N}*RSkO;dT1%e?wl~nupS3 zI-pzC-;&_Bri=+>BmSShEX5FGmz?-L zN>kiI&?MM-{j|S$e{X(bkfbIvR;Ll+w{=dM?f8B&`+tH`N)xKCB1j(CzW(EYV=mDL zU`oS>l$AxpSiRnKdx{b;Atw7bn+vwe883l#`4^LS z@iNjm)uqQn;YF%#^m(QkQc0rKw-4DNRUa&6w=M0d9tO(``5A!vEdiG+tE>rYYXZjo z@(W4m?_*^6T)6Y7jhUVZdvU`B z=76_frw`}b<3b_r7jjJj+5#aGn9OGpKO6@qo7F&>cO~+9VYTynfiEa*|K65kEb}cF z7dt2lhPEGC%yfWvtG)O8>_xvMscV>AN(mM|XMGx&1i`PFwZAMEWZ}=P|K8*K=l%w7 z_MMLhJi}M6)!)b>@MJS#Sy;_SUYVtV@}0Lk^Egae>b^7`Jsv$4JTJzX!;yHkS8 zq~kuW2kT)DgrOzzl%O2x#)%L$hItTx47w=JZsEU!+Dc;rtp>lRRWU`x@ovR7ZVGO4 z-8Y9nvqPjq>ZZM%p+~#mYMMwj2NNWMSVtDB+~UN4DHQ#^lTP7-bT*n^g(PZND+ZnfTaT@fXuLD;veIEwYl?=5BMrhr;a*MzrIlVCz0r>o9qyJYRG| zLhs<5n*gx|3v+F(F)TaH<555D{zn4Y;(3CTV6fr%iOJd;hDW@N`r`pnuv_H#+Nj1K z01u46v^~_OO%1hh+<+k~RQ66TEFm7bAfKyE3b1axtqKDvDIX`gC?FG9h4MH^n28qi ziT^$|Vo!efpgqJ=ZNP3aj;4^Nls;~AgOXAgq){}>t>xrDY@@9mFV7gQ&4){Fv`KTN zaR19}W$?ErmxJB)K!+?*r6O5ttKte;T^t=V`La{)*4t2Fs5d$fZ$xcWH#bmsROraf zT1()~WQiX$2yHQ%YDe+?1av06N4f4Lw4$-pv$JaG85DOM-?n%XuZ?@sdRPL@qoSdm zftb%n>-bcoON}+uaMHKuh3t?Xge}w?HwFK>Go+6u^sI zJ@PMOOnvN(oE^PJ`k19t{jkg@{!;*H(8i zy=$QpTDTc&cB%RXU&=_7n7Qmk2bk9~a!X!hUg~w#$-WAqj0FMtT-(sFva>PHNM833 zs^g{?M1;krB+xk$_|iW}D_zP9?GxJ9`W%FbNx_7QR~{GaoX6ubw?I!;4MP2PWqmit_-VU4BR zh(8|DmC?UxE1*5QYk83F0k=0c#*vP2!>xi&&2H$c@{AQ0Wo2mO{fa!ppEf(N{zp9p zwAkQJrBCh7rCPZXScyaI5+AR|^7cLd+=PJG7N9k9Sj&y%3hAT$guI3BD@bgxHxjGP zA(fghD6Gf2X)x!tUGA2J7;aU1@|!+SY`i0;L6p%qRnVhyFU8_48bmgS`7NsNxpxfa z*KV{6jpW42!TIGj1+6q+phca-`zrJMHV5)Emq64hmp+oDYxA(G8x;G#WDf7A;#!_L zDOx*Ik_^%0$lolL$+uL{0nHbE8`fCL0AgDkmjDr^lk$8PGB>M*H*6@W>=a1BYa6B} zyo}1?u}U=_*lg|Cn;r_qVuR$*aXa62G8?C!-DxX}MLG_Vl3?!1=k|tcl%xT-VUOR` z$Kh<4@kac%B&1W^wE@dUQtg>GR#imJ zkpw4fr!u2dU9e^W!}!IP+iO^0ypW1dD{!nP^f?TmB=B8KGa+%QtYD~ZMAk}8d=9Y) z)cV5C-6b`}(|D01*QRaVrtOBA3~W#9EDBXWd`o$$h|ikXMko{WBZqfmg%bN)xHao* znqLjQXbR9swnXGA!i@&-*qs(tEpn4GIZ@f1tm}2~fPweCAjCqI!c<}9qmfg(=ZO-5eIIKE1wPZM`_)`axQM4YLB+D?!8~$y% zWoijELTZevM!}GoJtRpksFtAVf1>nAFyI81@Zaezs(z5rR4(t3m`7W2Kopep+(P76 zzU!sRvD)^$Lh-s6XX$kwL6WWy*N^RjSHQAseWx@Id)-{oY2>R8;QY*ZN|m0?s%|R3 zVHHag4ST;bDgXE(!d$Rffi;EAjt9B6T2_tiLwX+_Q%00DT@Mn*C;9ihO#Wjnsg7?< zwcGppN`tX_QIakrOCCZ>=e@W(T-B3mI?%c({}LV#;D8$_H%>oy%v{J-WTY-RZoJ2? zXKF~Bg8P*wgph_2cj_1U*MbvoXJXn+x?Lk?RL4m{t^#Cx$*X37z^I~3YQS8>n^gIr zWnGLDLE@-EWS$(8UFgu+^)_+8geUQO`LEetqy)}v65j~(jGIfF&4speY^y2RZ0ob7 z<9H2irg`2%`>LJg9DOklegU4@_;NPWO!*osJ7~gUQuY3lG-~)M!uV`_R}d{!F+E=c^6ZuFbiR?CD409p zOrrk)<0z;#wMb9`U#W>q)CSZO{)%@2FFiWurK{<^(XxXj9Es;Ct`8Asa3*qnc%gh$ zxo8P8@uJ%U`q9*zh9l9peK@A0>WhFIU{DyJhU@DTgLC|u6B)P8PP=r2VT*Qlcf$1b z4JU2n7`M&SsuPldAfSJFJYk_{!p_MmM?PWECV2@!_F>1y6T&0xSP{nqk|4p7S?SF& zT`VH6<9MTan;Ip_zTdGV)VsA>qJPal@%8c4=cTp9uH@N158>#+rqq4V@hp9JL)OCM zk2koX+PGpNvl?NFHZ#-Ui4pWf)yZS zP>)9Y;GWG-*nz3(A%f3~=2zVW$m%p&d2iEt*g(RHdXbIFrz}p`Cl0C3`q7((8md1) z8~1n$`FQi2T!;?FZuId>)SjHr)u)YrX*p{RwzdXE)?v{e(DA-F<~3ngI55mQf;W0_ z=_bbdx9KTawCapXK)6A1!r6$x_}}H^URSXNcXs!tI-HSnEx%dGmP5}3>tcMXtqWI= zY8%q=cL3E&(_!Hhz5b+jgn3{?Z6z2}LiUMwPH@p#We?OiNS2NXy0@cCHySIk>M#5g zC*C149h%Jdnw>|?n%V$eqk-z*&-!RXQ7DRKs(|k-UH7oQrNz;^_H@##j3kN3Ej!t( zi*+RwT7y8V`+sUP96_JLSMD_T4|190t&T=pHw={Z`O}vK7?5Tj@y`d|S<;$pk$&+1 zVmh9Prz%fUIv>@GkpA!-AvwzPY5}?mQ!fYk-T~C8pU$(O~O^r7pKNM1husUvdV*{PQk4>(sapTyCyO>DbrIh7o@@_1cxku+ z*_a5y#?zXgTSFnZ({41Uy|+~rmqSwR>^bUp!U_7ciYsKu!FxO{;JEg#G*)MP@}NEbwVC?>WqETnK&Ee14_6qMG4^CKaAyBHD{i&y!6#?)2WJZJ`)@>Y zW%>Wc0oqHnO~(xk1^qq-&hh~*?|?0f>>W>qzYQ|qSDkks--YKBt*vOF*(;;FHo8`d z@@|Oi3un)g zsIAzz7k24htta;w6XMl`9_?sQY_w&ow*B*c07uTI<%@FV~M;*7~AP^-XQ)hX3VShT6Rk zHpz0EXVX`Wa2`Xw_U4h3k=qnngkI}_-k-9P_^mSGio%EW zx6cHA4BsQ?^Jr(Rji!8Y7as++Svm``9VdTouu< z&G$*Ti|0ratoh1g&|msV-y}IN$@->tXR8DZIQ{h6t$XwJlv_*b?D5wSz-RkGk22;t zjoI{h^ohdH+h3hnRLL*FS2j6vWp4X%LF_pHNDp)49@j6L&H9!jviI=+$f0ce1wbY? z0u8k?`TqH1K-?dY$lj*_`mrds`^LU}zC|FR=mGghX#VWDdlE#^=-ubfKL;)6%Eg=B z%M@*MUi-a%oI8AJE>4R9x_I%F@v)|qh>nXJMViRpAiMuLzMgDwy%?Gp+xZ8O={!$9 zCVUe+0}xvVljmwSQ+iMVMfu2}_1wB&Od#c=E>59$FCa_qOkKvoj(B#oBaX}m``8T! zHA#c6fP6l5e)4;-En2mijNN2E^#r!iSK+GfCcZ8acx2#ii%cmc{{_ezkqs#Q)Kr`& zS2_*ucaSGdvk{tn{2`Xo4fRJ8sk)DNd7Y)p)Sp7Sz5cPGF3Fmm!4F`?te^_#$c}RW z5*=E55S>&PblKeY8r_jBV?9^k098)BfhNBD<910?faJME2y1Nh&pJwb;Ox{O3d0yL z{pn<83Y@l9c0mKyhj~34W9szNdNlkhIBwf zltPkL3%L`mQqpLG+;7`9%+N_790_t6z5_lqY^2%SuZ)<2x{ zL&&npu;|}vB9&(z23P~AHsd>~rT2|%Qy266Mr+rNRk=eVemlY8HXUQ19lfrJJt<>(p--j##Y1d9)dHl7$IZk zCq=K4zjlt?c9?vqLQG!lfm*3l;!Z>tEk>iY@Y*^?^2P>q9KF8)gW# zJ>P#X>@Uc4XO{u7WmKhJ1hhV6*>mt?&o#y~xR`kN zmVU;K*xa>`qVp}s?5lo0c(3o-$m#F)w~liGV&e_A{{_4Q$<*7T7Ck#Y+prM7{^7VD z@b$Z#C0K3H0%Sa3-)+#nzu{Tp5_pBTdoUN23rlOuuWm_H#Z)vjc$jAvFWzq9D?PeS zn24}ptK^Rq{BTN{+(J$&=qT2?ovm$tua)O0+M|(QCFxGc-qP&6%|35Vzu|jbfM$UB^9oySHNIjafZ6KLI|%t% z84JL6fQy>|zQ9*F2I&|{QXc|4yE#Ia8AJT}JkNj@zkfq5`gi~FMS{f?a5Vldmjjdg z=NOB&|9y|0fD%W|m$EJIw@`rnufMd=cnNqHe}gh$T%Lc<@D>v$-|cIjT{5zL)5m&4 zXme&3l)(Gjzx>SkS?$uWSMWK);FkvlQoMgZsO4_mV3B|Sz%%&tzkhItBL43mSXw^0 z2>+t1CJwCmztJdsAL(z2;S!tF#AP{}?;8WYg8upW$_4;9_FE+yhW(F&$yS#TZw~-_xQ|B4_JRlnV1ImMReKVnI z<6y_?wq1RfBaTnR#Fox(yOjC|!%E45Nj$602n}X02!46@9{w8}vzx;kID^ek2O_Y` zDytgpzPkiB)i0v~`18|L;Qgs!JQZuiGQnhe`I>#~#w86G+pwo>HLjw=Yc>+x?(4u@ zWF^=g8=@rp4gCczc|Sc7ag5D5x?vMF(F~)a?bC@Go2m-~+kV-ajKhs9&E?|cwav8V zu2R~5&yMr>%JB1=@;yWqW(d~}k0bx44;(xz7iKk1wO>mOLyOf7bOEbu%Y098Z(RoHkOIIto-Uoj-^KvRPoQ}k zWkD$;O4skp9!AA*WE5F z!2?V5HXwo$8GbLbbsVbtRaS*tHM;ZWq}IcT11Mk8C;^ zEhkl9o1@`quF+im3Q^FXkkc=GWlW~seRd~xJM+uHDpwyqf|vf+vvOnWk^*PHhwTQu6DbOqu`{h{`t}@IB5>gep&!i3@5w!2nLVq|b$`xZCnnm~M*sccUO6>EwB(7*r1X)v zgnE+XFRtV3*GXENLt!fdEAvBCYiFp2^7suauc>O+0vbLUBqxX#KA9PeKN6%TjDItK zS5N~f%T59qL~6z|o%ORhPv^YXSKP+sTsxMpx4Q=u6!A8#c$?A6!IfS2br^Eqmx)H5 zdAVMZjxw~dV8J7hP*}6*m}=$wD$=wz@m*SUI^Ct+Wt!w~kfUp!$3g^)i7Wc$Aau%S z_2)4%FEs9XhPRb*kfDiv5edMdOA_2#6%=FSdW(?SIgWjddDi-x(MP6H)>FW;8Ekxt zW>xx~U-jCYX?L7oVl-DYbJo_3Hgs~14~t*%tc5Md@+*T+TZ`JI;MC<=*`}~$hDIW> z`7VQG{bh?%bk28y?+7TS0$On5oqAcBJ`P=n9K^$Rx8B;8R{lwk>0aA$E>%sD4iWC? znlm}tuYNfC=+BBYZJQa`^Im_{hz|dxnYOmNGyV+JWv;-ojwA`?1l!nmlD+d*-otx> zi>rJ(%#p?~wS8NAvFG25O zfZ$w5trKm$tJ@d+D0`#|ksDt~Q_X|V1cwi(8zCoynvdEye^!0bcQ=U9Lx7}0CW9dO zk;Zf4)Gl@y%Vl*XlUY(iM%gD*QBh8#^xXDi_HOH+8Q9`_b97>3nj&2VHPiKQ#3`X? z$6ux{dsr6~5dt}jaX>6l{8k7@jNV1#G*U+fW9j{c;vM1A5p&uq&YZ=dm5)(T^a>W) zXQPZre-h!-fsW8_YJ#I10yhfhGi8!CcVkHVI`)%1;vT%YeuUy}Yzj2o z7E?mB4;1gKbQZsVo%WHtMgo6}uW#y%erSJ1_9oYPW%OE5)qob z)fA(^3(m$@&xR|vzr0%2UxrYOtSi5<=i{wgGSf7*@iYLrNZtFu^fKWytSvHF7idIL zs`PMO%Qp>zSU<1m=bWim9lL@CfPRZRYysl*p#p2UkuY<^SmOK4k&tEidOoze@#KdN zQHG!X^P00&-uUpRZZ#+z0Y!eZMs6bz_Q$F z>NT*YhCGQ~sQ{CI1W#lMspZLe>)CNe^@EmGylwwiZQm8pWY$HCIu0{7M(0OGKx~L~ zOb`VG>`D_A4ANB~A=H6Tq{ce_ih`5?2~DMmG$oJ_AfPx9frKcL5<(d%p(Ftz)IgGZ zf;yu!|9!X*mnVhuwey{C@3Yrldu^x4&9kHp|Mq@h52&U}3#__YU8+&Xe40LMvEx-t+`+sTF6K45 z&75I)YbJTTNb}jrBa-(_)`g0r^7lYZ@)~lrJH>B{U^u3%^DRce&KkR==Q)Xl4qjv< zjm<#!IgG5qr`A41Biq{G#|HwA5pRVF4Inh1i8fUo6QkUM_Bvkr4P6d<*^*J6>6#E- zLLDf)Cm=-J^maOLf}5_B*|B9R$JTanbbOmEsE9uk4onQw&K3!;?*N?|tWVy($OGI;I9iPB$C_?j(1FR4RW^h4MD7z?j6|*2=-| z1SLDU&S%9~R8u1SJ-MmOxqWj>VbpZk3D;8{8qX0;(}LAv?}rJ%iwSPDoq@{k7&v~b zMM#Vq?E8RLBlV>;?XmXlMK6s1>~cc*ENC}c$kcJ4Fr2NVT2u(D**!!H+uQC&KqS$> zOMb=>RVJhyjE#lGm1k!d%E;P}!svr+(b4o1xJcx1a-l`EuUY27S|zOB`}Ss|QUv|- z(&Jl4aLgJ+E1>oS(?5Y}t!}lr2fLp$?A9VyR0Jh`VAP(&0PM^gs%<0N^Mq0!ucB#{sJ~2j434!66>J%jpYC7o? zP@TP8^ySM$iwrbNAy$-%5%0Ku4kvUJ4aNpHeQF06h!TkfmD~un^i;d~A{iYuwXnrM z^{QlZCV3@)GWv`+`RBThb^5B2TG#D@C|@EiFRxgW4tt13RLN6XoO>#Urbz=9?8~l^ zA&(@ispDZ&K@?Xg{Uwx?l?35y1e3$|Wj+u)&CNxEZMd2pF1`Wzx554qpzftHD+;%O z@Yg%|5j-8>4qz`Ki4E1Lw2q+}f@bCrfMA73&>}~M52h&Z$~ZPmU)BR)vP=P}DE|b4 zZ(vv^Te;eU+ELTR5gYv)ySbltm_EP#d$%fOynH1+M;r#=w1v`V@axYqv$3K-7y6^i zdme3Ux)Ig#WkbB7T>!mD*H!0PZ0{Cni^?!vCKVCcr_QbRnI$DHU?9+o?Afkp_6c-k2#o?mJ+ZngOb0=Ej zG_|!ITuW*%^U>Ubdr`%LTOf=OR^w}=r7qsg^h!;27FzV9eDgX?CgR}dltJ*{$vqq~ z|E^eX@y}Z_+{I6ziubA5rz(h(MAlL}Q0MjI3!u&`pH^xLJ&Atl?C6+SD=4UqR}#-t z&g~bm{Y0mVoylDZCXc0>R)UC1o4f>~6fT34Id=y7Y!jHR#1*oL%6d_WSWp5*x6jF= z7l~*uu|vs)-JGx$g|gYqAM+k8g9AIVpSN;Ngn8mUcs%~a(Itv_UTH`qT*PM9pIUBq zdE}>7?^}NbmbaX*O9~oj>;C@bxr^Xc-&+p3L07gfm;;EN*FC@e|MQm{NKwK{S*xbg zN|FCbE?zFlkdg%V%a6az7`RzI*Bd^?^Fuq-2--@TY-^@uWBnoqN#Qv2?UqTYM!b)1x(Ps--u1#>7l#BLXLdd3Wk#lD=0RnXs*9GLkq5iWtW zmZp+xsX*ov{M>(9>r%ZqUbPHkT-VxHu4}&MQZE3sfLu^tO(fxAv9W`t9>A))qb8$W z+@dZ^4m$b1PunKVeL1r)^`|wE$X;myxQ#FNsJ)-Aakm@UZ&{jdJrP2{d1vb`a`AMo zG+5o~RGIbQ*vsW36S9KE`n=4jZQ_QHpW&e8a~y1zA=(G;rfp*8x)(H_GK112Ss@;= zuVv|-{OoH@i89<4t}vo zuy|9{`?%I*WMZRW@kBdK+_Ma{NJW@w(`tk~KZZV#QCR)fM1mPzRE`vZ)^NBDVQnFO+R}i{Xt|VFFHXi$F=j}p?+!XjR&Pjq-9}!9Q(|em6H0TTCU4@renS*#aIrX3ib^}~SO*6!Nw8(0)swAnNsjZVg%aypq8#c?&FW~kQ{p92G&PMJCIoLd0 zwaJ{~K5@cHtJk@AJ`?H`Lk^56vG}0f#9P0lv7+fjAIKf1>|CDyR{CfT$m!$~o6g(@ zPhX93tK7tU_vART$7KGN$s_dqU9?AmZQ?M6(3tdkh1}Lpp@Na~ay{ugX|Ual?K#)@ z*-U+X-RjeDZOvw~v|P~fq?pDE0=X*crh8;IGhQJz%$c1G=x&h{=@flzSJb(dUS~Z@ zcgGc_^q&M1+ZetPmk1lm(ew<1fIp(>dL_D0RHojrckxHhmeA!B5K;F`h&cn3`uWrP zDh$I7jaZrSE;@0>fSdJem-r=2%sJ-uAY4!*?_chGmBu5!*$P1RmT4fteMb)P%E96h zra7D8^Yc~JUkAD~3rcFbF4iLG8JLnto>#sb=m_BqC)a5x#QR9o346}wz;OAxhWii` zg|OK|B_PIX(D>r%Q)-TMWLj!Gj~yP&iqM)B=DGm$(UitlTm3A2Wvvup&H@zy(8=9Un3jMQ5 zmoIpip$W-WZwpqmBp%C+41N}#Uo@_ditvh9Lh6SNWpvBf-a#t4@*?**XiH1~=+?o= zb6?0HX&DeOaNG2@z^XxyiZ1Wbl)k*;rYV?5 z*>Hq`^AmiacT+0e2}*Y>%y-i;3ZA}@s_S47LUqI!L7oL=gk2m@ArNYd9G;3SusnLp zenAA`fw9V#iI(OkS5O&~3cStK`oY801Me`-lLrn3Og^x9e&WH9?IAW#eLd8QkzBkk zd`VS5z^(+l2LD*RI7z~h)?-U42_*et#;IK0X!;vRsNzJMVG-xh_;gW69ml+6c)tBw z#_7SU8h<3kSQ3f&fwF8nhxDrRePNmn6zbf$#fUN0P|xP1c6|zKyO5CAN-$^$geVyW z57P9IguwBNQM5z1Saso5nUjI9fVFv=m|gHTo<8@iIuzlY8@z52WoH2cg)$*mtGw|8 z##;26Q2V_^;t%$R*hS6DH(hhEW07ed;?9hyVHoy^{7w#gvh_Yvd4z?KI-^XP}YN9IxnpM$DrlGS>W1iGe6YE_M=ewq$It^c*&d?KYR}OL^DXuLKT!%i{ zN&SORF^-=)wWGR)&P_ay@NG;FZ(JlpLf99v3Vq|$p%|=rcx}cJ6y-fXY<4}!yZ{M6 zt-lr+&_iHBYDF_8A&Ji7F&CkF_|ja|#2mynLAlk^Hh(4{6`rfhGEk*E!9vUTti4NU z8fP|_MwBbpZQkG$-87!6XKp@q~8-ESZAGD2GOWG}n~+G5IYa?$D|Hm%;N zxR!!qy4^+jyvMgBqQViW3wt)-xi zuUH=%6{vXE-FxX%&nu{=Ftap7!p?@K$9n|s`Syoc1yVcnL{xy%1CL%(Cw1Two3+?XkhKKn?~>GE{=!PdflT}%oopus=_ZF(t%o9{B2&0NKRdvl&C914RK<4m|tuiM&B+s{47 zm!BDJJAnSp1nm*)Z3+u?FFIv?bn~3Q^7!%LavyUq*_5fWUarY$oaT0~HsZ{-vzf4J ztiL1kgDEcO*mLFAS{?XdlzU6En_a6$i8l*YTbt+nFb4~bvO&+Zdha*y#nSsbKcslK zVO$Jyi~E}%!3~HXi~Q3AeOG5=i7PeYEtAKbrhNpsPPlQ^?mPzlEDJ$EW!o`6FneLc ztN3#DPn)YY*XS}ttgZ~f5iJ!T*O&3iw5g_Pw(ttN=%Sk%uA2mORW-Nwc~PeC#IDid zlg&)}5JQ%jlU*%waJA?<60_|Jsg)XuJ{e=Lrgw`HYXzRPy3MZ($NA{Kqz4M&vL4Le?$SHut3nb+Z_OFz{}(Zgzco|_J?DQ z=DJZ{@lJvdmKZ-HGSO}$63)?Vtb1)#8Z>e}ZT5$=;Y#*%Y1SP;>?>i`&o*u~&#^4_ zxa)Z(wbvGg7~`V0L#AXvEsbG5=gi8jd8w?g*W1;*Fg;ooS24PS)}?I2xppB#?rBtH*RvV2lC@~LGdqb|+^6;E zS{$UgRbUFm96@56cJbagR%sv!Pc;JS6ZoR(_eSihjl`L;!t*%h9B6)HHZ;VTy5ICN z+u5S@B%k^On4krMqdt3jbQZ(khWzn`!6Ud6;P@=>p7KC4l8M6xX+xFmjwZdRuI`4N zHXZi?V5w4$t{2Y4Ig5WOewZ?QM%Yw}Urn8G&8h4;gI6wz-JkEG7nu?&<5$!;YCdW7 z&LZ6-+C2m)5b;xZjHUg3>vHTI$I~4Mx}X8x`-pzNIXg?eJ#EV3V|FCmo379cOR#+- zx;dF;3YJn(1VF>MR-D-*ICmd97qs2%4u;b-(_@oJ{iD?inOl>L zPWL^Ep1J3JzWfxDEmHU_^O>cY*qg@POv4=}g~PPGMF72rbDcMJx?)5Nr2@Qf-f(6q=XmHpF_z%(@6wm}N z=nW=#c<@p0bt95#O@4xJ@`LyKdmNN{jJp94Lug^Z56ep5{oN9s+nXN#FapW;?y&Id znz*-%90KE<8lK&`I?Oe~st{?S`F_y&r&leM5AXexTShJU0|8Z@MUi*Xitw71qY}*K z$6&=c+w$7WG3Ubp?SfsIQ?BfP5}CB0%^UjNVsxx>aPLSimF#ENC5|+j@bC@Gy4KT> zj{+5UZxRp|CLa;rBQRWj$9~es8lK_&QkgFRfFjRb56=?83}sE(X%4sg2u0BHI#YXf85pjZmcbED=LeitqRx@ys_Jgz4N^knF<^>%=4@mq_C z(QV$!Z}0itVghs*xZE`Tqj=n??WssYX&r{wKzp0CFqZ7fy~9g``O%Z~NBrOi)29Sh z8TX0vV_QKl7ueiUse(sv_I%8>=8*xbnq5R%xfLg8WHXIdYDf;P?PX~INnv2IJx}~bB!pmlU4>Egx zeC+p|t%tj!^z|l?hlG3$OUQ}vP!<&9n{8KW^ed7e8c_o+)$<1OP|r`K#``277#A(2 zA^}YEc;YB%Z4W4Wz^Xh?b2k3zNM;ymGji5N)Qlb#-jdoO-4lN($+!*G!8nb|=#qYS zS0g={zc!jZ{H`lX50n*ucla6nMATdrELhk(A#^V0j-A3O%d9)MKuF5_Z6ye23Ri#c zH^PV0Lt1?>p})yjS@h+Kl} z?RL=vS7XBYZoS4XSHM=ldT1+c8e{H@K$ zY?H}?u>uYR$YV+!IseT_5F^^%?8Ps~pHA*cpYqUxyZ{hNyDjrR%)T258ZUyQncqCr zXL`tWtG+Y%SYyE%I2_L1{caiN2$u9Pm%Q<>LtFs73-6n6I5?>8vS8LktQGR+Jwm>^ z_%C6)jWdWvElx6LI2}U;F2d)L=&8ZRiuR^|4ztJIsnfXE1kq#^;d;Ir?5`+>9WqIU zx_R?vZ|u~7lK7C8lSC=yyO7%q?|U0t<81lW(|th!FbQzZPAWj~z8`IhpV*FXW(DhbFgp6xTm=M1}hTR9bL^d(E%Q92TwV~d0j+lHpr2sIVu6J843N#TCK zMzoky+#H7^=A0+J-bEX4Utvz!>sB3QI_~{D{mELe?QfoM*9`dc1L%Jh6`U?3Y43c^ zNvp?Bs|^uHi&y9~+&L3XbYD2yKDp+yaS2(X+g!CKbIU8i1vw-kqt4>%o*AUBW|unk zn2HHKUdU#kw zk9&fgU&8}Lah9T=;v}76w3+%kjc;r;Ec1)^yG)y7I5NQN@)fE8vZ2Yz(P4b`88%Tl z%(|V-;7{J>TYW}=xOjjE>!^PC!MO9OK{-r)>^42VE?R>XTC4)vADTk>>GOa3eoFtT zNqsl1?jn5HJ#2WVK8iD5Xo%-=TbyUr9I)?T(&oW;8AXu)lw4-b zOrIwOSlNc^59QWo*^V~~rPZhwcBOT^vW0>0^ORmq=~F*4Dh&wg$}Ni9l5QbrN=1{w z6{x!nZsS}zY~W&Tp^y`yfF%5>%n{2u1o>c)>^2kkrd1zWV&vd0#kBe82hq}`xi8^3$eU7W;0u$7t7>F3ygMcS(P8`>sdu25Z&!c zcqCP3P0`+x-k65qSY`e@uc>R0*uec&eMTX()*-b^hrJ8aSNgg@a zm?sWOS%lMr7a}ZG8fI|5_r^?oi!C)E2}SWFS1d=zs7BK#WH6qzebz95nn)Qii8|3+ zJpk%FCs@>>@r$8RAOe(JRCx%|ZH z$e|R~%*4FRUQLH!CCowEWbP=cZj>L~;Ap?g^bYfd_d`0r(VEB&&87JC7)_PwBf=k2 zyRFhQ5?{{uWl=ICcRSVR3_~`G6|OBc+EOd#p7Jv~lL(Omv!LysZik`V1jZo%Fk66#tX^|c*nztz*BH~zZ4 zLM)mXyfvMMaN9-N%uX}W=_5@WtV;YZ0E?ZjEU@lrWVhYh_;gn@0gRgRIfamv*OqsJc34q=U9G_G?n1H}vluZFW%IT;5}E z=p%4W%u!~XyQDi=%M(>#~X@#~UF4eci7p+BU~x}tJR z3P3(C_JmywXz~mqSbv-QSd*&^4BQftVGSu3UV156zC3GH_p$Y0kBej^r}GmRT>H}S z7?)Yczz5G9>Gck@Tw#gaCgjZT5t*~YPZ2K zpM7{5M}8u%`Ga!S%aDQ4EfyK(4vfDT$j~oiq=oDv#?$vWBH0lc!w70<%a5)FC!nr$ z?jv5g?cjRMliALrp%)i_8}<^Ijgghs7V@F7jZdHxsS|f%Fu#Bo7J03eI-P!Sye1v) z=!0NaTG8#AXVMVCO-B_^uXenkq9}72W$lTarTIlcW!>%_VqAoWq4AQu)aatd^t>k^ zdVU7{CRotq45b948TEjin$rYdxv~O{P28~;gEG?(2t{+YLkq{l-J**f8HB2shMQTS z_RY=P3WtxK%eMhcX?CP2J>z|}OVFcFo*e3}1PX;C_|M%Qb*{2VcOFGZ^( zYtlPhard)iYxXRUQ01tU@UciVgC1)$3~<*fiS2;pi&{(qWutFcjHSCS%_{+W68HJ6%`cf=XO5+)#{H%i_|9+unVGvg)gpPdV5Q z#0^R4e+PzBE}^|V3#v@VXV;%IHX{R3m1I(@#hny3dMOrk+i2Q!|EIrpXP|;$vn{Za zslLanBec6VVSG~q1OY59&A0q;02U5wE!NREwJEyM1dsN?(f1yy2o$E3dxJo9Pz#cO zCWipktOK*uGBW7RLIeRhygcMT*ilRPi*5_a>jV8u^f;me)q_iik^SJV7bA)4ru z%irIrnU)nx0n#YFJF$m#)bO_bmFx%y2bCZV#P*hI6i46nPSAy;ZOHK4-BsNJL)cbz zE8Kw|FUWqa8S{`OuhwWDR&Kel0cgg`p@P}Lhcj4HHw~5Y(#KZb;9#oEg-J zlCDlwPBbGwf`@4ZcOUGZfE_Ll={4<<=Io;-wWM;qYUWNSgcp$p8ixJss&pNkQ{tAx z_}b`Ngk8tB$9rtpN2R>(6`NVF==dw^bOxVP5daDW9ky6ef?8|Jc&4L8XRTV zQk8!1nz*T8=KI1gX7uGsvizvE}+sQ-5^`m09`rkxQ{Ip8qa&h{As- z-x>1A2eg@+J|!x_8K}X%m00~#pN>iy07Vy)!{Hw3pReuN#hESTIVg7#&WoR{khG*r z%}PHFNV#J@_lBO`YB3_^lY4E%`LK}+i3zk#Q@=_<>&X@Z!w~+cS|8s z(7D}jvbkEW_K6UjKWYc%LK4^LHNp2D(V)@PH%7 z9I;UV=jcowPSuOfjVkqlMjpCONWDj4NU!KN)P{!l$S>4x>QV7N(CSSgcsQbbG9r}2 zr0y7XJeHZ*mW_HFw%jHNG*{y4gSLS>pXO_mZ7t--|t!T`p z;Pm)MDl~()x>BD;9gv&XKtG2-0{t`ii!aJ{tX&)Js4dmmEs56Ih&J-&DqX2StM4*# zU!uBCJFfqQ<}cF?q&|HU(|-vNL92qlqVXNH#}*o38z70As+z(N$ofc2NeO@cW`qq4 zr+HZ0)q(IMpgfAdK7R)h@AcAh73 zjg71q4GwABwzM?92D|8yS4dL$L=>k}FC?v^8%gx;3LS86_fH;NcuCtvnRhCxc z8dJ|pZZXon+dny8A>1a}*%yIKXzLWYTV)V*@#b_t9Me!tg>-oBOXoPDVw_V^6u0iw z;nMEt5;|y%akX*UsQQ4X_(Q?@a78}{8@(4CRsBt|c~hKsOHOt*nGCHwlM<&xAT$TU zQGZW@%|)E1rsf$&TC(ghdTe8R552zB>*xj_mL@(q*;T*%;$C_$rXX5zELJfQufNia zvpubL7ean*Y3HGRtPL3tLHq=5*^VVAKEPYRwQ#P zS`MjoHjKp-I>e)f?FT|zx!pVESWvayyA8w&$Y5Wyh6DpO8g=ob5&q>7hj`ZkgAT)* z%l7v1IfH@}0V`h6Q)aoJ5_{m5iXc59{|YKy3+Lrp%y>C@g(bQl?gVnbFGyNjXj^GE zQP^PCn_wcUxkRE0EA<%g(*8y(vU zd2-DQl&MSQg{Dx&?Q2=eBbQivhaTXcTD-@&O4EBy?>O8aMRiUyUD3Q(;Yn(+XO<)R?gv=Ce1vjW2rwxvqB4~3O5DA8y+^k#y1D} zOv+UaIq>nms2Og}XI-l=?6dwH4xDk_w7yfPiLhMn}ujff!Sxxbyy`*{p!KCGrEnaxa(M2QbLOE$)h09VEgW2z&s1)tXKqP1NPL1 zf)FmDu?2XtOJhOrLExq!fm>e0fYO9@U!$7x9J@WQ_6E&d+~ruuOX*#FAlS}ZIlfR3 zGYDkW=L`1dsn_=?mlTWlBP_#`{N z(a9;vlJUZ&0+ws>bN@ zo00=yIFei8tI|0&mVuh|S)%##9Mo`jsEPBHWmI9BCMXpcSk$2n>Tb3orSO`+5M*J437xKl07S*0k6QWzRsJ?hp{u zNc{m{nV`YW{+Ft9tbRvnYi&FCB&J?M&VxL}wiZjQKjB2jXuj>x_!Q6{b-2X|_(LK& z9M8$H-T-8UmA}D>8CzslUXrO>#0Ev*FWbcf&vE(9zrn%p4ZGxNBfj~dzJPY$0?VI? zF`$*xUkSi3e&m}K^SS)(73eqiSGwv8i1*F?{a<~J)ld!-kjvccyuNzLuLvN>rZoWQ zaFEp}A^<*F-=mUTf!dO;Y;d(AG8kZDS$<5?r>@ zGFJ781!Jz@=PwKV%kAcUXypoKIHi7l#_F%9Gu0?%h1P)>fbPP6{Rg~=1T-8S^V`h0 z-KSweeGrV-XHfDHpbkoA&^QMJL|02sq!j6exqR`Jfk(9_Bh6>bd*FKD8DYKHd5&e)whP@~3Alin4BMJV}*aJ@}PX z^c7|Wgfr8OoB0rL@;{D}P^K=rHny8PndZ)EH~?i90KWcmVd(30EtAAb{m_f7QDM`j z8@VjKpw+miR?Rjr{=4fs|3F_`&GCEG{s1&92R;10Fq3cg^pg6=S9y?D4fQSB&W?;R zh@{=rcQCIx-Z!CJ{_m~Om${47rgh)_IdIKC-VI43>RVuCMbdH#7+>Ms|wJiq6(qD1`6W*&=J^r3On86g$0@VNK!k4)8g@n}NrU zJ7@-g^7`t#*9CfM6+*$#ua^4r9Q?lwJ#2uSUArKIUeb1>eA+Cxb?c)W?^m^6<2+en zn;Xq0Pf^56GDFfb)Wz)a+NCX1)P>lgkAB_8?Mi^i`W>==PHX!^UF)A`t4hV!j`s>c z4OWioV!ey#<5F?6K=j;1RogM-s-*TyH&Yw3n)1k4vDQr3mwk!Y)YoX zm83*5V6&kXy38#X=K10fHJY<{0F7+wg}BGU*Q)-HGaSPS`%RY27q+NCPIO8x%r{xO zaroLi@R|(i*{0sp`>6l<_g(AZb;FUqC0sPSx_U;Zt8TQdX9pkvZ~gX*KSJ79KT93u zPffn*n~(JV<=-=Y7?9KzJOQBx$Xx!?SVqZ}4-jwsFZAD+lT1?7PVvWB@g45g-d(F! zt%B%;9ogn*l-L)MPl-V0&WNWr8vP=LB;5EetCARfT7}lM;@^+GTp_6U-FJCC0F)sB zp71~C_6hBiO0cZLb)~L4L?nKraV#@J(js2d2- z3joPVP>mI=ce)bHY1a&Q0&H0)V%s@=WbkDF$p!YoTI5OW(+Q^=Fq^c`+`%t4s_E{1 zd=3C3Ikh6Mg~?cS_uLY#Z|R||6ZsdonLFrEq+pvA37o^H6HNR1FPyxKUrqcb5P)61 ze;?}PlxuhC(%b(apit=S-{{#F%c@HLOldipQmkR_hLyKX0}cct>s9bIqxAK3(}0BV z`vT~pRYx^|l ze|RY~2dE5uqQj%9kF~%B~|EX2h?a4k=7I?xmk`?uXCf2?W=t0~#`*of} z=Xyehl53aT+1d{!Zdlk*5;da^#0qjhbDtgT#nTqJ88v|Gw;|HMf~i?z*U2rl^C$m0 zNG$3TvqVuJh^7C@Z?q z1{b+7lsxHoT0Yq_b|WV&R)Sp^8>w-&m`m=dG^=)a img[alt$="><"] { border: 1px solid lightgrey; } + +# Signing a PDF using a TimeStamp Server + +|Minimum Version|Q4 2025| +|----|----| + +The **TimeStampServer** class encapsulates the necessary details to communicate with an external Timestamp Authority (TSA), including the endpoint URL, optional authentication credentials and timeout for requests. The TimeStampServer can be set via the [SignatureSettings]({%slug radpdfprocessing-features-digital-signature-getting-started%}#signature-settings): + + + +The produced result document indicates a valid embedded timestamp: + +![Signed PDF with a TimeStamp Server ><](images/radpdfprocessing-features-digital-signature-timestamp.png) + +## Creating TimeStampServer with Credentials + +The following example shows how to initialize a new instance of the TimeStampServer class with the specified URL, credentials, and timeout: + + + +## See Also + + * [Digital Signature]({%slug radpdfprocessing-features-digital-signature%}) + * [Signature Field]({%slug radpdfprocessing-model-interactive-forms-form-fields-signaturefield%}) + * [Multiple Digital Signatures Demo](https://demos.telerik.com/document-processing/pdfprocessing/multiple_digital_signatures) diff --git a/libraries/radpdfprocessing/features/digital-signature/pdfstreamsigner.md b/libraries/radpdfprocessing/features/digital-signature/pdfstreamsigner.md index f90ea437..96dae3a0 100644 --- a/libraries/radpdfprocessing/features/digital-signature/pdfstreamsigner.md +++ b/libraries/radpdfprocessing/features/digital-signature/pdfstreamsigner.md @@ -5,7 +5,7 @@ page_title: Multiple Digital Signatures slug: radpdfprocessing-features-digital-signature-pdfstreamsigner tags: pdfprocessing, document, processing, pdf, digital, signature, stream, writer, multiple, sign published: True -position: 1 +position: 3 --- # Multiple Digital Signing with PdfStreamSigner diff --git a/libraries/radpdfprocessing/features/digital-signature/signature-validation.md b/libraries/radpdfprocessing/features/digital-signature/signature-validation.md index e8044250..cd44f9f3 100644 --- a/libraries/radpdfprocessing/features/digital-signature/signature-validation.md +++ b/libraries/radpdfprocessing/features/digital-signature/signature-validation.md @@ -4,7 +4,7 @@ description: The digital signature feature enables you to sign and validate a PD page_title: Signature Validation slug: radpdfprocessing-features-signature-validation tags: digital, signature, validate -position: 2 +position: 4 --- ## Validating a Signature diff --git a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md index 5779cbba..bfcb7bbf 100644 --- a/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md +++ b/libraries/radpdfprocessing/features/embedded-file-streams/zugferd-invoices.md @@ -41,4 +41,7 @@ RadPdfProcessing offers the functionality to specify the **ZugferdConformanceLev +## See Also + +* [Embedded File Streams]({%slug radpdfprocessing-embedded-file-streams-overview%}) From 98966a4da249704c23c9ae49f0b2089489e22b84 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 27 Oct 2025 16:33:17 +0200 Subject: [PATCH 19/36] Replaced the digital signature image --- .../digital-signature/getting-started.md | 7 +++---- ...fprocessing-features-digital-signature.png | Bin 66273 -> 53045 bytes 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/radpdfprocessing/features/digital-signature/getting-started.md b/libraries/radpdfprocessing/features/digital-signature/getting-started.md index f5ba6392..ea12ad3c 100644 --- a/libraries/radpdfprocessing/features/digital-signature/getting-started.md +++ b/libraries/radpdfprocessing/features/digital-signature/getting-started.md @@ -104,10 +104,9 @@ The following example shows a full code snippet for a simple signing of a newly The **SignatureSettings** class (*introduced in Q4 2025*) provides configurable options for producing digital signatures in PDF documents. It allows developers to specify the digest (hash) algorithm used during certificate-based signing. The SignatureSettings are accessed by the Signature.**Settings** public property and it offers the following settings to be specified: -|Property|Description| -|----|----| -|**DigestAlgorithm**|Gets or sets the digest (hash) algorithm used when producing the CMS (PKCS#7) signature. The default is *DigestAlgorithmType.Sha256* to provide a modern, interoperable baseline (SHA-256). The supported digest (hash) algorithms for producing CMS (PKCS#7) PDF signature values are:
  • **Sha256**: SHA-256 (256-bit). Recommended default: strong, widely supported, and efficient.
  • **Sha384**: SHA-384 (384-bit). Use when organizational policy or key size (e.g. P-384) mandates higher strength.
  • **Sha512**: SHA-512 (512-bit). Use for highest SHA-2 family strength or long‑term archival policies; may have slightly higher computational cost.
| -|**TimeStampServer**|Gets or sets the [timestamp server]({%slug pdf-sign-timestamp-server%}) settings used to obtain a trusted timestamp for the signature.| +* **DigestAlgorithm**: Gets or sets the digest (hash) algorithm used when producing the CMS (PKCS#7) signature. The default is *DigestAlgorithmType.Sha256* to provide a modern, interoperable baseline (SHA-256). The supported digest (hash) algorithms for producing CMS (PKCS#7) PDF signature values are:
  • **Sha256**: SHA-256 (256-bit). Recommended default: strong, widely supported, and efficient.
  • **Sha384**: SHA-384 (384-bit). Use when organizational policy or key size (e.g. P-384) mandates higher strength.
  • **Sha512**: SHA-512 (512-bit). Use for highest SHA-2 family strength or long‑term archival policies; may have slightly higher computational cost.
+ +* **TimeStampServer**: Gets or sets the [timestamp server]({%slug pdf-sign-timestamp-server%}) settings used to obtain a trusted timestamp for the signature. ## Signature Encodings diff --git a/libraries/radpdfprocessing/features/digital-signature/images/radpdfprocessing-features-digital-signature.png b/libraries/radpdfprocessing/features/digital-signature/images/radpdfprocessing-features-digital-signature.png index f4b247a218f60b28c11cba4caa77640e878e1629..3bb730048883d865b706770fbca56a8e92645b78 100644 GIT binary patch literal 53045 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 u`=ryjbvs=8+iY8 literal 66273 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 Date: Mon, 27 Oct 2025 17:18:09 +0200 Subject: [PATCH 20/36] RadFixedPage: Update the article and specify the Size unit --- libraries/radpdfprocessing/model/radfixedpage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/model/radfixedpage.md b/libraries/radpdfprocessing/model/radfixedpage.md index 01dee341..90fc5b9a 100644 --- a/libraries/radpdfprocessing/model/radfixedpage.md +++ b/libraries/radpdfprocessing/model/radfixedpage.md @@ -29,7 +29,7 @@ __RadFixedPage__ exposes the following properties: |__Annotations__|Collection that contains all [Annotations]({%slug radpdfprocessing-model-annotations-overview%}) in the RadFixedPage.| |__MediaBox__|Defines the boundaries of the physical medium on which the page will be printed. Any content falling outside this boundary is discarded without affecting the meaning of the PDF file. | |__CropBox__| Defines the region to which the contents of the page are clipped (cropped) when displayed or printed. This boundary determines the visible page content. The default value is the page’s media box. | -|__Size__|Property of type Size representing the size of the page. Its value is determined by the width and height of the **MediaBox**.| +|__Size__|Property of type Size representing the size of the page. Its value is determined by the width and height of the **MediaBox** in points. It defines the physical dimensions of the page in PDF units - where 1 point = 1/72 inch. So, for example: A page size of Size(612, 792) corresponds to 8.5 x 11 inches (standard US Letter size).|1 |__Rotation__|Property of type [Rotation](https://docs.telerik.com/devtools/document-processing/api/Telerik.Windows.Documents.Fixed.Model.Data.Rotation.html) representing the page rotation.| |**Actions**|Gets the page [actions]({%slug radpdfprocessing-model-action-collections%}#pageactioncollection) collection.| From 116e30bffc396cdccf7e7dd879866b9d6cfe3aa2 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Thu, 30 Oct 2025 14:45:20 +0200 Subject: [PATCH 21/36] NuGet Keys vs API keys --- .../images/download-license-key.png | Bin 56290 -> 88580 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution-and-licensing/license-key/images/download-license-key.png b/distribution-and-licensing/license-key/images/download-license-key.png index 2d1f7878d85aecefbba31ceabd17f4f1424088d1..3bdc6684e8a2af0f313807d0e6daac461238c44e 100644 GIT binary patch literal 88580 zcmeFZXH-*LyD&;o5fD&Nks=Wh*hmS4CJG6P9S{`@DiSdCA|;AMAOWS=AQS~ci)DkG zZHb69DWM1fDM67ES_mZ(DM^Ts#I(D7&pEH|bG~ofamTph{Oxy3NPx+Jn%~zdHTo!sn@;QbHJB10sCF| zOG%Yu6@@-)f$#DWM=v0yq?B8K{z#L;|MHcRl9U`fxc^Ly*TT45{j0O_255u)BqNE2 z0S;&0={x1(e>mXu!L;LV5=HGP`|o*Vcwf<#-nVnpmGz&`9DEkjw)N%yFKg8FR{xTZ z?rytBJD1P(x|cigR?MvU#;hI@EJa;S4B(@n_qhx4tCZ(s^AxJ!Wo5Lb_Ww8(m3OMi z{o^2+*}dkE<#wyUuNCqKpQ)HrV}{jmiy7h2ahIHjsTD;_iXv`zd}#j1 zQQno-bqg1EH=JXdXX*ig+nm#b4mxMFQVR zGx(p_Sev2d*z^KyOw<;Kyu|`0adMX4TX40Cs{X$kd$Xng#bk4+#2Z_>?`q8_H2jXs zf1|nX3vUpi^758k1tN;HVmr)K{2z$rY91^tGCpXa{Es93a@0m#^y`hdJ^wtSJNNsJ z)Iw|_mt)55=xJIyh>7cb%bwB#;v)6qKbX_pTpqtJGl=oAyW@NIDB0wFoGTOyMsCz(SU4rj;?|S*4w76%V>A4b|SrcTER3?dl&P%#mQ? z$W7^ww$IyyTHz&AupcjGH`wdw+`#>=ALYCqkT7C-H$&8{g6len%5mfeklp>f0;ns|OU zqgxFxtUHt*v&88xC)~9DbnF3E)MMDA5gtzpoDhkTqS!B_Lm`cpH}OWY*vQ4}uyRQn z*4cMz^1qH@e*4>|Nv1^1?Adfg+ozaQ$jB3|j*{zt3=pbZ^Y=09`>6;N;uE7DExO4` z2FLjvD!vqMG9Mypw{4&ZyU9YAEx8v_UEiv~O8Ms$aIE+X$Le=N7Cki%mDX2o&S^<@ zZ6xLNrRl198y##6>uFOL#8MmN91Y3xg!p)NReAXa-xgBybW*uq<{X8Lu0nm#)A4yt z6yKC=bzrH_U?fb*cp*m27n|<8I%zjmTO9S#NNoB`qmB3FNUt+2j(J+ka9{>mOw&{_ zHIy6F_#O!lBxx1Cz^o7!R#Y&&){?2_on(z|s}(Ro#cHkiBSCntcJh{Dm6na^bV&T{ zU`RJc0I*&%2NOLvvwG5&q=BEu2(gk+Hu;S=C}*Ad(3fiZ)t9PHz+g6q4OC97mmZ|c}T9ws$7AxTuhVbKc&;iZq#U!@^E zdvgYSvk)6_EvgMl1!kOZ4N!#@PRiA^ra5e%thvu5YErWP<{wqY>EUtHT67~f)W^%; zkW-U+eq#}>O7usBxDvjtgialXP5)H|&;_a@_Mw-v@$ZOhbYd6EzvWhvz206+VJWr&Y^%l|P%yeb|i3T}K`1hhTAn*o!ckke_l`Db68!#Qxr`h{PQz?QM0 z-95I{&|=;P!x8u%$sAtXsU1D+L#K*IF(Hksl>`bgH5fEsNr-=C_r1@lhb$423z%^v zkzPwKQRpY=nzUmSBJhG7(@Wh1$q&LPu@%6Mjrroy&ikC(=o?LqzrlI;+@WVIs>^gW zjCX#7DiKku@%=DiD{Pn;%UXE^mmtXwwvCVXEWYbsU_2loc{*{N0;-jSD&b0S0S@yQ zR*|R~Jx~z*k7NRgC?1lGG{Sj#K9dMqBad|7wZMj7{r*(lVrjuu2qAWSzMCu>BU4D@ z2&_Z*JX~@UxiWBG9i%4Dyq_cG)h(KZi~ZPz?1mOb^ru7WxCZXTK4|-GkkFfhmGH3s zqg7!8r1tyRG%efw>+^#YVnyqsgdq`vIGNZu-#M_s&1qJv%6V9-WR@sY7f7ag6}#jb zi8SN~5&L@W!rQI|WE)o*+%)*|0)oKi+`~U2^6nGgz(K-#F+E&dDnhm4bAPINgXn$e z`1=9adkZ2rmKXqEn4G^w00WjC0Ie8V(}av2c;V%TSz;BIgB2QKe6K%Zv>I<PNVhm43qKoe3#p$fRNu|J^(L%5o8mZWr7IK@}gJKj_k9%n&z7)%fp{@ArBd{Nz zR_7~yT2pw1ZZOd`0e>oBJqF%M-c-wNV1`K=TNx}{49AxK9P{J(z@o~{zT4e5h=Orm zOs;3tU6H^zPDp~TmVb+W7ucd0vW6>Yg$bRIVVF}$($LjRtRCqp+0F{b3fQzGM-tz78t_q~?1FG> zrexF&2j?X_EK=urmQo*LCuKo_=xJMY>q6y_*DCXnP+|cEkBRGug1S|xgb$MhaPAT% zZ);cE3woYXll^w8HL7D{$EK&4PKJdM2R;}GH9QAN%^o(8SEB6x?!_TxBFCzDsz=KP zxAMIBLW9ax!KW@a^J-6MP~%7^TbMn35gsg=0UAr|CUzL2~ga;AuObE1E~fjYUfq{U>|{A75nid4J|3j7)dWMbxfAD3sMuSbz@A%27?_t1wQT5oun4+2~agQzHlU~k+qEmt-(NB7`jX~ z9pktKrZVR1#b>E5HA-(}Pkv-SPjPvIJ5vX{swj`WtIIs^R2qSKz(N}*yYQS@job!8 zo3b72ibBV`iVgO;T%ts@sy7E z#jx;->i7i&r~;czYPa^fGo7sDwPAX#ud=_foy;FJco6%FG>F@x2!6LdiJb$IN$qHq3?cZvxM~h1~cjywt84s$y(bO_J)_z zg;R&3(EAz>!$sd%S3-Gtc97)9Ti8Pw(U7ICS`KP$VNNsS7SWiLAwLx8KNdY2w#q)I zirW~sopGq}P}7cgw^-I!MJ6X|$uAKXIua#V$7uy3M%M3U^D>boD!gIxqaHl+u1&}n zz(U0w3?ID8j1x+1#V`?3R4wrj5Nb~{4+}3ehw&~nQ!m$Smxyj)xHp{nIwte;k~T2< zlUPu5iaK91y%1E!doZSL3@uXfZ=DObp^k-PRy?=%{ON#8aBX_3opC_Qbz7HXX~ZSR(l-y3 zxk}-rcqz-}Fx?tV`o2m*veZp;^XZFbql(q8{5{LiWeXP7r-N)tRDpulaOaeEoKV8C zq93c=T0J@3B_B@e$ds2#B4u)qv^0%wtXG*xm$YYq_8lo@X}63x>3mUrFFKnU5P zb-*-6=6jN)q8+@oaug}mf{-~i6R*FGR^Fb|bnH&^G?%4_-BOHLEN6Qx=kDaA5R>d! zCajCGtvDpcr2a2?s#aVY8?#{<(K%|jXGwY53G^c)et(L(e+&%^FJ>v~c#W-F-vV}% ze#lb16u5>4|ASCV*AxJ%e|Xoeq(oS@qk;E&ucOoKM0;Ld4Ge04rfqnfv}w{v>X;HP z7^Dc^7zwk7LbrN(OhxLj668E~v`*9FKW+7B2N%1`dA)fucgsdi{Q3Z(8=kV8SSuuC z%Mb`Y&ssTxTo1=s)h9^t8JSbjlHhDTLTwe? zJNxMTh+v8tUjK%idT?8PL>sZm*|&wOAQ3%PZ|ImvQ9qQRAT&ufa0fWSwb9(;7Sp1( zz(^wuwW-5HGf$(7jU8Bg8bcFY%8n!grdA*k5hc~4Lbgb8@)m)5A)v?)b|h|*C2EQn z^RSZPMsVXg$6fW06{=~BEj5BfmAIxUIW(QUqSBG1?!&uC3-H+uNsd-U_x8POUW_SE zQjg==wT`l4s1h-Ek-Ymvd<#`NrkJ+&tYayQ7kHQk=dkUdVm7uK_9F21WbAF`XgY6V zlJRy$+dl}BOy0!A5~QI=bL8agd+Qe{f`aMd*vEEX?+WrIdxT??0ogguSs#oYRt0eX&W?hF5Zh$U(|e1la^uvR=+7ANy&%}eEyif+Sk{}?hi|KKi&>&U`PNHnP`LcLhEE3! zyiY3cmByM!`F>1XFUwWJCUV zeWm%b9uBV)D76!^!(XbeS#_^fY72={EDL`&jfG7#Hr;G9_VSTbYIo(ZDjmDz;gY^61zB(h z3pF)Qe3k*&GnJwFFs0+9}JT1*yMf82FKEtcJ(;0^)R!X zy;I%Qz~10>Zi9=@w~UU>P^egYGFJFAk6b-uld&#lcW%wg%XNe3%YaQ2%e9r2^y*JG zV`TTUIQR6g9RbB(3+p)uIU+-_zi&-8hBXUfY`UmS7xc4`&bf>eH!BIwY+G8!UvQ7WjCk-&JL)$zR= zBdCrJ(#hCJR8N)O^J9@J4!f_-gPJPh625roJRnZ9Za6}Notdl~`cN};ae^ZcC9`{q zA&Pg7tAy2m^q1quCvWRaS3^SHm_mDyC;7stc zwR-l!IM+EjD#Zb4AF@MFHi)~C(-L6cChWb99{TR9$Ongr;wGe!0&3M0 zqNIJ-J!m;6b^k%pt4?1nr^bfO-gAcP=QvFD)ZvZ*o$Vs*WTpSBJ2a%7~a&kx<4WMQN>zc#C;A^s@wG(VngjmyV=U zA=W+jU0z8cS|p#=b)m8<(di z7h{Ml?U2V0sR5y1GUUzA+3in8PIjJhGO*VXYk|T)S*Sp0U?-{d zCk;|Hg;!*)I^`zJnEMo)j@HbjvFgoJ6S+N97{-j>Bp4dG;PVBld{~UWAD3P!pb>#g zN46`u1$>I9AEiOu6A`iSRhPRjOZLsC9qV6hs6VRUOi!@(A?|u$)Uhkvi6yhE9uvr! zR2KqP6zhWSfpy?GDp0;q)V~cg)`890H(VCiQjV+C*L+YsX%DaW zZjCZ}z^Y9yvGVEAk8;m6I-)VtZAmWF!d)aQ>5WyVy72t8$Z9dSa#S80?NBRL(}WFU z6`84I6_ARAYPUKZ7$h7ah%VM|2RBvO+6-hI+o^)qX~lG@e~D>MH#jG?HckQ*e(P9SOeRmW#B_45v-Xck<8|prSh^z=EZo zu`J5tRCZ{3D`4?@YKLP&O=R1mEGDn=CT0Yi!mx>W>y_LiRk`)Yzx|F`N`- z=V-ITh_q8^pNhS&{)~5%7E%mr=inuAiV&X%y6zKOKaw{4%H+@(^5ArKMKb=m-%fY5 zR$~>lEgmy=T^2yvEBe5VJ2m4mgMzGSQ6ngr;YA~vG2P5 zMdSu--=~UOcEIg2PZlJnWO=U3HQd?HiX6m8m5Rdc2mQiht83$9icG0qPNnCj=RR`d zV`3y>TXV0zzgAR>8ednjqJ}@$H8(SDq6g&F8|9sfZBk8cxg_8=?r@p-TBfTa-d7Kl zdZR6*&P|3pPNln;b}NuAcGWw0pNpxFppGz33+f~BWlc#yP}!m4{fAoRUOLd~WxIs}^t*cefru_QXC`C5~- zTpqC0BF2YxPqyuq>02N6a=S&Jumve6Ok$WjXUnfwU%IUxjOh6O{Wkc_?E8h6sLc&fS>d?G$*JGA-R!0)4mAln>H`}_M8=~QAFe!_cWWb!( zvt+U7oeYH9Nd{_ATOgQDB#D3mYrnI9tg^kFa4Z@4rY&U{^P2bmV|-$J#@vLOt+?^q z-!B%(yoUzv=`OsB$prYeu3*T(1WanvNtrN{cgJSQ{U#k>E}0p^jtI9W5CzME6Wi}6 zG@toXzTh_VLDy`lJ;rLG948nSwYTpi3-+DA95As$Arv5Cm?y~`xe4xs|8z3Q0)*mT zpu1!EI-}k)=04&j64eLFPNZ26$5MU7{0fkj9F(@npA6@%MXnwZx9{w?1=rn7)pO_Z z7b|fyS$l=?6~=nmtstx0Xw}@#PVSL~(^Z$=Jai40G1JTJTzc{SR5kgtE9_#3*3lTj z7Xvk$Wn}?moHY*mFnhf~@`KsE2&Do9}o^)xB1^rOz)|f9%Yh=0Efp6D0y<4|rj5(E&iM3eGt5M@ySv%K&pGIJW^EY_2VG0mwC)PHP z{6zJesxTIG&t>_HB>3?}r)7z8zrX+e|Fl$SCEYs5Le6U9&SyqE_yWkHs#-=jZjosJrp?Drna2RsKhd6c=8_snKkC zeCrnnoXker{6?=G(~O`C9Z5M`iWT#{c~EacIf}H?dm}3_R6|27QF47<-cV4QzL@6n zq}+P&y@nQ07KFpml^5ch&v!pJ`;jQZ{lF82@SY#w_&(ue_=HbmY@=)`F?RGAeTsN7 zOd_ab;KLdv?24Wga6Q#Nh9Jm;3kk9LDxR!ENZQDYXa(Pv#GROBLyYRCV^#ia#u|X; zBAFza!?Nx-t^@8#R$(Bgwdb}=j8;yq5=MhUwg~;UUGsQ@1Fr9cLQg5}K1l0~^i%V( z(R1|q!9%5SL1XqENdh|Jl&=Es_ULlv^r;vOC8=foUz?ZIUvmVsu*&LbyClXg$-WJq zaz_>L0gKQl(q{#p!OsSO#WA%`!8@sA>17>Bvr#qFw~vEjb=AZ&ZQ$WNi>=amBY_T} z4fQY`!w2Q0ZYCc4n{$OTku#GuFI0qM)499qYdYYbQ-@CQ{B|!qN)kNTw2N!4(D9H+ zw7;wjZe$&h14pwJH71WVvg8H!G|_U^see`3Otn?NmeGW5Fa5v$S zi1*rJ*jDG>Wx?bj?Z!r*XA22V9{1!}O{&F034zUypbE=bjR~OojT^AH)j!-XG)skd zu&LW(*r4=fImlYiOy+&5aMppU)!`WSeIlWiUbSpv|6DWr)t4sDOObYO)O$}JN{Kq! zwDU^J z6w!l;=KQxU7QQVW->=!p9~=(U;o`U8mPv9Z((uSj9v@TJnTSoKTHAA8R<=L&R+Bnb zH9WJv06h&-RhO2r+Zx~N<8sJAXfnwkLPrN^{7WgLD^a9?#^A>9eu3D}`X$+iO zMO#^ARrSSWk$o=A?NmE??AE839ZA*GVSJCxICGiFj&&QC)RsUaPSV&JQj3UX;|px; zkmR|FdiC46M_5$5&7EY+IG3>_XfqnL;~|ji)`x9C?SgbRXI=J zT3AeY6bITV)GuHrpOMWQ$xwP4H;Fj@Cdh$g9!z#hA6(>*s`Iruj0cGl14!gpk({`4 zJ5iXbZXA=DqP~`|SP-#SD}7I{axW3>f@N1r+tm>t2Y?>y-XL4S}BO8v13!51N{ZTFv3y$1z63Fx@+AE8f zfKZ&Mj*ChBF~)$NZ!nkV_P~>dfXLqW{rylwug!}HSbapCXdX^Ydb|~YbSQc_Ti!f{ zY-exgHFkvnu5Vb;W>2XrmBJ((Sanwg%O=htG8jL$CocAZHmhD z2^@^4#czFRCTzmd`R+%N%^JbRS%COu^;r05| zoq?t09gIvpwRK|8q>}NUi?j`IDc69MN$wEL;>K7^_N`J>rhH_<-RId;EF1ZwK41F& z2)C`RjxUKBeQWvNQ#q_O!PV5ar3|@E8aMO#{fNgp$l76ftn3;E?xSHnnmn@UNrr`Q z){bOuF38YcB1B9=m#33R8^RU2@*uTljGKnFZ;RBjRAvOQCdf>1M2*Tziu6>MKogjA zfYPt~sq_(P>PHi@%_HE#o%+pdz)dV?sQ60TdS2DY3| zj7Y=cVCq6VqNW`&P)rnV14_Rd@V{FZ5JMWgqVQAp(yHDnFQks^Hpw^|KVJ8y+9dE| zJFa#TEHN}RFObEfS5w7UW*{UaWS=e(z0j=0czM2jj5-_ z7Qx)s_!d&wctGg84Eb=Cj@we1yJTiN9#UZkZL<9j89X@jB#6?ndEMkLA^uqUZXYS% znfQb~b}wD_8`vu^4QcTd?ZY>AVzEbev^2%D>jBuuX{eP65MqLy`R@jm@{lyYM5T3) zrBY4nfz9%A*Yo@uA4#d7WB+k`MxW>3B||X#NoGi_zg zAJG=>qfcS+VP@jtU?dw(unB>2y^yTzRcmg|kpsjdP=cpRHq+rZ_chatz!$*-XMgO2@*#A$lwiXa#-CTM--E(GUIB zaguJ8BX5I{?OHEuHIU{z%| z99Z-f!a?lF#?+%okPLY(3?k^J(#rCr?SH?qrv`&+C=`tUt9m|6s+` zX41#s8;3|!h}fNK>mJL;5=^5`kG?IoT=i{HB@UvUhx0%+QemKbu{amOIuQROtFFbs~x~`XxSN zPZf0sBr@W^4ijjVEyNUIGH-_{^W2m9);a?37ayOqQV$bW<835t2D(@H#Q{Ac#K$XF z)ST&(#5C=v!$n^l7TRY)f~0+AVHyYxJn5m|JxEu~($6lT8z>;7&^d{S-TiBppR+A= zL{6X>lzw>$*9lEfaN+7qh@FZ2T^uTA)+-wO($A_qdgW*1P!zD}```ME{NiS&@wVW- z;xPItxrWceA84{Iv5Lv*Zj`HU5z<~v1o!frj&v_pgP%8CJHPG!d9%`i-+EyF)eAGM zF9-A`Dg4`={AZ&UB3E18fi`z`!Mh66$nSWb|G(|2s+lPv0sFpFooBy$SA{o9Zsiv2 z3x7}fU-njsQ32Gw+SzV7 z;lEVBa!#^c_cx*bOSlV9Wz$MQjbHb0UL66QJhaiD->l<8#WWjt54yz}*yOeRt_J_9 z4kkb!)vsQf|NKi)<-hlp$;pvges5&@&z`Pw*8jU8Ev93ZeQa^0?QiE9^h-j+56$IC z`~RDu@*;oo=;Qz9a`|X`nwCH>%wrHk zO{c%cE#7xwfL`yoG7wumz$7iybSJuK=B=6wiYiNQ!hW-WrT3J^j_>78YYs2?uNp!Y z<8YgB>wnkE9i!^FtD}Lvb_rdx(ciigT-F%;_V|G+ONhn3c%XkZ@$PS?rm<7)nWgkU z0nGr)y;rZ}p=`gHIsVtxfZxzv!Yw`k_F39(A2lxKThoQvDz<|0ShtGUIO2FuG4WmQ zh3jL%oJ!-}Og&`VQ1`cITuUwmc|+3Z6iw|P3!thO48WhWKzZ$~oxaP4@WdbGQa{5SAxi<<+dubgm@s8+mMg;xA|+a;uTguJjRyg)6FjuPW}+)|#U`#{8nIM268f+@ zT>R8-wRw)6U(3DUqyD@J^qVi)rw0kMVSwl-9v5V3?s;j4B7BPvp-gKq3VJ94Jyl#Z z)yW3Cm;VUSGZY-S!dGAaSfi5_caIBt%SWWTU>?X7?v-@LZ}GjTU~bA24r$*YTobtW zY6NM7Su*VP9VP&o8vtr_j#+SZKGpf4#=mvQKR9}?@9u;^azoF3vN)fzO;g`C%(4KJ zVGoP#qR5vAfozv=d-q|p4>de6FIN`bm&%u;vL#I-gVK9wg2IP6dx+kiwM1R zBhhY!t@&Yf-#)p#4c2cNNWihvvlPkJBxoB9=;s)GWg|%D9$EGDOLxGeQM7ZuUap|L z~i!a`k z2IY$YuWc%cbiuE8&V)F!Dnj+_p7p3GjmDS%;hTlKkZ^*%ws@F5VpMN+y-2eEup3w+d*F zM;#ZQ>i8Z)m;=MIwcMF@ah})f4wnv8EahJ7vGacvBS9XXklbRd?W6Q-$NGq%kgFWqEC&t|I+_%A?0qyoGS90Y)cp) zy0`x={b2b8?%nAfSxdy&a^Dl-!tsd*qlfn&7o+^TW|vE@AowiZxp)<5H5#N5DXGor zHu8OsrCbWjXh^l2X%)Hi@0oD;FVv=wJHD;`>VYJ%*ui0Dm7c&Rm`?dfT-f*mEabP~ z`gP$TuqikXHV&B;1|)Iu4ykb-utArOFQWRZmZQC}`nPi{OLQ-R&eap!rJs*XoOHKb zJ92ME3qyT(n1)X-#k!`J`oSb%9iyCy?H6n^8>3xD^j>|ztrLqoOWIWU%ftCk z0JeVSKu^qfv`d9S>YqTn;aj>%EhVOSyvOTEVTf6ocmK|a!M$a#3xIX@Dw+IMt5mn7 z(h?Yka%M!dmM&BK;FNXI-jlU_8O~H}s^ILhv!K8o216k3|MI#^bX^Glr4@wY$v%Vx znt@MuRi0TLCckX-Ad*icx^&RN`G_r6i+<^%&wDW=0!FF@wjV0I`2kJ$Do0Ic zhk2NBarq(Gk_$l3gfC|;eJxS*s?#dux&I$I0s6&6dj~V0&o;#GS?!Z#iVJ#VT0Y&AAD(V{~=mtax!Y zQfQo|1JNx=C11xz?E9Qrx&VE z{%-faO^|W_LG2r0%xK2TPnJeewO{O+;J0Ud^I7)0G8V7D=f%wTTE&t`UVgolm(=h% z4JU(Lsihww#Jnvx#ZekMj*-(B1a0%N+lMHuxR2zdy{0Ud#;1(m{gtD zx{C1q&L^l;ZE>^n4}tZuZKHtt+^-b;lI4bHZ;`tF8PE6=hI6JWi2gPy4*6F{ z{B0y(L;P1h#g6umd}${;RTTkk^-hhFrC3}mH7@Z2GT8%N9ace!`NXH6sgu7U;#@R< zB#$m}9=P|^s(W3rA&E+bjHrV@Jn9ys!N`R}%c4{uWvMt{AK&4?wGx1CyylN!Z46EB z!gEF4#at7jS+?aCT*m$L1tLh`UgF@HiiQ((;i zg`8V7(h0vN8~N|xk>Zn~kr9->`T6ZMz5cN3pAjr4Cq1nsWz*U-*DFLBLC06OHTqYo z_1It*Hl_vWQOr7$JmdbR2#Ti=OjOL4{Bu+MF6OC@zcU-^gPHxkymtC8{cEjRNa{!m zwG8R?@GCgphWLA|tNyTQt}}&4Ywd~Og?{&zB&LsTxolSbsgRI=d~pHgh(S%#!9{;x zvgvt8G<$~oNm@mzYR-p&$3YY_e36^90K2)HR;6eNO^sa&OBboS<@`$9^2#X3GCLXn zPJk}ym=fzKoZMB&i}XujjW+MA$@=2J9}Yb_s)hfN_c(Qz2ViXKMd3yY=ru+-I9VZ6oeCynXVL zoqYdMQ*Kqx{5|bWxv=N|4gga9KkQI*ga=hO!S(SEov{U7CtoGDy1`mtwBgd^ez4`*ek=T6`hfl3P z>6-2$u6=>U;OxL-SMjN9Hl^y)YEv1H5}ILNG0Lj;3yU%7bBHbE^YIgN^O_Ut)y7iB zSs3)A&3Jcx$`JK3qba(qu7Rgr!I-3;M;HGHxH7}hjuqO|#H~XYM1_8H=tX0y?MefP z-w637M|XfACHagDqB)__gX}fgrOwr*j2<4fgIelki}sjClp#{$&2$d_O?HNIC#FXU zuIK_m-qQT+$!B+sD$jr{ow>->Q*eob%-vxE3avFk(Zk6`8VBGiXAB*AE-{uLUm-gyB79zjQ#bF%Qw2?y5#cDb*x0nSLROsLF4j)Ke z&xoru#8=9rj2_Ks#rzQ zJ03PT#22f<3^n+}GA7Fwn-znf>${q4tV9Hzpml&*dIT*MCE62&O&UE<#KHo87Yj-*T;lnUKL9| z5aM~_5hcbxn4G&~)^9%RP=*oEp>z9Cs;czqOKlC_RI`rFQipVpHnMLF{;5&SM2Ty$ zKr0cIFE~CH0oPK3MmmMXZU2JcmIr(rI_f|iS-jKW#&^iZJ2$ec(O&$aH>oaqc*gKF zqqDJnIc(YD2Rs(fLi4B7;^4n3pp>!zUEh1veD(RWldL{Bh-Qac=w)4Y}dYqb#SS_zjVDNf{GidsoOWG*>EnRdry3AEPsHxfPV$whf!8 z)4hmfLK}}kK?&_mS$D~>2IfNoK|tv!mLxHafAgn)2D)k$vi-NV_|v3t2DI(J-Fl`A zS)3`W4$DhMuwVD*|K|4mOE=>3>U@M*K!<|WZ)D)M{-4#U{|{E^aPm0lkIZnKIw<}% zY78;qyL5w^-5rk+kv-9}oV)cvHwmgI#EX+ZbRUj5r-5c{dpi{FU&{cceUEj zpt%kdF;}#z>7OZJUcc8RdOIfh;sYJ9_s%=36OrE&-p0R{OZ|+Rl!c!s-}VaUJkF3K z?w@Vejm4kpnIMV|7sdC!r z&gxW!cU;&jXy~ESbg>&a!39T>_@{Kk&r`Uc0_N=vx|we%;F)q=<~x*c9*ApJM5^PT z!eXj>cjq1<+$5V5Nxe2ij=EEeP@Qh!ww`0R*XzfoW`pz zOFud*P~l{p6=3>i%Y4KcJ=JLlnszW;QCY1OCE(MMIZSXWu`2V_F!Q8;~qa>yh?B zM|V))YtxtC<+;_^lV+P3!f|s+QBjz(3jfcZ{lr{`Ou=pJHoC4Hh;3BFc(1)Y=2j;} z7n6tWMJflN^UL!uRF9O{Dxd#)ZF=0 z{tNmYpJ;x50o8i)QhmUJ+yFD$SuBQb@|r8NkBn`>7i^FH$eebezWolv0Q)`S_x@{$o%0``umGu=H4D4vY$5A31SFBEV81-8%{B zu5-E7-?TA<1M~qW^E%IIdbJWKL+#4z>la>e48w_LU2bD>s{r3!JN8wT34=QJ5zgDO zi)?H7mu73;e*w3!)+3mfb*N*?ta z`rcVhB_uoVkCAhyuqr{*Sx)+QoiRQ-dJ&z6ravQ0P2@dgc2oHAHm068B8;A96(t^L;0zT#qdwJq->m3dG5y)ya5C$Ddx`2J z0H25L5y#r5KkrW{+4OV7wT|^>4%^?HX)bX}bl#Nnt!CzFi;3U?9FDEw?`h6tC?{; zMmwE;`~^YlbBliBaSeb$V{!3nxuFnGnO(s20A-p{r@MR1Ftp{1Fe1OTI*)MUO;GiS zmfwjV6>c@~)hVKR6ulc~8PHp3M_`%A1P0sS6hbxqu`cpOBg08H+3lr1TZerEu+FIC zfj1k9q+K{a-x7~r^6vM@mS;Ugs67sX*ih`kA(iDpFFPN;DRbFUupm^{N^>>ZnxCOy zQ(K$nif}F6YBNya(o`CqE#K$MsP9}8swv~WJKx1dZ+P=3`Ho$ELBZL_tn*sN+JPZ+ zg!jYmB$n-O=B7mkY6)edzA})W6xa8iYkU=uCI32aDd_VKM)b#I&v7EJTH~bL>}+~~ zVOCFi9wOYUJ9m9{|lF(=M z3cx0+>D|$6`KJG(*J{Lf_nS^@+%;93S7)+~eEQ8}eeZqUoOw*H$*QdLjCVHv#qhPF zwWa(57k!)S1uok|75D|1nt`!v$e^Q_eQ&;!D{Z(3Uyb>XsP{7fp66)-S_1r|h7)fy ztOkAGN*kDt_-6gJnZDah{>;Y+`Nv<{O0*vxh&rPn|JUY7BPV^l>Z2C>3E#J6O{%J= zj!m7e=-hRxvl91r&6iM!-O0C{2d)OG$DOZ2P-pV%fLlhbC3lXSdVb6$@gH~2d~Pop z2B2Hra(-o?<|y9;Jagzw@O0M44X&j!k5c$e+PU^WmDkk(3m7^;;nUMcm2&M(&PL4j z-8mixc!FIKL39JPlXFMqj_>=kbIsAet#GQlD`kWzv6qiFB!&e`}~ ze`OQlgpkZ6SIwe(hqFlrcTYt3zL6JLoc+{^a6hV6q{Dl^cdx@AA&}&l(0jZ!z8BXN zCAe5V%?`G@5c>BM_d!69lurm6UL~HO6uaoI-CGo?sYMwT&=I29)8$&%qIWhS6?kxg@V0blMJ$t7!Cw34<~JPS1(e& z`ZzlfQmN&tldt(T>0EYeDex9o!TYakLO*|fsOc&XVC=re&(!|opd?%C~8Vh?YA+IQ@ODZZ;Ys6&Ha>>^XNbI;mqQGL6z z5$@{~=FYC&YZr0)>rA=Plm0=U!AW1_);=S-=ejZlV{xyX(@#kKG_(@|0j{ML)wS!d zy|v7cXIb4lVLS5WQ)goK0YfZ6`Be@2rS74(B}iA_DV_h=(p%`L@ryF`RQ>DAhZ6VG z&yLMVZ_R~xsMc&g)p?ay6cGe;8f)fGJdP+E@Kq>#`q})*83i^FILfMAmUM?%qtjXU z981j1d@7gS#1|`k;QAvl(DosB5j^O{dr9N*#Cbyw^1Y@!V_D zEmgA4Y;LAz%^6Mq1R%Q5A$Ez*Yj-PgzC!GpPW$1s9fLkYYB%JTnq>D!)>yqabPvIK zZpq!XJ9!4crmWKC>W19lG=oZ)*NM)1m2>}&g~)qGbCx0E|cWpt?okgLqIq{{)`KZ?N;}{zX3e^nO1`#-*1Ti<3HWMa|py? z*OUH*E{1^(?)~#FQ^2D+e}#nZ=KAg~2mEG&v;N+dH^-QrXRZJ~x-8wbA7Ey|JqH}* z+TT9z2cMtFE=zHJ-T8%7T5gbiuL(H2x0G%u`g?c=Qu1@AG(dB&=a9FT1EzIcsQ_{< zzwBRbA5`$owN%3`_l0+Vy=!TbYwJR$k?+lH`C+SWK))w^^V!#Gp91b2@JH7U5IY~{ zkb^>xfBhH03U7D72?FQ=wD{(dQNCHj-#-J|<^HC#r^!Ih1!5YyyTIit#WT^>v2;Vh zLZMIg7!Z3Ed)0WaZGm3jC#P0Mh` zV*UTc*Sp6hefRIT<*m!tSN~akbA9%@uisOM?R|{BIcq4!OwDeO+!4!JwiHWJN~UdY#=N6>o*4c^ z^+iH=g}qO@tHGXE8la5T7Xw-4#u+4l@x?Fx6iMb)8qCPoPgS=WNSKcs?nyWJ*^71f(A+vQ6m zyTl1>O+~$_fc5jG9%E3DF;p~gZ)iQE#Kyba*%0czkP7vlw6x1U(QTUd^%y&jgFHKn zepTwyRpQ1UF5jL-Z;%dE4lf9eP);hc#AG++>=VVYqr1G^`7Y`upX-`pT$&nZcz=Jm zprE zS?jAMXSGq!n_Pt)rAttE=&&+b-Z!e}(&Qtdx-AiI1@(&#ce$3!zLX!kM84iUcj_w1 zPC*QdCJ+0gF<963B$T>7B=s**=Y@vu149I(tSHRMpF?H676jzofnSi|-W7%{1kF$GDLHbb3 zyIqZwqXqlO^IA;dob&0DU-s+dk2ytSDzEzurnmpK_T*20oZo4ssg}$<=dWVTbrTk4 zPl;x>3gg%~!$ssjFs)nwXyy_SDl~n;DA^RomjDcS&Nf|6D;dfhe!x{YL$f8k&hhlR zQjCA#*Rcbcwz>3t)(6?GE+5K-#pJGWVh+#JZVNjYN)6VGU^*rpz?-XYbmKecx-jPi zyc%J^o93JwnMEHQW~*qyd*Q}+%2|VrMZXzHynjqji5A?+j>YUAni4YsFx$s5{Gu$aRHcP8_U%$+HM94U*ouj{|e_*~qyBQP4*Wv(p7D`oVJod1e`srla zDojT9izRl<8FPmkfW4--nZLJF$jz+4^zh1(%q)6V*w|iHAXx>rga`T_<-Ce-&7Q7# zKP$Xxm+5k#Pp?f5y$ye{`(4F?=1I|)H=F;%}87Wzz z!)D9ca{>dt`8B)Ewy&wtKVzN;VMsMfw;UQG?V)7A2bXp1M{!+m zmh^H*ib&0C+NIyb7pZv8>W2@@82c@?eERK$u~F1?9i5XoBu@2cYjYv0e}Pr$(7&7(}r!kRLDv(%0=Dt9r! zHHLKK1#$|!qkj1A!bkv4X|;;CvR9J9f5K6QDz1$BYy&wm%1w=Dv>J|5@Hl|{t*v4Y zVEnkk2MaCd$oI-AS;|KK5r1Www`grI{N>$20r#5NMw|#_ur^86yn#SO*E8I zL59W{)cFGPy?SGr~vbvLrr=i|LIj9s_T} z)hSB)9pOQfEAAq*)ND#J6$>-MI{;l*Qw|5(lkoh`;p&X#(~HasKd(BAH2DC#);ZUU z894iXn{@@AW%L%!x+Ntyxd*n)mwauFge;j^{z}OqxhcsZ4~vmK?r*ROcJb(F` zgZzzxN_x6LXE566{$iwzT`pf!5S}5xRpBJqR!N_~Ye-)>0i{P24lO1Fj1g%&KA08U;!&`sHq$$<-Gv=AF=7Mn{CuSUC_h&gpNs{N3LZxM<-Je z%9<$CIO@S20Nu6K`5Ckw;TU7CnC6N47QEPwdopZtI=`mhOVg)^I{<=frYOnVoUL8{ z$EfT!a1`-_yoMWaurOP3He3d7k72Dyawx*CtBGOFNn~)8p3IY{0aKUerUT2wux3bl zK9sLDK7zihkJ#z8$=#V!)SlRVmyWwwDaz9R${;7lGSE%k zgUJR$d&B3k|u&>X|JrF*60m#+J^ zI=_-uk=J6#sWQJ`l%2pf#(iOMeIdP{&-yC9eD0tXoWbo-n;{-*b!Q|}lS6s;) zWSLAT7Q2Ea@hn?Fnc;l;hu~f?YyAqN`A7pqjFhn`WPb4a{bWPe> zjb*5$)L*HM`{Q7Cv2fPTu&6`U)7>`QR)O{8-Q19&VzYs*F_nD5sKsRZQyv&FQ=DyO zN@r~hTL*T<6%YAzbope#U11m||7>7luGsB7ZJ`in;>UG2fuVC+h0`@$LyozHVw7B! zt|_h5d`aoo9>WblkhRaAi_r!#(~98nOm5<Fh*@-8f^qCt{Vg61(gKiox8a zE;mWPkd=TLs-y)Ai%lhMi3|e9@g8)Pl_YTok~z)%;J7#ur?RjNYu5nH0;>DK_yIX? zhLQ>46nDQcGu$Vbc3YY(YcsRdyx6K=XQ+8DxeqgL)0m^KkzYVX9#@5f0w=V+4=yXg zfA6?_$Q`%qi7i=Cu$wijdEUo1O!@Bb>`PWX$V%p%9B}B<9fnZR01ytjT{*w$vji`5 zj4lNavD`&C2xK4qHY&N=gJb(+k!9+8Rg9E%^1~?^0_Q@EF5B_Lb+yr5xEVl%m_u}c zG{MzS(eMH(-l-!+)UpZB z-1%S`oHD$?gN@fI z^J#r|gm(eUyWX^!Qf~y4B*l!d3arP)zFrJT2qn89>Ws|N+L3j%{Vh2ut7yovUg%?O zb3K{S!1w!wd7oqgt^?CYP1vt}?LbVcmnTf%)tE2;r+xoz1Yv@vXzBpKM_S%h*K=oF2M;x5ZL2rNr! z8_paY2%qMH4Phj(=7E60zt0dT|CA3_O#T?01Z_eqp5iC@ce?uW5_{(iB#@U_tO#d3^jVsr#6qm|KLC z&N=rXBW1Xx`U}(G-E3LaukR}AV-9~#$>NOpucMiNz2n(G+m%n8_Rcs~bB}QL8~Hmp zK)J5Mg_g}i0+(G1BAdiBbnCPn<*mu9D29LDn?-<%XB`xzyr(`pc^oHQY~^Vx@L6J!uXMYM1?qEj>=-=v&lxPZ+dM01nyXVSL z6>q{K>=$6=F>o_*X1FzpeG5|v=>Dh)$8^?Wi%`ugKO??~%Xd_qklR#on4B1Squ9eS zH38loF1dD2<@o(*YA@nOS$KTyAkOL-w`HuWWe)Wv<))=}oH}4t7C)9{t4@w_OMX6) zgQKiupM$M0e;JE^QQJTlEsL-xLUSKW{NT~LQA@4kZh$1Y$VyIwRQW*0I(hjgFzGo} zF4@KA%~xXX3jJu9sUV*1XZrwmBE^Efs3suVu1UVF(x;MH&|eB{1Gd zroJQT8OW)DxHxFgZ7}V^$b}i!AQc{{V1Xp~ zIibT)vgaahhJl3PTXQVGQZqxvV=gCOi4m9G_l3Io@6o%hxK>Z77gT5Wd*T1%b8-a>>;Q>JVj6>^kKGTvI!dle zuD&rbDDyxlbx!M2(1=BVkSoQau;B&M?{_^lO%0j>mfUjY4FN-Tfo5r}mA}~Kv1FiN zHKo5A<92(&ypT*RSK|fI{^iaR)-%%#?JI!Xc<2<4sR-Gn~s!9ZPe7HypJYEcexTKK8E#r)X?B^ZxmRT1=SEi&ENC^jDZL z?y4P6`!oG2c+4uz@8E4QnSnQEkbB^HgrVIWOvnr0kB<^^{bU39^NoQ0U}O{~2TAET z%3|Xh@*DUGP;|twPXKB}N`7ov{Axl=Erl@6BC1vlrL4Yuwu@6b6S&)&~5hKYB`-c?M0=#T;}dPFY0fOU;1RPCZpFHCxh zUdZys+&$2Emgc;wTH+MG-irLmN-LWia+Z;DgUamZSx!8t^%)iSl0TRSrLv4WO;o7` zDq86*KJ(RI=SdC zy6BwtQN1*lSvY{>*93~Zd+>-na6@Ul9c;pX1JY>;A5D`FkHd3iU+hjUHC1TvD-cOH z>T_6+H#3%Lf;|ZsMsPzOd@7@+Rb~)1C+r!>_ zAB==P+sB7rsX00AAI8wD3Ru-jjoXX26LP#w=!Xr@mrj$Y5~_eUG!+8HCw<(vNX0vk z)mx&fmqrd0_Z-<#sTru^#f;NCp8f>#4)=~QC4yeqtKw}~zBkC03_|?)Tsn1`E%5=X z@{2S~&rwbXe7~Za=1sVk_Sv$$kDy>?lgofCYTtK46Z=Q_ua43mZGG{TZ@_~b| zrv#8zG;1gbAMK02AmYLQxC96;w;|VgEY#R+5Qp40mtcIAr;jmbEz5X9I#A6Ea-VO{ zY{oT+1!FJMJCR%Rv$v&!J}i;DA8=jf4MHzxkENf-akT@=cjdg=+bTB>yLo!_g$>;H zw_d9gx6WMiw9%G#q{L5cK3^<4=lvnZ)5BZ5q4|Q8k)K-`a~tiV-uz3oS@a@mt2Vy4 zdmmsAm~EThYl3C}UX zukZ<^f_g?t4BNKAi&M8z5dR#Mv_qG8FH6B17S#L)onZT^b=Lu+#rrLDi@RlnX4mSW zCd&TXV4qmZQSH5#95cA!ewH=~@S48RVlPk5!nm(rbbp`dtd0YooSH_M8e6rvSmse6 zF2;sDJOZduJ&1j{&q}hF|~}H3z5|l(q%7&a>=p#IZJD- zcUa4M)<6!iAWf(x7c39R;eEKq-2k^4`$Xq-c4#h(Ee5vk0ptgRxC-Jgj=Xe3R;8|3 z^g1UnOQ3Jasn1;77mYmP#gU^OV^H(Aj84 zGw02M?E~H#XW)nx67zxfejg2JW}lC~<~add9t;(2|Jw7bDvYon8rmaywhBzA!9;V+ z0vS#$EJTFtrK8co7tmLB)!qtx^+w)h9bSL%hM=N|6M!&%u^4Psv^2tTr}uG+kS10a zn~Jj|p5;J4a!wIND>+BYy}%0G6)sce@0zK3 zzi%KbZ(vxnedmFJ^tUo0aLiPe{I|h1iK{u%`ZH(~$@O!ZmWWR%|C*Ly-46JG= z{~290Mtwoevx9}@aEg_EIlAWx@FocGlhU`tJKo+YE>hkr8K|Zcj(sGj+tLx@R&y_n zH-nN5<@DO9x6@(fS&eZ?hWYTOcEuGC#dhQMmJT02{evvNGxS$>TaVE?!9}Z&;pGNW zuhfQ73{T1_&8h)wjnAcb|21M7t~pp)W`fcMimD~IiJC)kXH*I+HIbA)So8iyXw2fe zscn2M6wIhS@L9=boqX$Mx$)a|f29~+v}LS7u?wH>n>EY;#sVD1&EF=KfZhTRVtxvL z1+8$-h&`w|UM+SZNO-uerg^or>Q~$mF64p)Gh$ULjrXM~KkoWFKLrpISX zf%-okD1p1m)pxmwFnVCgy*Wv;3t-+s|3q!j%0RU?|DAmCU(86=kFVo4(?J1vZ5lxp zEQLGd_!yBRA#EA;4wt|^zpD-@Z4yrdEe*cJx6(8Sn7e^-9hA`~!Fvbe>=!&Vxh{fx zgeoW>1MY#%IX_q4Q}0^OxIW~@K3opFx8WP(h~!3m9YBh{L5#TSdaT*$^Y+77gS#yQ zo)Qq>4N`E?&D&5l)KyZ(*hkHus#uJt;tJk8Ig7rL*kZ7UjQ!T$dn^BWj*%G@6`^$t z%A|`9HpsW^sKTEe;)n}{OU5$(I`3XECbxvp5HGuc+PV)kO7D*=97c|mEK%q7jubof zP`UYzYrTGQ^yQ;@7X->5-g;p+03Z>Qz(mKueYd4UO^P~D-49JxuTFa4Oz(1Uk@bOz zQ^s$Lz%yl^$R7NQQ~sJR*WVe7AX9ndXAFt+sppogsJ`*Tm18a1?E>d~JCN|gt{ezt zqd?P`u8dapxOP2#ocd8B8Ts~cJzZ>v{`k$xv+@Y#6GMCQ;jD1<K>~Sb)V)aFVna!UGR5}ex+ASGzK9z1v40}>BKBk27`R*d2o>UQ=?$gA z-4#z+fgc2CU!cK0#>5#;tfz1qO`+wp!F2}H7=vyqO$bzq%|XK*>fTkYB-zb!$!5e-b;8M z8v7;8Ry+QXG}%ml3|jk`p{gz82ulfe_nsUPy;NvEys! zj8JvPuttr)MJ{{4dTChAJ$p_az;T&u5v5P(f6^c|!x&)MgweSX8!HG1TAXk#%dgy2 zGGP<}@%}{AtOUS<+;1JYUaXU*Ezv1elWpN*p>H@Q`Ozdkqa}<+dSI03iQMSJiS8oK zLt;_E6WzUq7i6R5!m+1*l^1wVf z>4S;$kj<=He=J{Z8%84r6;l*Q;p*88;PIcwSRV4V4EOav(5Vm&UdolnZsfeBLBL*A zG<7HM@K>(?c~f}oYAaU_u%3ME#tFW*WiPJ=%}E=y9*VsqJNqaO9~=uAxBY-&*vlxc z?=E+kL1HArnzkh|tgOc-`?;zu;fK!T%zh)WQ;bI@_BVt88K98&(5YZBgG2`fD|5Fy z`6Qj%q#=$%yFDm#t&TGJE8~I;?T60;z@O8E5#Bt^k-jn96Hq-E)ZplxV=yn4f~3YT zxZO{ij*)z9ga3DbZ~8YqJxsEAL^reWK@qSa=B*9ySOeR!AY`a~&Fm1J5wykUy7*#D zVMu|hNDL`9^pmOaD^!!ZT!n%T~(GS@d1Fn$CxUi~~3#DD-f5F(7KZeL+i>mJ`%`Qt3mSC{Ol_TGW86M;icx zwGf9A*sVE%nSA)J2(655(Vai@#S3ZJA8hv^eqi*WTQSuzXEo?2Vt3vOCfbtp8g`+n zGWqsD;5H#-2SxlXk?<+Ph4_6k1RDJ9Fw!FWQzqm^tH?Sb_ zZ2nX@Jp{p8uCA6wnDL)ixbZy?W>r37q)_$UYZOC+{Na+!m*A!mU~eX-k-Ygq1AU+> z!qWj7!GlN$x#W-Qi@R4mBl6u?e{t*`q2C;w_2Ae?`t(9^&kVOC!V1h6p0nW@f4;>? zC)Xwe^u;+%q=!#tsOS`r>2*=#eQct*6e!aNvKs>eUEqUj(fpzT^6Q?<6aL0CC*UrE?1PfTRfW;pviJ|2i?Atsg*7waqp zh%d<^evDw~kgH}5fUPbol-gMZ>UgSiu0&i6ZUho|NQ(hWir&z(!$Wbk!Ku`=&-{?+ufe@jgQ(FNS zN=+r^N;psF#3jR#DQs!-YJgHWc6c0+WcMJ^C2?HHX6|AOxJ_TRd#5vIDXiwtr9Dk0 z*=3L^UmjCWhy&J1ME)5bjfIv^d~`KYpJ`?IGc|xda!2^lj+6xOD5K(36{&|d^CuZh?ByT* zHi%=Z#7sXp#ra>J?p04$C|fe#?h6Nc_fEr{&MNQzr>11LHp9EK>qw#uH_ zO&7ILWQ}PFw{TwlVrX12`koL!Qdotn=o#JeWFWKK_mldx8$g^VM_Gl^&=-Ue`Hne z=tu$0>=M*0>KyU8&U;HUjMc9Az6KLu9^?uzsHV#pg{my=Ho<6hX;=Fh{YF7VHiQ#z z=Z%66MhbEC#IeD?MO_As9s#isllDEqz#v;?&k#BJLfsZV!>+)dbCn?NDlM3js9W$A zIzIWn%HxcFvmlthQSdm&IL?8L)`e7v?wy++*u)*>Yh*jIU=cH*dAjZ^?A&0O$54+< zI7=oCP+B+FkzkWc>ftm9nxnWKbIss$5>o-Dnx!|KC=C4(JH`f}f+j<-Ty5_dw9tSL?eYKiI`5 z`f9TK#`m5y_x2c_f-()F&X>d>NsKEYR5!h9N*@w#)=c;{<94j_1{pV{e4MUzSnqKa zOs0c8Bik2TebEHL2|>1|m5gR;K+wms5R9Sc8pQjv!%v!^fmr>?C9n~BVcfwK65Yc{ zA)eM0P#9-v?z=GLu%sbAGenYI)9z-Feh#)jgc2`$GjRrAhW1bj4LvgD1e?Y)_UQ&QN)trKya(# zWybB%3QymG#I?9T$@GYTR&Rf0Kj&ed9PI?}6~kXi@;upwk|>iES;GP{X+(A>OfHuR zW6XsY0Di&M5*LP*e0k&7g6G3l0j|T!2tojRm=idOxCD^$7;I%%ekY_TSnj?E)7#*d z6+Jh87JXtZA_85*(t|^Isf)Kjf|XFh}-e$ z^*PUNfzG{p?D|d z7L+~e7I^GWZX-EEsjoMIB?;D!e^CzKwOinPW^EnaGPs6L)eV8@Tuns3z6VFL|B~zB zAtWYaqaDiO%UDOt$bKE$3%k{n1dNCUQ-6l^^2k(y|78~bun@iyZ9_+jjdnkjKwx3l za;{(DvV0~?2AS+~xHaPK`W_Aco`!LT=)|>)+TZCGIkAg~Hu7=o5D!Zkl0(4jc~jt> ztuDvd2V`#lo)JaTJMDX}z*#a=yIV;-fnY}(dyL?T8m7Ge>O}I--$&7B=2rB`R*3p97zw(kR4&azF*VULWqkg#|ZPmCNwoY zO}NTRbA0*evsxF>dxRl^0*__)jK&998}kkK^;_Bfj=-LYS!DBa)z!crbU4E^IWz<+CH~BR*X* zh}lP*5E=yLE7reyryLr+^UZ ziYDmjG3LPSaT2!od-c+4D3;35hVGL5IPE{{Oug-9GI*xONHTkw>TGIb8JHf)E21=(;4P_iEIa0J)u-1wtGOgnUy zoM99J?c-D;=ElJVVyMs}L_I3u7)-`FU@7b%H2(kEOp2+X=y*I-Z#~0b#SWsS-Y)_X z0!REjq6h5aGjOER`Y{SECpL}C8j^5#!>HZv&il@ zmP|v(Ol+P-!eWrIZo<35jIgm#$sxD7@#lI%?C@8$XWX9Z1e4xA6C1f1Y*$YVC3lmE z1I1q%@+AbKCh2yAl^1Vh1s1|d;be`inf8tk*hKs!Hev94WQEV5up@ZZO;K7!#%GD$ z)T2;215p`aYkb3Syv>6C z|9n%Qu>^SCT_IP)`azCm=s?pSy5O|3&1S=Wf(33ksA~rN9r~4Ak12w2 z1Z+6`j@#yY>h_q7Hu#qQiB2-DJrl-rTU}JVT#$8rGY6jiUm9b45=pi$&<75OVa)T< z$v-vZoH4&2EHt*RItzipg(R%pALWC65=PSRfmK|)vIU=W@MTZUUHZ)p-UY@te!&y# zmN>t|OJOS;L+=da;4WWN0I-dt+zs&AjtRRS&?!=!TZrAHw8^#8jpLZ|4#>LFg_PQ# zGaTsgTcjo7)SfvgCcC_eJrn96Ksa`E7r3W@QGPO&?5T5rO&lp6x{W0S|3fT&F)AHU zY~j~P2c`2t6@ca@R_2;}VR3F>PgT_GG1)s(tmldk$ZJ^9$UlK*x8`>+^fUSKpTQnz zX{U?Y3>S(a`{-dl1mS2?1SAIYLKVR3*?0D3A`n7O! zV7QVJPB;KAY`^dF*2JCX$0L&8@(ryJJ7(E-lAKobR1<_^UswU z`7z113t0ZjTYs*k9cRM~!uBx+?iUVLNMH~r@T&Fa@IH$=RMY<+E)(C)o~HRPXn2{u z!ow%mU_V=R3fGC|t{g$M`!#KB=2aE%wd3hYe8@nB5BS>C5AK+~kK@JYcUtLBwf>B> z^Tx2M$;Vn>@Q_Fd8|w&2hnGAP%wlW+f}k>q(2s6^;HhwM7`Q5I2ZYJTf`W4-$H!3e zHP4~XS+$*Rc^4Wj!)qpX?@7~O)9Q-}o%}Dcp2Nun^Ii=-J^XjMad-@?S$Y7w1s9&k zv$uGhQIcfim#t>AiU+%cYgxr2zINE_hZ~gF1=mJIKU^O=?Dp+xyKh#RZvXZ2$6J$6 zoS!B-@%M~Qb6JG&+YP%!BXaJxt(8Vjn*6wB$GJZr>{2|>Nd9?){9w$&dD0eE>g2zh zT3`P#CgR5Bx19Xa<0HEFvhMBE&zJn+2qYlp^w|4h12}Ao3f4@8O9V$vOH0=P4TkYX{=eeUFo+ z1^N*dS^jdA_W+!TI-O#Qs8|-Faki=vSS3Umf;GL8Opw#`@`UM_8dGY|2>QCEX8`yHSL)NK+RY5WZgH$woYJB>uf`D5$oL>Jg>*=>1( z(FF$<`w3Oipy`i7yg438vX|qHb~VQe{3G^I=5CbJuGhZ{PjVqA`n~ zzTUd+m+#lAr)gjA4STdp=hFJai8{Nv&&sWZFiP*0nJ|(M6(6o?cOm1E#7s$QX+Hg0 zrIkbRB{P1m{SYnVO8tZn1m|U<~RKc_NypQD1K&l6J60xt( zN$eMbJHqA4{Asj?m}-S7y)jX?Z5q6c$mqdvD?AG^Hj<7=-$|2v@6BEMb2O4#iq+Ky z5*}!>PwzZ`mFpX#i46lx>0?v>LIlg@C}gJCwG*Q+(=Gx~Rv}1gbb_ts{+;ZYPhlv7 zr57s-)hbM>`qfVHR|9Roc_Q=b9urMGw87x2Fby}bPw@m7Tg_d>D1r6Jjx06^ITbWY zRTZtP8e&|?W`)O*RkMuUeZeMBT((wMWLimb)vrmCkYbZI4QxJW`61%_ZRR=H_O1>g zT?~y2h$j+qn5-(HkhCNqVDXG3X0RBBNs^oOFQnN=E{>iQ&-rGG|LG|M)URIqJ&pTx zOx^7T#|vX8Myq%2_;b}~d-G|Mj-TJ#(DW03^@2AU)ZgbxTVa8~{I?)Sn(rIb(bPU* zp>;?zO1AT>-d%{316(l_q`l0q_77W#r9c!p^{X@5&hBKlg4ia|BkjAnwc+@rtulu6 zA{#^%8*3+~Ze}BBs^w5*LB*r30F;&(pgVUERsz+M1eV65h2*1MR7ez!Q6u#-Zce$Z zFK{{s%^8DCMzYXpg zTh)n^TEgc3^yP-XD^812k0<=+{6;NhGj`SKca?Xq|6QBv`{%d4kM6hGOS2O$rmAMr z|NiOj%1{60$5~hX$lEAI6NnJ}(frZ(5Zp_E!2~+UJa}lpQW4JryayQCZa)672x6Nb zLAfwV*TTnj*I+{dJg}qlNn^#>6l}t15I`oC#Ge;KBluQQ`YT!PiB!rWZb+4`X0@bc zFWGA1Sb9)RB;;h=6prm;D^?8ckZ^xUU%7@x&{TMpNeE(*`}*S*Nit=h>M&jGmcZ(s zqLkQhvA*ndHIz^)9&G7WGXcd7$dl}3g4@G6B2w`n4E!Cp;BXAmx3t17VerrpBfX}Q zmP?uza9H7uvby9U#ZD+>-a}FeOzLx~b(@3J%h$_a#S5wgj|(s)kpCU_pTEy1&iv-j zC8D`@0XOz0l+NGTn6~{-w&~(~UH0#9A2aSlQE#eU?D-d0;&)xcs3(^(c<(2F{d4l) zJz6*;Ic~cNL!aFZ4+8ArNGm5+OJ?m9#P>=D3G52IrXH>DK6Co!OsEPbPtmA??V`@O z5u{+?FtC;r$R{JRuZyt;>5;?OTf3Kq zVggL}V-4b&-Zw%1$ns{^Gg^`Mhf(t5G9*>O#xAB9QevFXA^$R&`>C61a92wdUx2CV9NB<<=Fl7x7TAfEE|9HUGTnRl&(4PB$g(ons+IRa z=mqkBPIG-Jry}|1m(P1}faoo+e&2r4)iiamwXSnScpQ6p+0#fh{I3Qtb1d5^>hyt> zjr7pr-PoBu_TZv-khFZ=FGaw+eOAMAh6Ucb9h_ebP3a{gC0G+$3}IjlJUxD7pb7!o zlDIR9%v~9`ha;z9iZ+zMhKWH+!$6PBMIH}j9WHMotFi9uCz0Xr@v(o>|F@U&4XaDc zL5O7#H$6ElAiG-a!?IhV&inl-)F`A-iy3~@g8-}?G$!=lFl(g&q1QBouVU9;l-9Jr zg4jtmc;gi1D@KZsOew*$Co2jZtMKvkmD>>d?m#;(h5nxl<-rYD(VDL%6qs8l?xG+f z$Kdc&>1r8skDZ-iZR+XFxcwYj6zQ;mW2>XAJ>b>e)ara|?GU_`_ktOBgc7h<4&JrR z#_b3$VI|7a&R-azZSgIOG5qwXq$w`@Ma>e2NxhE_uaMrpJViONuZ&=R{D|%-ODbT! zXb|64O=l}d|MB$`(gUMEhYS!Rso9adBOrDUn&9BQJ$_l79b!J*{h}XCjTaE>wqrL3 zlJD0N4~}>_>8y#QOk+j7ov=Y9#~nU0O}iVq#i=umM4MP1=YmktK~qUN7g_F0IV{AX z7g|t&(6V+y$68iy6Z=%^p`An@Az9Qs=*33^>ZqO=!bdcrc% z;M^%^NY5Y}CA$pkCH-is6Le#Th8~)V1-!FMD~5t?VpHgR)iR`tiC*3wBAvwF$g)VK$@IA4|w=3}~7}xOM{Y zP|C*eVeqyd`L$QYbLtzQSR7{I=#?VLYA893)KKK;ug*Z3up>dJ9OBqn&U&p`4$N+l zeqp-uh%R!s+Sc@Q`@YUmB0SJ;x%Jz1jj{EGJxNu0!nBOk@t#zx z1E0`#@+*_IOC~Ybv`uDavf&y)Y{Ql~d;8}-&N6t(@HUA_M-GzC$1c>7vKsBT$MVn8 ze0QZ-okJj95%FN%tUrUVcT+sw%fm_J{j&LQ*3a_~jk-Ix$doYn#=9T+fA{Lq?~h*o z6*H>&&+W_Bh22ct@b{^gZJAS)=h`~PjC)kq9{+b&OJkWZG57S}ziqAaSGw)G^3S$$ z`pa%B2ju+;(*N@9;V|4x+-JhRP^UZISg&`n!E9X}=Qd4;b;F*M+vNq7;un%bZ3N*m z0&-jPNYaXfE}L!B5MreTH5+#bJOLpuBZ4%fUM3~hmP%A_AeB^NOm#x^m65`?rlb(w zI5ILYnprzS4fUiWg=oWY{!AnMlL+&ko?|2h*4FPo82p^Bk>iWbV9n?aY))qugg9rru zcsSgO{!02dIFq5xw&fUq=?UD0)*tr7XZ5mbM#_A-9ea2eSYpTp1A{v5;Fa-LO{WOu zB5;G-M+%!_7p}`t9RgOHaA3hF)E|juPY7Ball){)a|2_OXmEd2ihw;Q6;9mg(1<3Y zV@G!B_!Bzyo{IPDt!7w5{wNMj81vCCQSz2(IjgsA2|l3jPwZ`BjL-JA{Gk7q_r0Z> z-WRFbaWMp1tgnyN4+g&z{0eE-j3(DkQ8xY1&Tw4Hwm529CY5Xs_pwDD9QOA~)9+v} ze;;bc@VOyxn$}8!HDh6HhP*LQaRUMu=6^Nk)lS3H4<12jA!HdJwxH}*bLs10O#L>* z))ZPM^}`(@6wgiJ2SuGEsVKTj61R0Hc!$!#i_xh{*pxw$73$gWuEzF7tm2jV7iq)$ zOm1QSL}MlYs!eOWNPEYcn*FA{2mmIKM5tE5;!o@M#=ZHrV|J)ih7cd0W2+ApVN56eD@J8aFTyx?pke`us4Nuz5@YvID;f^u44d54VpB(0dU&~M z3oRKwF*caOk|fhWqMLY6BL>sH-Zq@ahr+Y8gUCiFRhVFGSy3&)0*8Rhghz+hvXb7E zo_)3C`_3L%Z%8cwynxPXAN^ucbZ`Dlt2q7gQNRUbIw>$~AqiOG$X~F4#GA%Wi8B+k zdx%dH=<+@~YY~i|WwMbl54jW|a^(uLD-wlgj<9r0DkaXOfThS{7CvCZRjO)&@L~xg z(OZ%nFnuIKj04+;3kR>MY!Sk+m;LiPk(w%GUIQdov)Ka)D@DVO;5Ff-35GeC?r~os zaw%HIS}g@#FJ5S|1CvIzPPnb>%7y!N!f*)w!v$Wjd$Oh*;Jn@~C_zA>R4rDT*SKH6VFQcDp zwXki7(BdD4<`T)Sv67Yr^-Y`4{EE5DLbQ;h0k0M)Egg#>dSexzHvG*}jIrQ_O@U|> z=5bjyNnGhqE^rz>Q@64h=8J)F#_Kl;4mYsJ!SoKfFSeL5 z4PjZf)Gp|#JAb+SaF%vxkSWx1f+)PFOycEiez2}LLiwPWTFzd9Wu?7=D;-J%j(Ao& zZze3BNZ1}ZGE?iC&r)p0biJDs=zJA&imat45Q1Nqn5_zJkPWHFXte_SZ3OnCqXnut zk?aeSjQsZsZv3}_aTiM6SQ{;H;+*Va%TrOO8%aCKt3hh59K?bmb7+@f(u=+QeFPH* z`OznR1-nc(;Cb#tlJJofGd4pfMqZM@ZR90&!J5G*KW`QOK$x@a_de7g=P@xtkv6r< zU1LBK#1ABt>_@%B02K~YK1bZcKoSF___YhT_~LgSXgou^7GsACtq;7n@J0X~`$@v) zMU!rhU=7MBrog$0;+)lU;Zq`UCcGRw2!+|29nW43XpB=dSaTWwL;LIlSh~Q7zLfq< ztUWue)gPq(Vg_!5_F%>|P1Igw3J_66QW*UVxuI_SG;{$Vwf0sSfMwz!asE_*IzwIUpa#ubt4d>gKt;-}#TF^-^4yFKw0Ts#X0Kj^o~&lN}i7`NrEN%Qz6U*Sb<)adi{ z&z2Ht*ls+C_xC&!So$Gkvds}y!6k77Cp}9hFI^6)$69FL)F>ExGEobdJBQ0l4Uu!75dnn$ z!2Ga|*FoN^Fu_KI0m`V-%7}&lrQ4I>`EPIo5wHD8RZCAR3dBcm5m`uo-&gy z_1$?5muM54Aw_@_a^ck7kj6e*UHKOHtv>l=!L9(M*xol#5~OLC9`3%AUDG`j1xGc| zgSK}hjbzS2yMR9~HBd66DKAo2x8c?qQV(Ib$I}P$FRXQ>i2`w21pD&b4JDC?F9BYo z0z!D;>8a<$hJ%V%@P`4)xL8twcS|Z%k_fDeK@2^x4R=uc{x5Kz(H~wxfut>(0EnYb z_)L!I2$Erv7DGiX-4X>}#cKa8jAlazPOl)kHoVL~nAq!x6sI@I%fr!D17WX{HZc5l zinG<5PfJ94&EBVuC|@$tyyP~2^wNM=%p^oBp=ykw)Z>5x4h^00eha4nK1Tf&~9tA+W|1&u2G=~j#d=Ch6z1|YM(m>R4b(U)Dd z*iAfI&&6jT4At+W;60b@!0F~goJhBb*XGGUj)`vhgONh&?lf@rG{DfK&S=K-eiL;4 zrX_(zORXl|H9vmPBz|ma9}p+(l7FwBvBRX){~snx^EVW zG6ge{pY3n^Vo3LhIx_+nS%w4^WOSss<;MvMqax^VViiIG?8}^5YaPEbN(r`JOOYna z*shB6w3(=33(-|L|AAnRYtZ~_!8&<$K3Pt}y5#Ey6j)iLV@Y=XA1C-Q#G#IEt#+}- zH>|~s`_22&d(hVvmJ#+5VHOY-rtTZWkgnd}!F5omP}(Bi0h`Ti8B&;iZDD&^*Cg}+ zXOc^5+yk3U>GD4uXS?0}?f52KSX^lIIgo&X&=I|-5adG=i{?|X6o)9j)Q?IbQ#^3? z{Z_zk7e#e+GRy(nbPYBboWYt-iHJx&A#8Iv0eZ}}IpClAgBIg>8zDC}m zrr+F&6X+}kGjU^LDfJ+IM}s~-*qCt}o)Z)_3DMw(y2os5mQX{2RPd1!+PwX_^nM{r z2hdA^uXq{z^@qz?#-j6LCLY{=b{IHNA<|07&(0o7njE?4Z`(w-pf;HBnaxraP`G3G z2!#z70t#iVUm|BwiFqD9pf|^8#mvw(rdu6K4&|hTmQP3JL=s<{Sbala^tL?t=C=h; z(l?xFdQ}y0s;2)l8frK7-u>#-;+=n5BGlef{fbDU6c<x8^cBZ|hd`lB=5&+nDHFN<(g0=ZW=1Uvzb0d1vQywL1q*1^c)@;yz_%l$y(@?l zB>>mqntMJ?pvsA1x}1*HQkFp5Zw6+t2q$YSBLBrmF#=gJdO<0+4PbjWBS6 z%ps*S;Z2Z_NJwfYA6X1pT(a%>zPY;lO3kTJmGakF0VDtUfY+Vp2e1G6FY{NYm+eih z-#VO>$?Z+U_x+ozaPg_b#WSen>WOGe^A3)T$t_}K3#DfhC6i45Er2oH#* z$R>d@vbOr@5_qr+S)-sZ<2<}5UAoYWE`_g`s~HzHZQcROLvu)?2%&#pA3fc|!P*r; znvONMrK;r-^os8mSz2;@H?1z|GXNw;0IF{Ia*s% z;E!B>D<+vwzfN}dV9*KZyIMz>f?ZHND-b|E4BAm1LcA-nY#LZ_agnHHhy-m`4f+@` z!BAC6V0Cq3U$^24c`5ERLLDywixJbpcp>%t*QeL|uCh_?O?`hnxLTBk3z7fiYe!=o zs2mmO2!Mwixaf7>8Uy=pYcvr@X?vCyL7y*78uW(Y&mOri4PwHV_D3bj9d3=-7^9PM z6_D6tC6FB{U-h&Q|KXc1Hri>c%}*8@N?m=fh?I>0k}=7M#%S$ z$i0xnB?Rwh@1w><6Il!wAbjF*+Ms8L)VINsl|*>gid*{-B9)SiM+WU&2wXQPCjqBB zfCv7#KZS`OWHlPDsLm%L9Tazwkj@y=P0m*O=xXPYOBJq9(tkx(c~d_b0tNPeU%RQul`(gRtXj7gO(~$HAIM(3E_K+=_+eauZcJ;Y`9s- zhG&LfKW-|CP@puX0+yEo7sVdZ_5`6%f6ALG+{m4Q4K@1$i49bi?1wi4Tk7y4v&kt( zNGuU>b`mp2e`8o?*!n?q@@9iLK34sc@_v6|SS)M#7Y0`>>1<`$XQE9SvU0zM7&`hM zRh)hEx3x2@B<14zm4^TQ9V=c)T}UFkqzr!L7)bu)F5|~XkjM$~6g>TXYLG3eK&1#y zSY2%Qk>z95I_0BGYB7qENMsr@l|wrOg$YG(Dy!ed^sd%(7gM2Dt6Mc}!aHC`KrbuQ zwGjn3%*MZZ0<*yBLE=xA#IlU@`m3)GBZ-G1fvf@&ZUJEm5vwr<7ssR^_}DK=NbSaE z0U~-{!1aBZ6fBoE1v?RY-1#~WgzW!mu)gY?Kbd2@HyH+L6jLuH?t^dRhRXI^j+dn} z(PaHAGGPA<$W_O`xCz7XQG9|F{Tl4HnONMwP}C5Gob*4E2FI%k6C`?$GQ)`AM_<5h zPBGs7cdWHU2z8LP^C}_RI!Wg5fue4gSn&~lY-eRZWnqIwk<>BuH4%}jcdHKo)Y?cU%9Ah&21r_BKF7nylZeTi z$OxKb(5f;he45n)fgfpYbXuv*PhfW#+CSIt3cq#~wU9KJaN?>GD)JuY7iYg03`Tuo z^iI%a{U6kwn0Ui66jyP%9t0GZDBIwyYC3-V zOEjA;*o|C*{L66ID2R)U!O08htU`WcIoSY@k_P9<3*E_40uthwABSLE^XDW2@}Xt? z0JSF@4L{oi1Bn%@nvT_JDyKKFN}CS*mu3)$lmaOmyOY<$^?RJO3*+kCtWDz=VEHrE zxv4{ZnJC~@oqv6$;>Xo%Cp{bx<9A%KDt z0;P3FtO`Z;V6YX)DL2f)WJOEuE$N!_O3e~V=7jz&cq=r+V@W&@cKM%LSN$o+mK}u5 z0g!+r5f@#cqNJ7JCo16RxQINWSsDHIfY1Eb7u$v7a?C3Rnu#*s}*6#YgtP$(YfJN`N!p1$+?L9vX?H5&Hhd;lSo4$$ymKSSK~} z=h?%8=Ktp&JxEVd3!s#&1!j2nr)p1o!%6BO+JBc`?>4*rN zy>Hm_#b|I2_~yaga_~q43Q$OOU1AS!5#$gTq9n(#lOpJE5#P?^XUh26Uy=jU!;mt2 zlbk_e*w=Spxtsx?zPQLd{sp;(#MggwCxpjV&^|rj9j&BfDM`zcgjj#o`^YT1f`d@2 zC^d@_1bkiz@r)C1PK5Fk zd@w-ng+%Oos_3d;x1j9|IFd;%i~C~==>m(?)%M-IHepmEX+?flvGW07&gZhxBrEH^ z55y+epi=uH!23K@2gb3vVt^xS1FJajfA8Rj_H8ZUpC#N{aW=fR^~%Ic9^c;C*jYKP zaPiK++K$xe#u-~~^p5*W@Xou~4RYuRd*yFM6Bq7tu|0e&RM-HLE-W``Zb`#rixH(B zN*csW1x#=9DFv~t)u_iNejB_g@F?Oo3_+&s%L)?18hZrd=2|IovDPAjq>mCmw0IJH z0AnUPBjNs>Kh>L%M1wdpVo-fxt@{PUpHHkjip#Kf{?g>SC<%8Yb^|kFDIB2PJ<4)0 z35Sxv-#4pJvmnb$i7SP}2fO>R8=LTk@8y274j(vhr~m&9*T0)|$p3?rPd-k$bY`$} zK;eptz;3?;|D`9N{deq-{^Qm^|Gcwkz2SEA14Zj+}}81!t1Av6po7x-dciqJhGo)|dT@S1!yxkp1MB#4>A!)B!W-<~`=Y#fb zitw7j2+19*rlCQ{j8w(IzI4iX;v*tT$>2QLsZmWf&k6^{LD&0T{;=o@o*uba^eFM) zFWB1e+-twO{YsK@>GQ2B#pz$K)4Xmb9qhflb*KN8pg%r*l0V_EGm=#oU)6)Zj2RDi z&ia`gYsdsZbI?io_7EB2@#{s4NI+2@xEf)S;+VD5*Cs zw|7cZ!LktIjhw|a9f;i026@M(H%ek`5j9lBTizc+i21Y`b-U+#0#O!q<2zCjurm1Z zh)Z(IE-a7NR5d^Ter?#rf`GVB)xUfb%RKp1c;tD{ve#cLK0V~G`0-?8+#kR5ANRcc zq4s6#8q3wk$=60T-#g!bJe5z#`t?-J0E2D!!=FjY&1E{`0e& zQ(u^kkN5JXlE5k&jceLNRDHU+fqYoRKvE)rfYlFB*>KLpwwf<7Qu^5oe6~TGc^|0= z1B(#HGENS^BgDOHEr;e-Wg|&Ss0y=UpmmdVP1LWf&cBYOH(L6<5Si?JULOh8^ecpY ztuL2ZMw8V(g0=KtpIn6ilx^-3RDcm<{xxFL=~o3K$=Zugi}`=7y?H#8`yc<^dX%;k zX`$sLMkJLikyJvK8Oo5-q-_XU3MC@d(Vi@WF*D>;mZ*qQD4aGLk_?iilr`E(BFp{y zT*Eo%`@8SQegAX!IFEBqX3TnBpX>d3zhAHCYcDz^vJ3)aKwtPASiZ0r*QsZBL}cH4 zaFOm4{oyXlUF-Vxy*mpWU;Ev1F7A4?c%^$?_JPK)EG_>goDa`_UC@0z+rMMRGlth4p6DVy7H}5u$d`NOu%cHI4A;nLl~)nOm1==T ziNXu8s*4Gc17`amMkTF$YUA*x$cgWt6SF4C(=su13!g6IiiLA!4rqY?-ktcoS$21uEA!LzswZn#PSYCp@$rei4ucB3wXLF(KL7Pq@kirN6B|=|eTNFmI++5WXZJ21KCRRD zsb1@@G|<#!5@_~nF6{OVM)KUO4n0+l#uaYnh5A;vKCVzEFyeT zmUqYo3^r?Z5M&^Af-D!?(GAY=LTeCFV9p~e>{1X{V1RNyM&lTfT5Fh;s{#eNDirG@ zRbv0x0D=lC-%O$RE=;I55{ntR=>H3UX+?`}1R)lot>?^0TqH?WcK`@#kvrm_HuNjU z$xYJhBsU|V$@}u&Sx*wnincGA#7kX&&f!LOgKpsB0;{cSmWQ~t6m@a=2bNdv{j9N7 zYnzMO>)TIuR$CRC>HoMe+o!Vh+@I8+#?)nbE(3jSr=n+ss76j`>Eiu@U4<-oQlZ5QZ8c?cEWeMx2)%F^C__(V<=8c0k_n7pCmL?8aBA> zm$SXCkV;TXaI|Oyc}ww*6J;a*D?^5u3*J|_X=uK{gi?igo<<3v*2~nEeqpMxJ}Fd< z>VXe6aDXBh=`A&qs^M(o4rG>GC%~3R=siM67{UO3!23$}z{zFonvq*%)!kmR)pEUa zvt8K289#J#{2%3H#kjvNm?v=CsOY}Ds{hcH*KrH$@&-Dtm6Qy;yxCgXTb$N$Sn%qpKKhjY)-uE-so6$vE$b=x87wxY&-6zZQG;e#t2C%(Buj-2bQrO+FSgb zY0D4(&{tcPT5@r#6MdU|YL07eZmDi}Q%2aQt=1oBRQ9m;?d|^1ny+u`y3E#{-n}KT z^3IsmK5us1VdXuzK4E)f=7*AklB!>Fg>&<@JNl#DwW_u)^Ph9FFu$Qj@UhTi^^Zv{ zD*mgr-JTf99uYR2ED8Q1BO(4%*p%LnXqxQ0?K#pdU?qJN0*d5x1x~^ff0Z@K?|@DU zy=COTIC!pN^$HGN8J~p|feRE~*THjsF!`}ma-4ei7O$&-tWakIPZfS`I&O58dYzC zB(l7+s$v~$ZRRdd&3>Stn%(brt0!ggLEo6#5a&a23_*!j_u7)_svkZq{-E+>x~zUd z!pWz7ck^){h96W+WeKZzytMfIwgDGu?Q&DTKT zP0X|CnB1T-Wdv+=`X{+!2^~+`b851J5scj=cLNO^wBZPy`UTO!pQc8n5YxzNfoeOF z>eU}(s8JL(^^q~gH;I}bH&Z2hZbfkZm-|B2;mU$n;adW$r+fXm{Ny{WdT*hf^49dn z?HSh}NS$=+Q3y@`#PLpYn|ov4=LK&Tp4>ZQn*;knd+(yE16UKcUL9EGuD<%sQoZgM zd1r#-dppN12z1TfZr$z0``UFaAb|Bq^^fvRx14|GSqs*7`UgHfJ@1#2EpO7J#_RbF zc8vkfqTRJ$guROx`&Ru`p{w_0TflN}@s9FB>>k(F@@DA0FccMGqjZL71e8Hbh^&J! zgjUWRONO!}?2brRs4XN(z+%C$wkBcesp-s;vgMq;!=XP5xo zzZk-~tEIO1mM|!n=c;baM>V)Hxs0vrj&A7%GkpwG5fKPxY8VfUIVdE8XiPT`+HEf4 z0+7xTvbOe}U-HvwziIWoIX~S>x3~V{Unip&im4@@N!dF;G&`vSQ7R!CRbECn{v*O3@obq=C1tpITR~ZlNx0}~UJ4fHUq_fmrH2z@E?&8*}K~|!F zzsq6yE%&$hoY?QMG+*b}SN#uKsLr6YZ<(uy6shu|saa-of z`PPK|t{eF(iyIqvrVzwzTrsP1dcr-xpA?wbi3|OxuOMB|iGz*L`1No43xg zH=^2eZ}*IQpHDLqlP)8O>5dZYQ$+g+Y$TDcH<6(MV=bY%zes+K+$ZbHa8apUB3Cq5 zyJ^HsMe)}GmnpF1nTzSc*xC_f@gslleCSOsbATCMlVl9wMN-;5dNa~?;0=2X$yk)Hveim zJg_6k(V}tVx&8}FQTAT{@W6CnzwErmmx~=6zy7$%a<3VGuzL43@P-E(@6kKyejjhvefHb!{)Uu<11jrw4Qs!;>a#@1C1WiN3W38kDT@)PueC{*S>$oTIHYEuS_I;GF)?CjiIJJ&`2 z{Hb|kRa2X#%M3sFNS`{z`)#I8tx+uV>&J!q7Lx*RuIG4+t1i5F==ioDuX=mBR&xic zJZ5I5mBy~h>KKxbCegyl>=me=ZgR%$7aKjrXozV5ISJ5~dTl zMEU~)P&20V`kFkuR~k$*e}+c#5p7Mmr-0t(o!!Hy2bVYdz4DIw6G;*1Ts{|bj5VH( zBGDsbwGeJVJMS*@smmyFEy%cjfGgPRk?C>v=TXkHk5V^k zJ(ks`4y0$-e9ms z^`~ub{NVLk=26v)FNNM89B(-{+O*{Se3hzv=YfY`MS%b9qA@dD)&;r_c0J4->^Q&5 zM|-wL>b83?cf|%&txWS0Bzx4U`ycqMQ8n_%QO`$9{MzzAt@Ijd?W_9KrTflzB95(h zBKXTKQ{RT$&$T5flanYDiL)6exefv;Na5kuT2xL5^y=$T9Y7ltnYZJjrVsKX%9|yz zm!}+D$>ir!Y5;x!C_AZh*`wKF7OXwTxkY?83@Y0`3(@Nrk2MKi8;oa=rmwHzm@2{K zC|Y`$j*OqZ>bdu!F5H+5ok5Z?-s=Q|TpmU7H0B;l8d9so6U>}C%>B@3ha{HZ{%^+; znp@OHSJ@kVT@6p0x~-(vf3DsAEv?Qa)mG`*YuD5~gSoN!&t0?p_tu5}YT2u%{o#?@ z2d(I0?ch&^O%fLB(uG}V+wz63nNxDk_eb|-HM@A}+NTBr@dww@CP7$1 zHdbigQ`@hLaMNA_I7O+UO!%opAwBt&g}f$2MN8u3JfpEoYY)cf0(3HgJ|1TbzV#dMLw5gFm=dCe zbMZgzG&AC5TcbqTw-`oBk#d+lmA`hiq+PgI^tY*poLa4m${x{TkGkUyo_@SJ!@Hu% z^QQAJdf59u?|x?KxWYwEja$qWX6_^QdDu!6_CbGuZPC2fP8|fLg|(fG@ZkIF5QBj* z@ggy6p24&!IKYVy1^W?^9ZmbB`R5=AOTj24iVl*>L6|*YX>pVlJb-2(Y#lSgx1aB{ z+!+Tu2=i2`Iw5b7*}qQYZF*|Rf0CYt_fTjlfF;j^iR3SlJfZa11;Z>)P|XBV&&?1b zPZPT%aj5$p$R^m=a+1?E)2opmH}JC_U)G4zLuh;*c%LblWUN(1q&7Z?s4=iO9< zABrLHwzYVvo?a&zOpqX6Q!F3!_TfwMk`Xx8jnjKXLf{DOl4|h3Dr;=HA$V4kDR{Q& zbK1~^Z~u&0(AN{$Vmk3p$ivWw_I%1Gw51;=Bw0|DVsUTBk+_XwiXSYhVCzm3Z=k#I zo9Lq>a1ZUITom5u&QBmMdXf>QqgwgH5#p3J1d!vC!^$UOM9BI@kZ5kUw!1`4{9nWO z3t^cz$;`t(E0{#8V5haG5702|+6%6+sw8;2Ul6zCnJ&aa<0A|_|W|O(8 zak)YbUrXA`!xL*JR~i0inAJQPOWo-wV(X5=dKmgKtVeELMp^s|Q;a`?Y3WK}?|z>+ z;}ptCDzTL0o>pNx172_?2^2#UXc9#&!~Jo7o~G^x3C&~+S*ksbPWf+1b9GCQ;jmt5 z4I%2rpp$+Rwe9Q}4YZ1|QUp^j8U=x};UsbvzM3-Xn; z#}1$B|IR*}Cs(q8r-fV^WMyfwbdDL&gQIqgQw`>3ngpE%owO&>L__cVFtK6>#ji!= zG37OJZg2CPujwj!F^v>n5k$pIpCPc8J*=LIEiccCn&XcWfUV7VkZ4RmVn5gz!?82~ zjY-+X0o75#72fU0SJoHRT9+ROZCsKF^k8_DU<9~!;3Ov$1wjrdx1!mkUjewxQ2C|w zANhf*50XZ$P}*a-Hks0DV%7+XTmf8*C$lq^q+u>4Q?kFPfqu%{aAP9DAk{pc>924x zvZSsC?Oid91OvL8;*c}o6YveMA#x*>W@b3 zsIJ*t5`#8Eab@XiRAxaY zvRjzdPM(VsmwBWAdz8LT_I-o}&wL0JOSEx(k(20s(@o-;>q2rYk3)91`DF?>om0t} zzXUqFSO0{M5g#1|ibZJXwK8u5?3C|JJ@gQ1X5-^LF|MmvpEU2u7HvKy>IIooJVwjC zeXytwxed!-fPx4|?LW2-W;b|=j7A`=ge}(*B|+)|vYYwK6srjgg)1lQ^L(I8j>_o) z2iKhb9~HySY($|?gBAli*KCq&VCEdBE@6$;OTxOt3mQF=$^oi-&vnVERn+x%E90i+z!T@9K-2htce$wzq%@7a9_>;?!0XVY^1j*+h9hStw z1)Mg+P;mw}@h8nQAj(AT3wyOD0^=*(HO`PT4~GP7;m7c_h@uF=#EnXI2M2hkbM6U+ zVDrtiBoG4mV+flj2r5ysHHCLX?#NwPMgX7~4MfnP15w%4ij@u)k1sAgk0 z|Nl@gMB~b|1A1GeBU*Bxp^c4Jnv^wk?b8giZ z_vb`0OqsyYfgYXUOGZYJbiq>x)jXnJ2nZFz63HxB9+WpjlJfx9_e5Jsmetg&8dE@E z!F=7hXNdWV#wv0?XysjMMD*>)NOaS#cj?&N_u!)G!5=ek&q>Yy8Ztxh!Q;Mguzvnf z-HQJd%8$<98u;y6y{4sq&8b}+<%{Zj_MBoM+OG|##osU!7;?}GwU7c!=qxBIFHCm< z-Y=z;@Zs>K&0B@DIob=V**1e?n2?`+t1$+EQKFJ0Y2#~>b|YpAK(EIHV`?MDnC`D8 zskTGmQ_Bf*bl5L&iCDH^7=Xphkbtq9%G#R5)A&D7e4zb{IWs94PJ;Sl0MR|eAZgJy zl4GSzVrwn+5xr9W@;6;Eg>J-uPHy8^BNO_od8=BpUf9raz4Q%2+ ze55E->D1mBey#v{tA1J5+i9(qymQE>ATVYU6otH3R6b_AEs=+K)C{gcVFHV0+wjkr zoMb2yhgS%tN|?Ka_+!IBlsp zl0_?=xXS(oENrb9c`lPcXz%ItsmbrK~NZ^_bz7s&bb|i+(P|txw@8~zIB{8+Rwh+x>drdU#;-$ zi*`t$*;5JcA3j?$2PF<%Y~OVW{2+>0r%>i>>aykD&#z#aH{setmG zb03h=2%Jde#1V{53v39JU)|op0SLm2G@Q@~fmeoBK5eLm2_|C;&z=}+1wTbNBAVRc$iBjk)!DN5*hB zZP_eE3^6TPdZ~Ys71~H~xaR>MTK`!wNN&j@YtFn56(XDwRb{B3IF*gT&HPXBV|o5&_VIR_ZYk#0n$KkYt9P z8#M1nAc!VjUW_c(Byi>|L|N;(+0J7=D$^!HwQ7PvVj_Xnkx(F^^~!DTejMj>B&h>z zKTPdjZxxwpp?MOV$dLg;Q}>DD zx};y0Ym~I(K0_Em46Mth6amvID0rb9KSGJ1@u4q|9bw^y-445Ty%WTXF!`R^LRit4 zVU!r}jm&N5`of@W5k~B2saTy8I*vkFhlTYD5Q@4CXEH+vvUo1pWvy2_%AA7ytmfdv z`$7!~-Bqyi8WGjC$prG#_vm=ej^ziF_1bQ1?5-=yyO<^h*y!;m#TJpof!op34U%TG z0M1}>rwqT3g@+q1CyEwM_}kQx6-#2SvJ zLe8~cjDKPMS9z#3R`Kv)njFV#;#puypILzVDJu`xP@~RdGdCTD> zY+EHO$e45PXu?D;F2xPud!fCwg467*F=lelf#gK8iw0alwtnVMfPb+&3kN`>FlyZB(YD3`H*1B>>ei?I$BN-%1ENMSB z#xQi2K|xqboGjQXfv*86Iicv0f&47kN6NcmjS=2T8#JH!Pe$!FHw3h3iWxQ}RLafO zKmfWwKsOn;3KR4cHFDoPA3=)8qqLPilpjQ+dJEy6sUutq7e?-B4$q~ev-TXsgD!g(d<4&G3bU} zD5Rd9MMZ7tf^1CF(u^u4*AYUD5dR99ut%e@14s~{5Bqyq6qp*TAzEpW!k&FUEzDHn zZ`e;Dk_VRBx>_Jy08Q;djx(r7|H&HoqFzN@;hX3BgrA7V{v3_?GQvApYP%mUZ4xi1 z2CghcSzj}>wwqZ?b{>MHe3ZEfA@!CJ5mS|8N`uucVbdDnbA+4CR#}`aY}!aR28KBL zNyLTnc2M9zUwEKcz2odv!Vkf8Scv3#fplt!s{9(*5B>mcozSXv1|Jp8hzn zr|}bZ+s-MtiU^uO9E*LD@i`(}lCYZL0U5pBc72ir4(D?}$FS`XheBs~tBl?O z7tA@d#Q=!g`TT)%{#{KZXQ4D-lXRvY-tisS~?Hf&q(qvzcD+H(q5*Px5X#-*ePF4xV{#24113p92 zvjb&q<*~-l>itI4`Nl6yA74VF4ufJ;h^NqnYk!Y;$t}3zU~>-AJ$4C+|M+Uqi37J` z1=6(G$eKk@7B{=9!#(jo^Xbd*T;QoIUy$MyAzJxU4;`}zMu}qap_gqd`oLE6CVlCkg)01v{5_!Y)F@I8a~u;>LU1Jm+VT1=R+a3DTt~0C~VRm z#U)fYCJNlo!pFpK`s}qX8e0>PIMnZ<%5hWHM!}5Xz?S({T zXOKcgX&8`r0T_61QI_GUS1X<%VPe|@$X4xWGr)a-D+apQqw(pJ^7rCGIvo!M5h+16 zd~)zqLvqFht`$|y#BVUwAl~gMIQ%1t3;s_iDx}nqmrgl{!JFh_T-<^Bo`s#-XJNBFa{?NH5{l}HngwW3sCfD6gN>aL`4vOC;X9I_x12> zZVRp^1W0$s5viinu1=HRCp5zTmza)lMM}ZP(e{5V&j$!rZ8NEVQ-u|UiID&{@}pj| z{Y(s!lnKy4Lsv6B**B+d7rOdE=;}j#DuoH{_$<^jQv{H;Qy>Nks!3UcKo=pf=ysBC z2vK+dvG>4;IWk(7=vikG`+x(ci6@Ec%e7rKZsjgqSt4ag{uLS2k{Iwx0ev}Oo;x_J zx4B;!>PSpOg4P(etRry}=?>om5w(ov;4{A0=81@rY&>|M@nz1_L4`;>OgkB)~xSNo~r@ze| z-G`&(L5iC9!=8fE0TddftI=RYfiq}yROpKxDp7?ez6ktzj1j#*bnnNo&~4Rs`TH^M8q>590u5#tdR~jG}JsBj4zR-Y#GBZ@K-q`J?N9VYG9cr zR0hYj1d92p!bmABgCH>{kyP!>vNq@8B=O5-Sk9@map3=SZo?+!aK+hw!B>6V0AUH5 zCF*$5q*Dee1TiI$`rSEtJO2k;Y&VugdTj=&&Nq4IJSF!RZPxc;4ZEPQ-Zyp{b85%= z4=`H_%G$1uvzSA3K+>)hG#~0P91OW7B zbZ(@(A$ua22)xdny)b{w%fJ3?R-V5|**}FhPWn2!bMlSgYT15D z-Ry>ELt$H+Myf6*@gO#+Zb>*D5p8+8c8pvKRC?HSM60Dk><{k~#V^iy5ph%bGUrKx zRO|@z6yf)$p*q}BhMPJfs;KA`BNWV!&{sv9!v9Z{nNqR*R|@hs#T3hDCK#@w?>Sk3 zt?ZfGH=(ha1Fx3mO;bg(x|=$jB>jfDeB2tmi+Q>rk!+vg(4kZ`gzzG`P?Ro?OL5sv zE(a$V2Y*{i2*2tML*rbuORp5SUWm&l>d{y1_8sNm5GZw1KRs#=0wR^0<^B!VS3y)Q z8-9J*514#qmg=iL+pC`-QZ~q~*_+)+<73mMzFtUTp=Fh^KiR`tJ;u5iEi_u^3 zQUlCLs$3J9$o79>ARmREQ@KTk)@QMWa`{veA#y>4EVRTKf&eaBAjyvt)|UdDbG51U zAo1J=)5=qzizZ3nonWE$@agl?krbGX;T2|ppnNJc>`!LRodLj00-ef%gheltjBi76 zANk9a@e>a3VW~>?=*m;Yje=V9P3&eyhWE-HDaHJGKl+u>ZKCmlctlnkI-SJH z<$Q~h!C1XyXAr#^Nq<*|Ij9r1scY^bk@((P~>q&8EFa|rXM~T0WDF4%IpTUnd>|s4gn8{hv z$koslBEWU|zM9g63l_?Eo?xI1mdhCsjAI@rR+qJfNyQvx9Gp80k7VdOs8PwU<&A8# z&8AbW4c-f3Vqj4nXY#@1%jj5xgd=WUPuB%2+kl8vUa`CJGGR>snv6W1_roJ}wAQ9$ zaYWaIwCxZ}dkleeWbw7(md?rkgR-b=_#(RyH8xBJJIW2cQ`F*CCjPGrtV~=ylPNdG zA;yUB+KrrWpm6@zDh4MQ!on+G3@y6gPt;)5F2+YhaU_H#bG)tA0@DSs+O#s$F+h`* z9=DK;ft+1zTA2A4XB5<=@I364?q-Wy*Rw=52sz>ih7}wn?iGV^5@k)T$s|gx67P2J zO^q>sY1FF&bby(cnCyiRDuna6Ar5FZ*VEb)%|95+mA%GuVX?qo9UBQUxH@gF43qhB z5E7^DZ|g_3tA9;Z6@o$)1SX4nvW{|Y>0DvU(m zD4`L8Kjp~4{2vdQ5Q8b0(#c{sLsbE6w#h?jU8ag?o{y$miJKW#pCM$~hcVgzEf-5} zdIU)`N2~9DhU#rABp`KAb8oQfB*OpRiw_fisAmHk8F}On5?5jXjv4jFR3=k_5s?-L z|7sHV%EkQ;l8{bX8I%-eh;frR%aSKehI4XQ;blizcfhSHj+c#PwiE#)o27tj8$sD4 z=|zIbdGu!?3pa@OA2#GE-_vLv!Y}mnJ|Rj7(5%%Pjq0$x`6K3Jn=#oE6T^Bb5+wXw zt@niyHRkGzNi-n_aW4>OB@nT#id)9$9w6@aQKSb^((HBl0qH#N#^#Ayf`crKsH&Hy zRT)KA`*+^i5RLymln#3UD+SPK`+H(Y)Zr;LoV;q_q2lrpOoA8TeYew>AThOFLzs-0 zh_ZTxAX((Aph|>mm-6GI4n|>24dunmNz--AzlnebZ(U^+$-W&)B2FOQmq&dLgybkt ze6Z@EF<~hqIJsp9Gfg;#gqlz0`~5#9%zmgp5^jD0vZqS6?iM15FCPseGA>-p(0-!A zJ(gCHw(IGmNQ1`)4B0z=lP_ESFY}0Az9Ki7fXl5z-TBKD@wVuQp*u>Bh2i}e`sv%58s&<1llN0z9Lar7~=z728#^Y1QP_~ zDaQQ8-h52N-8FRJ4WrfWLMSZSuG&06c#t46K+&W3RGGFv&9Z*da|9vLDQlFuMy@MNTj0n zee*{G2=8#UiHU%YMZt+DEO=hxjH{%w3S0miq<-v%3T5Ta)W;}b`pwV1~!AgY~=1cg$;gbmV zXiaj?ySpf;9kE{WPn#o2i|P}{ll-kQ8_;tcxgiplVRWLF+=5#AWd9004PSL6?L> z5VD^KfRfW%#)1K4{I(WE0#K1Jmb0k5WFyZsLi7CNR`p(b0%R4|<=TFlrf!B5i+I{Ht zPJ*3ER^X4~xrj77bTlUE9G)$xn+O*0_dQ=^*CrO~w=k-gZ0%XH{l9f}@P`$n!(}O0 z`RD|D&iG%LYlwI?i1Tt=ZZm{>k%%ipda@bV7Z_^7rqp0%c1`&GYrhnUci~g$NE1}$ ziX`#F^RPOi45A9r$50^)YXnqngw(VVeF~Hurk6w=0$_YqvH;n%vE)jVha@Y@6_FFC z?esUOD)toZH(eaE_bo(}|I3lYJ%K4SM@w2trAHOSlx{Yn6>)IUm_d+F+A)Y9spjiF zCv}{AfIuOThnjMWTp6@s$F*>(};i_5WKmzdxWjUf}JbDrWZTHenTj;0rREZS}aiSoOQ0DZ0%a zc?htQ{Ha-nN-MXbuH_UUu%P{-dUud9kU^Z&YmyEX)h*ObmO-QCFkyKL0`XtLA1YkZVcJk!6=zlDZW0G3ENDQNVrG#VDGv`$2b1E)^*L<6=FM_fsOw~+WHD}s%5EZgPj z{8#yS3OWg?$2Ej}U=BVSMy4~nA^&?Zo{>0jJgRr7&1Hwcl#)bY*5u`vH#IBdZ<@A; zr?9MT5_i(A-;@N))zW~B`x|G<8ORw()KfPb-Gd#{Z6${J$QTD+$&<5ZV?H*i+KJWGgiwT&iS#n2K#c~Ikq6K*E@BFBB@unLlW;*HDIs=#hMH$z zay}7mP6j**L&af)Y6R@MDP>r>XLHe;8m%gW!`WE`IftSlQn(hQLyT(noz-4m-Ap_d z8hZ#$Gop5v=-?vPMZTOX98bX-udck5RLbw@WnVw^TWc z_M-x74ISHWc?{# z$-B#gn!Tp;(IHM2vM(v`WS)MMfGzlV!5ADcs>o5onhg08AaEk~*;j0cq2}Mx<{AHB zhm)8NUv|ola+FZOMPac%3bLH%(~2jwDGanMJ(hw*sLpsuBmTw7yj`eqtsW&ttXoOp zB<23#{GI5afevu?M1doUc}Or02nZyPIU*{fc%KPLukHM|iB2yoVTxsnA+YulbL$!q4_@4Pto*pA1M>wYu4)B6)Hx`La=SXu3;F&AJ zpdaB_FOO5i8X|$_r3t@RwIm}%>m?Flr&&3xx6w%ojRBU$2p7yXhXXifQ)YxS7`6}3 zrXk@XE4FZ0_MWNLH*gk1NHSTW-PHrhj}pj3Aqeyf!UCWp9=@~Kxki8;P&!GFW84ZI zXGoVwWCp4T3XO&A=4Qo35YAV>$E4!7XdEIM6k}LEcNH%Y?pSK@Pp=t|_e?yk*DgP) zFrqd6tm?b*lba{~I`E(7#$Nk+n>3>l^b*X;Xxecf8^9MwLG z(th>E$1@dT6!OE&l{zc^AF|Y9)qAE16IH)308%lX(Dr@xohXaU;?{vZgP99s=|;@0 zB4JUY0sdRuiZoamkub@+OhKd^!I)#B^sCZFy+?qTA5nXnj+z zTj(}-B;&`6_}9H%kQyW}kd$HENMK&NY|3ViZeuUv7l}+$qH`iGo}8sEBCk$DBt(Ne z*E=Q6$;@17YngSFh1HXaNN*{jb*RO`1^bv~6=B}tt9b3?L4>AB_b<13;~k+hvR2nr zk-1T~S%#7AUDU)h#a}tsoXkv;tc*Au{4B>Q|D{Qi0r^XK@}Qs5wrx+xGR=hwJyr7j z%Yoig4aUt6I&YV8HgU5`c9WGbX(2bBugoz&6J$fD$w$fpo^GxhWvJ5cbIkf|Q~0<9 z-E6j@)r4&8(_AwiONti}Wp0$r=9ntZTfp(mw!ZG9qI7*%hNo$~m5mW|?ma^_MXsTW zjg3aN3T+8DMZ0fuQ@BZjN;bP8KHO3jH|bBA$Q4S(;KLD?Cnp z#?yop2hST#;r&6`8LT2a538)gN=+wunlPaQbI$!n9P&WtttFeSRHLk981j*I7)S3C z7AI_gxVSky((E(b7f^vz7AuCCS*VQ-gG53$JHl37Cz~B_wUE0j-MU}d%UF&4j^d(- z`>diU;aE>}s=QmoF#J3^TuE?KzcaZBu4#QgX6B z^|H`0)k-Zvt53@+c|(~(Bt4teA;Vw}cDa}?)eNVHd-Ns6rLULX-cw|o*AbcKKc_!! zt)Z&SB3|B({5zoxp0`wXg;NiUp~wtvZ}!S|ZI2H(eJl!`caA2kzsAMwXB9Xh;}Q)N zIZtVwno$gWUm2#AR_Eo*_;=`2{1?p`T8x@(Eu2N+cXIx$Eg-wPW6WSmicdelYUKGDL(OZ$3 z>*}&iIL#!{M2nZEnUTyfOH66@x}n0eQ;YkxePtTEh+RHHg{PuDYDRU%r;h9(R~MF0 zAzV3}@dT+#BxW=`*;-g(sFi)%RmDbK#(}96NtciAwGmo}Gu(Sv)ZZlI)VNpK8OlY8 zbX`RUrl7c0zM7q9oRRF(Q+F$Hi@ki+9d<`p0Dqu*&wyRO<>1?p%Cz@^)((T?CJd}C z_?J4r>RFms^0Xox0Fs`jY%6PYv%YTC`juMuwH8k;by{%=*D8{(nA{|7lCa5BnU`Oc z6Rw=C#2J)5i<`Vfk@QQ}8I^QX9P01x-e9XJ%qREXq%t;=o}r-@Y96~u{ftS<>#wy+ z;pWCFyfh0HBhO@CMGnVIZSckEgo7%)7;DKUD;q^-TY2*{+bwf#w+q=)(A|=Q*a{!r zF1|1!#VoP@dJ4NJ-fC}lL<+mtWOTOmR$+u`!ethJ;pv3wp2{XRisgy!i+F|#HrDDg z3p|CA3HaODGtD@FTO#SkDhHTC1$pI-!U*$(4Qg91RfL$)rkb5F!`Wt#UE!?AVKB+5 zA+x*LN-dIQNF#T*656O&pSBilkG1Y_wkLlVDlUlhH&i=eB@B?^S%;cu=%otG61@`n z%2DQlFLo+&J{C4LTRA8)|A-v;TEE?@w6FPo@3k+ijZ5|UpHQERiZkWt}ysO zA@cdq?`16HMJD*9_MQnY96vuOG+|E96!|T*B?hJgohAd)$^-Z23_VDcb&A&9BXJK1mJ$^XWQ8G66}8)dUYnD9eI}i?Q_Um;M#w>Qc*l~|8dTt6?v9VmGHQKnyl{L z*zPd&F$a0iq8>5OkCS1TG>;(Ip?M$)06$ULRI#uXot}`G~~ONAq;f^!#sG zs=2!x_Zy58E^n9f>Rvhg*d|d;1&wFsJ;p)&YC&Y|yMj8^!yokjxwZJ_w-xi*(T&`PdE-woS}q>Hc82EG6EQBxJG{Qu&m^FAeQQOV`2^wW zV&>3s_Paq8{neqE&=#KWUiYukUhb#(_eK5{9q zx)AYPvGZa1r_Al&`_}XyQEEI;+Vg9P!t<%ICp+6)zI_=iD0lH`*ApLNlNz~i@G)j{ zI=VdKo~c0d^D$a?^(ofzfj=_ZEC(9*cMVw9e7UjK(Bnwx3htin{4zKFAB--ShB{Hn(zEG1P5STizeLvmbn9xB zC~l<|nQ^nMt>i*(eZMeq-NC_6)z>dK-CMmP%{~2{)Wpzv1Kt(^U-vKKKNDr2b11XU zS1Nztk-|7&qvTj!zSL~A0yEG`GtFYNd^Gh?Po+ZAj_hiiv&AKhk+=Hi3K{y%tmw0e zh28vB{3Ct6Ea&B4qvQf@mk4edT(U_h7flRLUTs=(Z3g{gzIeeqseQ{fHF-kDcZ>B} zbGZpV)~mzTw$vXH9ywdr6gQ8l?Jgg^TVFF5AW`*Cj~-??hap31hj(yg*4wAjs~GD8=)<@&e;tu?u3O9vm73>J9%x(SFZ7vvoNmHcU_0-J2q!y7Ss_l=wvuz(r<2Gq;p-Gq@ z9lZbRyx-S!Pfg}>Vf^mLr+enV?*H3<{*?ByYo26oGf8|NwR5bxf^VL@{ZGSiWgAUq zWKEB0*OzAVPnu^IeJ%=`TeesdH<=Io}33v7>6$K2OTW{>YB$3%(ZTV^A6g@A4#dRint>+{vPt7}A zZ4zuS(EX_WRc5V4UP56rM#_4DvM&Eu@QwgGP&mt3Bs{D%2)>7bH=-HWTd`Lq|YJ8dcvvA@0T;tFn=cTKSvu3*6r_YjlxV%RndYhO(iRz=p{ui=^Ed1 zbAgcEXcS_~sI>g{rcFa|t>M0wG$Z!H{QkN8!<+8UyV3e5xfTY6zLS&-2|1$wD{%Hw zIn{j69rmy1ZYk7Ax)bOg!tZ}8+q+$prmH97 zkQjWmr1-FLx9_&@wy005oa3YRF8cXxPS`hJ-)3%CPh;w*({H;S!teX0&O;$>t!!cN zbz(Z(#e8d7gg^OPF%#V`lEPcGJ>pGZ<~l4lX-+$h{`&(6`~2+PkyyTf!XQ zC5Dn`XGe6Ksu&qsvvN0WP+RbX*SeiKudn}6d&vi@ZR~ExnvOqf+l|c{zQ>2R9rf$j zo_BrjPwuxj^vO!mu5q4!n_USUU{t4>8osnYJSEKH0(aoMOxJ@YHM?7?-i7PEuAh+~ zV83nNvSNkE1A|R>?UzL!EOh)epT~bHu%5TLIpUL#saax_)Iz#M_ormG=#1fcnKf>k zY;6)-dY%Q8x8}@Rmlwx8C9~1(oHF^!QBP{S>gm5?Rdp^3w`|$^qfTn%%zUMJvwel^ z1d&Hz`I0cfa`RThhG|+OEJ)@tCZI<1R4;QZcJotF(q6^P9Prf?O zQD%b`qbsF%)8;4fh5Hom9~m?2DBDGGVoJ)U_GWWGk2pnnp7+O}{4J_>ItHENyP!3TV8*bRxWE&*m$R6 z@%b6%2hUu@E+td_&6NIYyP8FVEm1YXq{_wTH;?5c4Hh@Eu6v)U)d|~>E^(oM=jteB z`@j6lS@*0JIST#Heq=ZNicjDf7RZbbu~5KEZBnpo%YMDe>I=iAuhMyG+JJrfhW0}f zEm)gadqtmz4h#d?6TyYo798Fo^fcrN5)G6iOZ|`B)*cw}-LPd^Yq?{bV)qN7Sz>fc zxM|Rf(t(OM_ZIT6vop*aQ^Iqew^Nt-ViUH3bz4f`J|ZYN<+*7lqr~mn;Y~K`nx9sm=59Z6+h$wE*Hz;SrmwbD z+HEqSXyKe^65`S%zOznQE~I$*na!QQ7M}4oFIk^d-A78ifyZ+*KdszTd1LDpMdgS6 z5t6@_IG^|LU6pUiNt_aHYWGx>C9(R_uSr@hTE)!|S4CPyyCm3FZXbMmv$r*5&W6<~ zJ>EH13FW81YS*t$n(ObM*4xLua8-JSZWujC^}%N0<8W>9(RXtGqnvM9=Ql>(6MC+_ zrR>9%F=KSr`IKJm4)hG^?VAyDRc^ti@w=m*tm6Mv(3$`HhQy+)mf^zL=ZrXYTchsv zSVk<5v8s*B|I6J`drDO0syTN!jUHFy-Vfw@tGJEPmv`+cTGsXVmBSU<2QOMBsi{SO zu~k6Tbo;K7jQAs9w-tQpZ{pVXNM2oQwlLYOL$JSiMZCIl=KSuzJij(MbiLhu_*qAK zSPfTb8ehtmJ5u&4^Q51wWsA%_oDDK6Mbs7JTw(w#%8t89N%mhq57nA>MVsY z$p!Pm45fN9S1)mEwrgA06!u+d3;j%m!eDPmNVKBY_P~MLIXW)pEhlG%(Fdek>n^Q4 zK`!xOart+ zNo(|}ygvl~gTlbuhnHqb(WQp>eb{@l!xFr(1sHg{Bu=+myaxzlypS_g3)ovVEA!p* zG=4u^z&)= zY1Qn$3h7^!^N#o$2Y7WmXMQR1J&?Gz*=qK`Z`fd5o9^(YkQ^GK1H-#daB z9!1qZ8!+;oQ~w;=)l(JUw&6`Fb%5ne9^NyOGunI3|36Pyev!@3PkjDtiMSFV4;{L4 zVM9=O>OzwR!iaXg;)Gpq^1LJey?NrsUHKgEHEPN}3dxaln>i)+dG;>m)JvrPWxVLk zNE@BYOPz(&)XsVRFw>2_=eKTg-TfQx{S7lDM-2TjmfOFk;rQe6XXGTeg(>l_>?I&h%zrCZgi;k(v3pO(wn_hge6Pw`-wlZsiQ$6Off_6KV$Xsv9ChI|$;9$6EX@xeH_J;5-@dHj{PS&j?z6*Z zpz+z`;K}V!p~0Xsbn_aS4A+bKGF|sNtKhu2bM-;c<6=v&v?Anb3xR z?i3tG_mT;3YpUzJY?`>euVIF`@TU$NiCJUhd5;w%70aJIFiWf$^Y0fD`X*@}JG|{O zm(HDDQH%Gu_q~Pv`!u%Ms`%1RwRh2|8oIB^lyJ`_`neBH5+`&PC{LoRC(JdG((k*m z^{$IoXA47op&;MkWsaxPPJ`BPPxWy3Sy}9}^ZxKR8GL)>xO-hz*t4z=RsVU&(1>+m zkL6Xom!&7QoeYN>`AGMA^%H+ip0{wi`MWXO?j0;)@7#Ip-xsTKx?B0u?lUKt?;Q>H zlq-+s(BJLYo!wNz=bEX{vQ4ws%=TfHv12(E?wiW8TG#fdN8-8QdRWUk1{@)O#s`DQmg37=s)LyfhewKUGQ^?B@aUTmzU z&fy=b|9phw#y8}i>0a1i{rJYAkdvm1zJGB8 z%Rdqi+~DY^$nT}`9zJ+{T(~5JbLv~9dBkP>=T2q0a$5CV#zfYbyCp^88tROvk|AYiD{ zq=V9Xq(%|~zpJb6_w&B~V?KJP+;eB<%sl6L&cG&pgF9v|8@W}^{whK3XbE0Xk+_Q7 z(tr=fGHHA%ktTb_ha)ySW)aaPKv+YFXXOA9nyh>C*UbFqVRRV2@uVk?`a z;9je_5E5vz86u6?_5)O@Z z>tO0Gy-5(Hmr+j9f=t6vu`i{f@y zN36K}0rPlD+4h`^LddvIAN{ZR`SaJer(Y|GqwNk4=qljLwxt6+{rmf}|2+}<5eg3N zxcB=F?h5}l(2>O}+|0k)@;Lju%#oVozdzCuvlqW@|E%zTsu{ZWyPIzu{xjuANj3Z< z%LCPAZ-Xd8aa=`z zs;ZL`++OL7k7t7dy1F)okprCdHJ=~+tl;idHT?7bU_{Lxn#v`BlgWIJFdoi6STsm^ zShIjy&g&HW_rbeX(XhX=Pm_+CeN+T@(beQ)81RgQhTH3rKZo{RF5rO^q_W!sYWV7l z1KEd#7h%lH)kfaG9P5=Ah%2|%@Ga>;d5t_(vS;AZr0U>y@||-(yW;d5cwj;ef1Gxz zit1cG>%|mlRKH{tjvhnZv?9YBJSrWE+$r^BZA!qpbh*o9dFW#oKTqy?=Ur*Z zFAGZsX<7>Q*AfyVZP!J~l?!e1nFnvDM}jy}^Uh=IL&W?Czs=oz5^eW+TNB)cBKI$2 z$MsWUCAf;mkXcg)-_gl6ffSm?UMnEOA`IJRWv6qA2p=I`OOCj=X4s zzwq_OCM}(WqJ#UlA_EP5AaWbts~ft<;@{o8lfC)KTZSkT z7T7s!z&i-zs_y^t)Ew2M7f-LDxycFhoV8B zp7`T|*)to-`W6S0$h1DB+~LJ#|9)HO-Jh>@hV%PuI6>NW;=SF@QvGEK!jgr%s;>xng&dX^Nt)RzvrnFZ?9y^_y1 z{9EZmrMuv>$&>1MXfgcWC!#j!PuIa<1k-H)oK!vUp@dA@U{vlxpnYmLFg|2=-#(`9 z*ybw34Q5DEM;Z*|Hs0R3pnJRc%dLM65q=8jVChi-oF8p4KsTq*P6LZ3xx3$6qfKH5 znHi5ZEpf_eed2#!0^>=&y z%fZ5A_nE3}t>D3tZ_AG*cYS*Y)}EF`5XseTBIgm!F8^Bgk{B?;cynazW9QjidVu-e zqWR=ClX^jaz~1%BGx-7=_|X(7{^CG}V6%TmHDzY*RQmTBy;5Asq+u4pJ9cFJsjtX8q^~-XMvgxUJSS&sQ zV53lH&XRCcE~S8YYiboaCuhH3AC)U=Ad=E}(6f8d!dR={Z>RzIl)tWxeM|b?Q6-?= zz2;a~_sCbaf9<1k>3;K8g$2ZTE+I7v{`RFS>MfbRsLPyBXz zH!Zi#z$tzUxiYRBVKVaGM)g^YM4xr0-yZVe`%7v({R{@A?fGE!1myWsWCr8xo^W9o`-GbAOOSh`;0*j zG<>T(G3Xue6aZ)RggtAXLw_C!AHP2QS^!^uu6Yf6^71FYIX2#b2)6o*8h_;@EH(dq z=Gh}vfrQCJzQEAvM?K!efWie<4PEfPo`ex_Ve2Q2+{=_2q|Lx=jhG~{g>t(9)Y>%k z*YwBCE1YZwm{;Q~%5B}v?_-hGED4EP9j%}Nk6Quq5Y7(JK=)+FHcxA~uP+@;NBJoo zj)01?2V1SFJ2rUCHb zIvaGZ=~%Zl+wX0!67&DK_Oi5lZ*BV zmz@LJHN;SxelBYgexOS}Zjch0v5d1YCw!9k)S8fRX%{KC8-$k6lWvW#JhH6xoh^*B zpB|%fey*HISAIxoBkSZzIl+gzt|4G~1Bs&STDOkx*FV`_^3JQBtT(z^<)8POyfd+! zK{n3PUktb(q2UN0au%9?A9+O6Q7-?Wx2<2Hj7jk&Z;8kHX!+!U4=~n_h%u=gSmt%$ z?S_26E!HByCAR11Pm%_%aKqV@08i6z-&JBwrTJ!~QZnU867&yXx_@|H!HHL}2n~f|H%FM$uvhIuU*y0R`9F<+thBJTZJEl^(F&wG_YuPrA)NSRP)@%#HDHm872d z6iPT3@a!(Q{GKUkAZVAn|EBn3(oyR~1Mm`gj@EaBbTTIfaE@SMxoIf=kqy5-`0R16 zSbb-$vBD)z*(NJ92*{*GVq;t~*lPJKqkP4!y}ty%(|hKYqah#xT<$$^`JbfN<0Ogk zYq;gRU}1SDVeFmlGUHl5-00t77u+4YKI*+HXGGgAJx44{s)2I;Bq@DZL@aW{D|j&{ zff`N?KtS%!o!P;kKPn`*HD&vChK1Jk|F1JB45J5I3#VW7bVe^CS1=8 z=QGG(ZKstwt$BXgXhNNuQCG`v@Dg`Y$_qHv31?6Fgysq!67Gc^slQxvMd3V3h9ogX5|TUsJjqSToJ zM!g5X@s2Szv6%-ro=5YS$N!KsFRj%6Xk*iHMZ8ddv!(2HTU_1yQ#T0Xw{;$Wj-;)G zZ!=H@%YZ8=dLPA}OS zil}e<9kO+Ds9vs#nhQQ)H0Uh4YO4)ib3>izDDjG=iC4O}-Ezb>T1nl9d@yf=-h^%v)=;+)XSEBc>Pt{ zi|}efjFw-*+aI(()Dw!VcTx-(oMFs;?S;~%q|{U9eE5=whHwjZ0yqg9j`$^8iMP#i zN&a|~#vLy^Gx?XoUoLGA8+;hPuZ@Emz9t?oRp- zsTy2?czl=|Hf#9eLuV}Hw^K;RpL5i6D3v$3Sf~jBaRrrBe_EqlpKf+}C{jTNhK+eq_8Mctj2dBBHpSx_Bp9bVN?{vJjTJ*CQN?4;KK!mG`fm9A{jQixZspOF=y8<6%*y z`h7~nF!~%82!;p<;$}rhSLN4<#aaw$(vrL3PucmanV^>^{NW$Hm#QVQ9CT3e3vZul zoIf1@;-^>ts<_T!&%D-_k8(9iIq zP5hAW%&1A@OmJN5lofJ=1IL1vS0o|KU#%5{la59&i7rmPPJ#WcOdq-_$J(7*FT$)M zHZLE82#xGoJlMp2qO)C}&(b_inmr2V^Ihdo_YxUTzhQo~`m`lUcQOMK^(fE3XjXa2 z=j}$qmha?W+EPxtVw*Qe@==`zyD##IHW>%zn?r1km>rj_UL~PG_G6@3YZE?SXcOOR z55qa}_&WDevW`b5JQ{}oGy8UhS(Kx0KUH}T>RoV<+QE%&jA}fcvB+`YckOwnIEj&t z%Usq4SIciU8a~&pGT4w2Oi&7}_8(^tLgz}ZboE=au@~ z9fhued@kY{sWG&|EhZAtymTaOXeOE-*eaF7PiL<65VOkc)gLpDB7I=t>RI&>jLxjT zD5^|iNxP`cg$gO#+|o^E6SR(heMbE3xP#n0>keWxvuUyZhQS|PqT)`c@Sm@@1 zg8C_&TE>HvN2KrKb);9wf58cz6`^A@vO>m$jcY+Na*M z;GpRb&k2;~RTR~zd?lXMS6C32{AN@u2WqcJh`mjogO@Q>vBEe>Jn;^c^8rpvG82>u zYW?4rcM{{Y!IRzv>^Zl_g}0d(haj-W!648kWwp@r8YKm)hd0edFXyWf&?(9``(=u)7(HR3azWiahTZ$YX7vm* zYck_F*^`RW3@y$fHx-91oa(jWhk{Uydta)bzY$xcWyN=Bxb!JpliuKNkeY5yE&1R{ z-GfP@_hm3J-_Dh}(W-jZ8^k_=*y}fRT5oAAO2@gz_Ef$&kMK9;*=Ec?20@U`__L0R zJBvP_Ug_x3E{wI`5DGrnxvB_IxizT9cj6^`dB<=o^erV68!XKs`F5WbhI1E_7HKeX zxCvdF;l|`83+T%&9ju!a(oSbZnwCnDd(`;k%qRYlI{&CtMFW(Z5EOVMm+%y-9jkiI z`_OVu=jL&_G=gR@^Z8F0DCp4mW)q)zh0TJN(x{W@pkG?#tb2JANpYBn(?#@7N!+o9d%m#xS z{N)=yydjpb04gf1RmW5Wi-tXyWePuHoGo=x0J~iuFeg&JF*daAxjSU@*ZS;Tj}?71 zq(SP2dX(VG{r5ehF2V+4*18bTgv<|{Zua=c#C^*EH_4l z@0|S;h>QZ*_Fw zdh>pL`>djpOsZ5{AUW&iCgh1~MP^(7MG_)1D_{z@Ea)>e?I3X#0*YW2>-F?K12JOZ z&@3m^bVs9=&d*c#M+}P0oMxQ_NwF6U^!^lB&Cb>EFpcVXoxyb@gkvQAoRfLpC#RUL znua*Rfgom`M`Mmk&&$xN{AwVskWAF}eJ{W9y2ypr_9Wb?7`P}7!T!bbhS#igetr)6 ze)0Hn0|M=?f70jjg&XvwtjEsgO|pphI^~G=_kE9Q*)OC&{sM*IR;3X@atk^5q0@Kkf4%d?G{myt0n!p#5 zUu8@|m|xbzrz4~=36(SG#9JvzrykxnC^*V{&wv=iFdWMG_L(%6>BL4D@x`(i33!(jph7{6Kq z?4Q}drVlse7}fQ_db@&|g;6{h-e?DXDI=1uy}^qj#Havys>E=c<(Lj@HMcZ6-|rNG zNuXLNH(rC_V8W1?yG6&qdW)mOwhB_y!+5xGo#kF+E~N1xk?A=izJL^?91C-cI1lks z$cfNt$Ws z6TzJ+J|i&EvujZAm_O||?xJK2R<_ct=R7;PvW@I7MA+|)Uy+N4l4eh0iE$q(4rQhf z6x6e-V&ua+qc8qg^=szb0^_*xI%?}&ud*Wio#rbZq~6w1pIOFs82PadKA@XADDuam z!NFFZXwuF~UI@4*8pf~`XVuo{M@Y+nf~7lCHEJ~X8pkMU-*6(KSeVWn%Q_t)Iz%T; zD&QLu&+UBc1Q)NF?A+cNE?wyuI34Fph^wm@MBgbr?7N2TSlXaDSPFDgfSnA|F(gP! z0o%cfZ8b_1!R9TO8g$GZ9dj->7N+SgrIloDE_{h|7)&guQlNGjPh##jvJXJ;$2;b9 znE2!6)kj~={5^6*3^btrm9JKr+;Tk4CXbD=Q=pVPCAG)xvvpF^7Yy3i#( zou(-kn5XO1hz3v2l^rCG4%}X!{Q$g#Jig$>3cnUKE*Cb<_e~xHe8_jAYYuYwwS#A@ z!h5Zgfo#~$S6IFSdFr0{(sV1@K=9b5&^{X;%)>$qZP=j{k9$Unk}N{>Rjr(;-SFP< z2fxhTp#=Jj=zy0tR>*OtVak>e3sLnYH2s8`FR(eL89PtDcC<^0x!q@>m7=?>$sI&| zK;(6hzxsghB{echQ9L zRy9649i+bAnGQljtZwa!K!r!Hjk(xNy3M%s7pc8HrOg^03mDdP{Y!And9~+H!Iapu zrF5kITmWdVJ*x~){B-pP7kvv?oA=zATvkFvjY zV1B{>ZL&@+Z<@Ah=Y9nmraDkc9?A5Y{Ma+wo!C`V+Eux>DcK+J4&g-U?^!;eQ|#5Q z;WCS3?(TtR+{hq0PV7T=U4gLkpXMsm6~qi#4Q#i{+rg?3BRoEAQn+G2OVa&HQ6o)mkSZ1aKmzUf*%VS+SC9*KtQhnH+PEslLRVlww}bm~|(8 zR#uA-)MBbj_)2K7%|=5W%U#f{N7zf-@LHTgL!Pv4t%UVxC#z2^#FiDMG9Hfi2QP$; zs*+XJIw&$%$nSM!851v%8?O611KaPnx5bzN`GOd8SrHQ~keEh52!v-0rzuCFaB+%K zRG<3s7~ojMonYk?pwd|dPepg4$!zB}8@D7e5_<_CsS!$#->vtAMAsZ7hqo6J-tdJbkCUip*KuzOr`y!81EYy~aUaDonI0g| zD2O|1(lt9a%ZZ&zMKE>VK244yYTmRFOdOY{)9b8Ck>}0Zy*_cDdY`&%xnWo2y2d z41A^S5IrthcPcc77hE^FLl5Nt{(_dn?y*P>)qI??FaPqzbqo2{io|`pSJz)N&_DTT z`_$MQFbR&BQj8)=be}j)_=rQ3TX@2wv^-z6#?egg8Xs ziTc5zy`y!@R_Epr@uV*M+oRVOozlB2obX43dspu3o z_5lz-p~AK3(e`;#=G0c~SHmzCY{wsGxb(j|j_X(Yojx8J17jQ1ZFxD>9I1xiNm`NG zf9d}maRcE2&g_^2bfVn-vK?~|X8~N!6OhHc*$1zs!ydd=9bXe@y!}P z&TQ=_r)xwJ3!4)!j*$jX_$h$?WtM7Sf%J>=z2-`!;PhS<9V&Kl-p-Q$Hk|r?PinJX zaCuZXEAp_iez{Q-)Qw3$^}V5g<4DTDIS3y>X+P^Jz9+sMNEMADYm+riOB0OH=%p3x zz+Mvc>fxh$S*ka3?Z5+zyq+JgWHXq4?9MIDKCXw2K9o#lifm zfm7eV!H(vRn-CC&Y^FDqxoLCAzw? zF&lE_(K80TYmIs=+J85fQFgg!CFEpS@?GeuJszjj83oy*$(jj3eXxt@v!Xdnh+G=$ zwgTT;f0;P#R>QoUy-^xG6hOa#HGi=9&Cr)-TQ~v zcJO?qM}C!`h=q<#)Yy=V&ypq8P^(Q-P?C(DJVsBHdH`;D3yOypm>ZZaL@k8IH%e>k z#zW*xMJ__{TK2(l8uCk9`m$zyTaVkEc;K?@Z^N0=5y9qzOcf+ zi{Yc==44vsAgrS6MPb)D)T&LvqH*0j({n!qQSTm~sYg)r)Xp4R0~59q)KVLL4dJ06} zzY4)$`GbYRdn4!bQD;Jj!S+R7oa3O@wfd56b?``7rv3Ao?y<&rSM@~zGLp7Y#?;qU zabgM#b9Gq@xG~#1FY;9W&QgXKPZN|tX<>b&^^LMO<|hS`;&on@p_jt)5Q(Zkc{XRn z?l)|BYYpmJkTRoi6_o>%haTqjJ}dYGffCiAh<)QoBk367+7&ghWIlqbE|_p?MrvUv zX}V}<4QtHPPgv%0205wWzb3j<6aB1QOzePkvsLGx<{d>tS{DUk+TZdoHmn{{1!0F@c<$ilhM_5Eb(tzevnAfNX6R*tx+3#sl;(jqQ<@1_LJ)YxnuZ`9jdm&Nz z+M)66<*icj<+3|J=xndsfE5oZ%K}?B#b{#P#ons=ADk74 zSOv?VR-xQ4Wny9Ge-8TBB&)qKiMb1=yl%aq#(C#B?^}=362DV@=?E~ZJpSJFZu4Y0*&@39xB-8Oj zj)}vWmILcjmn{@LH^kWZvJ8n^eNK@i@d8oP%niq~C+f~vS=n2**PAJ#?eXJZrhyW9fwW%SH`@RD9wE#dXU!C{+QDNDQlKD+$P1x4|GLNRRV8mCEqWDhoj^mTkHsx~W9-SRbiS2` z$bCPR!Hsilsz(PIK5ki1CMM7mI_uf=!PTeIlQ(aNZ=>a6Oi#byK<+SAo+5E?yoFe` z+DNT?Aw@=-FH8iuihtcVu6E{k{3S576WgU+j!__;igI~*C1 z9i7ob?a{P)ztj2NJrz<0jx^}kF@WQ05b8bKfO-j#{*GdF!6``ws#)lzGv8hPHeO5; zq~6S(B^NS2sdTVE9Mo>|O&(tgByo3D#MexPTv)TM2v5p#=-(`Vt3YG_@=a*I%4k>r zf&+f)GjXr_os;Ydw5z1ghYBGvN$tlbEIxB$u~8#gzRYlElKEhLq8g}_QKt;nX?9VB z-p&p6TOWb12R(smEL&j|yf$0P`9&lJQw3KWSt445(lE%R86wIOV)CVKo!ka)U9L~L zq7IrM)667wq%L^3f3)}S^4U%JK1U2;KoFt~y1_i(=M=93+{}5D8>1F&c&6no4~vZX z?(hX-lv-e{fWM9<&zogpqraN@alPH^vFmyK?5|rNA+&CLq5R<+Bc~|pJDf8|;ghYQ zZynFU-OqDwxen)9aQ&5Fr_*XHUiY-!MjP>lKH3ncK1a&5-hTJQqathKB8J7`y86 zxH0v7(gBY+pnJ^k*lvhfkY>&Gdn*ubfq1Qy*qJQ#KdR-KrHE)!-IJgjxx~XvM3}V} zW&xH04$S^wgaS97%j7Jlo=Yrdq>G6>}>fkKym^OoxSvuY*?!fVc*&4K; zoe-|>Ztf))X41f0ASXz4e)6fvrQ&~S5bw%SlDi2 zy19sfpzUZ3EIv@p-UO_-Jpm->80X?{NTYML)QfD#aUv%tUTI>#F93$JKSEtOh%26? z*(^v|r<1Sxh96|~_GNgiaKAm+dBJsU%YPj87h&N08QFqKvSkCB7Q9t}&{8L5ilKs> z@^7A6Xwui1bGJ{`s3egGMS*`Vdd;f7(K@9}aEHpJl{@j^W``QrvD7cbm+$sG$R!`grmNs%}cE7R7 zwA0ZjBOXWDJo$q#^Y9sbC%h_X|u0-Ljc;e$sWGReWQdlF8!ucJwX4 zr0Fssx++do^_nzt3n}t2|Ktfh9F7UY|4ZPxR02E|vf9Y4K1-xEZ^;!s-28utKzOSK zN1pypqyOOpDIdRv1OBbp$b|IXP5S$H1^ztieesL#a|B=o|JsBeIr7HgxG8D-TpUd9 zk%~qk8+^vZW_+dhAwXWdVseX+)?Ekgxm{s5T4(=$Am|EPl9rQc@zXQ?h7JjnWu0}Z zg8}Sk!tBajN5GQbxjJ7W?>g926l!pM2=LLmF~TB zUO6Xx%*#=?1FM;H)mKZeIdP;$UwDYDZpId6SL>fAGyd&5oqhddK+&$HrLSa9?Lf0& zd|s$irSCWYos1r^IA&!aY>sVUK!eW6EyvkYhYU`Qy1xu4dEWd5OQWLXVpnH#s@pbS zWdqC}ltAa_ku0f#zOCKad!D6fE}!0vd=Grj1&#Wf9sV_XHSofsG;%1Hp?vL%`|%?; z^Uq|W0rjR&rRjQiAtG^70^iy?9iB(JUwDse{U}MI0EBQZ89ECv>e#vapNIo2oN~vJ zs!`u3hVxF?(JIp@A2VhGxDIVM#MLqA=3_DWx1F{o4Q+?@eY&^#(tQ}9(H2G(Y6->{ z=$oATfI5C1=S9#EG{~`bs7%;G`IR-ge!E<5o@zG}TO$UZhP^=8a{@%Se?E$T{?7RV zqxlQF#hM<$G+@<3!T`Yreq!5r{QGXisa}*dlX?%F)$3kvgGYiuZbK0p3YGkAb~P)n3__WRu}&yT%PCOUqQ77f1{m zRv!OqyBMM`oMp&_w);VV@+D4PI`{lLQU8)Ju!7x$kY+Qr_nxw<;kf}8=nI7LnP^xS zV3_0F@blbofH4l7$N`7-BJ2BX!MkrQFB(+v6GjDiJzp~KY21@8Z9dx zskJz8Dz1uLm0~t3B{mmd6-)tBx{LCdtq5|s&D{fzmSPsFU}#cZ0cTP5tJ(?=l**pZ z9V8yeJYhIdcd%Z9RY>tV?5`OId7~ov4?AnH&AL%u4_}uJ0%KbLw`X`ZTM;` zb@5fIhCZbQIcH1-aN#CDP9doY^#&W%*xTT?Q&YEgt4k`twnhPL1LyWSM$JsP zQ?X_?d*kmbnyGSK3#}B+8y!teVut52i$&aCOl_UXLX6bWbWrE*+_7-Ey89DhCs^N( zy}q{D6TJ#gwb&JJPrct0XXIuxr}fRx%F3A`nJwS|H4|0Kaaxg&2RBWmA81I|%Gc-= zd|eoF)`lkyl>zsv6;!|4wghh7kPXmss&}#WN*mO?dS+hTVyk0Mdg}~rM`8IK30(el z#ABPzxV+I7^0Y=XYK~BDAMEGi6f5^8GQt1TGSU4Wf+oVzp8iO{hleUJMzY| z^HEdOU{+1$`JuwU8iKkjC#veNLBcQf&)oU8uTrj~@M4X8y_~Lct=-F6C$Gev7-jES zY!c;TEkzu(-;$S8C6=Z{EfPTkyC{=E89DtsB6iH-(yi)v{hd(v9wz5Yp+^Ox}NkM4>+?c`kn=yKM z1Dp9pgUf`Wt%cjv?b<;zij)3Ws&V!L>ClMVsjzYoe+}1Jgw1=ET8noM`fF@Y8|A05 zA=AiikuKktTc6tOJyi}qoJ<_X7g}Fj^x2E69jM`D%vmv7a9cH_4*PpMR#F#h^$DR1 z6@*Yd-*a=9&0hoOz9%Q{^YlL>n2TIIb)1(s&}-+<*7Bb2+FheGSET3*x9e~VWr+g( zeQj+fowKl9n1(EIhLpP2%8yGb7c(Dnlv|PJ?_1GC|BNXD&M0fa6A*&3C!Ol-PmVA07kH^?iPatyh zajVo4Na`vvs1D*yKwz8$dUBwoQ~0~GS1YW(B1PgL>UeAFi3wraM3uLrj-bIJGr+UDVRKY=-zph6@L*+soB4kSSZ+$R}wUv2NGv|l2X znMM?_;;h=D&EPz?b+X{0;p%tOyj88`q`9a9S>wXAju0Mq`J$KK>1pt$D~F}CMrI#Da9tCL6Q8{Pyxsu4<0 z2P4(zVopK?_q4yNBserS;~b<|ql^M~sdAgE2SE;^04eB7PwVGGBTB5y6SMgyqVo-$ zemF`gYU|}yU_Xf1wgBUx_zqpLbiP^$bJ)>{^MAy=>n#G6c*Q&uTg#9)WfNsT<)%Jb zl%&N>t-E*uvZn{}2oSHR6ICB?waip)K_#l;N0Epvo3U0(aT8DK&=sg#&h6~Wq&-Hy zoeW5Q8{Vu1xtf#IfJjU1L#9;~oxgKTntSM&4#a|2A*eM@xn<4`$Y;S41wq0I@KsP- zR2CrWIw!RLT>f=v-4QY~U`5tc#e1O%A!)oGjYU5zGJ#r}0J-PO81`-~=^h^4lO zjPY!|M0_kFte9fVTxQ3Q>ok0A34Q0jq#O&R;d?*apSW4S9J8wrP1q%(A&0X}7Lz() zp4<>O9j6&u$lt~ppgCWzj$CSPo7%O#GO5ei<1q8Rb<_+cQ-<=ECTo0HRS(oFM3JI}eHu_0|k%SlCf` z7f2fv#ojU220krXdDL*jeWikQy|amOhJ7n{Vu1#w=EI(ho}+DTbD0zS2$ z&?Mb^1wFy&Ms+T`jBFlhd9IfrM@h_{=fv$lGhI-JT51d`H*lw}qoPs@(MvBsFuo$L z6ZISh;|0W+8E(8FC~Xe03mXV9%*)7m*}3P8`_D8p;-)Anf3s5Ehc2qA;olvuURk1v z$i+Lg6zf_FCV^5*-8u~TuRiH(x1^a;Vp*k(*tpzfZ#?;v0Pye~ZP%Ttt`v{>YJk?gC3Qq=Q{hxlZdHSgBI|eOTDr zXMF9r z99p&BaKFl(C$#LxQG0biq}G|ywy>*k_zo&MJqk!1qTe#h5ZU9nvDuvBUdD^dA7&7Y zhL**`^iV-)LaxTsI=(FEwla7GiJyWCy5{m=4*pQc^$!C;^TbV5%~Zyk8h$|hbnwg| z0PCKtzJI>|#_MgGF}n!`&ChQLW^yVOW0}E{aWtG%FStg(%Jy$p#CpcU^t%H&fRj6J zGVkaEN(O3Wh4kUSni6*Z7(^4!^6Os5#fM(%KQV^0?YH3bI`gHtsy=%hWD(B{%Exam z?wYUa?((~rcZ<-V+ewft0DFk9Eifz4UzvJA)JQ>q7joD6E$sw&(x>IE64miAq09F& zrr@Y4OKWr%7R`?`Qv)b9HLpH?mX9%HGP1_LKE?{=|5IA;G3M$JeJvjiYsqpr7TyVg zfC4o1SaqJ7Ds>6a$8UssEzPV9d_uwPXL4T+o|_<_Cph+P{Vf{T!LJV777$m}sw=)U zqpUq!-1OLbpY{d_Y}TI8Q?(=MI>OPgn2%zpy4rEo2WGU`yG%_p;y_U8naC0#bNvxe zOZHK{iU*8#H~i!ih5d`x>Zb(NfmD?>wt|YQizp$U9u-pApnEMe8m5iZ z#7OBa?rH#ZsYuImxDo`sH|Km$FOCpme;;hUz{D+>Vr<6yCqd&oe9~I-9pq6RZD%Tl zjsRj?3`YZ2vByO>Z&H{Q_G(aEr+0gw&3>h}{u#8Vf}D5fI|bHoj=RTZSAEkeKL%Fl z_89*Fytn)ojc`M;X=kS0;SUYdt^5wGpZQY&cO1q{LMY!&;VyRLVZKS)twVMwW}>R`=SG_5g{oVrts0e6u(nO(LZk21=TVVB=wWR;7P7vacut zm>64o>}UnQ5_`3+)05{$ObZ8o}yO5 z2k?pW9doPZ(75_|ZurUqAo|t6QB6ymtvVM;{zUoP)v8GJ z8j5WLE<5B{ZF&n0nbmkb=eEi23>p7sOt)=dhU&9Ksns`B-%8$p|&AB?n%? z^+6!-bAs!MqO8M`#U&*Gshg&V+_P4&9)Uj|n&02s{bC56Izgb>hYO)+4k+c$wo-lF zK{2T-JI_6sOxdc_c>NYIqavuPci$Rn#qp}4Hs^(rG z-1ru6Uht-rFb}46yZ_+~IZKB$Yf)Lg;jNoe=CIOluR5SN3Rg9UEuXprDBJhR5#VY3FVotXCpV%@^*pP8Al^xfI^#dbT}| zm~NGIDUE1&oyNC7UNV2VxO>CliqpPuQoe0Z`q&crITv;6(n}5lu=UU@Hl%}>hCF7X z)Bs3ls1Djws(LlpefQd0nAD#xBDnGL4$k(`QHSQUO$8oTKD17GqV3v1<^C(_`yA#v zS=<=>Nb6L6Jd9dy2QS^IY`n^LS{~PJcF|cN6?7f9?N?E`Q5mNU5Q2S)8g5_|ZoNgvrQdGc3u-eb{6*}2QW2PR% zyCdv2^bfK|&sm@V@*Ot3u<5kw8MC@{7tG*)W~1r^7f#506tQK+t!|&{logfM@k7z! z&M4|EF^}7da@4E{rN)rkr~=%AiT32Y&@`*^5dOm#mKZr4$ET_0&4maDfG8=X&#gBO zhu?1SdYw30hp&u-t@qFG)8{zSlL7JD>S!=DO68OvK%mPRYw3UKfo{ z*2)Dw0!DF!mWB#T&dNf#b*wk}TznLptn-RhgIIs^>QY4PQs z5*jR^38EyLbdkJ?CFBA_B~qy`B&(EHZzAtIsQCE9GXdN%aK#LH;3W5v z#p6cQ3NiksBS)@XR9n($7B)(Htch0%k)X~MbQL*O0;z7c!~amj3p!Vi*Ck53L$1oB zYz+X>t{z3vS!)D60YkwShg9Q-Bn*u*_0X#gvn2i7r6|jqn z;j0f$uDFRfEWue1M%(4|3Ql?aen}LsS$5~>mMKfe_BWYzW=GUJrd4G$HGdn zgJP9Sl$gpX?N^%rBdfGO^9Bux?+8ZzW;z@>qH^}XrT`REi}XIb<9B5;K$Z;E3@HA- zw+Byuc%tbod~0QA)esP(6!MdU4Hs*|sEYemkD;gywc$W(t)pj59;9Zqyo>>9y z6e*5xq?^j0{I`QoY`-^RB;q{+sAn}nqJcs&Igqtp2}uHoktEvwXRBHYY+zQAcU`o0 zY9L5nVV%mnEt&LoMUWQ7A2|_LkVCFHfLiq?Y^b#TeB+0FZ_svc3^#OmaN#)ww2Vso z`#5E{dMwy=>Oy}uvs^`A&RZFR^`Y3_aKXc{!nKEWHh$?3e?%~W&z$}oihr)di|a#w zusRm=A=z!YP&7<%tkv`)DgP6_ZMb+$%Gz}>Q=uQkrh5D0&n9m=Za1Kp^7H;>!tlnx zuBzj61$gf>lVYv%qBh+NXi=_KQ%u4ncZn6zrw53+Us~AzYwFB{nz*Alo{o-#z^D)? zP_0zS!C@0vR0O3d3`j!)1W*nSWN_uIKsZDK*cP#pqD&15uyP6t0V;@=N@76KL|l=e zgp9?ZAV*Zfp&)`3kp8w3;LjxUd-=V$-|S}hz4v*#IzSfQM0}eHbTl+|vjGL&wyY)ZY&=NL7@_ z<3s}&R?Vm5W%UKk>CZjp;-4F49H^o$EelYy(4DM9KakEkhRPVuotZne<*(Bka+#{; zHo<=7LM!3n_&INuy;4jgm#0TP@wo#Z)-0{ot>6t`sDT~QD*YiR6Dve`Xh{vm(d&S= z%7C`O<$tf3x86NpP1f|Tg-Ugoozk8=F#a+Y7ECt2&(5nt-lTY{Sci zH8`9Z8f=Nk8y%5=|5Gd2a%&#;Nc=4*^Ix_W4wYi6$FJH39ovRAov0Y@^@EN!rrwqE}=YQCGMsxwu3geM@#8bKsP8 zBEb)x`V07}JWBKxz<`cquyRJi@G9?1?p_T_RvCVHxH(36yfqu_U@vMghIZ+o31crB zm{8H)Bu#w`@aGYL+6-UIQ`XcqS8v$5FP~0g+XX>fMIb=(L#0;!wZf#{0*05mjdb+RF=Kz6vuN-@hfhv2dK=TVjbwV27VR zNjP(3x0OiN`^f%RCzA{{26VOAP-{oAf6Dae!MeMj#15$+Z*WGg-@b55FG;Z(?KOMEGR@SIHuQAm3&*`YaxMcMZ5{Pl|?<_;n*2#L5QIU)NW|42L>Vyk(Gc^cek~sg7 zJqUO{nGf{x%seaig8Odfc7(%138w7V7;{E4t0e*SnipRA1;G$0!W6^cKYmP`N)pcdf;-EDtQIZeyVt!WdsPEzRM~kILZ(GY z{p!S94@9Z_tr|BHer+^l?}!IHs@r{{vT0L?!u6y;Qqr5J+Xi82`$tRCVpZHgtW+gs zs0fKu5*}R(K#E|>AECU&Gn3Cw`|ya@0w-f_V~SYhj&_rN!VGbRxi#h{?K~VN4~vWF zD0U3R_*C4p6KzAlY*T)!p)Z-C$|&{+F^08kko!#td^^rUHd#g=MfedY=X;yT$(JcJ zZL zoNggR@89AfF#fKLgekyQQa%R38EOS-Un;Rfi$HO3xzb5_dvxjoWe@;>aM}y(O!H4Xn0gW^t|Z z#d=KV`la$3@zo9PfMy}8CFE?{U`f0z<)d;{(C*pCB#Um|c^WuZAX?nNcXOE=R_Jl) tpoSioc^u%}f+(|ImqrA^`f+GN;KJf0yvCW`xiVaTak@ysi*tnd9Ipf3#1D0<6*XE~}O(l2FqH|^8bxqxhM;{+yIM3I<9bq9z4xCYrp0A`F}n}qra0c{QIZ1 zL4)pp56%DIJ=DF`XLZLz{Bg~VC)KNg?k_jEnQ5Pm>Q+T_^KWY|J?mX)PDqVdyEeDB ziS+LS2`f=~+4jgZQKRZ!Y>)qIH@1bA)Ljld0Lp~BcSUqskLvyes;eQ0f=!xKe+A+V2%zrg3s8%HAIwMM9Y zuykBJ(X!KU;gs*z)f3>Z4~BUUnE^>uSh~Df)gNK61?T(X?{RybZ!s2rCog<=Y$0gw z&lGmrDqj;dUK=GI0A|$3otM|2;tUCQ=p+h0_Qdg7T_5Ft%COnzpeh z{6&6Y_R>3TJfn6R&6>mU$zSR0bp@n0PPLwp;K)zXMPPkpJ%;DqdZa9FJc{Vb7*x4G z)=FB+MAU>3nHOg_ahG4J@&kzk2oGM-ho64V$GZ6Lg%HFCNipMyit zr2SV@8{^D7ziS!ahC|q`$ZP4bj)8g?*Vk4#p^-Lz%d1@Z2^p>1W7RrnDbhx!4|}NW zst$8cc$QgcVML?qz|hkI?n7bv1I5Z?*vqb)*SCd0O9y9?LMwOuoX&W+{+k_^{5ea) zp}Ls|yHCB-dYE_oo)S;`y#K23kBE9HWKQ<{EA8ilX%Vqh9rWt`!liF%-GV8% zkRpkz1z~6E#Wf2yrd}lATPgFYh4sbou=k6z?rZmAJXd(iF*C}nM<+BUmRC=LGAQFB zjQ%)$yGOHNz1b&H7U`LfE$IT?QM?0c|@ z)a^7eS<+!_IX@GpL^=2%DJh)~FP?6;+$d(A$$x&}O1kE|&_PVa)iDFvD_Q8LUl};@ z4F-S3oiNDXSp5F*&zM>57_Yj82BT~GYy8CEVW$|I@PWXn5moQiU1_df(MziqLxXB- zH@8>t><{$?#ZBC^JhV}Jc;?+^TFh!7--hT^{Ck9V2WC2$_EdjC?&e0_+FOo6ba?&D z><0JKCCW9+tsC)IwliKD92PHRr(qhfSE9zVLetr=IyM-Tjj}55Ud@8Ww?~?A;)B95 z0US1oGH@htzKvu(DE{c<(v@W7pru@trmgA3tIoi|ht4J5&##n5Eng3oUHkTclhqf$ zQ)2OZ$N1vh;yC4Lhlc5RX7FDe-uJeQekG>6TEdk{#>r36a7K+(vM>H+$ ze#~jzV7P_mTdtN^-dn-)#fzs;SgxE86T|NEYaF*dRv)uY;=}Y^%Jn99aGEvcvLdIe zh7XM3?54M6hJSzV?NU9US#h;%cd!L%p1h>-y7?n-Nn1jYora&zgqiVo@OrEmAz78NLg7ArqqvPLxd zl`E~3wKKe7xtPjaOObg=61xzWtI-jav`{dZ=NL7?_FeRC+xIQIIJzw~I%gp%0A`k^ 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 IvVZ*l0QZnNy#N3J From 1afb114cf802c3a659f64fa8f567272923e40a4a Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 3 Nov 2025 11:38:50 +0200 Subject: [PATCH 22/36] Fixed ExpandableMemoryStream introduction. --- .../formats-and-conversion/pdf/expandablememorystream.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md b/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md index ea801897..766eb5fd 100644 --- a/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md +++ b/libraries/radpdfprocessing/formats-and-conversion/pdf/expandablememorystream.md @@ -10,7 +10,7 @@ position: 3 # ExpandableMemoryStream -ExpandableMemoryStream is a segmented in-memory stream designed for efficient large or parallel PDF operations. Instead of resizing a single contiguous array like a **MemoryStream**, it grows by adding fixed-size blocks as needed—avoiding costly reallocations and Large Object Heap (LOH) pressure. Each block remains untouched once filled, so data isn’t copied during expansion. This block-based approach keeps allocations small and predictable, reduces GC overhead, and supports very large or bursty workloads. When growing, new cleared blocks are appended. When shrinking, only the visible length changes, allowing future reuse of existing memory without additional allocations. +ExpandableMemoryStream is a specialized in-memory stream built to handle demanding PDF workloads that involve large data volumes or concurrent operations. It provides a scalable alternative to traditional memory buffers by managing data growth in a controlled, efficient way. Instead of relying on a single expanding array, it uses an internal structure that minimizes memory churn and maintains stable performance even under heavy or unpredictable load. ## Why a Segmented Approach From 26393b4afc8e11f10b73818b80d460b699fd9382 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 3 Nov 2025 11:42:58 +0200 Subject: [PATCH 23/36] Resolved incorrect table formatting. --- .../json/jsonexportsettings.md | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md index c7b99be9..248b67ee 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md +++ b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md @@ -15,9 +15,6 @@ table th:first-of-type { width: 25%; } table th:nth-of-type(2) { width: 20%; } table th:nth-of-type(3) { width: 15%; } table th:nth-of-type(4) { width: 40%; } - -h3 + table th:first-of-type { width: 1%; white-space: nowrap; } -h3 + table th:nth-of-type(2) { width: auto; } # JsonExportSettings @@ -46,11 +43,20 @@ The [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json- ### Enum Values -| Enum | Members | -|------|---------| -| **ExportWhat** | **ActiveSheet** – Exports only the currently active worksheet.
**EntireWorkbook** – Exports all worksheets in the workbook. (Default)
**Selection** – Exports only the currently selected cell ranges. | -| **ChartDataMode** | **ReferencesOnly** – Only formula / reference expressions are exported. (Default)
**ResolvedValues** – Only resolved literal value arrays are exported.
**Both** – Both references and resolved value arrays are exported. | -| **ValueRenderMode** | **Raw** – Underlying raw cell value is exported.
**Display** – Formatted display value is exported. (Default)
**Both** – Both raw and display representations are exported. | +**ExportWhat** +* **ActiveSheet** - Exports only the currently active worksheet. +* EntireWorkbook** - Exports all worksheets in the workbook. (Default) +* **Selection** - Exports only the currently selected cell ranges. + +**ChartDataMode** +* **ReferencesOnly** - Only formula / reference expressions are exported. (Default) +* **ResolvedValues** - Only resolved literal value arrays are exported. +* **Both** - Both references and resolved value arrays are exported. + +**ValueRenderMode** +* **Raw** - Underlying raw cell value is exported. +* **Display** - Formatted display value is exported. (Default) +* **Both** - Both raw and display representations are exported. ## Basic Usage From 22f242a4480d136c21240294c8c359f2c9bb9970 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Mon, 3 Nov 2025 11:55:00 +0200 Subject: [PATCH 24/36] Added missing bolding. --- .../formats-and-conversion/json/jsonexportsettings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md index 248b67ee..9cda888a 100644 --- a/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md +++ b/libraries/radspreadprocessing/formats-and-conversion/json/jsonexportsettings.md @@ -45,7 +45,7 @@ The [JsonFormatProvider]({%slug radspreadprocessing-formats-and-conversion-json- **ExportWhat** * **ActiveSheet** - Exports only the currently active worksheet. -* EntireWorkbook** - Exports all worksheets in the workbook. (Default) +* **EntireWorkbook** - Exports all worksheets in the workbook. (Default) * **Selection** - Exports only the currently selected cell ranges. **ChartDataMode** From be26be608af280f4dcea750811159086003fd150 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 3 Nov 2025 16:45:17 +0200 Subject: [PATCH 25/36] 85975 Update the Prompt Library --- ai-coding-assistant/mcp-server.md | 4 + ai-coding-assistant/prompt-library.md | 166 +++++++++++++++++++++++++- 2 files changed, 169 insertions(+), 1 deletion(-) diff --git a/ai-coding-assistant/mcp-server.md b/ai-coding-assistant/mcp-server.md index 5e087541..e354a43e 100644 --- a/ai-coding-assistant/mcp-server.md +++ b/ai-coding-assistant/mcp-server.md @@ -20,6 +20,10 @@ The Telerik Document Processing [MCP (Model Context Protocol) Server](https://mo ## Supported Libraries * [RadPdfProcessing]({%slug radpdfprocessing-overview%}) +* [RadSpreadProcessing]({%slug radspreadprocessing-overview%}) +* [RadSpreadStreamProcessing]({%slug radspreadstreamprocessing-overview%}) +* [RadWordsProcessing]({%slug radwordsprocessing-overview%}) +* [RadZipLibrary]({%slug radziplibrary-overview%}) ## Prerequisites for the MCP Server diff --git a/ai-coding-assistant/prompt-library.md b/ai-coding-assistant/prompt-library.md index 6dfca2d8..5326a0ee 100644 --- a/ai-coding-assistant/prompt-library.md +++ b/ai-coding-assistant/prompt-library.md @@ -34,7 +34,7 @@ Quick Start Guide: ## General Prompts -The section provides examples of general questions related to RadPdfProcessing. +The section provides examples of general questions related to [RadPdfProcessing]({%slug radpdfprocessing-overview%}). @@ -131,6 +131,170 @@ The section provides examples of general questions related to RadPdfProcessing.
+## SpreadProcessing Prompts + +The section provides examples of general questions related to [RadSpreadProcessing]({%slug radspreadprocessing-overview%}). + + + + + + + + + + + + + + + + + + +
Create a Spreadsheet with random dataImport a Spreadsheet and read the content
+

+#telerik-dpl-assistant create a new spreadsheet file with random data inside.
+			  
+
+

+#telerik-dpl-assistant import an excel file and read the content of row 1 and column 1, and how to change the value on row 1 and column 2 to 5
+			  
+
Import a Spreadsheet and color cellsImport a Spreadsheet and format a cell
+

+#telerik-dpl-assistant import an excel document and change the background color of the first 5 cells on the first 2 rows.
+			  
+
+

+#telerik-dpl-assistant import an excel document and change the number format for cell A1.
+			  
+
+ +## SpreadStreamProcessing Prompts + +The section provides examples of general questions related to [RadSpreadStreamProcessing]({%slug radspreadstreamprocessing-overview%}). + + + + + + + + + + + + + + + + + + +
Create a Spreadsheet with random dataImport an existing Spreadsheet
+

+#telerik-dpl-assistant create a new excel file using spreadstreamprocessing with random data.
+			  
+
+

+#telerik-dpl-assistant import an excel file using spreadstreamprocessing.
+			  
+
Import an Excel document and color cells Import a Spreadsheet and format a cell
+

+#telerik-dpl-assistant open an excel file using spreadstreamprocessing and change the background color of the first 5 cells on the first 2 rows.
+			  
+
+

+#telerik-dpl-assistant open an excel file using spreadstreamprocessing and change the number format for cell A1.
+			  
+
+ +## WordsProcessing Prompts + +The section provides examples of general questions related to [RadWordsProcessing]({%slug radwordsprocessing-overview%}). + + + + + + + + + + + + + + + + + + + + + + +
Create a Word documentImport a Word document
+

+#telerik-dpl-assistant  create a new Word document with text "Test".
+			  
+
+

+#telerik-dpl-assistant import an existing word document.
+			  
+
MailMerge a Word documentConvert DOCX to PDF
+

+#telerik-dpl-assistant perform a mail merge with a word document.
+			  
+
+

+#telerik-dpl-assistant open a docx document and export it to a pdf file.
+			  
+
+ +## ZipLibrary Prompts + +The section provides examples of general questions related to [RadZipLibrary]({%slug radziplibrary-overview%}). + + + + + + + + + + + + + + + + + + + + + + +
Create a new zip archiveOpen an existing zip archive
+

+#telerik-dpl-assistant create a new zip archive.
+			  
+
+

+#telerik-dpl-assistant open a zip archive.
+			  
+
Add a file to a zip archiveProtect a zip archive
+

+#telerik-dpl-assistant add a new file into a zip archive.
+			  
+
+

+#telerik-dpl-assistant protect a zip archive.
+			  
+
+ ## See Also * [AI Coding Assistant Overview]({%slug ai-coding-assistant%}) From 8a11b9caaf934e34d89dc3899f29983fbd0bea69 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 3 Nov 2025 22:01:12 +0200 Subject: [PATCH 26/36] RSA and CMS external signing --- .../external-digital-signing.md | 50 +++++++++++++++++++ .../pdf-sign-timestamp-server.md | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md diff --git a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md new file mode 100644 index 00000000..1454627b --- /dev/null +++ b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md @@ -0,0 +1,50 @@ +--- +title: Externally Sign a PDF Document +description: Learn how to sign externally a PDF document using PdfProcessing. +page_title: Externally Sign a PDF Document +slug: external-digital-signing +tags: pdf, sign, document, external, hash, telerik, processing +published: True +position: 3 +--- + + +# Externally Sign a PDF Document + +|Minimum Version|Q4 2025| +|----|----| + +RadPdfProcessing provides support for creating a Signature instance configured for external signing. The external signing handler performs the actual signing operation. + +## Using IExternalSigner + +When you digitally sign a PDF, the signature data is typically embedded in the PDF file using **CMS** (Cryptographic Message Syntax). It is a standard used to digitally sign, encrypt, and authenticate data. CMS encapsulates the signature and it contains the signed hash of the document, the signer's certificate, and optionally a timestamp and other metadata. + +The supported digest (hash) algorithms for producing CMS (PKCS #7) PDF signature values are **Sha256**, **Sha384** and **Sha512** specified by the **DigestAlgorithm** property of the [SignatureSettings]({%slug radpdfprocessing-features-digital-signature-getting-started%}#signature-settings). + +#### [C#] CMS External Signer + + + +The following code snippet shows how to initialize a Signature instance using the CMS External Signer: + + + +## Using ExternalSignerbase and TimeStampServer + +In addition to [using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}), the PdfProcessing library allows creating a base helper implementation for building external (client supplied) digital signatures. The private key is managed outside the PDF library (e.g., HSMs, smart cards, remote signing services) and it allows integration without exposing private key material to the library. + +The following example implements external RSA-based digital signing for PDF documents deriving the ExternalSignerBase class. +**RSA** (Rivest–Shamir–Adleman) algorithm is a widely used asymmetric cryptographic algorithm. RSA generates a **private key** and a **public key** where the private key is used to sign the PDF and the public key is used to verify the signature. During the signing process a hash (digest) of the PDF content is created (e.g., using SHA-256). This hash is then encrypted with the RSA private key to create the digital signature. The signature is embedded in the PDF file, typically in a signature field. + +#### [C#] RSA External Signer + + + +Now, create a Signature that uses the above implementation: + + + +## See Also + + * [Using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}) diff --git a/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md b/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md index 111d911e..33a86a5a 100644 --- a/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md +++ b/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md @@ -1,5 +1,5 @@ --- -title: TimeStamp Server +title: Using a TimeStamp Server description: Learn how to sign a PDF document using a TimeStamp server. page_title: Signing a PDF using a TimeStamp Server slug: pdf-sign-timestamp-server From d7aab107e4cd0c0742c82821fc23b8da6b324c22 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Mon, 3 Nov 2025 22:13:49 +0200 Subject: [PATCH 27/36] Update external-digital-signing.md --- .../features/digital-signature/external-digital-signing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md index 1454627b..b0c07339 100644 --- a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md +++ b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md @@ -30,7 +30,7 @@ The following code snippet shows how to initialize a Signature instance using th -## Using ExternalSignerbase and TimeStampServer +## Using ExternalSignerBase and TimeStampServer In addition to [using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}), the PdfProcessing library allows creating a base helper implementation for building external (client supplied) digital signatures. The private key is managed outside the PDF library (e.g., HSMs, smart cards, remote signing services) and it allows integration without exposing private key material to the library. From ee47c6d0a0af715881c941745308a5e2175c0e98 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Tue, 4 Nov 2025 16:17:04 +0200 Subject: [PATCH 28/36] polish external signing and timestamp server --- .../digital-signature/external-digital-signing.md | 8 +++++--- libraries/radpdfprocessing/overview.md | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md index b0c07339..6f8c4b69 100644 --- a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md +++ b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md @@ -14,7 +14,7 @@ position: 3 |Minimum Version|Q4 2025| |----|----| -RadPdfProcessing provides support for creating a Signature instance configured for external signing. The external signing handler performs the actual signing operation. +RadPdfProcessing provides support for creating a **Signature** instance configured for external signing. The external signing handler performs the actual signing operation. ## Using IExternalSigner @@ -22,15 +22,17 @@ When you digitally sign a PDF, the signature data is typically embedded in the P The supported digest (hash) algorithms for producing CMS (PKCS #7) PDF signature values are **Sha256**, **Sha384** and **Sha512** specified by the **DigestAlgorithm** property of the [SignatureSettings]({%slug radpdfprocessing-features-digital-signature-getting-started%}#signature-settings). +The following example demonstrates how to implement the **IExternalSigner** interface producing an external CMS (PKCS #7) detached signature over a PDF byte range: + #### [C#] CMS External Signer -The following code snippet shows how to initialize a Signature instance using the CMS External Signer: +Then, initialize a Signature instance using the CMS External Signer: -## Using ExternalSignerBase and TimeStampServer +## Using ExternalSignerBase In addition to [using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}), the PdfProcessing library allows creating a base helper implementation for building external (client supplied) digital signatures. The private key is managed outside the PDF library (e.g., HSMs, smart cards, remote signing services) and it allows integration without exposing private key material to the library. diff --git a/libraries/radpdfprocessing/overview.md b/libraries/radpdfprocessing/overview.md index 280b8dda..d9b2efe2 100644 --- a/libraries/radpdfprocessing/overview.md +++ b/libraries/radpdfprocessing/overview.md @@ -45,7 +45,7 @@ The document model of the library provides support for: | [**Geometries**]({%slug radpdfprocessing-concepts-geometry%}) | Enable you to describe the geometry of a 2D shape. | | [**Form XObjects**]({%slug radpdfprocessing-model-form%}) | The Form XObjects enables you to describe composite objects (consisting of text, images, vector elements, etc.) within a PDF file and reuse this content among the document, for smaller document size and better rendering performance. | | [**Interactive Forms**]({%slug radpdfprocessing-model-interactive-forms-overview%}) | Create and modify PDF files containing textboxes, buttons, list boxes, and other interactive controls making available for the PDF file user to interactively fill some data in the PDF document and/or digitally sign the filled document. You can flatten the fields as well. | -| [**Digital Signature**]({%slug radpdfprocessing-features-digital-signature%}) | The digital signature feature enables you to sign and validate PDF documents. | +| [**Digital Signature**]({%slug radpdfprocessing-features-digital-signature%}) | The digital signature feature enables you to sign and validate PDF documents. It supports signing PDF documents [using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}) or [external signing]({%slug external-digital-signing%}). | |[**Embedded File Streams**]({%slug radpdfprocessing-embedded-file-streams-overview%})|The embed a file stream feature allows adding external files to the PDF document.| | [**Clipping**]({%slug radpdfprocessing-concepts-clipping%}) | You can define the outline of other content elements like images and paths. | | [**Bookmarks (Outlines)**]({%slug radpdfprocessing-features-bookmarks%}) | Add, remove or modify the bookmarks in a PDF document. | From 536a23d6069c3d88a7dcd4d490da9c639b83dd2a Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Tue, 4 Nov 2025 17:08:16 +0200 Subject: [PATCH 29/36] Flow and Fixed - updated Summary and CompleteContext processors with new API. --- .../complete-context-question-processor.md | 11 +++++------ .../gen-ai-powered-document-insights/prerequisites.md | 11 ++++++++--- .../summarization-processor.md | 7 ++++--- .../complete-context-question-processor.md | 11 +++++------ .../gen-ai-powered-document-insights/prerequisites.md | 11 ++++++++--- .../summarization-processor.md | 7 ++++--- 6 files changed, 34 insertions(+), 24 deletions(-) diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md index da475724..7b344fef 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md @@ -45,13 +45,12 @@ However, if you're working with larger documents or want to optimize token usage ## CompleteContextProcessorSettings -The **CompleteContextProcessorSettings** class provides configuration options for the question-answering process. +The **CompleteContextProcessorSettings** class defines configuration options for the question-answering process. The following read-only properties can be set only through the constructor: -### Settings Properties - -* **ModelMaxInputTokenLimit**: Gets or sets the maximum input token limit the model allows. -* **TokenizationEncoding**: Gets or sets the tokenization encoding. -* **ModelId**: Gets or sets the ID of the model. +* **ModelMaxInputTokenLimit**: The maximum input token limit the model allows. +* **ModelId**: The ID of the model. +* **TokenizationEncoding**: The tokenization encoding. +* **ProduceJsonFormattedContext**: Determines whether the context sent to the model is in JSON or plain text format, if json format is applicable (dafault is *false*). ## Usage Example diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md index 54b3338b..8b61bec5 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md @@ -35,10 +35,15 @@ In addition to the [standard RadPdfProcessing references]({%slug radpdfprocessin |---|---| |**Telerik.Windows.Documents.AIConnector** * |**Telerik.Documents.AIConnector** *| -> __*__ The **Documents.AIConnector** NuGet package internally depends on **Microsoft.Extensions.AI.Abstractions** and **SharpToken**. +> __*__ The **Documents.AIConnector** NuGet package internally depends on: > -> * **Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. -> * If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. +>* **Telerik.(Windows).Documents.AI.Core** +>* **Telerik.(Windows).Documents.AI.RAG** +>* **Microsoft.Extensions.AI.Abstractions** +>* **SharpToken** +> +>**Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. +>If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. ## NuGet Packages diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md index 371d969d..d5eb6073 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md @@ -27,7 +27,7 @@ The **SummarizationProcessor** class enables you to generate concise summaries o |Property|Description| |---|---| -|**Settings**|Gets or sets the settings that will be used for summarization.| +|**Settings**|Gets the settings that will be used for summarization.| |Method|Description| |---|---| @@ -41,9 +41,10 @@ The **SummarizationProcessor** class enables you to generate concise summaries o ## SummarizationProcessorSettings -The **SummarizationProcessorSettings** class provides configuration options for the summarization process: +The **SummarizationProcessorSettings** class defines configuration options for the summarization process. The following read-only properties can be set only through the constructor: -* **PromptAddition**: Gets or sets an addition for the prompt used for summarization. It can be used for clarification purposes. +* **ModelMaxInputTokenLimit**: The maximum input token limit for the model. +* **PromptAddition**: An addition for the prompt used for summarization. It can be used for clarification purposes. #### __[C#] Example 1: Configuring SummarizationProcessorSettings__ diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md index 0993d6fd..1cd0b1bb 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md @@ -45,13 +45,12 @@ However, if you're working with larger documents or want to optimize token usage ## CompleteContextProcessorSettings -The **CompleteContextProcessorSettings** class provides configuration options for the question-answering process. +The **CompleteContextProcessorSettings** class defines configuration options for the question-answering process. The following read-only properties can be set only through the constructor: -### Settings Properties - -* **ModelMaxInputTokenLimit**: Gets or sets the maximum input token limit the model allows. -* **TokenizationEncoding**: Gets or sets the tokenization encoding. -* **ModelId**: Gets or sets the ID of the model. +* **ModelMaxInputTokenLimit**: The maximum input token limit the model allows. +* **ModelId**: The ID of the model. +* **TokenizationEncoding**: The tokenization encoding. +* **ProduceJsonFormattedContext**: Determines whether the context sent to the model is in JSON or plain text format, if json format is applicable (dafault is *false*). ## Usage Example diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md index bc13395f..7098c16f 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md @@ -35,10 +35,15 @@ In addition to the [standard RadWordsProcessing references]({%slug radwordsproce |---|---| |**Telerik.Windows.Documents.AIConnector** * |**Telerik.Documents.AIConnector** *| -> __*__ The **Documents.AIConnector** NuGet package internally depends on **Microsoft.Extensions.AI.Abstractions** and **SharpToken**. +> __*__ The **Documents.AIConnector** NuGet package internally depends on: > -> * **Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. -> * If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. +>* **Telerik.(Windows).Documents.AI.Core** +>* **Telerik.(Windows).Documents.AI.RAG** +>* **Microsoft.Extensions.AI.Abstractions** +>* **SharpToken** +> +>**Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. +>If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. ## NuGet Packages diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md index f17d2848..bc391d94 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md @@ -27,7 +27,7 @@ The **SummarizationProcessor** class enables you to generate concise summaries o |Property|Description| |---|---| -|**Settings**|Gets or sets the settings that will be used for summarization.| +|**Settings**|Gets the settings that will be used for summarization.| |Method|Description| |---|---| @@ -41,9 +41,10 @@ The **SummarizationProcessor** class enables you to generate concise summaries o ## SummarizationProcessorSettings -The **SummarizationProcessorSettings** class provides configuration options for the summarization process: +The **SummarizationProcessorSettings** class defines configuration options for the summarization process. The following read-only properties can be set only through the constructor: -* **PromptAddition**: Gets or sets an addition for the prompt used for summarization. It can be used for clarification purposes. +* **ModelMaxInputTokenLimit**: The maximum input token limit for the model. +* **PromptAddition**: An addition for the prompt used for summarization. It can be used for clarification purposes. #### __[C#] Example 1: Configuring SummarizationProcessorSettings__ From 4863b8261066ba2858d0cce8487401fc6026f3ca Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Tue, 4 Nov 2025 17:17:16 +0200 Subject: [PATCH 30/36] FIxed "required references" note. --- .../gen-ai-powered-document-insights/prerequisites.md | 6 +++--- .../gen-ai-powered-document-insights/prerequisites.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md index 8b61bec5..6d182905 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md @@ -38,9 +38,9 @@ In addition to the [standard RadPdfProcessing references]({%slug radpdfprocessin > __*__ The **Documents.AIConnector** NuGet package internally depends on: > >* **Telerik.(Windows).Documents.AI.Core** ->* **Telerik.(Windows).Documents.AI.RAG** ->* **Microsoft.Extensions.AI.Abstractions** ->* **SharpToken** +>* **Telerik.(Windows).Documents.AI.RAG** +> * **Microsoft.Extensions.AI.Abstractions** +> * **SharpToken** > >**Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. >If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md index 7098c16f..11665c93 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md @@ -38,9 +38,9 @@ In addition to the [standard RadWordsProcessing references]({%slug radwordsproce > __*__ The **Documents.AIConnector** NuGet package internally depends on: > >* **Telerik.(Windows).Documents.AI.Core** ->* **Telerik.(Windows).Documents.AI.RAG** ->* **Microsoft.Extensions.AI.Abstractions** ->* **SharpToken** +>* **Telerik.(Windows).Documents.AI.RAG** +> * **Microsoft.Extensions.AI.Abstractions** +> * **SharpToken** > >**Microsoft.Extensions.AI.Abstractions** is currently available only in **preview** version. >If you are referencing an _assembly/dll_ of **Documents.AIConnector** instead of a NuGet package, you must manually add the **SharpToken** NuGet package. From 8ca8f379c6db6d573f4201033e246d91b265c33d Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 5 Nov 2025 14:06:14 +0200 Subject: [PATCH 31/36] Applied feedback from dev --- .../digital-signature/external-digital-signing.md | 8 +++++--- .../digital-signature/pdf-sign-timestamp-server.md | 4 +++- libraries/radpdfprocessing/overview.md | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md index 6f8c4b69..d2f2a8c2 100644 --- a/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md +++ b/libraries/radpdfprocessing/features/digital-signature/external-digital-signing.md @@ -14,7 +14,9 @@ position: 3 |Minimum Version|Q4 2025| |----|----| -RadPdfProcessing provides support for creating a **Signature** instance configured for external signing. The external signing handler performs the actual signing operation. +RadPdfProcessing provides support for creating a **Signature** instance configured for external signing. The external signing handler performs the actual signing operation. The private key is managed outside the PDF library (e.g., HSMs, smart cards, remote signing services) and it allows integration without exposing private key material to the library. + +>note [PdfProcessing Add Digital Signature External Demo](https://demos.telerik.com/document-processing/pdfprocessing/external_digitally_sign_document) ## Using IExternalSigner @@ -34,10 +36,10 @@ Then, initialize a Signature instance using the CMS External Signer: ## Using ExternalSignerBase -In addition to [using a TimeStamp Server]({%slug pdf-sign-timestamp-server%}), the PdfProcessing library allows creating a base helper implementation for building external (client supplied) digital signatures. The private key is managed outside the PDF library (e.g., HSMs, smart cards, remote signing services) and it allows integration without exposing private key material to the library. +The PdfProcessing library allows creating a base helper implementation for building external (client supplied) digital signatures. The following example implements external RSA-based digital signing for PDF documents deriving the ExternalSignerBase class. -**RSA** (Rivest–Shamir–Adleman) algorithm is a widely used asymmetric cryptographic algorithm. RSA generates a **private key** and a **public key** where the private key is used to sign the PDF and the public key is used to verify the signature. During the signing process a hash (digest) of the PDF content is created (e.g., using SHA-256). This hash is then encrypted with the RSA private key to create the digital signature. The signature is embedded in the PDF file, typically in a signature field. +**RSA** (Rivest–Shamir–Adleman) algorithm is a widely used asymmetric cryptographic algorithm. RSA generates a **private key** and a **public key** where the private key is used to sign the PDF and the public key is used to verify the signature. During the signing process a hash (digest) of the PDF content is created (e.g., using SHA-512). This hash is then encrypted with the RSA private key to create the digital signature. The signature is embedded in the PDF file, typically in a signature field. #### [C#] RSA External Signer diff --git a/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md b/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md index 33a86a5a..7ce790fc 100644 --- a/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md +++ b/libraries/radpdfprocessing/features/digital-signature/pdf-sign-timestamp-server.md @@ -14,7 +14,9 @@ position: 2 |Minimum Version|Q4 2025| |----|----| -The **TimeStampServer** class encapsulates the necessary details to communicate with an external Timestamp Authority (TSA), including the endpoint URL, optional authentication credentials and timeout for requests. The TimeStampServer can be set via the [SignatureSettings]({%slug radpdfprocessing-features-digital-signature-getting-started%}#signature-settings): +The **TimeStampServer** class encapsulates the necessary details to communicate with an external Timestamp Authority (TSA), including the endpoint URL, optional authentication credentials and timeout for requests. The TimeStampServer can be set via the [SignatureSettings]({%slug radpdfprocessing-features-digital-signature-getting-started%}#signature-settings). + +>note [PdfProcessing Add Digital Signature External Demo](https://demos.telerik.com/document-processing/pdfprocessing/external_digitally_sign_document) diff --git a/libraries/radpdfprocessing/overview.md b/libraries/radpdfprocessing/overview.md index d9b2efe2..b65de3c3 100644 --- a/libraries/radpdfprocessing/overview.md +++ b/libraries/radpdfprocessing/overview.md @@ -80,6 +80,7 @@ The document model of the library provides support for: |[PdfProcessing Multiple Digital Signatures](https://demos.telerik.com/document-processing/pdfprocessing/multiple_digital_signatures)|This example demonstrates how to digitally sign a PDF without invalidating any existing signatures.| |[PdfProcessing Accessibility](https://demos.telerik.com/document-processing/pdfprocessing/accessibility)|This example demonstrates how to create accessible PDF documents programmatically, ensuring compliance with standards such as PDF/UA by supporting features like tagged content, document structure, and metadata. Downloaded documents will adhere to the selected compliance level.| |[PdfProcessing GenAI Document Insights](https://demos.telerik.com/document-processing/pdfprocessing/genai_document_insights)|This example demonstrates how to use the GenAI-powered Document Insights feature in Telerik RadPdfProcessing to extract meaningful insights from PDF documents.| +|[PdfProcessing Add Digital Signature External](https://demos.telerik.com/document-processing/pdfprocessing/external_digitally_sign_document)|This example demonstrates how to digitally sign a PDF with the option to provide a TimeStamp Server for enhanced security and validation.| From a6e880c0e6351e0e58223d642429cd62239ebdd0 Mon Sep 17 00:00:00 2001 From: Desislava Yordanova Date: Wed, 5 Nov 2025 14:40:14 +0200 Subject: [PATCH 32/36] System.Security.Cryptography.Pkcs is bumped from 9.0.0 to 9.0.9. --- _config.yml | 1 + .../model/interactive-forms/form-fields/signaturefield.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index d010e78b..920c796e 100644 --- a/_config.yml +++ b/_config.yml @@ -398,6 +398,7 @@ maxdotnetversion: "9" dotnetversions: ".NET 8 and .NET 9" skiasharpversion: "3.119.1" harfbuzzsharp: "8.3.1.2" +cryptographypkcs: "9.0.9" # Feedback Form Product Code productCode: TDP diff --git a/libraries/radpdfprocessing/model/interactive-forms/form-fields/signaturefield.md b/libraries/radpdfprocessing/model/interactive-forms/form-fields/signaturefield.md index f2e89f7b..2c3b81df 100644 --- a/libraries/radpdfprocessing/model/interactive-forms/form-fields/signaturefield.md +++ b/libraries/radpdfprocessing/model/interactive-forms/form-fields/signaturefield.md @@ -19,7 +19,7 @@ This article describes the following topics: This class corresponds to FormFieldType.Signature enum value and represents a placeholder which preserves the digital signature information. ->To use the signing functionality in PdfProcessing for .NET Standard/.NET Core, you must add a reference to the System.Security.Cryptography.Pkcs NuGet package, version 6 or newer (This functionality is available since R1 2022 SP1). +>To use the signing functionality in PdfProcessing for .NET Standard/.NET Core, you must add a reference to the System.Security.Cryptography.Pkcs NuGet package, version {{site.cryptographypkcs}} or newer (This functionality is available since R1 2022 SP1). ## Properties From 1035b710cb959dae6c0536e459dc76dc2e269905 Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Wed, 5 Nov 2025 19:28:45 +0200 Subject: [PATCH 33/36] PDF - Addressed PartialContextProcessor API changes. --- _config.yml | 3 + .../custom-partialcontextquestionprocessor.md | 70 +++++++++++++++++++ .../getting-started.md | 4 +- .../partial-context-question-processor.md | 52 ++++++-------- 4 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md diff --git a/_config.yml b/_config.yml index d010e78b..772e1938 100644 --- a/_config.yml +++ b/_config.yml @@ -236,6 +236,9 @@ navigation: libraries/radpdfprocessing/features/gen-ai-powered-document-insights: title: GenAI-powered Document Insights position: 6 + libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor: + title: Custom PartialContextQuestionProcessor + position: 6 libraries/radpdfprocessing/model/interactive-forms: title: Interactive Forms libraries/radpdfprocessing/model/interactive-forms/form-fields: diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md new file mode 100644 index 00000000..c8e18703 --- /dev/null +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md @@ -0,0 +1,70 @@ +--- +title: Custom PartialContextQuestionProcessor +description: Customize the PartialContextQuestionProcessor by providing a custom IContextRetriever and interface implementations for fragmentation, embedding, similarity, token counting, and retrieval. +page_title: Custom PartialContextQuestionProcessor +slug: radpdfprocessing-features-gen-ai-powered-document-insights-custom-partialcontextquestionprocessor +tags: ai, context, retriever, embeddings, customization, pdf, fixed, document, partial, processor, question, insights +published: True +position: 6 +--- + +# Custom PartialContextQuestionProcessor + +This article explains how to create a custom **PartialContextQuestionProcessor** configuration by supplying your own **IContextRetriever** and related interface implementations. You can tailor every step: splitting text, producing embeddings, ranking relevance, enforcing token limits, formatting context, and retrieving it efficiently to optimize performance, cost, accuracy, or compliance. + +When you need full control over fragmentation, embedding, similarity ranking, and retrieval, use the constructor that accepts an **IContextRetriever**: + +```csharp +PartialContextQuestionProcessor( + IChatClient chatClient, + IContextRetriever contextRetriever, + IEmbeddingSettings settings, + SimpleTextDocument document) +``` + +This constructor gives you end‑to‑end control over how document text is fragmented, embedded, stored, and later selected (ranked) as context for a question, forming your custom **PartialContextQuestionProcessor** pipeline. + +## Interfaces + +All extension points live in **Telerik.Documents.AI.Core** (as abstractions) with their default implementations in **Telerik.Documents.AI.RAG**: + +| Interface | Responsibility | Used By | +|---|---|---| +| **IContextFragmentsManager** | Splits raw document text into token-bounded semantic fragments (pages, sections, paragraphs) | Fragmentation stage | +| **IEmbedder** | Converts fragments into embeddings/vectors for similarity comparison | Embedding stage | +| **ISimilarityCalculator** | Scores fragment relevance against a question/prompt | Ranking stage | +| **ITokensCounter** | Counts tokens for limits enforcement (fragment size, total context) | Throughout pipeline | +| **IEmbeddingSettings** | Provides token & size limits + formatting hints | Configuration source | +| **IContextRetriever** | Orchestrates loading text, preparing embeddings, and returning best context | Retrieval stage | +| **ISupportJsonEmbeddings** / **ISupportPlainTextEmbeddings** | Control how context is formatted for the model (JSON vs plain text) | Formatting stage | +| **IFragments** / **IFragment** | Data structures representing chunk collections and individual chunks | Shared across stages | + +### Life Cycle +1. **SetContextAsync(text, embeddingTokenSize)** - Text is fragmented (**IContextFragmentsManager**), tokens checked (**ITokensCounter**), embeddings generated (**IEmbedder**), and stored. +2. Question time (**GetContextAsync(question)**) - Similarity scores computed (**ISimilarityCalculator**), top fragments selected within limits, context formatted (plain or JSON). +3. Processor sends formatted context + question via **IChatClient** and returns model answer. + +## Customization Goals +| Goal | Interface(s) to Extend | Sample Strategy | +|---|---|---| +| Higher answer relevance | **IContextFragmentsManager**, **ISimilarityCalculator** | Semantic chunk boundaries; hybrid re-ranking | +| Lower latency | **IEmbedder**, **IContextRetriever** | Batch embedding; async caching; vector DB offload | +| Reduced cost (token/API) | **IContextFragmentsManager**, **ITokensCounter** | Dynamic fragment sizing; early pruning | +| Governance / compliance | **IContextRetriever**, **IContextFragmentsManager** | PII masking before embedding; audit logging | +| Observability & metrics | Any | Wrap implementations with decorators emitting telemetry | +| Cross-platform embedding | **IEmbedder** | Use external provider (Azure OpenAI, HuggingFace, etc.) | +| Advanced filtering | **ISimilarityCalculator**, **IContextRetriever** | Metadata filters (page, section, tags) before ranking | + +## Custom Implementation + +The example below constructs a custom **PartialContextQuestionProcessor** by supplying a **DefaultContextRetriever** that mixes user implementations (custom **IContextFragmentsManager** and **IEmbedder**) with default components (**DefaultSimilarityCalculator**, **DefaultTokensCounter**, and the retriever's own orchestration). This hybrid approach lets you optimize the most impactful stages (fragmentation + embedding) without rewriting the entire retrieval pipeline. + +>note **DefaultEmbedder** is only available on **net8-windows** and higher. On other target frameworks you must supply your own **IEmbedder** (as shown below with [CustomOpenAIEmbedder]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder)). + + + +## See Also +* [PartialContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}) +* [SummarizationProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-summarization-processor%}) +* [CompleteContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-complete-context-question-processor%}) +* [GenAI-powered Document Insights Overview]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-overview%}) diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/getting-started.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/getting-started.md index e914bf8b..bd63f7af 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/getting-started.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/getting-started.md @@ -14,7 +14,7 @@ The following example demonstrates how to use the GenAI-powered Document Insight >note The following code snippet is valid for Azure Open AI 9.3. The specific **IChatClient** initialization may be different according to the specific version. ->important For .NET {{site.mindotnetversion}}+ (Target OS Windows) with [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows), an [IEmbeddingsStorage]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) implementation is required for the [PartialContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}). +>important For .NET {{site.mindotnetversion}}+ (Target OS Windows) with [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows), an [IEmbedder]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) implementation is required for the [PartialContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}). #### __[C#] Example 1: Using GenAI-powered Document Insights__ @@ -29,5 +29,5 @@ When you run this code, the AI will process your document, generate a summary, a * [Prerequisites]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-prerequisites%}) * [SummarizationProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-summarization-processor%}) * [PartialContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}) -* [Custom IEmbeddingsStorage Implementation]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) +* [Custom IEmbedder Implementation]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) * [CompleteContextQuestionProcessor]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-complete-context-question-processor%}) diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md index 50562d54..354524b8 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md @@ -36,69 +36,63 @@ The **PartialContextQuestionProcessor** is ideal for the following scenarios: |Constructor|Platform|Description| |---|---|---| -|**PartialContextQuestionProcessor(IChatClient chatClient, int modelMaxInputTokenLimit, ISimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| -|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingsStorage embeddingsStorage, int modelMaxInputTokenLimit, ISimpleTextDocument document)**|Any|Creates an instance with custom embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingSettings settings, SimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbedder embedder, IEmbeddingSettings settings, SimpleTextDocument document)**|Any|Creates an instance with custom embedding| +|**PartialContextQuestionProcessor(IChatClient chatClient, IContextRetriever contextRetriever, IEmbeddingSettings settings, SimpleTextDocument document)**|Any|Allows [custom **PartialContextQuestionProcessor** configuration]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-custom-partialcontextquestionprocessor%})| -> _*Specific_ The .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows) constructor uses **DefaultEmbeddingsStorage** internally, while the cross-platform and .NET Framework constructor requires a custom implementation of **IEmbeddingsStorage** as shown in the [Custom IEmbeddingsStorage Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) section. +> _*Specific_ The .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows) constructor uses a default **IEmbedder** internally, while the cross-platform and .NET Framework constructor requires a custom implementation of **IEmbedder** as shown in the [Custom IEmbedder Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) section. ### Properties and Methods |Member|Type|Description| |---|---|---| -|**Settings**|Property|Gets the **PartialContextProcessorSettings** for configuring the AI process| +|**Settings**|Property|Gets the *readonly* **IEmbeddingSettings** that configure the AI process| |**AnswerQuestion(string question)**|Method|Returns an answer to the question using relevant document context| >caution **Security Warning:** The output produced by this API is generated by a Large Language Model (LLM). As such, the content should be considered untrusted and may include unexpected or unsafe data. It is strongly recommended to properly sanitize or encode all output before displaying it in a user interface, logging, or using it in any security-sensitive context. -### PartialContextProcessorSettings +### IEmbeddingSettings -The settings class provides configuration options for the question-answering process: +The settings are created only through **EmbeddingSettingsFactory**'s **CreateSettingsForTextDocuments** method and can only be passed to the constructor of the processor. They expose configuration options for the question-answering process through the following properties: * **ModelMaxInputTokenLimit**: Maximum input token limit the model allows -* **TokenizationEncoding**: Tokenization encoding used -* **ModelId**: ID of the AI model -* **MaxNumberOfEmbeddingsSent**: Maximum number of context chunks sent (default: 30) -* **EmbeddingTokenSize**: Size in tokens of each context chunk (default: 300) +* **TokenizationEncoding**: Tokenization encoding used (default: **null**) +* **ModelId**: ID of the AI model (default: **null**) +* **MaxNumberOfEmbeddingsSent**: Maximum number of context chunks sent (default: **null**) +* **EmbeddingTokenSize**: Size in tokens of each context chunk (default: **null**) + + ## Usage Examples -#### Example 1: Using PartialContextQuestionProcessor with default embeddings storage. +#### Example 1: Using PartialContextQuestionProcessor with default embedding. -This example demonstrates how to use the **PartialContextQuestionProcessor** with the built-in embeddings storage on .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows). For setting up the AI client, see the [AI Provider Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-prerequisites%}#ai-provider-setup) section: +This example demonstrates how to use the **PartialContextQuestionProcessor** with the built-in embedding on .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows). For setting up the AI client, see the [AI Provider Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-prerequisites%}#ai-provider-setup) section: -#### Example 2: Using PartialContextQuestionProcessor with Custom Embeddings (.NET Standard) +#### Example 2: Using PartialContextQuestionProcessor with Custom IEmbedder -This example demonstrates how to use the **PartialContextQuestionProcessor** with a custom embeddings storage implementation as described in the [Custom IEmbeddingsStorage Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) section: +This example demonstrates how to use the **PartialContextQuestionProcessor** with a custom IEmbedder implementation as described in the [Implementing Custom IEmbedder]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) section: - + -### Implementing custom IEmbeddingsStorage +### Implementing Custom IEmbedder -A sample custom implementation for the OllamaEmbeddingsStorage is shown in the below code snippet: +A sample custom CustomOpenAIEmbedder implementation for the IEmbedder is shown in the below code snippet: >note Requires installing the following NuGet packages: -> * **LangChain** -> * **LangChain.Databases.Sqlite** -> * **Microsoft.Extensions.AI.Ollama** +> * **Azure.AI.OpenAI** +> * **Microsoft.Extensions.AI.OpenAI** (v9.3) > * **Telerik.Windows.Documents.AIConnector** > * **Telerik.Windows.Documents.Fixed** -1. Install Ollama from [ollama.com](https://ollama.com/). -2. Pull the model you want to use. -3. Start the Ollama server. - - + #### Example 3: Processing Specific Pages -#### Example 4: Optimizing Embeddings Settings - - - ## See Also * [GenAI-powered Document Insights Overview]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-overview%}) From 369ecd1aa7660d59caecea25957e916e45a07fcf Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Thu, 6 Nov 2025 12:08:54 +0200 Subject: [PATCH 34/36] PDF GenAI follow-up style changes. --- _config.yml | 3 +++ .../complete-context-question-processor.md | 2 +- .../custom-partialcontextquestionprocessor.md | 11 ----------- .../partial-context-question-processor.md | 4 ++-- .../summarization-processor.md | 2 +- .../complete-context-question-processor.md | 2 +- .../partial-context-question-processor.md | 4 ++-- .../summarization-processor.md | 2 +- 8 files changed, 11 insertions(+), 19 deletions(-) diff --git a/_config.yml b/_config.yml index 23f13166..60272e1c 100644 --- a/_config.yml +++ b/_config.yml @@ -236,6 +236,9 @@ navigation: libraries/radpdfprocessing/features/gen-ai-powered-document-insights: title: GenAI-powered Document Insights position: 6 + libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor: + title: PartialContextQuestionProcessor + position: 5 libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor: title: Custom PartialContextQuestionProcessor position: 6 diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md index 7b344fef..8b7589f9 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/complete-context-question-processor.md @@ -39,7 +39,7 @@ However, if you're working with larger documents or want to optimize token usage |Method|Description| |---|---| -|**public Task AnswerQuestion(ISimpleTextDocument document, string question)**|Answers a question using the provided document. Parameters: **document** - The document containing the text to process, **question** - The question to answer. Returns a task that represents the asynchronous operation. The task result contains the answer to the question.| +|**public Task AnswerQuestion(SimpleTextDocument document, string question)**|Answers a question using the provided document. Parameters: **document** - The document containing the text to process, **question** - The question to answer. Returns a task that represents the asynchronous operation. The task result contains the answer to the question.| >caution **Security Warning:** The output produced by this API is generated by a Large Language Model (LLM). As such, the content should be considered untrusted and may include unexpected or unsafe data. It is strongly recommended to properly sanitize or encode all output before displaying it in a user interface, logging, or using it in any security-sensitive context. diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md index c8e18703..be0c2b28 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md @@ -44,17 +44,6 @@ All extension points live in **Telerik.Documents.AI.Core** (as abstractions) wit 2. Question time (**GetContextAsync(question)**) - Similarity scores computed (**ISimilarityCalculator**), top fragments selected within limits, context formatted (plain or JSON). 3. Processor sends formatted context + question via **IChatClient** and returns model answer. -## Customization Goals -| Goal | Interface(s) to Extend | Sample Strategy | -|---|---|---| -| Higher answer relevance | **IContextFragmentsManager**, **ISimilarityCalculator** | Semantic chunk boundaries; hybrid re-ranking | -| Lower latency | **IEmbedder**, **IContextRetriever** | Batch embedding; async caching; vector DB offload | -| Reduced cost (token/API) | **IContextFragmentsManager**, **ITokensCounter** | Dynamic fragment sizing; early pruning | -| Governance / compliance | **IContextRetriever**, **IContextFragmentsManager** | PII masking before embedding; audit logging | -| Observability & metrics | Any | Wrap implementations with decorators emitting telemetry | -| Cross-platform embedding | **IEmbedder** | Use external provider (Azure OpenAI, HuggingFace, etc.) | -| Advanced filtering | **ISimilarityCalculator**, **IContextRetriever** | Metadata filters (page, section, tags) before ranking | - ## Custom Implementation The example below constructs a custom **PartialContextQuestionProcessor** by supplying a **DefaultContextRetriever** that mixes user implementations (custom **IContextFragmentsManager** and **IEmbedder**) with default components (**DefaultSimilarityCalculator**, **DefaultTokensCounter**, and the retriever's own orchestration). This hybrid approach lets you optimize the most impactful stages (fragmentation + embedding) without rewriting the entire retrieval pipeline. diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md index 354524b8..412f30ef 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor.md @@ -46,7 +46,7 @@ The **PartialContextQuestionProcessor** is ideal for the following scenarios: |Member|Type|Description| |---|---|---| -|**Settings**|Property|Gets the *readonly* **IEmbeddingSettings** that configure the AI process| +|**Settings**|Property|Gets the *readonly* [IEmbeddingSettings]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#iembeddingsettings) that configure the AI process| |**AnswerQuestion(string question)**|Method|Returns an answer to the question using relevant document context| >caution **Security Warning:** The output produced by this API is generated by a Large Language Model (LLM). As such, the content should be considered untrusted and may include unexpected or unsafe data. It is strongly recommended to properly sanitize or encode all output before displaying it in a user interface, logging, or using it in any security-sensitive context. @@ -65,7 +65,7 @@ The settings are created only through **EmbeddingSettingsFactory**'s **CreateSet ## Usage Examples -#### Example 1: Using PartialContextQuestionProcessor with default embedding. +#### Example 1: Using PartialContextQuestionProcessor with default embedding This example demonstrates how to use the **PartialContextQuestionProcessor** with the built-in embedding on .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows). For setting up the AI client, see the [AI Provider Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-prerequisites%}#ai-provider-setup) section: diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md index d5eb6073..85f6cb8c 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/summarization-processor.md @@ -31,7 +31,7 @@ The **SummarizationProcessor** class enables you to generate concise summaries o |Method|Description| |---|---| -|**Task Summarize(ISimpleTextDocument document)**|Generates a summary of the provided document. The parameter **document** is an **ISimpleTextDocument** containing the text to be summarized.| +|**Task Summarize(SimpleTextDocument document)**|Generates a summary of the provided document. The parameter **document** is an **ISimpleTextDocument** containing the text to be summarized.| |Event|Description| |---|---| diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md index 1cd0b1bb..73ed872f 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/complete-context-question-processor.md @@ -39,7 +39,7 @@ However, if you're working with larger documents or want to optimize token usage |Method|Description| |---|---| -|**public Task AnswerQuestion(ISimpleTextDocument document, string question)**|Answers a question using the provided document. Parameters: **document** - The document containing the text to process, **question** - The question to answer. Returns a task that represents the asynchronous operation. The task result contains the answer to the question.| +|**public Task AnswerQuestion(SimpleTextDocument document, string question)**|Answers a question using the provided document. Parameters: **document** - The document containing the text to process, **question** - The question to answer. Returns a task that represents the asynchronous operation. The task result contains the answer to the question.| >caution **Security Warning:** The output produced by this API is generated by a Large Language Model (LLM). As such, the content should be considered untrusted and may include unexpected or unsafe data. It is strongly recommended to properly sanitize or encode all output before displaying it in a user interface, logging, or using it in any security-sensitive context. diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md index 0a22ae34..25e32191 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md @@ -36,8 +36,8 @@ The **PartialContextQuestionProcessor** is ideal for the following scenarios: |Constructor|Platform|Description| |---|---|---| -|**PartialContextQuestionProcessor(IChatClient chatClient, int modelMaxInputTokenLimit, ISimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| -|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingsStorage embeddingsStorage, int modelMaxInputTokenLimit, ISimpleTextDocument document)**|Any|Creates an instance with custom embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, int modelMaxInputTokenLimit, SimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingsStorage embeddingsStorage, int modelMaxInputTokenLimit, SimpleTextDocument document)**|Any|Creates an instance with custom embeddings storage| > _*Specific_ The .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows) constructor uses **DefaultEmbeddingsStorage** internally, while the cross-platform constructor requires a custom implementation of **IEmbeddingsStorage** as shown in the [Custom IEmbeddingsStorage Setup]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) section. diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md index bc391d94..25363400 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/summarization-processor.md @@ -31,7 +31,7 @@ The **SummarizationProcessor** class enables you to generate concise summaries o |Method|Description| |---|---| -|**Task Summarize(ISimpleTextDocument document)**|Generates a summary of the provided document. The parameter **document** is an **ISimpleTextDocument** containing the text to be summarized.| +|**Task Summarize(SimpleTextDocument document)**|Generates a summary of the provided document. The parameter **document** is an **ISimpleTextDocument** containing the text to be summarized.| |Event|Description| |---|---| From b0786198239ea2e2102266589fecc311b94d9b8b Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Thu, 6 Nov 2025 14:32:40 +0200 Subject: [PATCH 35/36] Flow - Addressed PartialContextProcessor API changes. --- _config.yml | 6 ++ .../custom-partialcontextquestionprocessor.md | 58 +++++++++++++++++++ .../getting-started.md | 4 +- .../partial-context-question-processor.md | 50 +++++++--------- 4 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md diff --git a/_config.yml b/_config.yml index 60272e1c..1949327b 100644 --- a/_config.yml +++ b/_config.yml @@ -91,6 +91,12 @@ navigation: libraries/radwordsprocessing/editing/gen-ai-powered-document-insights: title: GenAI-powered Document Insights position: 7 + libraries/radwordsprocessing/features/gen-ai-powered-document-insights/partial-context-question-processor: + title: PartialContextQuestionProcessor + position: 5 + libraries/radwordsprocessing/features/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor: + title: Custom PartialContextQuestionProcessor + position: 6 libraries/radwordsprocessing/concepts: title: Concepts position: 6 diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md new file mode 100644 index 00000000..c6f824a2 --- /dev/null +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/custom-partialcontextquestionprocessor.md @@ -0,0 +1,58 @@ +--- +title: Custom PartialContextQuestionProcessor +description: Customize the PartialContextQuestionProcessor by providing a custom IContextRetriever and interface implementations for fragmentation, embedding, similarity, token counting, and retrieval. +page_title: Custom PartialContextQuestionProcessor +slug: radwordsprocessing-features-gen-ai-powered-document-insights-custom-partialcontextquestionprocessor +tags: ai, context, retriever, embeddings, customization, word, flow, document, partial, processor, question, insights, docx +published: True +position: 6 +--- + +# Custom PartialContextQuestionProcessor + +This article explains how to create a custom **PartialContextQuestionProcessor** configuration by supplying your own **IContextRetriever** and related interface implementations. You can tailor every step: splitting text, producing embeddings, ranking relevance, enforcing token limits, formatting context, and retrieving it efficiently to optimize performance, cost, accuracy, or compliance. + +When you need full control over fragmentation, embedding, similarity ranking, and retrieval, use the constructor that accepts an **IContextRetriever**: + +```csharp +PartialContextQuestionProcessor( + IChatClient chatClient, + IContextRetriever contextRetriever, + IEmbeddingSettings settings, + SimpleTextDocument document) +``` + +This constructor gives you end‑to‑end control over how document text is fragmented, embedded, stored, and later selected (ranked) as context for a question, forming your custom **PartialContextQuestionProcessor** pipeline. + +## Interfaces + +All extension points live in **Telerik.Documents.AI.Core** (as abstractions) with their default implementations in **Telerik.Documents.AI.RAG**: + +| Interface | Responsibility | Used By | +|---|---|---| +| **IContextFragmentsManager** | Splits raw document text into token-bounded semantic fragments (pages, sections, paragraphs) | Fragmentation stage | +| **IEmbedder** | Converts fragments into embeddings/vectors for similarity comparison | Embedding stage | +| **ISimilarityCalculator** | Scores fragment relevance against a question/prompt | Ranking stage | +| **ITokensCounter** | Counts tokens for limits enforcement (fragment size, total context) | Throughout pipeline | +| **IEmbeddingSettings** | Provides token & size limits + formatting hints | Configuration source | +| **IContextRetriever** | Orchestrates loading text, preparing embeddings, and returning best context | Retrieval stage | +| **ISupportJsonEmbeddings** / **ISupportPlainTextEmbeddings** | Control how context is formatted for the model (JSON vs plain text) | Formatting stage | +| **IFragments** / **IFragment** | Data structures representing chunk collections and individual chunks | Shared across stages | + +### Life Cycle +1. **SetContextAsync(text, embeddingTokenSize)** - Text is fragmented (**IContextFragmentsManager**), tokens checked (**ITokensCounter**), embeddings generated (**IEmbedder**), and stored. +2. Question time (**GetContextAsync(question)**) - Similarity scores computed (**ISimilarityCalculator**), top fragments selected within limits, context formatted (plain or JSON). +3. Processor sends formatted context + question via **IChatClient** and returns model answer. + +## Custom Implementation + +The example below constructs a custom **PartialContextQuestionProcessor** by supplying a **DefaultContextRetriever** that mixes user implementations (custom **IContextFragmentsManager** and **IEmbedder**) with default components (**DefaultSimilarityCalculator**, **DefaultTokensCounter**, and the retriever's own orchestration). This hybrid approach lets you optimize the most impactful stages (fragmentation + embedding) without rewriting the entire retrieval pipeline. + +>note **DefaultEmbedder** is only available on **net8-windows** and higher. On other target frameworks you must supply your own **IEmbedder** (as shown below with [CustomOpenAIEmbedder]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder)). + + +## See Also +* [PartialContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}) +* [SummarizationProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-summarization-processor%}) +* [CompleteContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-complete-context-question-processor%}) +* [GenAI-powered Document Insights Overview]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-overview%}) \ No newline at end of file diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/getting-started.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/getting-started.md index d213b7b5..86bb9076 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/getting-started.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/getting-started.md @@ -14,7 +14,7 @@ The following example demonstrates how to use the GenAI-powered Document Insight >note The following code snippet is valid for Azure Open AI 9.3. The specific **IChatClient** initialization may be different according to the specific version. ->important For .NET {{site.mindotnetversion}}+ (Target OS Windows) with [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows), an [IEmbeddingsStorage]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) implementation is required for the [PartialContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}). +>important For .NET {{site.mindotnetversion}}+ (Target OS Windows) with [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows), an [IEmbedder]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) implementation is required for the [PartialContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}). #### __[C#] Example 1: Using GenAI-powered Document Insights__ @@ -27,5 +27,5 @@ When you run this code, the AI will process your document, generate a summary, a * [Prerequisites]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-prerequisites%}) * [SummarizationProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-summarization-processor%}) * [PartialContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}) -* [Custom IEmbeddingsStorage Implementation]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) +* [Custom IEmbedder Implementation]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) * [CompleteContextQuestionProcessor]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-complete-context-question-processor%}) diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md index 25e32191..a1aa04b4 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md @@ -3,7 +3,7 @@ title: PartialContextQuestionProcessor description: PartialContextQuestionProcessor class enables you to ask questions about a Word document and receive answers based on the most relevant parts of the document content. page_title: PartialContextQuestionProcessor slug: radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor -tags: ai, document, analysis, question, processor, partial, context, embeddings +tags: ai, document, analysis, question, processor, partial, context, embeddings, flow, docx, word published: True position: 4 --- @@ -36,69 +36,63 @@ The **PartialContextQuestionProcessor** is ideal for the following scenarios: |Constructor|Platform|Description| |---|---|---| -|**PartialContextQuestionProcessor(IChatClient chatClient, int modelMaxInputTokenLimit, SimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| -|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingsStorage embeddingsStorage, int modelMaxInputTokenLimit, SimpleTextDocument document)**|Any|Creates an instance with custom embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbeddingSettings settings, SimpleTextDocument document)**|_Specific*_ |Creates an instance with built-in embeddings storage| +|**PartialContextQuestionProcessor(IChatClient chatClient, IEmbedder embedder, IEmbeddingSettings settings, SimpleTextDocument document)**|Any|Creates an instance with custom embedding| +|**PartialContextQuestionProcessor(IChatClient chatClient, IContextRetriever contextRetriever, IEmbeddingSettings settings, SimpleTextDocument document)**|Any|Allows [custom **PartialContextQuestionProcessor** configuration]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-custom-partialcontextquestionprocessor%})| -> _*Specific_ The .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows) constructor uses **DefaultEmbeddingsStorage** internally, while the cross-platform constructor requires a custom implementation of **IEmbeddingsStorage** as shown in the [Custom IEmbeddingsStorage Setup]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) section. +> _*Specific_ The .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows) constructor uses a default **IEmbedder** internally, while the cross-platform and .NET Framework constructor requires a custom implementation of **IEmbedder** as shown in the [Custom IEmbedder Setup]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) section. ### Properties and Methods |Member|Type|Description| |---|---|---| -|**Settings**|Property|Gets the **PartialContextProcessorSettings** for configuring the AI process| +|**Settings**|Property|Gets the *readonly* [IEmbeddingSettings]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#iembeddingsettings) that configure the AI process| |**AnswerQuestion(string question)**|Method|Returns an answer to the question using relevant document context| >caution **Security Warning:** The output produced by this API is generated by a Large Language Model (LLM). As such, the content should be considered untrusted and may include unexpected or unsafe data. It is strongly recommended to properly sanitize or encode all output before displaying it in a user interface, logging, or using it in any security-sensitive context. -### PartialContextProcessorSettings +### IEmbeddingSettings -The settings class provides configuration options for the question-answering process: +The settings are created only through **EmbeddingSettingsFactory**'s **CreateSettingsForTextDocuments** method and can only be passed to the constructor of the processor. They expose configuration options for the question-answering process through the following properties: * **ModelMaxInputTokenLimit**: Maximum input token limit the model allows -* **TokenizationEncoding**: Tokenization encoding used -* **ModelId**: ID of the AI model -* **MaxNumberOfEmbeddingsSent**: Maximum number of context chunks sent (default: 30) -* **EmbeddingTokenSize**: Size in tokens of each context chunk (default: 300) +* **TokenizationEncoding**: Tokenization encoding used (default: **null**) +* **ModelId**: ID of the AI model (default: **null**) +* **MaxNumberOfEmbeddingsSent**: Maximum number of context chunks sent (default: **null**) +* **EmbeddingTokenSize**: Size in tokens of each context chunk (default: **null**) + + ## Usage Examples -#### Example 1: Using PartialContextQuestionProcessor with default embeddings storage. +#### Example 1: Using PartialContextQuestionProcessor with default embedding. -This example demonstrates how to use the **PartialContextQuestionProcessor** with the built-in embeddings storage on .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows). For setting up the AI client, see the [AI Provider Setup]({%slug radpdfprocessing-features-gen-ai-powered-document-insights-prerequisites%}#ai-provider-setup) section: +This example demonstrates how to use the **PartialContextQuestionProcessor** with the built-in embedding on .NET {{site.mindotnetversion}}+ (Target OS Windows) + [Packages for .NET {{site.mindotnetversion}} and .NET {{site.maxdotnetversion}} for Windows]({%slug available-nuget-packages%}#packages-for-net-framework-and-net-{{site.mindotnetversion}}-and-net-{{site.maxdotnetversion}}-for-windows). For setting up the AI client, see the [AI Provider Setup]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-prerequisites%}#ai-provider-setup) section: -#### Example 2: Using PartialContextQuestionProcessor with Custom Embeddings (.NET Standard) +#### Example 2: Using PartialContextQuestionProcessor with Custom IEmbedder -This example demonstrates how to use the **PartialContextQuestionProcessor** with a custom embeddings storage implementation as described in the [Custom IEmbeddingsStorage Setup]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembeddingsstorage) section: +This example demonstrates how to use the **PartialContextQuestionProcessor** with a custom IEmbedder implementation as described in the [Implementing Custom IEmbedder]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-partial-context-question-processor%}#implementing-custom-iembedder) section: - + ### Implementing custom IEmbeddingsStorage A sample custom implementation for the OllamaEmbeddingsStorage is shown in the below code snippet: >note Requires installing the following NuGet packages: -> * **LangChain** -> * **LangChain.Databases.Sqlite** -> * **Microsoft.Extensions.AI.Ollama** +> * **Azure.AI.OpenAI** +> * **Microsoft.Extensions.AI.OpenAI** (v9.3) > * **Telerik.Windows.Documents.AIConnector** > * **Telerik.Windows.Documents.Flow** -1. Install Ollama from [ollama.com](https://ollama.com/). -2. Pull the model you want to use. -3. Start the Ollama server. - - + #### Example 3: Processing Specific Pages -#### Example 4: Optimizing Embeddings Settings - - - ## See Also * [GenAI-powered Document Insights Overview]({%slug radwordsprocessing-features-gen-ai-powered-document-insights-overview%}) From 98fb580506cbba7719efdbc7214c31ad89001b1f Mon Sep 17 00:00:00 2001 From: "PROGRESS\\ykaraman" Date: Thu, 6 Nov 2025 14:46:28 +0200 Subject: [PATCH 36/36] Fixed Mistakes for Flow and PDF GenAI --- .../gen-ai-powered-document-insights/prerequisites.md | 4 ++-- .../partial-context-question-processor.md | 4 ++-- .../editing/gen-ai-powered-document-insights/prerequisites.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md index 6d182905..cd9d8877 100644 --- a/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radpdfprocessing/features/gen-ai-powered-document-insights/prerequisites.md @@ -37,8 +37,8 @@ In addition to the [standard RadPdfProcessing references]({%slug radpdfprocessin > __*__ The **Documents.AIConnector** NuGet package internally depends on: > ->* **Telerik.(Windows).Documents.AI.Core** ->* **Telerik.(Windows).Documents.AI.RAG** +>* **Telerik.Documents.AI.Core** +>* **Telerik.Documents.AI.RAG** > * **Microsoft.Extensions.AI.Abstractions** > * **SharpToken** > diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md index a1aa04b4..94ff217b 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/partial-context-question-processor.md @@ -77,9 +77,9 @@ This example demonstrates how to use the **PartialContextQuestionProcessor** wit -### Implementing custom IEmbeddingsStorage +### Implementing custom IEmbedder -A sample custom implementation for the OllamaEmbeddingsStorage is shown in the below code snippet: +A sample custom CustomOpenAIEmbedder implementation for the IEmbedder is shown in the below code snippet: >note Requires installing the following NuGet packages: > * **Azure.AI.OpenAI** diff --git a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md index 11665c93..0d3fad1f 100644 --- a/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md +++ b/libraries/radwordsprocessing/editing/gen-ai-powered-document-insights/prerequisites.md @@ -37,8 +37,8 @@ In addition to the [standard RadWordsProcessing references]({%slug radwordsproce > __*__ The **Documents.AIConnector** NuGet package internally depends on: > ->* **Telerik.(Windows).Documents.AI.Core** ->* **Telerik.(Windows).Documents.AI.RAG** +>* **Telerik.Documents.AI.Core** +>* **Telerik.Documents.AI.RAG** > * **Microsoft.Extensions.AI.Abstractions** > * **SharpToken** >