From dd16d4e228997a96ac5765c6bbd33eada2cacdd3 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Mon, 11 Mar 2024 19:42:49 -0400 Subject: [PATCH 01/13] Make URLs slightly cleaner --- src/models/configuration.js | 15 +++++++++++++++ src/utils/formUtils.js | 21 +++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/models/configuration.js b/src/models/configuration.js index 27f370c..1ba5950 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -99,3 +99,18 @@ export const schema = z.object({ }); /** @typedef {z.infer} Configuration */ + +export const defaultConfig = { + rotatePage: false, + paperRotation90: false, + cropMarks: false, + cutMarks: false, + pdfEdgeMarks: false, + mainForeEdgePaddingPt: 0, + bindingEdgePaddingPt: 0, + topEdgePaddingPt: 0, + bottomEdgePaddingPt: 0, + sigLength: 4, // Specific to standard + foreEdgePaddingPt: 0, // specific to wacky small + flyleafs: 1, +}; diff --git a/src/utils/formUtils.js b/src/utils/formUtils.js index a477b5b..dcdbbb4 100644 --- a/src/utils/formUtils.js +++ b/src/utils/formUtils.js @@ -2,7 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -import { schema } from '../models/configuration'; +import { defaultConfig, schema } from '../models/configuration'; import { clearLocalSettings, getLocalSettings, setLocalSettings } from './localStorageUtils'; import { renderFormFromSettings, renderInfoBox, renderPageCount, renderWacky } from './renderUtils'; import { clearUrlParams, setUrlParams, toUrlParams, updateWindowLocation } from './uri'; @@ -47,7 +47,8 @@ const fromFormToConfiguration = (form) => * @param { import("../models/configuration").Configuration } configuration The configuration to set */ const setConfigurationToUrl = (configuration) => { - updateWindowLocation(setUrlParams(window.location.href, configuration)); + const cleanedConfig = removeDefaults(configuration); + updateWindowLocation(setUrlParams(window.location.href, cleanedConfig)); }; /** @@ -108,3 +109,19 @@ export const resetForm = () => { updateWindowLocation(clearUrlParams(window.location.href)); return loadForm(); }; + +/** + * Returns a version of the configuration with any items set to default values removed + * to keep url strings a little cleaner. + * @param { import("../models/configuration").Configuration } configuration The form to save + * @returns { import("../models/configuration").Configuration } The updated configuration set + */ +function removeDefaults(configuration) { + const cleaned = {}; + Object.keys(configuration).forEach((key) => { + if (defaultConfig[key] != configuration[key]) { + cleaned[key] = configuration[key]; + } + }); + return cleaned; +} From 421a617a38830574d62346f630b2fa66170c8376 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 12 Mar 2024 13:42:59 -0400 Subject: [PATCH 02/13] Add more defaults and move handling to a more logical location --- src/models/configuration.js | 19 +++---------------- src/utils/formUtils.js | 21 ++------------------- src/utils/uri.js | 7 +++++++ 3 files changed, 12 insertions(+), 35 deletions(-) diff --git a/src/models/configuration.js b/src/models/configuration.js index 1ba5950..ab3c71a 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -94,23 +94,10 @@ export const schema = z.object({ foreEdgePaddingPt: urlSafe(z.coerce.number()).default(0), // specific to wacky small wackySpacing, // specific to wacky small flyleafs: urlSafe(z.coerce.number()).default(1), - paperSizeCustomWidth: urlSafe(z.coerce.number()), - paperSizeCustomHeight: urlSafe(z.coerce.number()), + paperSizeCustomWidth: urlSafe(z.coerce.number()).default(0), + paperSizeCustomHeight: urlSafe(z.coerce.number()).default(0), }); /** @typedef {z.infer} Configuration */ -export const defaultConfig = { - rotatePage: false, - paperRotation90: false, - cropMarks: false, - cutMarks: false, - pdfEdgeMarks: false, - mainForeEdgePaddingPt: 0, - bindingEdgePaddingPt: 0, - topEdgePaddingPt: 0, - bottomEdgePaddingPt: 0, - sigLength: 4, // Specific to standard - foreEdgePaddingPt: 0, // specific to wacky small - flyleafs: 1, -}; +export const defaultConfig = schema.parse({}); diff --git a/src/utils/formUtils.js b/src/utils/formUtils.js index dcdbbb4..a477b5b 100644 --- a/src/utils/formUtils.js +++ b/src/utils/formUtils.js @@ -2,7 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -import { defaultConfig, schema } from '../models/configuration'; +import { schema } from '../models/configuration'; import { clearLocalSettings, getLocalSettings, setLocalSettings } from './localStorageUtils'; import { renderFormFromSettings, renderInfoBox, renderPageCount, renderWacky } from './renderUtils'; import { clearUrlParams, setUrlParams, toUrlParams, updateWindowLocation } from './uri'; @@ -47,8 +47,7 @@ const fromFormToConfiguration = (form) => * @param { import("../models/configuration").Configuration } configuration The configuration to set */ const setConfigurationToUrl = (configuration) => { - const cleanedConfig = removeDefaults(configuration); - updateWindowLocation(setUrlParams(window.location.href, cleanedConfig)); + updateWindowLocation(setUrlParams(window.location.href, configuration)); }; /** @@ -109,19 +108,3 @@ export const resetForm = () => { updateWindowLocation(clearUrlParams(window.location.href)); return loadForm(); }; - -/** - * Returns a version of the configuration with any items set to default values removed - * to keep url strings a little cleaner. - * @param { import("../models/configuration").Configuration } configuration The form to save - * @returns { import("../models/configuration").Configuration } The updated configuration set - */ -function removeDefaults(configuration) { - const cleaned = {}; - Object.keys(configuration).forEach((key) => { - if (defaultConfig[key] != configuration[key]) { - cleaned[key] = configuration[key]; - } - }); - return cleaned; -} diff --git a/src/utils/uri.js b/src/utils/uri.js index 51092f6..33849ce 100644 --- a/src/utils/uri.js +++ b/src/utils/uri.js @@ -2,6 +2,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +import { defaultConfig } from '../models/configuration'; + /** * Gets parameters from a URL. * @param { string } url The URL to get the params from @@ -26,6 +28,11 @@ export const setUrlParams = (url, params) => { continue; } + if (value === defaultConfig[key]) { + urlRepresentation.searchParams.delete(key); + continue; + } + urlRepresentation.searchParams.set(key, String(value)); } From e83899285a6657d566177d10c9986fad883a1476 Mon Sep 17 00:00:00 2001 From: Cocoa Date: Tue, 12 Mar 2024 22:11:12 -0400 Subject: [PATCH 03/13] Fix customSig param and bump version number --- package.json | 2 +- src/models/configuration.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fd3fccc..b4f5596 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bookbinder", - "version": "1.3.7", + "version": "1.4.0", "description": "An app to rearrange PDF pages for printing for bookbinding", "type": "module", "scripts": { diff --git a/src/models/configuration.js b/src/models/configuration.js index ab3c71a..07a1fc0 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -90,7 +90,7 @@ export const schema = z.object({ bottomEdgePaddingPt: urlSafe(z.coerce.number()).default(0), sigFormat, sigLength: urlSafe(z.coerce.number()).default(4), // Specific to standard - customSigLength: urlSafe(commaSeparatedNumberList).default([]), // Specific to custom. + customSigLength: urlSafe(commaSeparatedNumberList).default(null), // Specific to custom. foreEdgePaddingPt: urlSafe(z.coerce.number()).default(0), // specific to wacky small wackySpacing, // specific to wacky small flyleafs: urlSafe(z.coerce.number()).default(1), From 3f578d7edbc0025a0d1b0f692b1821a00246b3f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Dalecki?= Date: Fri, 12 Apr 2024 23:28:58 +0200 Subject: [PATCH 04/13] #57 adds marking for sewing --- src/book.js | 26 ++++++++++++++++++++- src/html/page_layout.html | 38 ++++++++++++++++++++++++++++++ src/models/configuration.js | 5 ++++ src/utils/drawing.js | 46 ++++++++++++++++++++++++++++++++++++- src/utils/formUtils.js | 5 ++++ src/utils/renderUtils.js | 10 ++++++++ 6 files changed, 128 insertions(+), 2 deletions(-) diff --git a/src/book.js b/src/book.js index af666c1..3f02094 100644 --- a/src/book.js +++ b/src/book.js @@ -10,7 +10,7 @@ import { PAGE_LAYOUTS, PAGE_SIZES } from './constants.js'; import { updatePageLayoutInfo } from './utils/renderUtils.js'; import JSZip from 'jszip'; import { loadConfiguration } from './utils/formUtils.js'; -import { drawFoldlines, drawCropmarks, drawSpineMarks } from './utils/drawing.js'; +import { drawFoldlines, drawCropmarks, drawSpineMarks, drawFrenchStichMarks } from './utils/drawing.js'; import { calculateDimensions, calculateLayout } from './utils/layout.js'; import { interleavePages, embedPagesInNewPdf } from './utils/pdf.js'; @@ -36,6 +36,15 @@ import { interleavePages, embedPagesInNewPdf } from './utils/pdf.js'; * @property {boolean} [isLeftPage]: isLeftPage, */ +/** + * @typedef FrenchMarks + * @type {object} + * @property {boolean} isEnabled - specifies if marks should be drawed, + * @property {number} amount - amount of places to saw. + * @property {number} marginPt - distance from the end of page to a kettle point, + * @property {number} spacingPt - distance between two seing points + */ + export class Book { /** @param { import("./models/configuration.js").Configuration } configuration */ constructor(configuration) { @@ -80,6 +89,12 @@ export class Book { this.page_positioning = configuration.pagePositioning; this.flyleafs = configuration.flyleafs; this.cropmarks = configuration.cropMarks; + this.frenchStichLink = { + isEnabled: configuration.frenchStitchLinkEnabled, + amount: configuration.frenchStitchesAmount, + marginPt: configuration.frenchStitchLinkMarginPt, + spacingPt: configuration.frenchStitchesSpacingPt + }; this.pdfEdgeMarks = configuration.pdfEdgeMarks; this.cutmarks = configuration.cutMarks; this.format = configuration.sigFormat; @@ -496,6 +511,7 @@ export class Book { cutmarks: this.cutmarks, alt: config.alt, side2flag: side2flag, + frenchStichLink: this.frenchStichLink }); block_start += offset; block_end += offset; @@ -519,6 +535,7 @@ export class Book { * @param {Position[]} config.positions: list of page positions * @param {PDFDocument} [config.outPDF]: PDF to write to, in addition to PDF created w/ `outname` (or null) * @param {(PDFEmbeddedPage|string)[]} [config.embeddedPages] : pages already embedded in the `destPdf` to assemble in addition (or null) + * @param {FrenchMarks} config.frenchStichLink: config for drawing FrenchMarks */ draw_block_onto_page(config) { @@ -533,14 +550,17 @@ export class Book { const cutmarks = config.cutmarks; const alt = config.alt; let side2flag = config.side2flag; + const frenchStichLink = config.frenchStichLink; const block = config.embeddedPages.slice(block_start, block_end); const currPage = outPDF.addPage(papersize); + const frenchPoints = frenchStichLink.isEnabled ? drawFrenchStichMarks(papersize, frenchStichLink.amount, frenchStichLink.marginPt, frenchStichLink.spacingPt) : []; const cropLines = cutmarks ? drawCropmarks(papersize, this.per_sheet) : []; const foldLines = foldmarks ? drawFoldlines(side2flag, this.duplexrotate, papersize, this.per_sheet) : []; const drawLines = [...cropLines, ...foldLines]; + const drawPoints = [ ...frenchPoints]; block.forEach((page, i) => { if (page == 'b' || page === undefined) { @@ -567,6 +587,10 @@ export class Book { currPage.drawLine(line); }); + drawPoints.forEach((point) => { + currPage.drawCircle(point); + }) + if (alt) { side2flag = !side2flag; } diff --git a/src/html/page_layout.html b/src/html/page_layout.html index 4b55021..6e06cef 100644 --- a/src/html/page_layout.html +++ b/src/html/page_layout.html @@ -81,6 +81,44 @@

Page Layout

+ + + +
+ Detailed settings for french link stitch + + + pt
+ + +
+ + + pt
+ +
+
+
+
White Space Manipulation. All values are in points, relative to original document.

1 diff --git a/src/models/configuration.js b/src/models/configuration.js index 27f370c..5a01e04 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -96,6 +96,11 @@ export const schema = z.object({ flyleafs: urlSafe(z.coerce.number()).default(1), paperSizeCustomWidth: urlSafe(z.coerce.number()), paperSizeCustomHeight: urlSafe(z.coerce.number()), + + frenchStitchLinkEnabled: urlSafe(coercedBoolean).default(false), + frenchStitchLinkMarginPt: urlSafe(z.coerce.number()).default(72), + frenchStitchesAmount: urlSafe(z.coerce.number()).default(3), + frenchStitchesSpacingPt: urlSafe(z.coerce.number()).default(36) }); /** @typedef {z.infer} Configuration */ diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 9b366c8..791100e 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -1,5 +1,5 @@ import { LINE_LEN } from '../constants'; -import { rgb } from '@cantoo/pdf-lib'; +import { rgb, grayscale } from '@cantoo/pdf-lib'; /** * @typedef Point @@ -17,6 +17,15 @@ import { rgb } from '@cantoo/pdf-lib'; * @property {number[]} [dashArray] - sequence of dash and gap lengths to be repeated for a dashed line */ +/** + * @typedef Point + * @property {number} x, + * @property {number} y, + * @property {number} size, + * @property {Grayscale|RGB|CMYK} color, + * + */ + /** * @param {boolean} side2flag - whether we're on the back or not. * @param {boolean} duplexrotate - if alternate sides are rotated or not @@ -112,6 +121,41 @@ export function drawCropmarks(papersize, per_sheet) { return lines; } +/** + * @param {number[]} papersize - paper dimensions + * @param {number} amount - amount of sewing crosses. + * @param {number} marginPt - distance from the end of sheet of paper to kettle mark + * @param {number} spacingPt - distance between two points in a single sewwing cross. + * @returns {Point[]} + */ +export function drawFrenchStichMarks(papersize, amount, marginPt, spacingPt) { + console.log("French marking!"); + const [width, height] = papersize; + + const y = height * 0.5; + const commonCircleValues = {y: y, size: 1, color: grayscale(0.0)} + + const workingWidth = width - 2 * marginPt; + const spaceBettwenPoints = workingWidth / (amount + 1); + + let sewingPoints = []; + + for (let index = 1; index <= amount ; index++) { + const halfOfSpaceing = spacingPt / 2; + sewingPoints.push( + {x: marginPt + spaceBettwenPoints * index + halfOfSpaceing, ...commonCircleValues}, + {x: marginPt + spaceBettwenPoints * index - halfOfSpaceing, ...commonCircleValues} + ) + + } + + return [ + { x : marginPt, ...commonCircleValues}, + { x : width - marginPt, ...commonCircleValues }, + ...sewingPoints + ]; +} + /** * @param {import("../book.js").PageInfo} sigDetails - page info object * @param {import("../book.js").Position} position - position info object diff --git a/src/utils/formUtils.js b/src/utils/formUtils.js index a477b5b..9ea9517 100644 --- a/src/utils/formUtils.js +++ b/src/utils/formUtils.js @@ -40,6 +40,11 @@ const fromFormToConfiguration = (form) => flyleafs: form.get('flyleafs'), paperSizeCustomWidth: form.get('paper_size_custom_width'), paperSizeCustomHeight: form.get('paper_size_custom_height'), + + frenchStitchLinkEnabled: form.get('add_french_link_stich_checkbox'), + frenchStitchLinkMarginPt: form.get('french_link_stitch_margin_pt'), + frenchStitchesAmount: form.get('french_link_stitch_amount_pt'), + frenchStitchesSpacingPt: form.get('french_link_stitch_space_pt') }); /** diff --git a/src/utils/renderUtils.js b/src/utils/renderUtils.js index b627be1..93f6e31 100644 --- a/src/utils/renderUtils.js +++ b/src/utils/renderUtils.js @@ -198,6 +198,16 @@ export function renderFormFromSettings(configuration) { `input[name="wacky_spacing"][value="${configuration.wackySpacing}"]` ).checked = true; + // Set french link stitches settings + document.querySelector('input[name="add_french_link_stich_checkbox"]').checked = + configuration.frenchStitchLinkEnabled; + document.querySelector('input[name="french_link_stitch_margin_pt"]').value = + configuration.frenchStitchLinkMarginPt; + document.querySelector('input[name="french_link_stitch_amount_pt"]').value = + configuration.frenchStitchesAmount; + document.querySelector('input[name="french_link_stitch_space_pt"]').value = + configuration.frenchStitchesSpacingPt; + // Set freeform inputs document.querySelector('input[name="main_fore_edge_padding_pt"]').value = configuration.mainForeEdgePaddingPt; From 4a34236bbdb0a6c9af4bf555ab34939631748ba3 Mon Sep 17 00:00:00 2001 From: MikDal002 Date: Sat, 13 Apr 2024 21:41:54 +0200 Subject: [PATCH 05/13] Update configuration.js --- src/models/configuration.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/configuration.js b/src/models/configuration.js index ec1a9d1..aa35ee1 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -101,7 +101,7 @@ export const schema = z.object({ frenchStitchesSpacingPt: urlSafe(z.coerce.number()).default(36), paperSizeCustomWidth: urlSafe(z.coerce.number()).default(0), - paperSizeCustomHeight: urlSafe(z.coerce.number()).default(0) + paperSizeCustomHeight: urlSafe(z.coerce.number()).default(0), }); /** @typedef {z.infer} Configuration */ From 645b5453566ca4b6a02ba38f62c3964a4496fe6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Dalecki?= Date: Mon, 15 Apr 2024 19:08:15 +0200 Subject: [PATCH 06/13] Rename french to just sewing --- public/img/sewing_settings_explanation.png | Bin 0 -> 54866 bytes src/book.js | 26 +++++++++--------- src/html/page_layout.html | 29 +++++++++++---------- src/models/configuration.js | 8 +++--- src/utils/drawing.js | 13 +++++---- src/utils/formUtils.js | 8 +++--- src/utils/renderUtils.js | 16 ++++++------ 7 files changed, 50 insertions(+), 50 deletions(-) create mode 100644 public/img/sewing_settings_explanation.png diff --git a/public/img/sewing_settings_explanation.png b/public/img/sewing_settings_explanation.png new file mode 100644 index 0000000000000000000000000000000000000000..be4eb91d31be6d0920318de56d17b5d4cc82abc4 GIT binary patch literal 54866 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 OX{qa}6{(!P{{I2 { if (page == 'b' || page === undefined) { diff --git a/src/html/page_layout.html b/src/html/page_layout.html index 6e06cef..26f391a 100644 --- a/src/html/page_layout.html +++ b/src/html/page_layout.html @@ -82,39 +82,40 @@

Page Layout

- +
- Detailed settings for french link stitch + Detailed settings for sewing + Look at the image below. - + pt
- +
- + pt
- + sewing image
diff --git a/src/models/configuration.js b/src/models/configuration.js index 5a01e04..501ef4a 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -97,10 +97,10 @@ export const schema = z.object({ paperSizeCustomWidth: urlSafe(z.coerce.number()), paperSizeCustomHeight: urlSafe(z.coerce.number()), - frenchStitchLinkEnabled: urlSafe(coercedBoolean).default(false), - frenchStitchLinkMarginPt: urlSafe(z.coerce.number()).default(72), - frenchStitchesAmount: urlSafe(z.coerce.number()).default(3), - frenchStitchesSpacingPt: urlSafe(z.coerce.number()).default(36) + sewingMarksEnabled: urlSafe(coercedBoolean).default(false), + sewingMarksMarginPt: urlSafe(z.coerce.number()).default(72), + sewingMarksAmount: urlSafe(z.coerce.number()).default(3), + sewingMarksTapeWidthPt: urlSafe(z.coerce.number()).default(36) }); /** @typedef {z.infer} Configuration */ diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 791100e..94b7ed1 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -125,26 +125,25 @@ export function drawCropmarks(papersize, per_sheet) { * @param {number[]} papersize - paper dimensions * @param {number} amount - amount of sewing crosses. * @param {number} marginPt - distance from the end of sheet of paper to kettle mark - * @param {number} spacingPt - distance between two points in a single sewwing cross. + * @param {number} tapeWidthPt - distance between two points in a single sewwing cross. * @returns {Point[]} */ -export function drawFrenchStichMarks(papersize, amount, marginPt, spacingPt) { - console.log("French marking!"); +export function drawSewingMarks(papersize, amount, marginPt, tapeWidthPt) { const [width, height] = papersize; const y = height * 0.5; const commonCircleValues = {y: y, size: 1, color: grayscale(0.0)} const workingWidth = width - 2 * marginPt; - const spaceBettwenPoints = workingWidth / (amount + 1); + const spaceBetweenPoints = workingWidth / (amount + 1); let sewingPoints = []; for (let index = 1; index <= amount ; index++) { - const halfOfSpaceing = spacingPt / 2; + const halfOfTape = tapeWidthPt / 2; sewingPoints.push( - {x: marginPt + spaceBettwenPoints * index + halfOfSpaceing, ...commonCircleValues}, - {x: marginPt + spaceBettwenPoints * index - halfOfSpaceing, ...commonCircleValues} + {x: marginPt + spaceBetweenPoints * index + halfOfTape, ...commonCircleValues}, + {x: marginPt + spaceBetweenPoints * index - halfOfTape, ...commonCircleValues} ) } diff --git a/src/utils/formUtils.js b/src/utils/formUtils.js index 9ea9517..26d3232 100644 --- a/src/utils/formUtils.js +++ b/src/utils/formUtils.js @@ -41,10 +41,10 @@ const fromFormToConfiguration = (form) => paperSizeCustomWidth: form.get('paper_size_custom_width'), paperSizeCustomHeight: form.get('paper_size_custom_height'), - frenchStitchLinkEnabled: form.get('add_french_link_stich_checkbox'), - frenchStitchLinkMarginPt: form.get('french_link_stitch_margin_pt'), - frenchStitchesAmount: form.get('french_link_stitch_amount_pt'), - frenchStitchesSpacingPt: form.get('french_link_stitch_space_pt') + sewingMarksEnabled: form.get('add_sewing_marks_checkbox'), + sewingMarksMarginPt: form.get('sewing_marks_margin_pt'), + sewingMarksAmount: form.get('sewing_marks_amount'), + sewingMarksTapeWidthPt: form.get('sewing_marks_tape_width_pt') }); /** diff --git a/src/utils/renderUtils.js b/src/utils/renderUtils.js index 93f6e31..cc821be 100644 --- a/src/utils/renderUtils.js +++ b/src/utils/renderUtils.js @@ -199,14 +199,14 @@ export function renderFormFromSettings(configuration) { ).checked = true; // Set french link stitches settings - document.querySelector('input[name="add_french_link_stich_checkbox"]').checked = - configuration.frenchStitchLinkEnabled; - document.querySelector('input[name="french_link_stitch_margin_pt"]').value = - configuration.frenchStitchLinkMarginPt; - document.querySelector('input[name="french_link_stitch_amount_pt"]').value = - configuration.frenchStitchesAmount; - document.querySelector('input[name="french_link_stitch_space_pt"]').value = - configuration.frenchStitchesSpacingPt; + document.querySelector('input[name="add_sewing_marks_checkbox"]').checked = + configuration.sewingMarksEnabled; + document.querySelector('input[name="sewing_marks_margin_pt"]').value = + configuration.sewingMarksMarginPt; + document.querySelector('input[name="sewing_marks_amount"]').value = + configuration.sewingMarksAmount; + document.querySelector('input[name="sewing_marks_tape_width_pt"]').value = + configuration.sewingMarksTapeWidthPt; // Set freeform inputs document.querySelector('input[name="main_fore_edge_padding_pt"]').value = From 2e2968bf08084475bc28a75c844133f66296726b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Dalecki?= Date: Mon, 15 Apr 2024 19:17:25 +0200 Subject: [PATCH 07/13] Remove background from image --- public/img/sewing_settings_explanation.png | Bin 54866 -> 56390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/img/sewing_settings_explanation.png b/public/img/sewing_settings_explanation.png index be4eb91d31be6d0920318de56d17b5d4cc82abc4..267ca186aa29dec5d74a6421ecbc14ca17760a0e 100644 GIT binary patch literal 56390 zcmagGcRZDU{621+j3VbCWF7}0dq%d7y>hG&B727HeH6#udqyXl?Ci=8NmeMz9?2$z z?@PTupU>~VUyswnuvfohd7%-FXdvm!uK07GYkp;a<;DTMNW-~ zjD5owybwJwr>*oA$_#3BrZ`wLJ$P!f8WPJ6Ak~*(ZO%~D1za%$4WRj{~e730f&?P z{~s>POQf!$p)oW#IJo$ph6Wc8&hG{eRdntbFo*V0&R_&2qE9J&1=3rLn*ZxPk1paAn7i1*TeU z_7AqeM(#z}8X$aWU_9q0oO(1C=jpUW(UKwjBwl)|n_Tep+*8|S9BIFEFpH=??~C8LH}3v4*ChwKIH2Xr_+ zgt*XEK3wZt*z?1(zCZ3k74KK!ICxUGo~Y^3`4^RvRwi6nTU+~{cNepxl^p``UO5Op)si=)<7FOv71%Y4;6J4JcSi9@5Tj8iX$wjQE-FWMjnYMuU@Cz12YK-2M}D zeoCTX+3Q5`Fb={f917WdGRVWp9P4EfB&&qd?wn49ts$w7Xqfr$c2r4SQ#s6u7=h}6~9SLI)9|FV}o{DGuodTn7X%|(PhQvPDjzPXwXcQZL!8~iiA z`ZC?F5Tcy3;WImV*G}x@^2uKZ;n7(gn|_7pX;iRd#dGuDyx1}GF#eNQR)$r-EVn(B zAPF1I;kx)NcWA<{rgd;&uZKX_Cs@#da*w=;Y%8cKgihLJq$F$KtAkj+tMb<48$17= z0mfEveX>mVHs9J9mC+2k&o$di-~CD(pTHX3ho#+tM(1y|Pss@`uK?%oi^c>mvAwsZ zd>A^iXK_`vWYRa+%cn(mnjA#s&T*=hi52a;!4(3zCvGiaKLYktnQq<)`=NoXYcYR&ckYPKt{49G8Xj1%f3G2;H3T4 ztk+naXAJ+z2Zs@g9WEmI{_C>D6YE>K^a%H zDL>VvU{aBxXWst)e=@S}xa1Dp6`KzI-x4941-WXp!K7PeDrtCPzARKIsgTh;#Eq$& zNDMhS8{xpZHT`*3Vca;IVy7z%LhIi$;)Gm>rDtbzPdD&fu`s}R6{AYt)YjIbs6`G^ z^q_`D4sn=BK{RR|KD^hS?kg+|0SAWAUS45#h7DMYSI&5!jbsW>uIvhP3RfiGo!x8Y zGQR0zVPRqT;(q+=kRX(5+q=D12ctE@%X@qp8$5BciQIQdkQN`_YfY-z&sBjoRi0K2 zwsHg~qdE>Gw?=X_b8@=9>#l%U^T*Tf&+G1rPPNkTDyylVFp5+PLY=;K!!@d+A=WCsU*$0E8o7TngzU3($Lb{62EiDYdC)*@nMtO(nqyaZgDkE zJ;MhNypQrf7Lqy0jNQ8>@B520ZNSgUM^um)QE@PieENtL6T2(9rE^b%Itd??o4dF> z*EzAgzh1$O+I$ak_xASaQc!Vmnq7gc8)@Pd2OANqVu+K1t<$1@HJ`Q5*cJZ0>Op@6 zEXv0u)vVowPz|Y)Wu;zmppAUW2s@M0T;Z?vZfvK6yxXc3j9B^J{A(6jSGMAFr|!03 z?e-J;6%`P?J%iU$RF~p4t!{s`z@J`D0;@)WWF3C%!VGtE|0)-5q{z&1qL6JrqljI}4nAP19`ixWU%ho&<5b;wquYyK@0%$l%=3;=M<(Vl2APp; z{^kxzCyT>ke8e^1)S>Hze}vNb_cRt37B-yQ4)oWksfjS(&D4+`(f5=6=e$O9#ngB( z^u0de{ik&@h%9Q?z}H2lOH;(V>Z)^7=69axH5SDrgs$Yv|i@G?1KN;g!+m%RI- zCrFi*hLt_5i?u(9E{)GD@M)PDB}1>cHYZzdmT?Ly9Mp$zzgo81Ev9O$=A|Ss7+#*V zf!>z~^5Zo=LzyC6p!q0}Y*r+b?=*;zbh4?I6p@c~Ku1c6K8$NG&-u;-H%y#}Aon#9 zzPe9`HwXX3!ilKb0(#ikgS%L~p5lK;EwACt9Sz6MAU6(Ot5Y&2ugE=d|C6!N%=g$j z;^OYiQGodB=t${G2@{F%AX|ui`S->M<=9!9NDob(%OoX51#;LqIy$mZ`tauA(_F#B zSIP%<5K3_8#?|MA&Mlh_9hT25BN@d%pT2_=A)!2`)oIF{B8*`_975s0wR_H~vm7eA zLp`GZh%-J0`FAA$;)$Vd<5~|tiJ9K*l)$uti%ikpf~br;Qw;&z01s>`nt4_~@J~gp zSE!b(P$XcIlLF>0TE%Bg{Wj}+fB$~t&umJ4*0TMFQz%H12+!^m?n<8G<142ZA4#n$ zd2hb@)Vt}Sw8O?kMPkpAT=hc=3JT2^_dz*kok}G^e}Dfa_II5-XnRlOl3;KU=CHv( zYqq6nr|o>h#-m(O@WlLHPQ*z)h#j-&YnP}9MG^mf%?Nk&8x=Bkfxa;LPhrO4MW zR5R?&>`go`3%Z`L*JoZ>j+g4S=-y5t9sKjzHrgd+VCh~mDyhLK%4S`lhBRK(^i}SV zk;4w22@;t&(rEfKW>YK{gP4MSk$a}0srk!c<}f^Bbqcx9VtpQ`48dO4oHWYQ{`THG z4psU?^B$!mpIKL)ZDmgOcCC}~yg}Z(!SH&WQszyeV9!v6x01zj$d1xT-zh~0Uo1It zx6_C>Z7a6Dsqg%dF6%Iw;4)aDuunzzd6`S_^g(lkWbN8hNnWcE2rn!Fq;)zxvoJOo8^0I*v}f^ zGbXLFBh(9g`nOZOtcUgx6j74qsHyKUDqBhY+_4m;xg^=i`F_KDmID=zuba~{x>?v6 zZ#{&+#>cHVs2HJo@_;wZ;N_IPCL3nZh*`BHtueC&f8z=Ok(rRXiRy5l(5=%AjjKZt zZ4pKGS+vimHalDU3WY&s*{91iOp_jFor4!D$VrNk0ObA$BXr;PwxrNqbdVnH%)DsN zfY}F9<%tWCaetTjE3n~DqXnKN5N(z$QaMTvtn@vk8$yYfbBre=@F+f=0g>o3_IY_u zYWUO^lqV;{RE&{0mi@?Igyi1N?w7$o382BI2=irgn1o<%Ph}cMCzba0dzc9QKHYP7 zcUMxr-vkozku|a9g#`#&fuT2s6L?PHp}`YID92V!>%wGT-$EOnT-V!jltG<|S=9?F|Aj6hzSiGVlB@rsq>iMO}HEcm`Tb<8PIbK z4SGE{_qJ^-UEHC1*`)yn1&ifymDc+rG=A<~_QPLN>xOZsW2iz_ZM>`3rG(5VAt8VM z)bW9WI~T|JXTX0>rp~bFH~nS#NrcckWkqn@ro2k-E=4hyMilMXFF|=^<*gYxBzcWI zR7ggK&sBoGi!lLJvd_Li`C!P>Wk-9v9NpKKpc`qrd&jmyDi%B-rofq-sRG}tliAbPgz!Z?R|<;mCY!*w!VL)48wo{@@7u7F|8AWelp5M3HwYx z@T%elV`s)*sQtMB=eN;qRW6KWo&mW}4tM2(bzBrq~z$b1b->=uV+toXhAb=%xL;D{~2BrkbKDT zW^Ft|O70+0kv2Ew6bu@2#*NN5v_8(KbT7L#wHj$==sgbitc1m}`kQ_j+)A^I(#HGH zSZUHSG27sjK*x*5Nj*|?uJ{}eZE@IO@a73>#+aQe0bSw;xl9morG#@HJ#Hk&J+sEY70uCyi5e$!rHpX^pZlTVzpV?iqIcM+zq-aQw7yixVhf(R+PS@Y zIhjwSCwyv#Usb#zcMqld7))C!s+^ot%mq7v*5}Wy3=QI9Vgh)Uttd?cFxkI|JMYiu zchS)hnhkI^Y_RqwSQ*MZUZw*@%tho^oLYLil{nIJ)5dTj@=H=O0snNgDDI?3oaM4s z1Yv^_O3^-3r1kSvggDPO6fxarS5d%R zT9T1TQ}oZ#fik5Tw$lbm-66|b)(1Z$T@{NIpB&$re_xiAltf0y#Kh+~RihC3TC`k3 zR78ZW=tHi4Ox8(tlgJmRmXV8X7-rWmf?|bt?ue~dUkNfYk53==qjRxN;eR^F7z;Ft zp`_>r16b>+-@kvaBr(1;Eq~)!8xs@L4?Er{ ztClU>v#nhas298gU2)v~EPoOY=C2H^ksWFV#|_akNKQm$rXKJz0hR_I^acQBhB+B8P~6fPxlM3B@$_ zlv*gqnyR5?_SUD@YAV$Ua?rtY@W@b!hr352I6{vNCqk^7GA)h8Qw&M(=h>%rQEod> zV0L4j!r|{J@cv#5xZ;;D>;w&0eBJn+Es4`h*fM2pIZi05JzZluNXG?5Co{Vfl&GFY zMri$GvjT|Dtq|v61WTh~SI&4(_6;dv|npuv0OT zx_v%A%*dh7ebm1)*!tUL2&ut}VcqlM;Tw(K*Qp?VqjH^1cvmoH7p+{3{V<8=G-Yu$>NVOKHI5P7s32nqQwPb#7&G7hOX51UGze z5gA*)_>(}BD8p6jUW2YiQDJ=`2TY|&fWE~=^&07A$&ef*Xk`P;8$71f$NvhVS^LcZ8Ue}*bUC4aF`_8Kca!-B}4Agw2S!OvcGpL$%H#h%rov6S(pjm+LF9#ITK#XK>;AKon zGV*vf^0pgkW%zq-Z7l_WP*0))?y*l)e-owv=~>z3kl&+YmS(X^Sj9r(sa!5L2(=$F zi@Z%%Sk&k7EnH|%AAE6OfxsOo4LM$f%i2!4>fj&enT9*03w&$LhRq>ailG&S34;q1 zJ7OAcoTNsty{E&g9&l?KrRt&Ks%j*ge~UfbwO~a~lz;D_!HJ1Pdn|3~W~rRR(v3tC zP}!?`_e6Bn+Bz+7v9m`tI1vIavZW{eCJ~8bh_yvu`lJ4ua+@Dmk!`ivM&dCJgrs0m z`3Zp(JHFOmz7sC87$45T?tmu*PDBntS>gqLzs~B=wJ>@emt|zWZ|R3!_zeG72mc*3 zoHp!AH@)m58sag|bt9Kj7K-h=(GK6X#7T8bUzpZLw>k(H_wJco^1CzNnb!}JLU+J- zqA0-V*B&S^L|VL@6GlEAENer|TKmvA)#H1}YXFoEwSwFD2jbx@GV z^5VM#;Zz|PR9OvPT`%>d+5k|PuvDuvDm2GtgPvjQ z$bwY?2J5Ffym{8ZHS`;l@VN3^-7`{%Hm#8@KHyC5;E8BnjMZT?%Xi*t7q^TxKBxH< zk`!{>nfZ{PY=DAIvrVkV>QRj`r~^`WNjlBspi4hE(WC%YkP?fM zpD0^lnY$^;-f22euA_B7M)ziumTgJBDIjhx!&N8vZ@8-Fn@Va+@HJJ^Mt?k2%vU@( z)OF=az}%JPT+(lRv~)o@mj29J8k1p@jB-O>Ov8yp_nm6Q>BahGwoCz!_87BjO;kWH zthr}Hj)b|%tRa?P4Qs#DywO#{$4w@v!MxM}xE;jLn>L zM@6HuKMk@hs((Kis0qZC8>_nU_RS?e!og!;yU#+@@xxQ2rzwPk5t&vUn!mA*v-Xvc((6$y{@nA8X01oddGb)w zKPZd;$YDF8ml{9fUsd@!6>QdRBI|_h@wLaUe`5SvRv(Cfozb9+31169{whbZLBy7W zzO%%SnImcM59-k3_qyi3Om4()5P;M-ZiIn8(-!p%@h9^RP<hm@o9UUzoZQLa) zF#Xg+^WW03z(Yp#;-b=SFLOph%jV#S_RSqEqO1+nCCR3zR`@@||^b~qzJoJd2o8;J_d{?(pXa%IP$ zA>o1GZ1$~q+=7yC49`;+J|=EVRe1w4Rw!cC4~i5IeDH|&?_#{2BTmOF$|z!k6_MMd ze!TM0x?$ygALGpgBJZuJ2T$o&rc_HDK#i|kr6Kq$v*ml>MNqF0%pFbMS+AfL4>!so zwTSR!O~bI;H#bzcRe9wx=iZw;+O$67qjIwI)MM}d+;emW;Kf1sCA^e5uHHT~Ye{XHu7ZtbLczW9ZD`D&LLwkJfn1Lgkr&tG#?;nn{!(AEaEcIpw~0k&*yCE2 z!%m9NgRivD9y**oM4X61MvA3z)9+la00|DR5LI7I`I_*Ix)ksC>D%49#z7UHv8SIY z0CAj`f|`2hQan0Y-rG9d*Voisw&vg?rC1%BXvUxzn%ssFt{ZZu(g2 z(UpIJ7EVMG34gzHdY#8R>l=_f@T|}8LbS8st`h&=Zzo#x8Hmnc>WhHLCC9DwczmN4 z+?#}BcB>g*ish?A=j?J|ff)4y+X zCbq2z(n9(zP00G30@A^5p~La5i(v^@F5g{Z)}g7pL_0hf_Q2Y|DS z<#O-QP%tHak(5YULD>sOi;24%)|q(V^99K#f{>B>(u(Oog~K5NI2-)3BDoncO!?$P z`SE%>?(VnU;=fwM9|fX<<&6-ke^D-lfUDeyu+4Fr*_er;bEUVDmli;YE=s*-GHI6DZ{@U#N z(`;otd$QS(24da~ae@cYp4DeO1eX>37DH~!#^u4H>%;pa0I zpR0(C{uPs_3BlSg+F52)mZR#TtQ$XjC@oKZcpK^)mtkBwS`GNoR#naeL!tt?fV+?W zg$4|FG;6efleO2iQd^ZFo?SO5@WqOq^S2somMMY-M`k}@&RLXjygbC8aqA4>CQZsy zhx>P7F~sTbu}NF;txj1Ud%u6bmeJ@j@*L}2ZvN$ve(dIr2|FWx|K~Cl;42VvV`GMZ zDU~?@4(40EBkpn@y0w>^2xv{zej5!}>3ldT^(=!g6u$l;@rBO646lRSWl+zdzr$yW za7@7lAbe*u9RfIDCU|mV#=mGt{{{|RE`Rjhn95t9ZE_Dm-m7HyZ9sI8u@uBWkvU6| zvzO<_fe4agw4ffNq2x{jCijq0-SU1uawG?do`=a`!iY&ZV@cmdqNQ4n|IP_furQ%(;UMBA9gRp@U}zJ>)%0fSj(rRQq% zuZ{HMBq-9PJNo0l9NYyt7;{0uY|H%kJz76}!iY%$nHLPVPl5je zU;uP?y&9!zYb8axuKm{=diE#k<)x zQb1Hnpy4M6?IUJ;D0S;THx=1yZZ*y8C<*pU4MdUiK!B)#kq;jB-+Acq5b=QQz@M>u zE-y#U7De-Z+y*bF)MZ)hBV96zDFnX0hqmzkdr2aAJyGQq6|ve2VaL+xvg{2*fQ(}i zGQ*L3#!m7t?TaAICZ&Z%N$(y7usw3ls?Xf(_xQGue(XjIey#L@^X9 zJ*~6(DfUr>oMg_v8NcFy7`dMZ+y-a#=Ko|K9lV_1igP-l5w@4ex4|i|XRwz*ZhOi! zE^ddG0;ATUT&9mMtDkT|6p+b5f2jPspVgbVdrMY^6Z>!oheWJ<9LioC=G4gTuqF4p z$>v&SXbAbc@r~Nt6HxY$*fAf_QXZ(M{{;ty^6*(+2M@o($?U#U*%k7G?NPE(zT6bA5aerv?Tq6iN2Xc!l3F2mlOsxNX*vJ}ACA!d zjXqfhyk*x@`;2QTUiTw51^X2Pe#3nlcR$|YJG85qQ$;cb!#@l}zP%Gh`LG@p0!&Jo%>X4DabnI)4G#*`6e{fob5Rrn7Eqw-hM81}{Ht9HtFK?LPs z&Pma>%2br2|M0^qeTY$$lYPX?k1?3s69q81c-_X%0_5<2AgYP&k>zM?*)-FmnZpx) z5^QrbrJn*r!`DhvQIPZj)Ixd0a>+4tM*rk!67i5{?8<^P9fq&C#WBe!=Y!#*fjPpZ zmtW)gCPQCQr|f=VoyoRa{?+^oI6r_~X=nR_^j`}0L6v*1J~w~EMukkgGPTXf(?b_3R&I68v@*rrblU*CtDsgf9MO zQBbHfAX_MbG0@=|U^ zZbO%zXqc1#EhD5M%9fwtj(pt`46dJ^R`Ag5&3zsd<)Vs;0~xmaRnjC9?OQ&Rs zEjD+m1>;{&O?gy=GP-)0fr+W($=>pidj*bJi|6L=2B(>GsjIu~hMXShKq+qcJjp-z zxcqTxQgG!)dtAmGv7GRr)|F*~%R39W#jm_{H*uC(Zc-K+(Fb(;J3xti#53qHQEpiC z`t`Peb>J0Pj*PT)pkkQ?$FHEJ4=ECSCe8cw*3zjNRmHlut7a}8C;_I+3}I&V_T#)u zZibSE!-#@A$L$w6wpOqJY=G zOYPH*;yZkq8$Lkkdk{NE9o2o7f=c7S1`3FZdM;Kp&YpxT?&YPYKe_t+y-vCzvU4FB z)xyioot;f73AC$_488<^Qt8E=^0R$NDsynwrvs4V!Hd%IAJ}VVg-m zl{ob*mY0xEv%2Jg6HB?~Lo*NqdjVKAc)8jzKk%b zDauD8&O}|e7UqECC@XhGrB&nG`O3=5o!i)4J~T(9d$THSOXaDcb$cSF-DT!*Bi&G7 zFDm`mj78wqkn{DxuXo#U*i`-(gkpViMG6^VT4uY z(FSAs^EH~!;p@Z0)QXpoFysY0zcTK4jwuO1X7CxK!9SaduG0TVX6Q)UpuZawViwzV z@26E$Mh4k+^!MdwG1Y{sU1J%bPgd`Qr7egNa$%(vku6A4s~J^v4e)xkqt>4wrtfij zWUu%j9txTP9l9*}ZWgAi@Tr7Q)iv~YXyVbkxby9j0;HOAdSb#j#)s0$4^8wOtcv}R2#IaZ9}mkQKJ6<=oC@3 zo5$}jEh8M;Q?A*>*fFablN(oPgIHq=T}_Vc2K`Gg)T09ymBFw=VY;v%T)=kYSa{>J z(ZJ!T50W*bahR-g`@^Ls)ue>?f-B_%fps7fixRi=^gLXd()SacqLj+tz(_rgiHy4w*n{D3yz8w>O;FF{e3ahgCR_zY=!GG>BTYkfS+B`Ts+S zeTt9bHPfxK4EH8LYO-JTKeqxxswGhW$+c=bvGsvGu!!E}QeZk5b87r{nD$1F^**oV zazN>97K?osECaEeae&mZP!^GrYFqjG^{Z6B?55|Hgf60?p`jdh&%V|alooRVHY`5j zP0_W8Ra;n)ISsFGEBC2dr{S+7@-`AA$K@%`+JN7E)uTmo3u#1=6 zVjsE{u^I*t+o|qg-T1&&w9M?oH?M|Q@D{H{XuWVS-VW;|Ej^$iezNb>) zJuG#U&9x&o$gMO$CSo?`_p`cpH^*~&Z4|kmojjY9DKu%s1im`4sJzC)UI{85yT^@9 zUbG_T8`55Kn*s!^1cvJ#ypp*97?tjfi!l>Vw@){08f$DlaBNu+)2iWCYemkBM^*)A zbYPQDwt!76=gTM?V=3^;`2DGD`IQ*Fubwt>B2(~%%`w9Y5#IAJYT@zd-~{YRhMr6R zRQr}1$q;^%CxUFmH4(q}C_u$B{aDZ<#Z$~Px4uySN`gSIh%5bAR~J$nl7O;L`whv4 zQ5@vBHThd)S|;{Lk?Zm(omJ6;t|#X7$is-h$U!{k@Rm2`Gx+=Pr>geUJ1V}wT`rOMo=lT`pv)A{b-dKX)IM_nChWeHWLV@u+mHqqgJS2f5P7J@o}R(JmfS1Q(We|&_N!#&k0ytkUTS|;H^P%VJxJvCKbPKFxitNK`EJ@@&eJXbu$gqGVL!(JDv(XD9EPcE_2+A9jv0TPot=PO2pr`;uCY zzTYFsLq)lF*Tp_wQRVEXye^kaE}99fx1d8s(}etf`LGaC$(f*x=w2dtDj^b98<@AY_z9S=Z@#>AF5=&N0 zs|x4{c%>ch2lGI=zAzNhP7xI--e_h@$#j4sHznoXQ2&K&kBW((HdD%jO=o4tp@9NILhgR5bmM?ySQXHB zeTVk~zr^|2K#_?;YX?x|*#ov{;!BWtPZK^}8UJVzKkG{U^35v{?OcPRYA0>kR@SG< zZ#NDO)-&xYy0bilAtT=_MY#V?a9_zWWnT?QCBGd7L}cCUmKpvGJ>;mC>C%1HKeOGK`D` zU!~nVNY#=a=s57ODNVe)C+xj(E$VVkf=@!iRG`GG>kS#K2uTJs$7Gy|#=@dux$bSk zF$r_3imFAAyCj$HX=lpfpL+gGV#=OJ?2I-G=wE)Fd&ITI%}9A%;wnC3V-mP@?$b`{FsI0#($jEh~- zoo}pO)d$MJ+IViWo(5pY6hJXCn`!mg`?@NL4azH75KH62n&Oj2nqAgHmsQB+lj}&bd~`@eoLFzFq$ci{(z1t-kfu_7479 z*4vU?8Y5poj}M<}X!9Dse!R7YtkZJy$Lf|C9hg3wbV{{qGm{Jhb5K^s9KdShd#&#C zeuxAwHkbw%_WGXWR;ja$y3xik`A8WY)2u;z_Mc^1_9`BbOirg80>oibVHt6xXxYfv ziI(IAF<@ety?;Z_3`}7%o&eb`jc@XqXoRgP2nZl<&jQ2WMT;rcyW*fjS;5!(9KdLy zL2d<2CLo5GFY5p=Cevu}|G{K(t+AwtKD$ScWszPqd0g1BJ5s}bMH5Dv9!}*~v42rK zsa%~rrw0a1j4NZ~Y7RUFs4g}T8mhE8|97c>?S4yLqwCgaAhoq+73R`eqS6&8rwzm?wDzme!Bp(6X2p#Z%_ZLA;GfL#6R0le{q30^{j5q z)*wrmIC)k|xJ)!qqq#4+mAU%m58&+1(vRx^%6lpK1USTHN>L^L4eQkzpw({A0GBP_ z!C>V|Nd$6)7I@fldzEHvsDTahpOJi`!gx#QbP)7to?3zFYBd4 zF|6lnL~}E*|baizJ&NM8s&b%APaf_HcmV#|k<>+Ry7RaMG>LbNtz($9l zCfaLkA@keN`m3}@{~pxXEoirMpZ39liFB#7t{U(L7lb3b;uay9d3kfi$-eFCs8+?n zKOk9v4SUD;-N0Wv@ZF>gExT004^U*5R+)+2zLB5*9+1&WsZR&eaEOX?4vsVUaM=-1P*Ksim zlE_r6oRQ7)nQAx!(VzQMU{7McBx(|qam0ooc0QMXabK)d-#>oB$c;QF`Bt1(Yg^CY z6>DkGBTO6$Vx=#jFsW%t*VKox7S&>QhN<3uhmM{#Jmik^2ZH6> z&6c&toET!%kXnkcGi|+R{Zr$s_h0J9ux7Da1(LqYi7NRFpn*kNF$o@st`NX6|_ax^_ za`!;;vX7uzpD+w*##R7C#N@Es)Bkt{O9V9U*V=PTpXGyVG4&H}pHm~z> z1WRtAsd)|Lem_7!QHj;6w^Z*z+jKcS;#Yjk%EOyyMNPOd=}qqk!&6nULpC`l z1k3BsX<=y?XrI*2SzBte=A~Ma_srb;F|g0JauZW&l{;%~ zKGB_9RjW}0dyNhT|KzZ#r8=tW?2ki{h{0K~fhU}fs6Y&NiR{|*_d7ccW)p>{LlfVM z<=AJdn-#(sdYf)Xj>_Nn5Gwv>GnIwYg?ML`P@ASWrdqjtQU!3g?BnHAiUk$%M0aHNQ$$$bSHUs@-7;UUs`_)q3QBT3PRk`YyXOp@zX}`I!GGWqX)% zi-`cyJ{&_}o?_HkO}lvJgh;HA_Qn|XVkG|2&fqh2pYHzeXS5x7s`W33y@HbHGG;f?1y4_9yK-pzg#%`5hDZG{7E zb8*bxQxh)=p)E495qKq|BS8r4)+Z!1!;(PyVu*;(U8~5MAo$J)+lK=jd%`9YetvgV zNc7WymHb1BvbD1}W;+|C3JF1o_qA8{n`;N$se^qZHgs7x8t9`9J3p90ZR^MS_}TJ* zURg1XO<3-0`%+kcZYmP7Bm|`Ern{GdaK06u;_)-1fIj^UBIcc|&XU7)NHK(s$n!Ir_v$8J3$s8r+;)otWx)o+s> z;ZrB>o5g`WFRHxZIvR<=TbqRzSCaO2u=~%M&DrW!9FSpF*8n?iNEZ!EWcR~mDJfW$ za_@*ru%%91$t7smxu%mj{2xh=nQ6 zjF#98CH@locmU)yS?Iyj41OA*-i8>-b07qPAN|CXDXHqQ)@XX@h-tTD?VV>UvY4T| zcjJXMCZhkCQDKCU9#7B71e_=^dy{xIz+rSW?Nw~<#K{F_wIAG-8CNtB9*fG`KNHqC zea{VUkty&%z-`^K)=?CcG1E0vL66Q$MnIJ>#4MgIx+JwtM4Xa$vL!CiMY;qz`Hy&(L z5h)?CcZ7yxW`uLj^L5ExVXhncc^s;Wr}X3R;w1r0Ss5fkhqU#{OU z*P74Y_~|p`@pAXCa!;B)N>|@t)Ov7T0I=`^6v=BhLuQdM`SOT;&6P$tVbZn&F}!&i zVatbT_6OYb!RJ6=jKx5N#7QY{&k8lFk?96FuiRil642!R&Jf-d?1b(rDx)wQ?HZn9-=(+E~(v_TiKx&zK-Diuw3 zIrcHILVH^{uwN|T*epcRgoQUC?6YntZGPXEm`GW>QF`l)l5E=I zSHhjnj{fFdW5ok2S7p21KSG#0X>T!mU~&| z@@*iQmbLgBQSC3M0i!FE4SHV56fJD=)s@AF>L zPtJ^O!RjHl+``oE`}4+rGXV$d;>ukGU$M#4Qsl_$M%#R?v<&*Fzb!uijkzv(es+nr zMM2Hol%_D+$imn%5fyl<%>UgAyDEe$q-1@>Tg6X_v3GX#523)r=qqKQi?bFOHt!ESY zg2UZwRFc|vXOJ>L5_XW*Dzhxv*--A->IKj|7;{PnEX`2D+S_21Vi&|O?e@Z zinbnyAd!t+*jRw+H%#hYY?(Mz1gRi_^XH_Uk{`gR(6?~Ls*m!sU*vCoX}0kYbeD;z z7t+SJ*MUL^t%skbwEvG6z}1?)DjZ5mg()ts(WmgJZ@HBvDQmhxP+L@gQB zybirPbaZy~;XwpX-4@urorx+Dp5c)=`BpV?Vu0MYB`OH4g7grEFf+&3^DpOXNK|ho zoj}w~mowC3Z%!S&ZO{^QwoS(in=!;+sGFK^$k-R*7B4MOAIrN{AY+_*V69Vrt47!C zX4sDru-8Rv^Y!3Ho6&|D#YiDA*EGw&z6K$P4o+b3{N5#RH1=wh?qx+@m*|5b^&dI0 zbgBcwTbuUTvviq{)~$a6fh%Y|XMl^o&oH0Wc zY}nQI;oq({v9V-$;J_2I7zgxd)$5xe5g3vAGqW#ftN9u!M($jW`}WS+`f0AvHe}4a z*I-4R9Jxrz(@qJ!;R($@*XL#JUu6_KQAQgx7+YGjZE_y#AOmEY^$}5MrMD_-VkOdMWc1Nw z;4NBVL3O_6!-&eUy)7?jJH=f-g9=;?Sx1X@0|HUhf=jJx<}{2~&65-L>4xqu0ZMORIQ|-$HeFPRF?ig~YWcp4 zN0;4RC-(EGSV6L=N4a54S7gSsc$!2)0m>=YH)BJIGDmJ@qYtC+E~$MWmmC^=sayJK zN^wJCAFu5(nO77;#<06YHJIzXwHp9pGJ1IJD-f?gS>g3RLu-W5O;g{GspuSZ7dc%` zv*9r92wZV5b#>cuMoiaVi`#pf>a&Iy73(!s@|4NQ!K|I{?Y*%bHu-Q+Hggd1RuY9~ zxnY_^_1ZG9@X>Ui9?*F!vfU!Ptvb5zOKJ%j0>Xx{L9j^w3wv$}FkjZC1PXo?(&4&k z9do8&av*n?8y@ifEiN^q!?trj&q>l z*2%Llz<@8bOo#RN&qIr+ORUz7F^td8>nDsOR(}9H%9y15oF&PII~mVvM)&$YF-d0Jd~{G+GI4T*tfPi# zS79F0Lumx@&UouGsk7Zq%4j>DI!!#D5LvH{$tHaFmAvBW`!#3c_g!nvn%QuNgPnVl z+GUH)-gy&7_AHga*o&}yN{ZL14wwERF!*k8XkvK#i6yy^NbIM9`%)2wcA`b5L9@l% zj_i*8S!Y4Mq`pu3M%@@W~)e;z6Eh2>Eb?{s=h*@Jb8g*qj_VUGB-%*O% z?dEqCb(2rU{}5T7pSD*2_DMnQeD;7NC}NfPdvqwU9}-&6;-fiO#DoF)3|H;4jDBfz zFE^AMUEC9OQ@(gWMqQlfWu^E%dWfyl4=bq_?S}>q0qn5N>vCh$&EI*UG(LDfYQ*NvW+TmAH`ZkjmZ1%JB)qRqAc z1ep7R|Bz3SJDo-U?9cd}_O#aJk0Oo;=}F0(|Hsr>Kt&m?;Tmud5JZM}&=b0t7E7asD(N^-BSI#@=ksF04&!u8J) z&Ffq%KInW1eOLjmdrK45!At#ZDZosjM~1B>d__p-Hb7waNsV?H_L;VKpT7^R{nGo0 zg0G`qFLL#1CgD!x%V)2y*NakVB3lY{iTHtdL5W~vE&C?7BMi26r9vTFQ1;%0R{ecX z?FXL>EqfoKFEm*u2{$LUPJRU<{WFnu`mbhse__(1bT$@gK`H9+-Nd)RF?my;^&o=5 zB)?tkFmdPi&{1=0C|{hz_eg&A*mDk#q?E}EZp0A*Hj2OG&0WFd5!}>2Y2Q2Eg7a6z z;BXX6oqj*Te1CrQ7fY<%bf5JiW-ZZL#(H<{&w2D8oZ42z8sOKPYzf;AcL%T60Abm& zNrWwEHvC8b3s^M&R7(t2NuTczi@S(5~s~E>tQ;}Y8=;e2F!={ixw^#Ecy=u)C?VT z_f8ml983aUAb@Qt&i2l+hTbm{uIc_P87gsju_h6V{f3q9QR(DGAYA{!|NpfCA3fRC zaYze;AkpO2gM}1_ZH^!j_u$57I&wa~Z(&(>>;>1ykl`oa#$=Z ziR~RjO`Z4qU3)IG#VcC#=VxtORTeZyM9YrFp)sJJSRdF3vd|6~0hZKj(Mpjt)3~&4 z%s%T_ZaYtO&GNh#Zr4rR6?4`|x{J9((^B=3z_28B)TD0+@&Sm$&nbF}U_9E8<}?JS z{N!RblQq9P+*3^Nmxcr^Ap7ZL*_82zs9j#v%7|C{2ivj%gryw8@lt;uIgDooGCM>u zhNnJ$Yd66d5Y94t!XKyVzg0GtU1@#Tx4sKiO8ZsQDpNf_KejHIVb}V~@xer3;MX7e zFOlEgz_#XREf@*N?J?$$2z&mZ@Ol$lKfHlW|4_}%dMrAtnh_qrG2_GriU;+~b-P=} zY+s@!;&+m=iB?l#tFoE6zvfmZu zT!RE&+1RO0k0S|>M=xX{24!Lp%>l|I&iGkxH0>4o#2|3(1M2thV}{T(@{}6Gy~F>V zS2F+P{X{5lM&6rN;U~%FkOEDcS-+$ZvgBwZ=^+5i^oj-J-kXkiBA!-6*Ix`C38=_9 zrsRscM*Sv}e8T?aSd8z+bMaB&K>d%3(V>Q_d{X3EuR8C!HK?f^H<}5;egt8R;@V{C z^5R9{E}v^3_IkJCuk790(v}_rZev?w($k z%kz)BJZTz-;Dxw1f+M_OKGn_z!%>WnELltIp;37YQmLAfn+4TsPkx_1*|+ZBs0+Y) zr~>cw@^KGajXwu&DO$)^xak*vH71mmO0kJwcEhRZ5XR&iU@IU$FxM*eeu8cr`6?{U z=JT%5L%Bi2$aDM`NyWv*`DWz5>7G4!V_T#{mV_R{MOakVL-43D`2tW|T0C66!67NZ z02}dbGR)Re=?`)$3!x9T=T;Sdn|AEm*u~F`V*PvKpIg= zS&0sDL*zyX*=lxc4;hKiIv5s@?Xzqt9~%)*U>C>_f1s9#%Mz6T_lPZDP40`jP5=WpQTbF!gl+Lt;US$goPu8Nkv3%f zCz`kaV!U8<)tTgulb@1A_4U+HtCkO%_!#u~8`3*Gu3=0(p|J1s447}Fb59{l-q~AG zGE3HpQ=2b7x;vI>-HR{@<_sVzO(N!=s5f9yV&bJzeP7&1`zd%-t&*}p(q8rMs$50_2-h_UElRxfz5`kaEflFfq?=mTjvY+dRWRGh8^x!i zK2xMKR8b@G-uJR>!ZpeGO{qXZ^m!qvX4!1yrKo!DuzPsjAW{^{H%`XwtdR6d&;+Es za$o`70q3uAnXMDfNhpUf)X4jpn^4tjbEz@&e6-9k{H`5gi6YP=Ud4)(7-fa;XZVgr$G~wHUd<)UCOY< z9D3w^+fmcU*tK%7Sib~GN~R>fF9KMM?Z;_~W0xr=h&4?T3pXt#NEY$I7oBQIp95n= z_EoFS&U3M=#8WSL?B}GD+=@vY#)cmk#|{mW_kPXb1NH~#5~>6JgGP5NjK>mUzXJ97 zQ>!G4cEtI+Gup)dUHkJnpO{`A%%$9{Qi^KD28OYObrVsQ8qZ$|=%dP9*gya=&oOYp z0MX=1y{8Z?eT&0Cz<{dzO~_*Fz!Kj)pGHXw_wkufC7(&sjkgqs*6Yt28U4y(!5H0t z=ZS)bHzE3g)S}B_E)~`4_Aym2n^txj1EZDs#}0P$xlgt@{eh70B9lPj$}LFN+WtsY zhE6)B&c~K))n9K&QH2=yG+EVrt|@!P#7?s&-1OfDX=m2m0*<{~z|b#gf+fe# zP7tj})RmO?soqrOXFl!fFeP3yMK1JgogiwfCOWRf|9z%^*FE@AN*U;z`wF3gA<}U; zj6E7CV+3zs#q;dRB# zqRtd8Xs8DThZoI#8kNFc`5;YAraf|)T<;@nokOI}a}VMLBUlG}sPg2ge*;ia={(BP@YyfA5m*5TWT|IY(`+rB+(+% z%3DG8Gk!i6{o4OyZ3IvWh*XM!p=GV~2L|MRs&uCAP<1I^^~&0lwy$2T|E@YZpP6}g z-!7F3ENgkhFyDI$`#qVsE0Cr@9L_jru(TOL6f1Z&!>78V^dR_K4dW)-7vtn|3e&4c zysiJ&U`ko=qQ?+KHSxj{iK5@ej_{9BS3Nx3lv<>Chg;@OU9!M#TWve%g(kz#!5--o z44l``s(XApqE{R;?r)yC(9#8W*WWi6`PZmaX}5v{5PCpb@iqL8%ZQE^79m}hd|6a6 zu|T5MZQ=Of&7Y1N{dc1v7JG^Tw(({SR&N4?HYky_Wh9GuVVmD|mz$-kWP1B1)MYlozuaBC?O3OXsqMY;M{$Xcc#3e$?D; zV|&7n7D7$LbC?bz5Y53&iDsc(+gdy~MAyXx0V`vmAU*PLZg2;T2pPpEI1n%P&7J!G z+)z>wL3vjt>O&U~fs4`W^fc$FH4s?hMMa9-RZ22~HOY@$AT8^DWv25R1V8jE;3#k# z6>Nr{{P(cG)7?UVvr30OUr>%9tKc7##rgKgCgdPA{r4LKSrK$g71$> z+!J7F0__mcr~-}nK-~X^v5Ft0;WO~qvADlA!Np*8dSrKiN1g!)-GPC1eFmjSut6R| z*-tukNB6L}m&g%AJq$*9fQ3Fb!X1Ke)poa&@ppyhQ*{_$7w&XLXh$Q1G5{kozNbkV z77Nku(Mxc6vR^XU7SR8b_M7Iow>BOA1_WKhW*!;LvBV>( z6n?tYw8w1883?a;xb;x=+{PXKibS7Z?p?jq_$qgEF9_VI*AP@aZ zsMJklcIn~$o|10>{q7D3gF663c>l|5VDXFug~rk@64?(4Hn>87$|eBZ01$P(7Rh@} zFdY&M8PYLv!J4jbrFE6{7N&$Emm*g5X5QIgjy%Bji0k-&HrOJ+=utlG9cfsC1C#~% z*B`7UOD0obEZ)^*CB6aDrM0F~p}YV`3{d|LNeg-a%tH`J^V3|NYI(-r+q@ngk1*tb z!1Fo~?n?#jk0>gM*boCAvvA;j52EheJaJF~g%r7%5QQ}9n5EMHG{}?FO!q)A8N@(f zr4+~v-R&Dx*HlrSjoD7~=}Kf$ZA<=(F%!G&50o{Chk@-nDgmvATtWUo6W#D9BPMve z`L<(FDkPkhN(j_^#vvM+0s@cuAt4D2fJvg7qD9Aun($-}s?pjy1~qyO$sE8)Bz+L- zzA`fCFTl6(F?lv6?ewKeYdjLbLLCRMI0vd@f!64h0jsVDM~4 z6gP(wenn{yT-kXtK*nnPQJru!FOR}R2k<*Hfz)Ll{2<$aGC&Q%O^<>R%D)tebq7*( zVe2-OR`C}nAhJH~sRj0pnmeJn333Ag_ieT`66_hb)o=_*)!$|z9F1F~x6h*AgM>6g zKL4hVl|pfROxt`0+ismd^y~9pho|uiAv4hl3~X-e? zWD14Z4`XxQbu2aO7d^er>Y@pRCh1Kxb>2; zqX9p{NB<@C#S7I~HZF~5`Jr5K_ zWTgO%Gf`_x8{VwS=2^S$^AdRVP=Hjs!dCMi69s51UW0}rN*v(~+#2p8iV5t8Abony zG0+UeoBz*J=KvY>hOe}I?=7b*i+OI%dsVo;w)UItH!V~aV1Lws8A3aM{E&%9pY7Oq zSq=Pxyk2w0lYI@0_Ts0AQj^Fu#0P(g`r4o84 z#7QUMS&jf{(`_R{nb?Yb#~ZG%hDZ#uWrsc^m-)E>j4Si`T5Pee5_suG%+^#HVJ*MC zGM0raK3iAZ5b%xg9h!l~JbOj7*&h0Tef8eRi+0k=|A?_>;V_gf*yRh#)Lh)Tag@I7 zN-3Z=a9*e<$RRQ!l*}V<{J@VQYDs|i;bY)4d!b_VIXUr4-kCK;CFrwRWh7!WO{KU2 zxXyZv)$BF;BHzrDseaN{KYpmDQ3u3hZjc1z30N-sKG~3>I{*Lp0mfNA2@YOeT^09- zSFXmoGW%)OK(uhluaNE&QzDeXJ3K`flXcE;nGoZRxoS>U%?%Q|S zcI#+CVJUTb55d?+UGW8^p_2=qQ%0vAE@_``aZ5tn6{j8#HvErK8=*T3$fB=%{kjPK z8v-s*?m5n#09@Y-3BMJ2NkPGroh|k+ z#hoX+a|>~06ZkhCx$Jk3`UXP?EAjf}y+!)SdNVHbwL+C%wT08$2HKWsIn6S>t0d4n zYn~>$!{7j}-BK)aBXG0t@JmJCHG*4Hxwy?{g{isu`L=~6bwGWZHv68`#T72x`onpi z3;{LEzU6<+7lax0PY#=5*lj7bY$~iwzpJmerm4PZK3zDKq6=#KulV767!Tg<$5G{X z_LHv46hUF1kdNN{Nj|%=m5@|Jz{R`Ev0{TL73E$}2S&TSBIX>JefbU(8lf~VV0L(o zIP!zf#-vFRS^X|+nwT-YHnF#KE}Ph~&L7{F7%{-h9n%j&B7YMLe2GA|k%uj==4&Zq zQ1ivi7q4SpgMbG7K8o#-#sMIJ)gI2yKL!8uIx!oV3UD(BTs$m*MN+DsjJ(Y&tK&2y zZ$oK69_r2MF^02!B7=lr7seXuZ+ims3UyWVSb2tlb=44}HXRvA;VfWR#xy$F`wck; zaEujp8h89%y;MdkB4?!GLOE@NzalUij_Rv|EcAj2r-L!&(jZ`g3@Z1(P&lWo*DM9# z+ramWAn^VHtXNhrjyOn(`1L4fbaJ$hv#F^dA>Qqz++}sq=Yh%$+}ptBLk3UWEvy@b zj_J$wpCpaX`v*qAHX#| zQYQ6x2ubHUc?@3yw(L}bydn!M{vJl`vLOTQPaeD}Am)80!h^#Mb{K5LLH|M&-oPmv zz&gZ6*f;L{DK3(qARv>97|Y1mWoBmf;wFCZ9-83&*z0d|cV|@EI&ioRLVM zD|50I@9z*zllQ3us}?}Rrq)Lfynw{y<R1bXAp*>n@E7 z*{D5#jU@~C*M5=XF3OQ_6y6jWAAI?5l)j=pqgyNBW${a$cz|I}y&`G14u*Y`H^ic7 z9?mE!zm&B1**C(gLLl5buveFgbKpXnJS-1$yImF|nF%llt?&1}vtQSGXA~3`&a33Z4cu`@ zy~Zq<3KcwYce;S~i9-@f?p%_uH&S~Qvs00nw;Th`xG??G^v;O15g>xi0q7A`irxD$ z!FscK7e>~1Xjm*q{7N!N^E1<2NJ5n-Bll6>whuox(ep1ocKu6*lPjqF1h0fxAWVY*UTD;+An^$ z3&Bf1+u6FJrx$;0`nh4mx~yjf`81zkQk5QjXblp8%3~KhN8x*2iT9D z{2%AZHY~ka5`;U=Yd{kw1eeshG+t1+wl}Uuop{EpTIwiRBi3Tv#qDjn4FdPAdZhMG zwpdtnKrFW)i-@>%T9P;)` zokN0z9{QF+FWP!xKE4{!NEAz7U9s@mHXWL&5ZVX1?j(s3i>Yiw*<5}|veu5ydONp& z*2i1pWa}$l4f=Q?5RPSsA(db3o3{*lbc`_}zdhmR2By`^A+-D@*E7Lbbu(bWjbN&Dci+$$yWu=VNsAue&RB%0OBo3fZ}0mG<~ z6}kJsMVYbB*WK5?vECMeSWRHWO-JKlNB9+a~o%zl3ZqE2MUN$M?kR&^Xl_ zg({7X&SQnBFd-95S>e8t&;WnHiLS7Ro_40`J8=F%TeY6L1XM=#SMe(NVFX2928t}J z1^QdBTwM<)V(vy3unOXr0dn zOm3F+Q+v{^ICdn5b#QK+>)n`0*)5{g?OrPJitNN;;@=Sx$>=+csH&>U)f|E`w1wloXhVgdE#|RIRw*r_xn;!$eWa)vx4m(F zN*Hy&Uc2>eU%GhTt)H)NI<8{1t{;H`sGHQQm%b3Gc@^rV8m4FN9c`gAd>W8bGnDGd zG~-xxwn}*KVVudRPRsM@>pt{7q&IMnPkF)$QUw%zbg}W$(OQPVvqAuUM9Myz`%>gf z()c%>W6>~`1J&#aX*U6f7eGYoJ>{4fG{e3)$r7@CIv*~SEq4Ge|?Rd+#b$Ft-DeQ;SPC3ZD#rS-< zs@l*yI5R!NkVF^4DK?uCfnC+5b-QZwf^R;*E_O~1b*=G>=HP2vT?V5N3Tu=s>1!Js z&pxq6s>vZ}*SVnwj=*B_)mI%d>Q*#RW5p1UgxAM!cNSV@yor8^eUuq2D9hOML6rfS zsL$(gvDz82bJ5IPkD_)5M(1~+MoxnGQfORJ6Sb*PuCnVxONRL6lW#w|GYFb%RmWj* zSc}PivfV@g4{NUTuleV(B3f_{HXTKEOk5BQMFpY>`>3cWRYiTY4)xyNUi^xw?N^>p z6Bf!V7!NtU@{C?lvv)52eRnokIffoA5AADn2|hCJg%U5Ypc=4bIu57PLQ~BZg!U- z+J|xfv#JUO%_CC2w&E;#R}qUun?t4!?o;1ZNt(W1mqm4aa^vRdNH%%wLo4nw+z>Ok zhQ3U9RJ>czjxxew_e{t!#7wh8&ni=YM8IYGO?P3EJKiW|n>rnp>vOG&Uf0ZHU5w4 zQ;ad`hKd3mCG~-!$JnAZXUUhKpXvmGMIdEEBiqIrBnl19JTioKE*V;+< zE49)CQ1Rv3o_h3eVX)aRjg8*p;J~=@islO(u2R1(>f!B+6w%)~XtK-!zuHB2^~d)F zxq>&xw~vXMhaL|KOEx)DKx*|abI-)3>u;*(3MT|`(K3*>HM+8?=ti_87!1n zyJlwe0%Kp1wPqn>*WSLI;U$Ei)BQ_5r)KYS9hUE2&o_F$CXGi%*0;(p{=T%QW2nnU zYUxt4rPfPCyKerI-+@RAL&Qc$Pft%qDg(9fhhO!(M4<5zSf+ES!rja4h$j^y%qo2N znpa*Yxh08L!&=wPjoHQcCpNDgp|s`Mk`*hrM}{Gr z+Xz7rki2%Zw3K@aOZn}iNej>AIOE5a)Pdt5Q!SY8H+pkCZMvV1>_g{z;~_x+wrH-X z!x!^Sy2$(04}NZbgDPc74mOW-t zCwT{X$aXB%C!tz0U+7k-P8WrTr5Kj#E}mBrJal6Fw64jLJ5OS$%^Q)w*}s?}${scM z_?;M6ilE5{vT`J@|RjHft)g%o8~nXDKpy@<_U z=}Rn2Od_Exv?@sH?LP(+Oof^b&AWHpUdTk}l?J3sIT5&uR@H8{)(w~Dk&L*q#qtdA zW%OUnE7dI&nO`dH&8_Z`K@kHVr}}J;DcFH8s{vEy?~tUIQBnDkCd0mTw+o1SIOpme zTUs>kar`j_hx!BLrm>t#6iU;B29%!z+{9HJ>U6pLa%vZvh78Sz&L}3c%jFBb+<%u4 zu=RDGw@Hl!j=NzIfjDIZ3@{i-@BN{RbOB|p93T=G3ttT_j>8m5K>j9zd@U}kuh7~G zJTPmByCWM_MX5}SWlXM@Ukjo6OMr^V;Ly;u{SOnWK37@*%4S*Wav(eBXl!Z{k<2M2 zAj>IxSuwRQBqrvkm|F8ImCyF(7$5D`%$IB?K~|ob^%#2%;U}7e9Hh;hEXlf!gF@eQ-G4ukVUp zgM_1+c2N&-l3#xGytZ zawM_@)Z)uu<(edyPFLUpeE87;z5h2`{cakU4)kR)ubndr zRtjrvZ$#GG!C~hwn8tJ?c$s=Omj!ZHj1I9F8=#<$BRKfZ8rh~>GI8_cvr+w8sczMq zM~nU(PzfmXJa2kS>*v2jIEV@${Ajr!LjCC_pM+;O1S9{&FRj;+Q)xKMbkdl%bNej8p5}9pKSsmaV^|Gs;X~ceF6N*HtWtuK zk~h7a2K9p(r?w5`xEjoCQm%tNA46T9% z5~BSQ5*WT+uAB1PaNB*Xv^K5ef9T(K4=souHP_eM``drJtl=MeXOrQ>&tmRUj_k&T zOS0XW*#lcjd3gw!QA_btOr5CI5Ydf*yoIl~>T!AeTzmjfYKA;>L-WQ#+rdTa$K9+3 z0~JP?%i(fQ#ZA=zjU0r;O%aWP;>XQ*fY9+0yKT|h3Pt;iVvW4X(^WE z?-DByk-oCF?ghNo$7sT6Xv6g!Q6`gDUzSX;(Oe*CgRmv4t>cUJ44TK=&3nZN4^kV- z>H2_a0G;vLdybo=PBfae*1mmE`2ty{?l5GAZ#eR%=MNbRGxM-^MJo2XvJ$Pg!P_s>tE+DQ=Tybb{)Bs@4NI z&7508AU$T)+;$D(XcH70vjXYuUK1I-(iJzN3%Vf%%cw22u$yIxF$xwrPnKEWM~il) z>-?D$X9ILcTY*80MVAG(l#sn%Me=dcs`N`7df z{Z&MKNw$dg-T17`VZx0TOys{{Gum*No}TU-?>Og-9{m0ZaM0)xK;{58GZQI%Vv7k4 zAc1lp1?0>tiKVgUPq%hY7KX!??7$eTEdEUF4&8By-sm***C@xi9WKk)E1Grsj_zW^ zvl71OXyPN}qWctqCsWAA3R2-5&?4`vuiUD{mU;v=$)7uygd58vUV^l5+w=zSwr)y| z-B^efGIKb{$3XtFRO9V0>U%q4uG=a+Cun3J<)<$8?}xv15jS@`zH*j%Vzc0_UB2yh zcCWqU>~VOg5?c?qX}#fJZV#_H;1u~iVt^e(*0=Yby#~U_;%He%ut~<%GJeCv#oMfj z)wt(>Ks6bQN%QjO-&MPA99Pi-=eECf!hY-qfcgE$$DLoiPbNUa;G6EB0|hnw{Ox{P zurs$g6U&nkC8#14C+!8iqIYGY#)^fiacRkq4B-TcX_4{Zy4JB(?s9N|y#hPCSPZfBa&XRxT=ziOCWpZN*O z6mdk0nT>yDcVm((t=WJ1fCiHD&LquD5~hm4&p(e0pFc^oiTAwtqpv(QY*81rPyk&| z%^=}bf6)8rAt|1m->~U-^FgIcN=WuPrPpk|)|SYQ5nBrE=Mz|ArIkz{hHL5llIB}* zN8jeXZc2QgZ5LrG6M{4>$hen7mn|NQGyn_g71%3(c?c4AG+;P|J)z8~kmL$qepQbUo9^Xz2 z*RMehy+G^5o#>@$Aywy>h05_A+P>*8V7QKhUTT?zA8qGt*}VGI^fOK3EK|M7x4NZn z{!lE5h6fvh-SCPYwQVr7%z5!2hA+p zlu6Z>=QDQR!l{RTZl1Dp5`GsBS6lnl{r#69b5)Y$cNb?iOwI3)T`)0XF)!Poe=vvP!2`R*&7T? zOAVCQ6#l(H>!>-VU23c?5mEboC|;8pxOjX2Nc5X;a;aR{Un*sxxA@;A8ujW?H~#%J zLMS zc9cRc6Wy~PaHZ@xG!iK#d)=vnhc=f@utBM*PCv#XFqH#qhZ)QdZFL8<)j-jcKKX72 zuZ4iqjMqEU3ElAPSWL~#nO^hYp5eC{`CU|cnpFM^>ZP7KNgI`{e{q}Xf1aRK5oXxXrtjf#y zP$P!`bKF_U7!FrGVIc~+!Z)@ye4v;Z+4s-4=Q8;AwKT$+)8L@l_`Y6Tq$g4+gn~sN zk_j)GZd zAy04NVFv6sNk^*b%dt+&7XnqLXBEI-{Nr)u>^C)wS7=dj05liOm!2rS4O(A@yR+wE zR(h|ftj0EUKLKp{xV1@XGRcOK!%*b1YvawZ9nxDA`ix=e34l>?N^sR{rI`fV*EIv+ zC$8r+>U!gV81|uF%;qzo)0ts>_O&NEmja3B|zmW%9tG z!mMOQ4>x{SyhVHBzgr_cajnUM^4V{qdJ=(Z)@R!$<$`-(OLx887FhMVC|&JXK0T9^ z52{L+H69U|x}NKoO!B)_%=LJKG?4_wkT`J5&RlC69|oB3Vje_oPPumMRRItWE}HPO zTWkQG`hZ!HRz9+q!y1|GG=6qYfknUo$AU@;SB>+Z=Y8G$OTAyaV*bia-8{l4$4ZYX zk9CPs{K~mKs%GjWGKw;gDWXpq(ZAGd?R z$^AD-_JHb88^4-#Wzc4it9Hy7JIlF`CiaSnN#>WssyVv`HGf;2*TZtOV0rv^PSz1) z?oRzpP`|D$-?sfr2dh`!u3wTI=PvKdbX*o{+Dk;alD2V})-*3vJM`~kw#_F0LyN?9)0a6h-?2Y``p{)#fUFnv#MJiC&Ua=o>s+_AQJ zKg4hpG(B{(A&hxda_oCe9-E{5d@S`|?6H|^mw->8972`k!?M1llrryft?GWhvVBWJ z?}(nq&W(Xv4AU;vfx?yf%?Q}FZ>>*X)ahqcb41NsXQtGN!Lv7fe%nMhX7=@|y4CJq zDia3`giaprD*?VBUvbSKenijs5I8_SeCj(qbC@$$M~F*G8n0~e;Hl?iWRx68Ct8R! zHVa|pGQg+!nx_d+4>?`+M1;~yq1plRVa436BlYu;VRO4?K=S?K(<|%>xfep6FMjj2;9gig zwACb;MocxBoECQ+wH?oGO7?Hxc+{KEdg_LC*mucy@3Yry3<#hgDlEua&yZIHRpfS_ z0b-G;qznjkgKsRmQU!1@TR$g&j=tA3?Z&*EUg{KxIa@;c0~t!Nk+v9jKJiPhHS;hI z=|t0gj~wcD506ZG1yBp0y;&wwjUKjMCi@$O7F^RCD>UzVfjO9FMLj)N)bR(DLcf5r zb6m9s@0&`IwTQT6TLU2$M|!?(NZn<*cF9DaL8_I`mKyJEBMffBK`RB&C_%BC7b@>) zp#e{zEX`}gQ{LuZFYreW8|U-AE7XJ=Si_pM&(niQYQJM>tF*%Ln{8e?)SPk95=On` z+IP`!v3NH7Wbnf0-t(XuMZG_RZuJ)MWMQ$-G6ebO{%fW`5#%drF-e4UoX{RA2mH;K zCsRdJhV~>MoSP@YM3#BBPhae@-*NM^L7X&m$D;g(d;Sp95l7f^SegtzUPji!Yg*g3Jc0_Bcwt99=q> zdLmqI#EP_iTVw3VGf?Dw$+)?9r=x*RuEjN}A@8V)HLliU%_@o=vj$ zSEjMsI?vU|oXT~T=$A=$R&(J0TDLIuR*N8i#(ND z?2XDwtq#<~7fXx!)#8ug+ZtXjnFQpB!#!RC9|2lR?S0brkLb9#xNx&?$F_kBr5dKq zM)lplKzZCxUh}9gnLX6V{n2#2BNg568P@D~agn+b0H^#i?69;FT=!6Hfbu3;VBw*I zN08QbI8uitWJYf;D?9r)7{sdxA~=WP?;Nk@V)mAAkpHcFrXxF!EV5jjnBDdO(Gkat z9H=Er0<1)qxo2zEil+`-1^mBpVXfOhRW^$q;)2Afg*O<4qe}}oiY|5N#jKhroB6He zki&ul1*%P^ugy%tgi#z+DtqTt=wpvXpUSfXG*HYx1wjstb~?~sD0uO)TXT(H#a*aO zMNgj4M&iBlzzMO*LngmsTH_?{EL%h9-0_IZ=1Q2SuMh_CE zSY#itu;kb+r~WDM(3~=Z$}60c8iy{{5~P?0t%@RIv6k?8bxYi6!ugF2F(}HE)sF*i z!(@g~GFcyV3eaYZ>U|f??5F9xRO&kdYa~%G>7gujJuAp<)n-q9UEGHftO<~<{ zA7j}2^7q_$kx^YOx3F4Njl!Isk=FL)spk`-N0G*l*!Bf>JTJSf*?uaE=S*gH%Z_h9 zWZ1<)r~e^_vDsk{U&{S!Bnm_A0|US5zHdq@Ax4bhdp(2#q2l<6>1$ed6+A~?BcJNe zt@J!kQA%vbosHJ?EFuR?Z;FHr5c*IISr|8lWA#uykS4wMIp*BGNs+#HYNbjx3;Sig zCb`)_KvfrzNGjj9f2j8{zXd^%;?!^1A)6}Zw{V-yzqcVqR- z_i-H-uG+xDg$#_R-5Nn&DP|HY81Jn}5QdlgkE;ldZAO&1WdZ7soNXc??x9)y6>9a? zNjt``NSe%pSI@|HEx-piStk^Z8|i8r_TuEJWPUObM$g3XLg|0lU}#wsjCA168kKPH zcZqh(yS|T1ThptXEqeLl0}6#{BuJqX8H^2|A(WNI_IM@@(VW@{+xx1(#V`3t9XEIT zIr`rwUE&yBQmC9|*Yx{Q$ybn~ucMLO_)NgOMfj%mU5Z zk@vUwytUQqIbz3Wigw~~q=H?YRk>_#A1H@klN3=jBo>Ml^$ol?aDVpZcf&ntw>`^p zrz9}m&9K1%`-SONUj^&77c z6w&ekC2l06H<^b#Wz46bq~YM0tc92B?)Ov6%y*Kv^! z-QR;=em1qHH?jewTnJRE*iKc$^SmKzFc%Nf-J=!u;=7IIkw--y$YMGVeQRJq-@`vOO1A}<0yOnw?`BA)SNep56yk$f2{9f$ql>xBG6 z-knixzu(b;Ps&#>1QGl(NPq3Fp0~)ppA-KB<#sfG!Kt72 z0E)=_!fv&9kID2#D^Y51=6xrgiu2!O$c(k3-eF`Q%1|P@WCiNuLu(YTv$b#-hk3*oZ{4A;kZ8$@r$I#40KLT`++X z(YHC3w*IlR;kDu)P!b&5gX*YN=MO|WTk8!9QnQ3&+?aSt|{bSJ>lj_I}X}} z*YlA>fA-?=vDh|$E{G`0k2v9OuRKDT@z{9q_X`B9|C3DjX0=ZFFnDhnV%MInW1sZ- zRqAHR0QyfE32=>f%hCTStZ|L~VJhP;g?bCDaz2d;cG zvj18ZrifuJu*OTbo?vO#QzcI2-aTjj|k-cxdf3+ZDvZ6O{g?Jgwa+At4PAujr>=d zL`S?Ik$LCK%GUQN1@E~eDt8p>hKoX` zzV5!Q#rNQO+9Y6u(Hqxkh+A4vNdJa)Jv3!4R9Xmv*D&Lt_xx{5T7x*>ETsE^(Cl{3 zpkzNUBWgxm)fNd$yat^}X;a-dB~%~xUR&$pq#A@_qY*ykoHP9a>6Yc+Ac?;Tl_tWN zb--)eub?AU>Q#*!TM^0kEvo(zW|ejS$)m$kQJezW?gvUaaHQp(7m5TT+-L&O6a?HI1!^8WF!Lj$Uz(u#-1HIW29)<=D#v}giWSjc#qjks(TDTzzg zg#_bovSZ(X=A0)C*V%bTFC8%8$jDYnUQv3UWJqFX%)!bq53?@z09v1Ok7A*>m4v7j zt5Eb)73`ysU~H76bSf8Ey|zy~@Mx!A<8hP>3mcxA(nfun8Ym~h$di|bjM|np4C-JL z$4cuX@s>>I6gme_uhTleCZgknKpB5rAL1IqMT(iwH}X(4v~MEn zXb$wU-4BtC$vBfclnB#$ho8eZj4X4i3MT723Y$2G9oyokk=Q8B*%!Q1T14b)heM)9 zA6CR`dGPdLGzi4ltZePkf*Z`K5OEpQ-WYN@@}*SbggsV?&6C(5Mt}w9GuL)lg6kux z5baPKNh}B3VPUG9i6n{woQ;}`R6}bwue6;wFUZBBAd$?t6UmA@y#@?pP1Q2_Z3%8I zBX2Sn4kMRoz_$wIC6`F-cZ=)F_$U}<$~@yC^#hCoZi#G-a<(El^ry_4N*D#Wh^5vC zO^8q`ZK)+B=#x9mSV_y~3ZUbZr_yM7VGv4bpO8=wp4Fw;idMLQefF*1%gq-cMCstC zQQeWBB47QAP8fgo5xw($c?Kae$iXe9ChF)Rz})-EV<(58WyJYp`lMEI-@~G?5W!*G zJOOVwd`vZ|39e`|CB+AXgD}VgCF!N`2aT+}pP0b1wPXMf1Pt;{+62e8fxB={sEqaZ z6uPpFtTbq-|L1>#2?#JioWw!%uofT6JH@*r9K4h6$2nS#&PilQT*M7&gMz;BBVb+0Li@{z@UK|++21TU z1TB=ixuQmBf7Ov^kAXR3zaY!ZpSi;R8jcKeZTOa{5E*>VlBkd7amDKc0`reJFE5FZqFC%^6Vk{a%0VI}QOAPm@_^j3;i3 zEzX?f-%_Fb*O8Lji7)+V>U+VJ%So~LJ9EfeZH8QGIvy#Q_o?aixun!c^y_ zyzr1k%;Q(jSAo4b6FCKiBpS^P3vvaOEFll}FcMm18l_>WivluoP59D}a>h6Se2d{-B=z32IrGjC}&!aF)}~-<-_iK-Ex7 zN)Ah10SMl3phvd^Ie9YiAZ}DPGt?4l`T-!NYKWmK+?E?h-aTcOK4fC7$?tY&I0u^$ zE4VnPkx^zuZx*(Eu3L|Ve^a5LmodTg^T+}ejeJ`r=7_0(S7O9e$v$`JBJ{%ta!NQs z>}YF{Hgdp2w(~ONPD8D5A%lj_o4!<@J)G4XZsitl0G<=LMakj>owu4Ud|UNEl**%h zp_W1_!eKSLnj&8mGMx}=#tq5=P%czt>XRoIie#D?^sXC7UI>cq>+d&q0>$9j_Dr#u zRkl)S9~K*AgPaR>79;}3pCL+o`&UKWEH^~vz`;cuEc0~w8W%n=7UTC{Jq$FF(4 zj+-{SA8NrOzX1Xkg}fb(IWvspZQA?}fN=%GkJ1cBZzp5=_>PYSAp^kDe1K(hSf-@K z4EW?(=#GM$y|lk$e*hFgdwowx>6iirYzaRM--faFF3Qs)(XHgax9hgb#|!1q#`a{( z3w2ws&~7)ODLFK-ADna56KBwRmiBa|gck0g#wlYOY|86yiNJHTuT})w$zd28SkUeL z#*M1^tPL8H_*l$3Wa5YxAJ`Qq=b{ECHw`36-L?`r8!==dNQDK~(1DANnF=Xk)2>#b zo_hrAPryBN&3y9YiS}BMvs9ZI22&^_J~R1r11-EaK4JHGq*A z7*17Q+m9z(O7gu)P%PJIlquhqd#;LBX+LF4zI4M=lxr_VM^^8Ggjfv!Q%t6bXEL$C znG}fvXjU-VjWv?uYq#mvHF|j)u83@k;YXFVTE5Dx?i^5qkcaGahxCjFss9^L5f9G% zCbhyt1ZFrv7$AoOX-IX^>CCzYh(Jve59)wg_$M`$8(*J9r!iAGE()ZG*5Dfp^NcSsnFLMn#5_f3z{ zdo9wf)2)=HS9sG-cSMsj-KfLABInh~Z44&k2}a${QxYnnoj{}0>?dcEmnw>AW0_85pz%=RqId4nwa?P4B0WasVlD^O?YQDnCDr+Euqty>W& z^2f1XqzCO9C;ARS{U_iR&^5n~1YiQAPCqwEb*Z*x2r8a-@QFDG5S#FiJTF%)sRnJEr@yZknI2z$zpR*`}JqUvkU3ao*LRcaZC{&E@CvgXVkU;+FpLyX^ zBNtb;7w}lmXx$NZju6g!Mk695ba=AZ(ReuH8;b=NEI>c@qDIog7F3MJoXN+0f#7!K zS0#o+?mzZ9_tA^UN$USB)tz6`oJroJEv?`>wrxQg&Gm9q@6nq;;z)1%mg^3a= zQku_VVrG8Nfk8O;GvM}No*w%&8cB*oI`Nhb*2oXoQO&v!0DNIyivCpD)h^|HdUsXE zfIFrb(O~AoOMij{DM6UsEqH63I!ixkN@C$~^Na;K)8=9=*S7s5P5`i_oQLMwpqI-h zXKB$btAXDte6|wH-vO4IX5J}t{%VhV>M9>jCM?Jwv7-pwVZJ(W)Kwv@k{b0W6c&{i z3>aT5`(-^G7r{jacC#L)>y!asrPTfaz+3u8zFht9i7t* z>)J%A`vB5${RSBx0Ld^q53e3NZxH6a1bW>K8Wc1FW{xswzkblNlWM#1pD7&a%(nue zIS3^hVS8xqT{Li8{;vCX$UY~4ByViH!R?YHfdV(lfWC-f0NBKh#lRiak5vB)D6eDr zOcJ8>jv?n_YVF3k?ThJXw*^2vbXU^obP#!+2_i@Kgu$4<0nuJ^P`uCdXn?y_FB(ah zc@=}X*QZPBOw?Nn+8pRXNk~B4f)5dM%`gT%-&Sa&_nTb~B=CRS&R-MsiYv&=1}yV@ z4JtJ)co?lufL$+^i}YS!yeGM`_T51s)IyFrCP)1&Wf*<(@W>T)EIC;v8HO=9T+t~S zwAU$b#a5z)JO`KOQJO2K1g@Ye$&Gm>BO`1uPcB3 zJ-A%q+SEiXH}I)aZ_~FYwS*3n@u4yVFwp{Y4l2^3-apzM6KVO?3ksLR4Wp#mPb2S8 zWG#v+Xak?V2Bt_x1=f8vXs+h{;`~`t%Wwk)1w~*yBe9Lhog-aF-0d`4(2vUGrazPR7 z2$ToH05+Xqyy~=h^Ag8(|B2y8?){(?!;5ZUj=XTEGp5k?d(#GKLJ?W}1-@V4@~DQ> zeJYdHg%@=c@n)P??q+k8DqH{+ci)^Fp8jSBec_t%Xse0J$o%}g8P+Y~hQ6+MlIG#U zf(}r*DO&dS!`C(DGNTb7%S|Uj<7qHgEE>_><%792>3$-=6E^uQC{<%54_d1-OX&V# zk6dyI1rDJl$~iJ7UKhK5Spw0I9AW;2yZymxl0e7Wo9dGkvr$%`9D>Z6*PKNLB+EV< z4|&t1-o?Mk*YN?NNbG4CbF2MMDR+c>SC+SYx$;OToy70P13fI03=g@3)8MB>H1NZb zF7?}6q~e9FZkkPvN$5hVBX`Uei_XT~y6+n0QRN{8Ek7>H;tl*L%>S$iUsP-Hi^n9h zcuoyU|C>s(cwU!8cMFJ!igRS;b~vNt9N^Z;NeW3 zZkr_KeJtGDux!F$8zIp43Ciwx4kzfFXmk#;&ag<{kqxLGAc_d*9>N*fObb7%*t?_sf$d)PbyszxMF4K_YL zKC?VT>7a7o)fsH=S3p|5lL4p`b7}{g@1H)UWos|%q5X3oT4FM}lsLE0C9dx_Z2(b*Mqo%%HJhsS4wqQi#IG}kdON1`7|5MZt`t-> z5Li}mhrG?K$mPZ!hb{1{JRv4xE~&hH_YhdcY!2c>)&Z-5Og{&814#`XFb0D7CO{A zD2o}gwQ*Zcp*bLp&~I**LQa5<&E0*)pgHj7&zNbDqc|-y7_aPQZ@VQMAI8%v1e&l^ zZk1*B(6P6U=4XvMp2p4lxvGC(Y(*qEJ8#Alg%K@9Fmf@Yj=RAW(&OLibP}s1BMajZ zQP6*cp~wey!7l(2R>`;m0t~FfiU`y|0Xg6Xx#qAO-vL|)+}Y+?fV~A8)WAZ;*8~XL zV=>uS4CF%Q41md{CHP*|P((LJWUq8tJ}b;{e9d$@f_9Co=B8YSg&*OJ-tEJRg0 zjNcS5!l+PGVv4Ms>yr^E);muot{fP5rR4!@#>lk&sc)9>$wJ8ehN z{{A&O@id~MhX`7;)E|Dde-Tvw{oj@(FLjnE7k)OS(^R&{gJJ?jCk{`!nf&XDeA$rc z$;4HCb@$w}P62%4<%8-C6}*8mq%y8d)=RLTPZr)eJ!Y&BY+5$$qhwvSvlwcX$$Gnb zIDLP1MCMx|#w%gjdzm%Y2p{4|I53f}0QC2-+YP&YuEJ{J7>Op}!1`j+vH6tCmGf%+ z)y`9(FLZ8SI5J*>Fa+0{o*TO63B1SwtWQs+hHpAN8=H8kvUg>geCQ1Q%7f;Fz->A` zU+@ByTyeL%OuKjYTK&V>w^xv8-L9V7GA4=_%|&K8kZPt%*9TSamf7SIv*EXWHhMQ@ zIkD+UUm90(^zDTdz)Dik&zE~;+1)~AXVT9zVuWWnynur#Kq=oriB=l6TgoEr%j{1| z07pmd+w79^;K|ds`POS_1Z!^0aH*ow<=1X0l0Bvt%97?=p=zepdiF3Ry4GLr^+US5 zelR5}WNgJa4cS7*xKZkxNOgI6o%=93w={R#SBiK@$RG@J6WJ*8txt;{GqoUn9F-(TLw4GMpL&1$s~56RmEWs8y$=4QD)^s zv+k#9u_qD6T4}bG6K?|c*!?S*@6vz{aUYZX10t&Z9nij z)X;Z$8tW3|)@ZbR9>@TR>uZ-cb(a+g3Ao1JkRDdIVQ!0}%$v+%(bIoF9MEgF*48~_ zt(_|Q-G>EZ6oSbdI#s&seo|aMMTZv_8T3ui)*5FmoR$yovj7&3R`I6c)8XlUA!a>= zUb0%GsI8uK!CZGl51JEY{obDGJjYJp)qRT=)+5qHf30kWd$e;sbt4g{*HX!eX0WhC zKPJM`x~kh@b@P`9p^a zcxDz~!(Bc$uZ}a91L8D_*JjCgfR3?`1nTCR_snoFc~)u~7ZQyoB^ihZ5N8$UNNe*? z4nR^ZPA$XUqj*6W1i(0&69||EW8872e=$ATPZD$(Tr`KQUaR@6&MmWqXM$92pnbZj ztGjMQj?%NZ>_)x8i4ncd$hbw!!f$?*5fK!LIdT9=ts2YT7d!3kauRDHvEPp}>?fJQ z1#x&p=i0wm0Q+VEg1-D;P|I@Srg&OZ`DfFf!D8eNfd=U*3misl^c@z-+_{x+sJS0q zRZ}MrNYkW(HU_5FV@XS2v}F;cJYv(pJ)jzaR>J9a1Y!w^B-O@w`6sIfz@`Zo=t6a62R7ju%f7&*AtTGrw zaD(PESEv2GkM?&lbcZgImo-T_J0Dnb;JFlH^E5tnEOdlnzFW0crAqc#FQH)opYg1G zC)RfAgabT^%LMzbmoK<}4rrfcNBL=cXr0V z?3G?L>_9kwP^?0D7;H&#pr0JwqYXs>p%jz0i?=REj2u!8b)^sWQ0S~_JNzUlWG>#?i zH_Z}F?5C9RVOSm!*j>v^gEgjbms>tVq1JQ@vv1aZdM2%YQx(oY{>`WZhw0XHHyTsA zgiR*Auy`pp_Pm_2R1E~0bzlsc`EZKcyN?wlam_~TUG=;x$EjXid`!}P7vLE*w};4%Eyt?{;q_)KnPNeICr=d5j#*S*tJ_(98;~=jiOS;!-C~1tl$1aSXWGEK1Rm z1x;v?y0c^I{JFwetse1t2fJ9Q5`M)mw3y2}KV^R=NCV6pB76qUF=r(S*p(4kJiP608WU+pH@rZ*BTr;ofAi|9&~ z!cF$hUBN{olT)KI66@*0Xs*K}yU255Kjo?t`;BH*S zNdV{DJrKP}WqqJaRoUUQe2GK_yuch?k(>0&NeW^~e_t^0;(^$28>{(wT!q+iSTQS7js{ zxUXdrnO=+9HtTPW1UD^ZbSAm9046zE;)xUvT!2IlIQ!_5XEODTyrKc-B)t_w%6>OuDI0b%yy?~;3aPJvwn zU8s3*O_eV6`*~^s_Wxo`+?5wrwa3bDd`D{g+=XENAYU~uxZInLor~4p!;zl)aLZ3(Oi2wz>;k6{7{e;`{ z6`I5Muh}7Iny=eR9LsLo2|>G|fh{}>Du0ovT%3g3VAMaD`1*2wWKRL+hExXwu&brz zj6m$TqWApDx3xl8iuwDGc@H`K8CEA-6B5!b`n+cowK)`L7PxFrCSWdLC@vvqCB?)} z%v`xZr>UY}ss#dYaWTh)xN3^u&7G&9>&1|Uh0B~FZ>_;E0D`YlR&ef$I@-+`ZE#(l zy+=Kv&o~Sfb!yJ$e~ZaPXF9B-QE#zQVlD``1K{v?aG*IF5$2<&%=_juB6fyWD`hnf z@%=UjKrEt}d+=qFCdH#3cl|?up#=}BO0rn4jClYNy?G@xodbi4ap*ie5L-oqXF3oyy60}-c zSydnUXK{*t<`2Ns19-~o;b*1r;1Go3FzOO=;QK2w04*(R@*r6#gCM8Unu<$hPbY}z zxA}X!rC$Z+fNNYW#_Jm7X9E~vD-6~XRKXAF>TF!>FCAv#sm5 zPXdMDmvjqcKh?A;3t-6B8q}ZCuf5c*R%gkLF-_rv42HWb-Xt9>pysq_g0mzJ$zP<1T53>xz7tbDZoSNVEoCnxkB}iadW7I1~RxRH?R)k^x_ktY}0)J9nx8+%R$0&>Eb+x z#{}TzEc*D0wN|aEysDdhUOhZB@r~_c3bn=KT{35rZNE6m-7#I{h7#3L#X(oxmp1r; zHkoiYfd8CQppFAg>8>vs(z;T>3=v)RkL-LD(`$N^E68k>s zW-!mF=;&$d35IYhB#LFB^GITbgHS^)ObtT>R%>6K&RnM;p_PfTq^?H)fxMO}Y=WeB zw%CAQ_gegda6h`O7{I}H!s1^M1_xZ_S+F`@%3eF9D&HI3Zu!Y!mf-uir3As#Y<#L{ z;6$~YiQLfxHN>(|^P4hRSMbpA-(+Ri6oz6Y$NY8lR%PI%VN%Vu{vaRrd9X+7v6MGl zvHRETNQ4~nyji+tqr2S9{IyILKPp5nxle-Ts_Wk;Lc>oWCG z(eX)!no;MIou&yuUS1SV${6I-HnY@?Z6J14y{e&n8y9L~3wdkcD<{v6O{!3e!a7v$ zh75%}xQnHIp)J$-6{HUxy?|%;jVN!CV^e!@fUjIRbmqBzvq@l-9`;>g#cD8Yy-uAu zyBMs@0U2d}?1unOh&uRwX-_29%+OHf=l#@+d-azBJ}TpBq-qsQe0RkJ^U3=a|n`+&70zDGK7c9a~b>I1YAL%jxo206;6 zHX>NA;1D+~4v-9RoO|YKertZEa$awo65y<^piyBo*ygKX2x^O+ntI)80A1&y<&p>9 z10TomrE}eEaPdSzuN5Zuis#b6{-!~tw8h7$k4#B(YZ^LB^SuMkFZ1Z;EpPLcBFG${ znxkd1p5x&=*VuM<&Jx`*M#obbCu}zjh4`lH%>G>BC_Il2S`b#3YjXrZEkim0BT>Lh z5Wa$%AjSJYM}2#0sW%KhnR@{RYioWYbdXb4h+IaMCKwjwi8J9vpn-M+(13aa!pFjh zC{Qg73UbcSHGX#~Z8^`PCDFHTD@!w!|FfY3s7PcH!mu>EmdhwiT@Z6DJXnLtq^|fl z{^sOo(ILCbKR-JqAHC9;`NenmkP+Zub+om4_8)zE^H^Cp?5jTWE%sID_M( zPY>l|sp5;I`E4QVbp#{>)pCe^pXA)zbUZM;&ovq1oP1G(72N_dX_pH6^byF|SD6Ir zF)bbmtTD7W3!QRBv*R4rd3kx6lyU=}XoSTp#zQd1C18bhAXl5XE(E{4EmWtcM z|3<0)Qt`5=;%S# zm$Xl>A4{FXON0SyZ!X~U(Wq9)Wy}!*8XJASdabnm`@A&1#X;=x%D#DoBlMiw4cb~M zlybDPt7|#gp=at@c|W|iz}Zu$!GYGb2BKL~aMB2_PPqxNzKQA>2;| z-S#N@nUd636a62HHcJ2|SQz~~12_i01~{reIZ#SroN^g24Gu!waLqCt(gD#nIN&*P zpaP8XG(HI?5o!NfXAuA|T#TQQDiC2?G9_{&yXvl%MDCCoG{*$0L52^#jsC8hV;R~d z(Vj*YYh$KcGUu8H@=865+}n$8q5lTDIMGTrS2M#!|zI#YQ9q1>&_=TQQ+l0;g7 zjh$Q1gk_Siui9sNAjG^uBP}u^-3R>LY`wzYiK1JPRdvrN0)onTpMSzFoJ81jZ{kBj04bJh z$mU80^GC&z%UQrHw3MfxQQc%ujytK)c%Al&{%!{ixpF=(GzZYsVGd&5j~`3%!jo9v zbP>HK=e-|w`n8v(!eXAbr%X_J^Q{A%>pYe3tOVP7MbLT*>5AX`Ddb>Vw3d+qKF>Ry zR-}g3D=GQwCuj1yUtCBqW-W@b1_l|pIx_rp!OgoCzqoooe-;-eYBk2tUT=95&-E8( z20T6(Seg#+lvi1oafe1uy&MHn*P%e-AQzrp@SgMVpUU{Fi`J2gVMjW#?mk($@D*-> zA)-)rv#B_d!oMs@V*o8L8FPsQyW=ksmbF*0zxwp_`a`8sO-Fw|Kc}7G0H6Kz$@%3e z(m4{IExmDb_1+(F^Yc;~sN^X|5P+gJig~V;-uX)6G|B$1-9B$)za&DXYNsn<>{WK> zMZtx4NfTF~DzI25`x1991=G=gnOjQ!>?DX(KnqN+=6`0{4357=)4 zpxjZuAI3kJa1^^&p?@hA4YlK>6VT6pP<`Hug#zfFJ6$=ESlR!5N8^5#)T~i?+`)^h z&r?&KTX_~~O#GhGCiH^S3XEh0LV*+4JXw=M5P9!+_*Qm}=~g@HaYSjyDU}?FHK^yd zr|Vri5m8&Ub;1L+2~d%m2UBM1x?(?A2NiU2&*y<;C_wtD7UD%qh}qzx%6p`Wx7($xi1pRm2Vw<501JzWJf&?dZ{4|Wu`S13CfNfr++)pQt z$+kW%(KR$2JrzSu0Mz}dQJmPH(-oUlX5h7LJxJIdcFB$4f*~&(R?PrNNE67U$pg1K zk7$si|MSsYdJ|HzB%-#VwcHq)Z|dP?KMz42r@0@LUpG-0<-`4CoIh10u-C(16Ehfg zD{}O_dfjLm=a45|>DXjpz3#aQEMa^BiRxSnPs2z|dEyUV5gz>UD$gaajE6)X9+YMl zWgKA(!t0256&;4rFXhi)zMOimnLh;}&ppKPzW==Q+lx^z9=skfeY5Z+Y@E%!ulY}E zwqO?YCt9U6vZgUhWI z=ESTp+mV9WevqrnltX+P`HR^EA6&#EdQU;q)a2ZiH#x9(01_IvJtpm|#Q-4dv8u!0 zKnjQMhY;-e?zd1JlY0ZiarPuvFXSx3K9_0#n};R_yYJug;ZIbfiB~aK!@1wTVKfN< zO`)_pqUJT3DRdzt?YEMTvKIDkCAE{Kw0gO?xLD+B)`C2n3rlzTKQBIrSL1L6Dv(20 zk>nOLI)i+2M?f3ht+#YZQ3{vTs>X7GZY?`t{{c1&{po{epZ*z2Zup9*JXi_RPz&l) zgQb}2^zwm+4Xvz6_5JBB2gcC?UH(!aY!?g9-a7hp@9%HX;$0_Ee3}#b)Y^>wP&YIL z)7w?$=E-;pG!pV@$nziSo^^_U=QYFn1&4s^iLM6Nm;dxzQi4>d?EQKYbnZ((UVMA@ z+%<4(ET!bT^v_wR0SlA+q>4bqr*!aQXg86%B=?o&09VMo(&ELxKmAzB3|5*PgGPMX z`gbg7{{+McItbmgJ-KP}BYLwa-7>F+#PZq6WF>Rv-F$=n(YS-NDm%n4*Z!^mjdge_jLvTEHuP0niYbI5+?MpeKx3NkDpw9bl9_o|>Ed z_dzp2A=K~LxH1y$o%rnFznI^TBzKho^3fOE9yUlmwfvpt*igFx{PGzLdXGjdsp?Gt zg|I)<5WtXCK={WDjotfSue479)nvl68HA}h3BiB2cx5})Hi<`ns5A*+NP9tqr(gZQ|9>i@SZz@2X`VTfaDFJv>3js(N zJX@11lSuDByV1%8K+2+m?to(C1yvg?B>wLRvM}Q0-iM$ENOZ1&#I=gQqYnP@3n9=b z_QJeH|F0ha@_ppe_q&%8rT^Q(f8OX4bn^6n{J;=7GzOv{))aMo&i}mXUI=(qZRm#- zAZul@+W-4P2v{ydR?_hWNL=TCeuEtHdJE9jUy=m>Z8JPr6FXK!(3PwI?@P_qZK-2c z;z1!q`W`5R{M-4;N?@?)A+L)6*-uwMD(QbV`~>=;^FMk@IsXRE+|K{}4SPuV?*D8D zKIB#QzuMuC3uS=YUs4Zq=)YSM2y~=D{zDb*2A0A9+j2t!C>+evrJtX&{yTk*5OozH#gMt7*Se$b=gAl#xs!q~{o|8b9ky0`P%yeqb0J6p))E*K8*5yP#gnK_ zSi5a6F225(fB%dSI$+FR2&Jv5HB1AU2U2JYKokxkT076caS2bVeFX_*j5|AA z$8n)QV1S9s3$p@*!_J?_ zkEq#_>&qZ^u-X-4bGrJh?!wSZ2l(Sn^xk(`IG4aS)(Wl-9KE8PTy|*l$dOrFoJy6i z=!#GOBuTBPxc_S5NC-w`Zx21HEUxfz@bNhY!Hr=-Z)QrF6JAg()Z&)7>;biSa`gD@ z12rygFD@WPWH&5!3Cge%-?c~i05JbKE;O`t!Uy!90l7F3q_M9spo$#73FZn(2bArp6~=BF*j*wByT_?Ytp5a^Wo^dZ?y0t<-=EoPU451 zt0%e}29X%!3i}h=iHTB%EmQeeO!mrUY|6U7+pwPAI8*M`-+Hx}%S7Rq5VD?Si@?-1#^P*lKn1-m~&cr{FqS^k(eezsFSHw8vyvPA;+V;=99R| z<7OGNGg0$2I*;k*rva<%{qQ3p!O(=g8-ybSf>+VbVtL*fou&`C{%#s8I5@ea&CNz2 zP$%H2z1YfEDhU}Bw_l9RwlI`$P;VWh-kg8f)1&J=F{g^&8>EF-39b!+%o7S#U%zz) zGDEv1t~O!QGIkdRw{qWuD}}#5Ay`ZL%*#z?A0s_aV0J{MXGe(Immc3hoYz1D}|UYhwLkl zA0D+YGR|UBJXTAVR`I|MoKNS9sS>+7}4ORjaG3ZySOm^XA9;ILyryoq`FO#2bGD z3)-tVqwavLvX8>>eR~v;NG`h(2Jm3Nf#Mo7SXgSR1nG<&-Mcna_dsq?Omrj0P|D6; zr0A0?M~FjYd+!xtE%{Ei>7L4D5<43Cw)Ys!1uYcDLA@Kl1FNt}|S8pjq z*-2tw&9N>9kO#(-WfncgNBCGxUUXFk!wxUINY{kdbKJ*{%R~O;WE!N@twnD+#7TN$ zSm%g#%1H?-mot3Nu!u*y>G`>>av+_@-p2(SDyg!^BAt4V9Txfcw};*HW_q~>+)|&o zrA2ql6d1SW9=-=+UpZGl0R8-hu!mhJ*V5$o+=ME%3V+XR4{W&nTq7Vn^2yuD-Vdy+ z1~iH%H=D^oNf^MNN0oemB4J+{$60&-hgu4sjLwg5GAbqM&DK_(?{3FpRsxanoT^y7 z_HIG&r$1oS^IlyGu*$0KeI1F1)bQ|8YAY05{t3bqAOHXiZ5Y(allrlPN}{v7;oBCt zlllQToSmWQ(2)~sjC|)$zkIFty{r9B0H@jyP*P{&iS3^empoDPDuAIOWcutGo<^>w zZvL`B7^V~0=Tzd)KUSfCInuXju7k-KEZ~sld-EJQQFW@>ch|O}C>@Rh?oovcUxX<$ zryWVHkS-U4lp681Q)O7!B@#~lj(?U2j=h%`sA+R~J|&j;u0vep=!#1itykDFg52dJ z6!duM;83F<(CO}8c8S&%QqIqF3YMnk-#ey-OIWpu*#klC@aX912dcqIYEMB}!iWKB z4$2b;luvqq#<@O6iE!2=Zjd%D$|~5|M}&f}fsUwk_xtznHCtcGxalM986#;Xt5Sb? zQ?-2#9s%dcgZ%q70SNZr>JQkG&2Cu4mXbx?W1p-|Cz9U#ZON+qUQbQ;!oWW% z094-8xf#F7W`RZzKIi2>k(hiO@N=VCYz9-h&cKhpH-H_h@>Xi7#0?msbbW8e1KhHTE@f%K9R|uFXbb7B;GO#bZ^V z*Trq8M~m{g_=7Tn&JP63Hn6zQ!>3O#_HBp-V`{n&`=ZL-^1_mT^si3Huy&jP-jbYw z+wL5L3Mbd2PnEGc_nTPy_!i5E>+ef%Uo^1!lXu~n$BT-);+*PUPT}T<7_F#nKlE1{ zSDBLhJ#Qg&z4I%B&Dd1C7FygLh{~$y#?I=*&?>iI&dux6dg(9xCcK>rX=tlUo;Okc zWa+!`gWtm$%g(p#xT-#lP-ZX_zM*0I&)K27)T`vY3!c8Psj z?D3qNA2Aeomk&ZOQv7xYO0DATo?lIKGQWu`aQrya?PPFPrS(`h)XTrG_Q;%i5NF0N zINwD#2ryDKrEZ}B66iSE5{W+Z%q7h;aS1wz20KEy<8vIO;I4~-}4hUZ_3@f&SKgZ~qErkN&x83j@lLeW#q*Z{CgQHr(wX51*|2@8Em zLG^0TBty-iQLOXj8){2^F7nSFJ~<9xUze%7T4e&HbedHNL;@2RV&`kF6F+L|tJ*Ad zey})QaciFLX}bcUIPu)~s1o^6?FF42Pq5}w9p142XaM0uJ`a&dXf*#!nZamGbToDH zK4Q3nb}$#WFN$5Pd@`zhjO2qiQ2MXesn!{5(|XpbPo}b%BL=Vzw}G7*}{qM`1i5K$h zb^pLOT2s0;Uj-moq9qrOftSkKIe5NX z7WABuJ#)65o!NAw*nP33Vei=Q*4wu|?Wpp8H5E`ShVv}*jGKK7hwm?(oDD~>-iRSF z%v1{$XL#)OyxQiAULZS=7qUNS=R=|U)zs8xtQVwy2mmF?hB`h;nWI?ou3x?S(Rt6j zE)~=|++9;V)ufMT)%W=E)nr*X9^lggUp#;A#S>|F?W>;WW1rNC2Yf{Y1_7t=38lnv$bxl$aIRs z>z;ZxN71o(3Eu+_$Ni5gL{kMx^Q*m!T~uawQumJ~$&RHUJSkdl* z0E_F8SK-Ul)N4W!*^yp`H*bXZCrG0@)IeR=7g&Y4GYKuN05HI&u94CALMcI2{hgt2 z6B82_&Qy}K4%E22)N)F_}PRC96*e4IW zR7B>mj}Nw2poNF%d#4M5j&QIZphK+01Of97k(gHYgfs#%1wX3Tg`+KSIO^B`{X!`- zZSJDInAZvMoz&=4>ug-wFJ`c&?OCu6?$tT!$9te-eLhpIfj1131&>av90`PlTMPdl zV1q|pz?oSnGAia4K*>8kvh#LHN6gp3TFX}k48hQbtqkZ8aYli5D_#Ugy)+%3(s|&GNdqM_>YOt0*_ef?Uf;fPo2tb5E;5xzg(-ki`+hq=K#ZOC0*tmK9ozUX zV{~i8ph-6O2PhDfv^X9yHMPPqj&{h~%5R2!;$4%z-ZCCP5W!8= z;1)spxsx*ux;E`OgnfCioF~xpz$;rpBBynDDyv94cLoaYzN zx#&K@Ae(n`YWKX1&FQ{if$mTTZv;qUYx&$NH@6(?3#Mplb3v)gKxc&6O7~MF4J3oG%gd+@q~}JaF}OoG4sch z7p^)Jmo3aLEqm3!MXw1^@lzAX8e1CMxV5_YgeQgoWj3$Z$-PxRUPqH6II9c08~2l_ z{l6y0+$!GPdH5Ah*QNp%M*>MWCP$W#3fV0e`eOKVnLO$cXYxFpkCuf12QhXH+hwTi z=4%(jS$tg>4$a0JA~%1)CJ%^5oL^2(o|?Roobd~`f1k$@|5Xuot3G+O_H|`bWBRU% z??XEt(FwKK(lp0$p@z*0Spv_E#=)-#GWI=rpPg5NuBabU*^30~kq+^(WnGZN9Vpm;-0yzu6{fiHYu zBzWm@tp{rz2*q%*!MvW^z1$N*y9gLIFsBZ)n<aVR| zxdkaY1oDR(cA1Qu54nk z1ziPmx>s*q;Tz)H39yvBt4!N7%;tqBkxIgzCc|Z)g>Lb>#B(n2aMjJH+CE1D?4Jir zVBOt#f{6V|&B!sE-JzrLFmksD46;pMw`}jEI*FnN8kRBEV9J-6))^S4vD=8Ap>7Erhj}yOqE^4lg;<#3trDywcNf&=KMQC(ex5`d9M6(G)QFy;sMS)H=w2wQDvX;hFSh| znn1xwW~Y@eucj%u47^HHh>^EEaz~~d7ZK4%E3M-H`OstVdtX6X#dN({hf%4O?qfCK zzfU%qg1gN(gBDf~JZbz-3v=yu*r}WPeXKDU;`TfPq_$m^VVz8ME%k@aZd4 zX9LU7#z)}4WHO+^+E`Ihq4kDz=|68k%X0@7{riNY%SLSXB3%CM9$>_dT?^Him3P81u^`#GU{RGMiYB;nv%$~b|J3cBHIOIy#g~iS z>9D6P_Mm-85~t}B(VsNpBSF-<^rt<5m8oN!&gv7bxmN%GdnMGI_Y582bTMW>$Q^1I z^Z-x)e$NuU2e2f@lPqCG|Mo60mJbC%0H9K5j~sge+M1mmi#tZ=Y0^(TBsFceB=Acf zljk-6r&mGunoxp`_X=`A|1qLjyHHE=p;>65>>e$$F&c9w$GR_nqdgAizb`F)^?6!a z{aej^r>5Q4i1~>}mB+<`f;u9gyccK$cLox^*-1Xh(WYI0r}Lk+mxVpOiRs!#F)MPp zLpM>%f^WIS3aGL{YvpWDEwsMZZM_F9>GS$Ky#IH=zkv4<wqdscd2%V_3wD8Y>EOAF&9b{f*!O&^FANIAItaQN);`hB#R%g!@ zN4=XAg#Fno{*J(kP;keDZ1b>=FD6v5PBVW)#Cg6gvdUgh1YK}P`4=A2Fp;eZl&q`m z>Em$!+XDe4Kg1m;oT)%1134g+q$xSA`&{JcWgP1^Ncn%iGm2N#@U#2V@bEAr zYJU0_FlHeTQ{61}z>ImZE@kc(mD(sY0UMYr+}zyFgX=NUH2-!51Rn!4tIYAE#3dS< z`^r0smekbLB4}_)tpO7_wKA*nY?6m)c3dM8@tY zQrQi&?zw?*&IOZ0!S?i8>rqPO$Tm^y51Oh$x}pCw5!K*Wk&Kb!_crO;RGq&{b8{Kh z3T6gN8N)I937S8zT1qC`?myRD`>J1tm;B$^-Vzd2YOISYtPD`63_H}jZ_iq05pI2c zc3Pg8nE2A9adxPvvdPije)E)_o&EhZWmw&Rx05&!=>Dceo(AvyG6X!?>4b?g*|y6B z(myN<_j4}D`)R{>01~-wtT6cP|LK}LQp%qqIcLnjcpd!ywX2;j;eWj3aM67Uk*kJu z{Ov=7G|b=+8)ZIrA(hJ%^ZsdGs4uHQ^PgSM3Jm2IT{Zz`NTjB zr~@-0#O*R9xc3eg>2+0S#{S?+vZlJHJum5hx_1K(Tjjb|jTk6gy=kG_+^khR>bSBr z|K+wbW~>g7qCk{=&WJoUP1EpsR~j~Os<%$?k!Nu~YA=RT!;R$MmuPt*wFW1ay7$alTR@TD(P%0Rx#(XpK@qXqXPWkURw_p(1 z(+-#@4C^%~V~Y3>)OtDm(D0psN0r?lk~3&-dtzK-2JF#ph0()$>kH^TNi+~vC$Ag< zDh5nI?480}R+kEwwnd|fkb+BieSJL!nC;FqPCi}G8CrJ_Q0)V?yTme(Wpsl8CuDuO?6G9X+Yh|Os zkK#B^BH)c1M1IZwlCMnuz1F%}UMA1wsqVJ=Q$3j-I(uK#K7ZDUykSGLKLz@eGNV6M zwzQFNa!cEf4gDL=Gd`)VW?3A^$$47OtiwzT_1Voy)w+%*&kXcPoM00cl_7zFsb z$@#lco4>Z@?6mdL@HmdAgb@3PXqJd(EOkHCu;aFBwaT+eeLwo{5M@0$c<|um^?LoM zwAR-&rpc}rLhw0*!2tr@5?E_<2j1$=JiALw?y`+Lbo1^#%W+FS0--k^`)r#BsmevX{*&4)1^m&oVzC$gz7mTl@Z^kvg` zE#=bovZ*|ty=$JQeNA-pk=+=L!r+wHuqK39iR1W;<2Wnzdi{*+x+_Yl=Z9_kP#vOS zcYZs!?|I%d=K}E*^~}tS%XvWcdfnw5AkN?6^E9W&O>=)-&il#E)7+k{v2 zb`;2DQ=y4XM*d1O7b;)huq&Gq-H@}Ci#TlPtD(PH*VJ#^{cmXBV4M677(ep)C|NT? zmdgp*AZO;b}sXM>{}LNt)*ckWzr&iOF>_reP=XfB_an22k&+PUrg+l;=AE&(`1qdPXR z3@~3Mt5vr83=#?2!H?xfWUwVz#$qC zXfy)?AOHd&00JN|x&+`5jqcdMG7ta(5C8!X0D%D!fI~DO&}aq(KmY_l00cl_bP2#A p8r`vhWgq|oAOHd&00ILd@P7ffoO!ZOBYgk>002ovPDHLkV1j%=BZdF~ literal 54866 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
tL`%HDi=s5&HR<20%Mc2UDTFE(6PqcpbPw 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 OX{qa}6{(!P{{I2 Date: Fri, 19 Apr 2024 18:47:46 +0200 Subject: [PATCH 08/13] Fix drawing on layouts different then folio --- package.json | 2 +- src/book.js | 26 +++++++------- src/models/configuration.js | 2 +- src/utils/drawing.js | 72 +++++++++++++++++++++++++++++-------- src/utils/formUtils.js | 2 +- src/utils/renderUtils.js | 6 ++-- 6 files changed, 78 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index b4f5596..68f9189 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bookbinder", - "version": "1.4.0", + "version": "1.5.0", "description": "An app to rearrange PDF pages for printing for bookbinding", "type": "module", "scripts": { diff --git a/src/book.js b/src/book.js index 7a44e2f..b44a229 100644 --- a/src/book.js +++ b/src/book.js @@ -93,7 +93,7 @@ export class Book { isEnabled: configuration.sewingMarksEnabled, amount: configuration.sewingMarksAmount, marginPt: configuration.sewingMarksMarginPt, - spacingPt: configuration.sewingMarksTapeWidthPt + tapeWidthPt: configuration.sewingMarksTapeWidthPt }; this.pdfEdgeMarks = configuration.pdfEdgeMarks; this.cutmarks = configuration.cutMarks; @@ -554,18 +554,17 @@ export class Book { const block = config.embeddedPages.slice(block_start, block_end); const currPage = outPDF.addPage(papersize); - const sewingMarkPoints = sewingMarks.isEnabled ? drawSewingMarks(papersize, sewingMarks.amount, sewingMarks.marginPt, sewingMarks.tapeWidthPt) : []; const cropLines = cutmarks ? drawCropmarks(papersize, this.per_sheet) : []; const foldLines = foldmarks ? drawFoldlines(side2flag, this.duplexrotate, papersize, this.per_sheet) : []; - const drawLines = [...cropLines, ...foldLines]; - const drawPoints = [ ...sewingMarkPoints]; - - block.forEach((page, i) => { - if (page == 'b' || page === undefined) { - // blank page, move on. - } else if (page instanceof PDFEmbeddedPage) { + const drawLines = [...cropLines, ...foldLines]; + const drawPoints = [ ]; + + block.forEach((page, i) => { + if (page == 'b' || page === undefined) { + // blank page, move on. + } else if (page instanceof PDFEmbeddedPage) { const { y, x, sx, sy, rotation } = positions[i]; currPage.drawPage(page, { y, @@ -577,16 +576,19 @@ export class Book { } else { console.error('Unexpected type for page: ', page); } - + if (pdfEdgeMarks && (sigDetails[i].isSigStart || sigDetails[i].isSigEnd)) { drawLines.push(drawSpineMarks(sigDetails[i], positions[i])); } + const sewingMarkPoints = sewingMarks.isEnabled ? drawSewingMarks(sigDetails[i], positions[i], papersize, sewingMarks.amount, sewingMarks.marginPt, sewingMarks.tapeWidthPt) : []; + drawPoints.push(...sewingMarkPoints); }); - + drawLines.forEach((line) => { currPage.drawLine(line); }); - + + console.log("drawpoints", drawPoints) drawPoints.forEach((point) => { currPage.drawCircle(point); }) diff --git a/src/models/configuration.js b/src/models/configuration.js index 4de88f6..0dde7b5 100644 --- a/src/models/configuration.js +++ b/src/models/configuration.js @@ -98,7 +98,7 @@ export const schema = z.object({ sewingMarksEnabled: urlSafe(coercedBoolean).default(false), sewingMarksMarginPt: urlSafe(z.coerce.number()).default(72), sewingMarksAmount: urlSafe(z.coerce.number()).default(3), - sewingMarksTapeWidthPt: urlSafe(z.coerce.number()).default(36) + sewingMarksTapeWidthPt: urlSafe(z.coerce.number()).default(36), paperSizeCustomWidth: urlSafe(z.coerce.number()).default(0), paperSizeCustomHeight: urlSafe(z.coerce.number()).default(0), diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 94b7ed1..bb3d2b9 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -122,37 +122,81 @@ export function drawCropmarks(papersize, per_sheet) { } /** + * @param {@param {import("../book.js").PageInfo}} sigDetails - information about signature where marks will be printed + * @param {import("../book.js").Position} position - position info object * @param {number[]} papersize - paper dimensions * @param {number} amount - amount of sewing crosses. * @param {number} marginPt - distance from the end of sheet of paper to kettle mark * @param {number} tapeWidthPt - distance between two points in a single sewwing cross. * @returns {Point[]} */ -export function drawSewingMarks(papersize, amount, marginPt, tapeWidthPt) { - const [width, height] = papersize; - - const y = height * 0.5; - const commonCircleValues = {y: y, size: 1, color: grayscale(0.0)} +export function drawSewingMarks(sigDetails, position, papersize, amount, marginPt, tapeWidthPt) { + console.log("sigDetails", sigDetails); + console.log("position", position); + console.log("papersize", papersize) + + // Here normalize coordinates to always think in x an y like this + // | P |H| P | + // | A |E| A | + // | G |I| G | + // | E |G| E | + // | |T| | + // |-POSITION-| | | + + var arePageRotated = Math.abs(position.rotation) === 90; + let spineHeight = 0; + let spinePosition = 0; + + if (arePageRotated) { + spineHeight = Math.abs(position.spineMarkTop[0] - position.spineMarkBottom[0]); + spinePosition = position.spineMarkTop[1] + } + else { + spineHeight = Math.abs(position.spineMarkTop[1] - position.spineMarkBottom[1]); + spinePosition = position.spineMarkTop[0] + } + + console.log("spine properties", { + spineLength: spineHeight, + reverseCoords: arePageRotated, + height: spinePosition + }) - const workingWidth = width - 2 * marginPt; + const commonCircleValues = { /*y*/ spinePosition, size: 1, color: grayscale(0.0) } + + const workingWidth = spineHeight - 2 * marginPt; const spaceBetweenPoints = workingWidth / (amount + 1); let sewingPoints = []; - - for (let index = 1; index <= amount ; index++) { + for (let index = 1; index <= amount; index++) { const halfOfTape = tapeWidthPt / 2; sewingPoints.push( - {x: marginPt + spaceBetweenPoints * index + halfOfTape, ...commonCircleValues}, - {x: marginPt + spaceBetweenPoints * index - halfOfTape, ...commonCircleValues} + + { pointHeight: marginPt + spaceBetweenPoints * index + halfOfTape, ...commonCircleValues }, + { pointHeight: marginPt + spaceBetweenPoints * index - halfOfTape, ...commonCircleValues } ) - + } - return [ - { x : marginPt, ...commonCircleValues}, - { x : width - marginPt, ...commonCircleValues }, + const allPoints = [ + { pointHeight: marginPt, ...commonCircleValues }, + { pointHeight: spineHeight - marginPt, ...commonCircleValues }, ...sewingPoints ]; + + + allPoints.forEach(point => { + if (arePageRotated) { + point.y = point.spinePosition; + point.x = point.pointHeight + } + else { + point.y = point.pointHeight + point.x = point.spinePosition; + } + }); + + return allPoints; } /** diff --git a/src/utils/formUtils.js b/src/utils/formUtils.js index 26d3232..1766dc9 100644 --- a/src/utils/formUtils.js +++ b/src/utils/formUtils.js @@ -44,7 +44,7 @@ const fromFormToConfiguration = (form) => sewingMarksEnabled: form.get('add_sewing_marks_checkbox'), sewingMarksMarginPt: form.get('sewing_marks_margin_pt'), sewingMarksAmount: form.get('sewing_marks_amount'), - sewingMarksTapeWidthPt: form.get('sewing_marks_tape_width_pt') + sewingMarksTapeWidthPt: form.get('sewing_marks_tape_width_pt'), }); /** diff --git a/src/utils/renderUtils.js b/src/utils/renderUtils.js index cc821be..1c8b299 100644 --- a/src/utils/renderUtils.js +++ b/src/utils/renderUtils.js @@ -201,11 +201,11 @@ export function renderFormFromSettings(configuration) { // Set french link stitches settings document.querySelector('input[name="add_sewing_marks_checkbox"]').checked = configuration.sewingMarksEnabled; - document.querySelector('input[name="sewing_marks_margin_pt"]').value = + document.querySelector('input[name="sewing_marks_margin_pt"]').value = configuration.sewingMarksMarginPt; - document.querySelector('input[name="sewing_marks_amount"]').value = + document.querySelector('input[name="sewing_marks_amount"]').value = configuration.sewingMarksAmount; - document.querySelector('input[name="sewing_marks_tape_width_pt"]').value = + document.querySelector('input[name="sewing_marks_tape_width_pt"]').value = configuration.sewingMarksTapeWidthPt; // Set freeform inputs From b42652cc602e3473ff112fa8dc5403eac6da472d Mon Sep 17 00:00:00 2001 From: MikDal002 Date: Fri, 19 Apr 2024 17:13:49 +0000 Subject: [PATCH 09/13] Fix prettier --- src/book.js | 38 +++++++++++++++++------------ src/html/page_layout.html | 50 +++++++++++++++++++-------------------- src/utils/drawing.js | 37 +++++++++++------------------ 3 files changed, 62 insertions(+), 63 deletions(-) diff --git a/src/book.js b/src/book.js index b44a229..146523b 100644 --- a/src/book.js +++ b/src/book.js @@ -93,7 +93,7 @@ export class Book { isEnabled: configuration.sewingMarksEnabled, amount: configuration.sewingMarksAmount, marginPt: configuration.sewingMarksMarginPt, - tapeWidthPt: configuration.sewingMarksTapeWidthPt + tapeWidthPt: configuration.sewingMarksTapeWidthPt, }; this.pdfEdgeMarks = configuration.pdfEdgeMarks; this.cutmarks = configuration.cutMarks; @@ -511,7 +511,7 @@ export class Book { cutmarks: this.cutmarks, alt: config.alt, side2flag: side2flag, - sewingMarks: this.sewingMarks + sewingMarks: this.sewingMarks, }); block_start += offset; block_end += offset; @@ -558,13 +558,13 @@ export class Book { const foldLines = foldmarks ? drawFoldlines(side2flag, this.duplexrotate, papersize, this.per_sheet) : []; - const drawLines = [...cropLines, ...foldLines]; - const drawPoints = [ ]; - - block.forEach((page, i) => { - if (page == 'b' || page === undefined) { - // blank page, move on. - } else if (page instanceof PDFEmbeddedPage) { + const drawLines = [...cropLines, ...foldLines]; + const drawPoints = []; + + block.forEach((page, i) => { + if (page == 'b' || page === undefined) { + // blank page, move on. + } else if (page instanceof PDFEmbeddedPage) { const { y, x, sx, sy, rotation } = positions[i]; currPage.drawPage(page, { y, @@ -576,22 +576,30 @@ export class Book { } else { console.error('Unexpected type for page: ', page); } - + if (pdfEdgeMarks && (sigDetails[i].isSigStart || sigDetails[i].isSigEnd)) { drawLines.push(drawSpineMarks(sigDetails[i], positions[i])); } - const sewingMarkPoints = sewingMarks.isEnabled ? drawSewingMarks(sigDetails[i], positions[i], papersize, sewingMarks.amount, sewingMarks.marginPt, sewingMarks.tapeWidthPt) : []; + const sewingMarkPoints = sewingMarks.isEnabled + ? drawSewingMarks( + sigDetails[i], + positions[i], + papersize, + sewingMarks.amount, + sewingMarks.marginPt, + sewingMarks.tapeWidthPt + ) + : []; drawPoints.push(...sewingMarkPoints); }); - + drawLines.forEach((line) => { currPage.drawLine(line); }); - - console.log("drawpoints", drawPoints) + drawPoints.forEach((point) => { currPage.drawCircle(point); - }) + }); if (alt) { side2flag = !side2flag; diff --git a/src/html/page_layout.html b/src/html/page_layout.html index 26f391a..04dd6b5 100644 --- a/src/html/page_layout.html +++ b/src/html/page_layout.html @@ -82,40 +82,40 @@

Page Layout

- - + +
Detailed settings for sewing Look at the image below. - + pt
+ type="number" + id="sewing_marks_margin_pt" + name="sewing_marks_margin_pt" + class="layout_margin_user_input_field" + />pt
- +
+ type="number" + id="sewing_marks_amount" + name="sewing_marks_amount" + class="layout_margin_user_input_field" + />
- + pt
- sewing image + type="number" + id="sewing_marks_tape_width_pt" + name="sewing_marks_tape_width_pt" + class="layout_margin_user_input_field" + />pt
+ sewing image
diff --git a/src/utils/drawing.js b/src/utils/drawing.js index bb3d2b9..41937ac 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -23,7 +23,7 @@ import { rgb, grayscale } from '@cantoo/pdf-lib'; * @property {number} y, * @property {number} size, * @property {Grayscale|RGB|CMYK} color, - * + * */ /** @@ -131,10 +131,6 @@ export function drawCropmarks(papersize, per_sheet) { * @returns {Point[]} */ export function drawSewingMarks(sigDetails, position, papersize, amount, marginPt, tapeWidthPt) { - console.log("sigDetails", sigDetails); - console.log("position", position); - console.log("papersize", papersize) - // Here normalize coordinates to always think in x an y like this // | P |H| P | // | A |E| A | @@ -149,20 +145,19 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP if (arePageRotated) { spineHeight = Math.abs(position.spineMarkTop[0] - position.spineMarkBottom[0]); - spinePosition = position.spineMarkTop[1] - } - else { + spinePosition = position.spineMarkTop[1]; + } else { spineHeight = Math.abs(position.spineMarkTop[1] - position.spineMarkBottom[1]); - spinePosition = position.spineMarkTop[0] + spinePosition = position.spineMarkTop[0]; } - console.log("spine properties", { + console.log('spine properties', { spineLength: spineHeight, reverseCoords: arePageRotated, - height: spinePosition - }) + height: spinePosition, + }); - const commonCircleValues = { /*y*/ spinePosition, size: 1, color: grayscale(0.0) } + const commonCircleValues = { /*y*/ spinePosition, size: 1, color: grayscale(0.0) }; const workingWidth = spineHeight - 2 * marginPt; const spaceBetweenPoints = workingWidth / (amount + 1); @@ -171,27 +166,23 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP for (let index = 1; index <= amount; index++) { const halfOfTape = tapeWidthPt / 2; sewingPoints.push( - { pointHeight: marginPt + spaceBetweenPoints * index + halfOfTape, ...commonCircleValues }, { pointHeight: marginPt + spaceBetweenPoints * index - halfOfTape, ...commonCircleValues } - ) - + ); } const allPoints = [ { pointHeight: marginPt, ...commonCircleValues }, { pointHeight: spineHeight - marginPt, ...commonCircleValues }, - ...sewingPoints + ...sewingPoints, ]; - - allPoints.forEach(point => { + allPoints.forEach((point) => { if (arePageRotated) { point.y = point.spinePosition; - point.x = point.pointHeight - } - else { - point.y = point.pointHeight + point.x = point.pointHeight; + } else { + point.y = point.pointHeight; point.x = point.spinePosition; } }); From 83abf3866d3388a9b93d790d2b9727560904063c Mon Sep 17 00:00:00 2001 From: MikDal002 Date: Fri, 19 Apr 2024 17:17:04 +0000 Subject: [PATCH 10/13] Fix tests --- src/book.test.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/book.test.js b/src/book.test.js index a008292..dd236d0 100644 --- a/src/book.test.js +++ b/src/book.test.js @@ -44,6 +44,12 @@ describe('Book model', () => { fore_edge: 0, top: 0, }, + sewingMarks: { + amount: 3, + isEnabled: false, + marginPt: 72, + tapeWidthPt: 36, + }, managedDoc: null, page_positioning: 'centered', page_scaling: 'lockratio', From fbb5cc011cd5974c69f4ef431b54f5d0fe3c8d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Dalecki?= Date: Fri, 19 Apr 2024 19:32:42 +0200 Subject: [PATCH 11/13] Add drawing ALL points in other layouts --- src/utils/drawing.js | 46 ++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 41937ac..85dde6c 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -140,54 +140,50 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP // |-POSITION-| | | var arePageRotated = Math.abs(position.rotation) === 90; - let spineHeight = 0; + let totalSpineHeight = 0; let spinePosition = 0; if (arePageRotated) { - spineHeight = Math.abs(position.spineMarkTop[0] - position.spineMarkBottom[0]); + totalSpineHeight = Math.abs(position.spineMarkTop[0] - position.spineMarkBottom[0]); spinePosition = position.spineMarkTop[1]; } else { - spineHeight = Math.abs(position.spineMarkTop[1] - position.spineMarkBottom[1]); + totalSpineHeight = Math.abs(position.spineMarkTop[1] - position.spineMarkBottom[1]); spinePosition = position.spineMarkTop[0]; } - console.log('spine properties', { - spineLength: spineHeight, - reverseCoords: arePageRotated, - height: spinePosition, - }); - - const commonCircleValues = { /*y*/ spinePosition, size: 1, color: grayscale(0.0) }; - - const workingWidth = spineHeight - 2 * marginPt; + const workingWidth = totalSpineHeight - 2 * marginPt; const spaceBetweenPoints = workingWidth / (amount + 1); - + let sewingPoints = []; for (let index = 1; index <= amount; index++) { const halfOfTape = tapeWidthPt / 2; sewingPoints.push( - { pointHeight: marginPt + spaceBetweenPoints * index + halfOfTape, ...commonCircleValues }, - { pointHeight: marginPt + spaceBetweenPoints * index - halfOfTape, ...commonCircleValues } + { pointHeight: marginPt + spaceBetweenPoints * index + halfOfTape }, + { pointHeight: marginPt + spaceBetweenPoints * index - halfOfTape } ); } - + const allPoints = [ - { pointHeight: marginPt, ...commonCircleValues }, - { pointHeight: spineHeight - marginPt, ...commonCircleValues }, + { pointHeight: marginPt }, + { pointHeight: totalSpineHeight - marginPt }, ...sewingPoints, ]; - - allPoints.forEach((point) => { + + const commonCircleValues = { size: 1, color: grayscale(0.0) }; + const drawablePoints = allPoints.map((point) => { + point = { ...point, ...commonCircleValues }; if (arePageRotated) { - point.y = point.spinePosition; - point.x = point.pointHeight; + point.y = spinePosition; + point.x = point.pointHeight + position.spineMarkBottom[0]; + } else { - point.y = point.pointHeight; - point.x = point.spinePosition; + point.y = point.pointHeight + position.spineMarkBottom[1]; + point.x = spinePosition; } + return point; }); - return allPoints; + return drawablePoints; } /** From 97dde878ada44ab982c5d045f35eb397be7ed1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Dalecki?= Date: Fri, 19 Apr 2024 22:54:11 +0200 Subject: [PATCH 12/13] Fix printing on the edge --- src/book.js | 1 - src/utils/drawing.js | 17 +++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/book.js b/src/book.js index 146523b..5e5f2b6 100644 --- a/src/book.js +++ b/src/book.js @@ -584,7 +584,6 @@ export class Book { ? drawSewingMarks( sigDetails[i], positions[i], - papersize, sewingMarks.amount, sewingMarks.marginPt, sewingMarks.tapeWidthPt diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 85dde6c..886279b 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -124,13 +124,12 @@ export function drawCropmarks(papersize, per_sheet) { /** * @param {@param {import("../book.js").PageInfo}} sigDetails - information about signature where marks will be printed * @param {import("../book.js").Position} position - position info object - * @param {number[]} papersize - paper dimensions * @param {number} amount - amount of sewing crosses. * @param {number} marginPt - distance from the end of sheet of paper to kettle mark * @param {number} tapeWidthPt - distance between two points in a single sewwing cross. * @returns {Point[]} */ -export function drawSewingMarks(sigDetails, position, papersize, amount, marginPt, tapeWidthPt) { +export function drawSewingMarks(sigDetails, position, amount, marginPt, tapeWidthPt) { // Here normalize coordinates to always think in x an y like this // | P |H| P | // | A |E| A | @@ -139,6 +138,9 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP // | |T| | // |-POSITION-| | | + // Left pages has spine position on the endge :/ + if (position.isLeftPage) return []; + var arePageRotated = Math.abs(position.rotation) === 90; let totalSpineHeight = 0; let spinePosition = 0; @@ -153,8 +155,8 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP const workingWidth = totalSpineHeight - 2 * marginPt; const spaceBetweenPoints = workingWidth / (amount + 1); - - let sewingPoints = []; + + const sewingPoints = []; for (let index = 1; index <= amount; index++) { const halfOfTape = tapeWidthPt / 2; sewingPoints.push( @@ -162,20 +164,19 @@ export function drawSewingMarks(sigDetails, position, papersize, amount, marginP { pointHeight: marginPt + spaceBetweenPoints * index - halfOfTape } ); } - + const allPoints = [ { pointHeight: marginPt }, { pointHeight: totalSpineHeight - marginPt }, ...sewingPoints, ]; - - const commonCircleValues = { size: 1, color: grayscale(0.0) }; + + const commonCircleValues = { size: 1, color: grayscale(0.0) }; const drawablePoints = allPoints.map((point) => { point = { ...point, ...commonCircleValues }; if (arePageRotated) { point.y = spinePosition; point.x = point.pointHeight + position.spineMarkBottom[0]; - } else { point.y = point.pointHeight + position.spineMarkBottom[1]; point.x = spinePosition; From 93956874d4cc02081d068d88186adafea325fa6c Mon Sep 17 00:00:00 2001 From: MikDal002 Date: Tue, 23 Apr 2024 18:04:34 +0200 Subject: [PATCH 13/13] Update src/utils/drawing.js --- src/utils/drawing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/drawing.js b/src/utils/drawing.js index 886279b..afeb25c 100644 --- a/src/utils/drawing.js +++ b/src/utils/drawing.js @@ -138,7 +138,7 @@ export function drawSewingMarks(sigDetails, position, amount, marginPt, tapeWidt // | |T| | // |-POSITION-| | | - // Left pages has spine position on the endge :/ + // Left pages have spine position on the edge :/ if (position.isLeftPage) return []; var arePageRotated = Math.abs(position.rotation) === 90;