Показать/Скрыть содержание

    Отображаемая подпись PDF-документов

    СЭП КриптоПро DSS позволяет добавлять в PDF-документы видимую (отображаемую) подпись. Видимая подпись может служить подтверждением факта подписания электронного документа при его печати.

    Шаблоны подписи

    Для того чтобы поставить видимую подпись в электронный PDF-документ, необходимо передать описание представления подписи в запрос на формирование подписи. Представление подписи (в терминологии PDF «signature appearance») можно описать шаблоном подписи, содержащим параметры данного представления.

    СЭП КриптоПро DSS позволяет добавлять три вида вида шаблонов видимой подписи:

    • Простой текстовый шаблон
    • Шаблон с логотипом и текстом
    • Шаблон в виде изображения

    Общие параметры шаблонов

    Размеры всех элементов в представлении подписи и в шаблоне указываются в единицах измерения – типографских пунктах Adobe (points). 1 пункт = 1/72 дюйма = 0,3528 мм.

    Цвет элементов указывается в системе RGB (red, green, blue; красный, зелёный, синий).

    Положение представления подписи на странице задается в системе координат PDF документа. Точка с координатами (0, 0) соответствует левому нижнему углу страницы.

    ColorDescription

    Описание цвета элемента. Описание полей приведено в таблице ниже.

    Поле Тип Описание
    Red int Значение красной компоненты цвета
    Green int Значение зелёной компоненты цвета
    Blue int Значение синей компоненты цвета

    SignatureRect

    Описание прямоугольника подписи. Описание полей приведено в таблице ниже.

    Поле Тип Описание
    LowerLeftX int X координата левого нижнего угла прямоугольника
    LowerLeftY int Y координата левого нижнего угла прямоугольника
    UpperRightX int X координата правого верхнего угла прямоугольника
    UpperRightY int Y координата правого верхнего угла прямоугольника
    BorderRadius int Радиус скругления углов прямоугольника
    BorderWeight int Толщина линии границы прямоугольника. 0 – отсутствие границы (значение по умолчанию)
    BorderColor ColorDescription Цвет границы прямоугольника. По умолчанию (0, 0, 0)
    BackgroundColor ColorDescription Цвет фона прямоугольника. По умолчанию (255, 255, 255)
    ContentMargin int Отступ от границы прямоугольника до содержимого представления подписи

    FontDescription

    Описание шрифта. Описание полей класса приведено ниже.

    Поле Тип Описание
    FontSize int Размер шрифта
    FontFamily int Название шрифта. Допустимые значения: times, arial. По умолчанию - times
    FontColor ColorDescription Цвет шрифта

    Textblock

    Описание блока текста. Блок текста – это набор символов, заканчивающийся переводом строки (абзац). Описание полей класса приведено ниже.

    Поле Тип Описание
    Text string Содержимое блока
    Font FontDescription Описание шрифта
    Margin int Отступ от границы прямоугольника до текста

    ImageBlock

    Описание изображения – логотипа или фона прямоугольника подписи. Для задания изображения в качестве фона необходимо указать только поле Image.

    Поле Тип Описание
    Image string Байты изображения, закодированное в Base64. Поддерживаемые форматы изображений: JPEG, JPEG2000, GIF, PNG, BMP, WMF, TIFF, CCITT, JBIG2
    LowerLeftX int X координата левого нижнего угла прямоугольника. Только для описания логотипа
    LowerLeftY int Y координата левого нижнего угла прямоугольника. Только для описания логотипа
    Scale Int Масштаб изображения. Только для описания логотипа.

    Подстановочные параметры шаблона

    Текстовые поля шаблона могут содержать подстановочные параметры. Подстановочные параметры могут быть заполнены данными из сертификата подписи. Поддерживаются следующие подстановочные параметры.

    Поле Тип
    SnCN Общее имя субъекта сертификата
    SnG Имя и отчество субъекта сертификата
    SnO Наименование организации
    SnSurname Фамилия субъекта сертификата
    SnINN ИНН субъекта сертификата
    SnINNLE ИНН ЮЛ субъекта сертификата
    SnOGRN ОГРН субъекта сертификата
    SnOGRNIP ОГРНИП субъекта сертификата
    SnEmail Адрес электронной почты субъекта сертификата
    IssuerCN Общее имя издателя сертификата (CN)
    IssuerINN ИНН издателя сертификата
    IssuerO Наименование организации издателя
    Serial Серийный номер сертификата
    Thumbprint Отпечаток сертификата (HEX-строка)
    NotBefore Время начала срока действия сертификата
    NotAfter Время окончания срока действия сертификата

    Подстановочные параметры задаются в шаблоне в формате: {0:param_name}. Например, {0:SnCN}. По умолчанию дата начала и окончания срока действия сертификата имеет формат dd.MM.yyyy HH:mm. Если необходимо изменить формат вывода даты, то формат должен быть указан в подстановочном параметре: {0:ParamName(m):ParamType(o):Base64(InFormat)(o):Base64(OutFormat)(o)} В данном случае InFormat не используется, поэтому он должен быть пропущен: {0:ParamName(m):ParamType(o)::Base64(OutFormat)(o)}. Если дату начала и окончания срока действия сертификата необходимо вывести в формате dd.MM.yyyy, то подстановочный параметр будет иметь вид: {0:NotBefore::ZGQuTU0ueXl5eQ==}

    Для того чтобы уменьшить размер запроса к API DSS, можно задать шаблон подписи в настройках DSS. В настройках сервера можно задать несколько шаблонов подписи. В этом случае в запросе подписи необходимо будет указать только ID шаблона:

    POST /SignServer/rest/api/v2/signature HTTP/1.1
    Host: hostname
    Content-Type: application/json
    Authorization: Bearer eyJ0eXAiOiJKV1 ... j1eqfIosyhlZw7A
    
    {
        "BinaryData": [
            {
                "RefId": "7507a987-3571-404b-a624-4e8e45aa0219"
            }
        ],
        "Signature": {
            "CertificateId": "73113",
            "ProcessingTemplateId": 5
        },
        "ForceConfirmation":false
    }
    

    Пример настройки шаблона отображаемой подписи PDF-документа:

    
    $appearance = "ewogICAiQ29udGVudCI6WwogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0J/QvtC00LvQuNC90L3QuNC6INGN0LvQtdC60YLRgNC+0L3QvdC+0LPQviDQtNC+0LrRg9C80LXQvdGC0LAsINC/0L7QtNC/0LjRgdCw0L3QvdC+0LPQviDQrdCfLCDRhdGA0LDQvdC40YLRgdGPINCyINGB0LjRgdGC0LXQvNC1INGN0LvQtdC60YLRgNC+0L3QvdC+0LPQviDQtNC+0LrRg9C80LXQvdGC0L7QvtCx0L7RgNC+0YLQsCDQnNC40L3QutC+0LzRgdCy0LfRj9C4INCg0L7RgdGB0LjQuC4iLAogICAgICAgICAiTWFyZ2luIjo1MCwKICAgICAgICAgIkZvbnQiOnsKICAgICAgICAgICAgIkZvbnRTaXplIjo0LAogICAgICAgICAgICAiRm9udEZhbWlseSI6ImFyaWFsIiwKICAgICAgICAgICAgIkZvbnRTdHlsZSI6MCwKICAgICAgICAgICAgIkZvbnRDb2xvciI6ewogICAgICAgICAgICAgICAiUmVkIjowLAogICAgICAgICAgICAgICAiR3JlZW4iOjAsCiAgICAgICAgICAgICAgICJCbHVlIjowCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0KHQktCV0JTQldCd0JjQryDQniDQodCV0KDQotCY0KTQmNCa0JDQotCVINCt0J8iLAogICAgICAgICAiTWFyZ2luIjo1MCwKICAgICAgICAgIkZvbnQiOnsKICAgICAgICAgICAgIkZvbnRTaXplIjo4LAogICAgICAgICAgICAiRm9udEZhbWlseSI6InRpbWVzIiwKICAgICAgICAgICAgIkZvbnRTdHlsZSI6MCwKICAgICAgICAgICAgIkZvbnRDb2xvciI6ewogICAgICAgICAgICAgICAiUmVkIjowLAogICAgICAgICAgICAgICAiR3JlZW4iOjAsCiAgICAgICAgICAgICAgICJCbHVlIjowCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0JrQvtC80YMg0LLRi9C00LDQvTogezA6U25DTn0iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIlRleHQiOiLQmtC10Lwg0LLRi9C00LDQvTogezA6SXNzdWVyT30iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIlRleHQiOiLQlNC10LnRgdGC0LLQuNGC0LXQu9C10L06INGBIHswOk5vdEJlZm9yZX0g0L/QviB7MDpOb3RBZnRlcn0iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KICAgXSwKICAgIlRlbXBsYXRlSWQiOjIsCiAgICJJY29uIjp7CiAgICAgICJJbWFnZSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJSUFBQUE2Q0FZQUFBQjhtb0hsQUFBQUJHZEJUVUVBQVlhZ01laVdYd0FBQUFsd1NGbHpBQUFPeEFBQURzUUJsU3NPR3dBQUFBSmlTMGRFQVArSGo4eS9BQUFBSlhSRldIUmtZWFJsT21OeVpXRjBaUUF5TURFMkxURXhMVEkxVkRBNU9qSXlPakEwS3pBeE9qQXdnNWZUNGdBQUFDVjBSVmgwWkdGMFpUcHRiMlJwWm5rQU1qQXhOaTB4TVMweU5WUXdPVG95TWpvd05Dc3dNVG93TVBMS2ExNEFBQXJzU1VSQlZIaGU3WndIckJSVkY4Y3ZuWUQwSmkzMEpnRkNid1pDUnpxQ1lPZ1FrQ0lCcWNGQ1ZYb25Ba292UVpTSEQwSkpDQ0dRRUdvSU5TQWRwU3E5RjBXWWIzN24zZUZiOXUzczI5MDNiMEc5djJUejN0eVpuYjB6ODcvbm5Idk8zVTFtMlNqRGY1N2srcS9oUDQ0UmdrRXdRakFJUmdnR3dRakJJQmdoR0lTb0M0SFo2c3VYTC9XVzRXMGh5ZklJUE96bno1K3JBd2NPcVAzNzk2dFRwMDZwVzdkdTZiMXhwRXlaVWhVdVhGaVZLMWRPdmYvKyt5cHYzcndxZWZMa0tsbXlaUG9JUTdUd1hBaTNiOTlXTzNmdVZIdjI3RkhuenAxVHFWS2xVc1dMRjFmNTh1VlQyYkpsVStuU3BaTUhqVWdlUEhpZ3JsKy9ybjc3N1RkMTllcFYyVmUxYWxWVnMyWk5WYkZpUlgxR1F6VHdWQWlyVnExUzY5YXRVeTlldkZCVnFsUlI3ZHUzVjRVS0ZaSjlicVBjK2ZnLy8veFQ3ZGl4US8zMDAwL3EvdjM3S2xldVhHclVxRkVxVDU0OHN0K1F0SGdpQk16L3ZIbnpaSVEzYTlaTXRXalJRa1ovcE96YnQwOXQzTGhSL2ZMTEw2cEJnd2FxYTlldUtuMzY5SHF2SVNsSXRCRG16SmtqSTdsOCtmSnErUERoS20zYXRIcFA0cUJiQnc4ZVZPUEhqNWR6VHAwNlZkeUxJV21JV0FoLy8vMjNtalZybHRxOWU3ZnEzTG16K3ZEREQvVWViN2w3OTY2YU5HbVNPblBtakxnS0JHZElBaEJDdU5nekFtdnc0TUZXbXpadHJMTm56K3JXcE1NV25XVmJIcXRWcTFhV0xUemRhdkNTaVBJSWMrZk9sVWgveElnUnFtalJvcm8xNlVpUklvWHEzNysvcWxTcGtyaUlYMy85VmU4eGVJWVdSTWpFeHNiS3lEeDI3Smh1aVM2MitLeE9uVHJwTFlOWGhHVVJzQUlyVnF5UW1VR1pNbVYwYS9Tdys2dSsrT0lMK1R0dTNEamRhdkNDc0lTd2N1VktsVEZqUnRXalJ3L2RFbDNJUldUSWtFRjE3OTVkSFQ1OFdGNEdiM0NkTlR4Ky9QaFZGaEN3Qm9NR0RWTFRwMCtYdFBDYjV1Yk5tekt0UkJpR3hPTnFFWll1WFNweitJY1BIOG8yQVZ2YnRtM2ZDaEZBamh3NWpBZzh4RlVJMUFMSUViUnIxMDV0MmJKRlVyNGRPM2JVZXczL05seGR3OHlaTTlYV3JWdjFsaEpMUU8yZ1ZxMWF1aVV5bmoxN3BwNCtmYXF5Wk1taVcxN245OTkvVisrKys2NGNSN1VTUVZLUnpKa3pwN2dxWDloMzc5NDlzUTZCSU9sRjNjSkpkMU1ENFp6Qnl1QlltWGZlZVVjU1dmVEJEYzVCSGNTM2hrTGg3TktsUytLeVNwUW9FYSsvZ011bHo4RmcwRkdaQlZ6Z2t5ZFA1RnBwSzFDZ2dHdmRCcmptRXlkT2lDV25mNkZhOEpDRjRGQ3FWQ25KOEdYT25GbTNoTWV1WGJ2a3ZJR2kvcUZEaDZvYU5XcElsbkxUcGsxU2dNcVVLWlBzUXlCbHk1WlZ3NFlOZTNXRHlUYVNkVnl5Wklscys3Tm8wU0oxNk5BaHFZTUFENHJQU0owNnRjdzgvT0ZtdDJ6WlVnU1BXK1Q4d0xGT3pJUW9BWkZNbmp4WmltbzhxREZqeGtnbDliMzMzcE1Ielh2dGFhNXEzYnExSE85QXdQM2pqeitLMkFKQnZZWThqZk1BTzNUb0lIKzUzd3lnUC83NFF6VnAwa1QxN3QxYnJzTVg3dXUzMzM2cmloUXBJdUkvZnZ5NENKdCtaczJhVlIvbEFrSUl4SXdaTTZ6R2pSc0hmRFZ2M3R4YXNHQ0JaWTgyZlhUb2tCbTBiNXJlaXN0U2doMkVXakV4TWZJL3JGdTN6anA2OUtqZWltUDc5dTJXUFdPdzdORXEyNmRQbjdaNjl1d3AvL3RqUHdpclY2OWUxb0FCQTNTTFpWMitmTmthT0hDZzNvclB4WXNYTGZ0QjZhM1grZnJycnkxN2xPbXQvM1B0MmpXclc3ZHUxcDQ5ZTNSTEhJOGVQYkltVEpnZ0x6S2pEcHlmNjNERG5wcGI1OCtmMTF1V1pidm0xN1p0TVZqTGx5KzNQdi84YzkwU2R3L0p2STRlUFRyZU02RmZ0aGd0V3hTNkpUQmhUUjhkR0RteHNiR3FTNWN1TXNJVEEyYnV1KysrRTNQYXBrMGIzUm9IcFdsZjZ0U3BvMXExYWlYVnlXRFF2NisrK2txQ1czOHphbCt6L2k4Ky9wL253SHR3SzR4SWY3QTY1RGFxVjYrdVcrS2dXbW8vTEhGTlI0NGMwYTF4L1BYWFgvcS8wUEIxVWR3bmFqdFluV1BIamtrYjFwSlpIVmFKNmIwdjlHdmF0R2xxOXV6WjRqYmNpRWdJRHR3NFRPaVFJVVBpWFd5b3JGbXpSdnhadjM3OWd2bytCNHBPWEhRd3Z2LytleEZWeVpJbGd6NzR4SUs3SU9ZSTVvZjc5T2tqSlhVdjRUN2hvaW5UQSs3R2Z4RDVRdjl3RGJndU54SWxCQWM2OU9XWFg4b0lDRWZ0TEdIRGx5S2tVTGx6NTA0ODFmdGltMzhSeWtjZmZlUTZ3cjJDVlZqRUNFeXQzY2llUGJ1NmN1V0szdklPZ2tnblNNWkNKaFFVc3ZLTC9ycmhpUkNBS0JxcmdETFhybDNyS2dqVVROQ0dTU1dJUXp4T0FPYVBmenNta2hSM3RXclZkTXZyOE9BeDAzYmNFSkoxU1N4MmZDQ3ptV0FRME5HWFlHWTVJZnlGWnNjeUluaGNKUllQVjVoUVRnV0xRSC9kOEV3SURsd3dVMFAvaU5hQmpoUFJzaTdSRHFqVWhRc1g5SjdYUVFSVUdkbFA5TXN5T0Rzb1U0MGFOUXFvZnM2TFMvamdndy9FSlVRRCtoanFBM1lUZTBJZ2dyTm56OHA5WUNVWWEwQUdEeDc4YWdBNWdnODJKUWJ1VDdBK2VDWUVIandLWGI5K3ZhcFhyNTV1RFF3QkR6Nk9kRFV2Z2gxL3VBRjc5KzZWcVNFV2hndmxRVGRzMkZBZjhUcU1FbDdPZENzYU1LY1AxSGRmSE1zWXFSQjQzN1p0MjhSNk1xVm1wZmZxMWF0bFFiQUQ5NU84UnpCd3FjSFdmM29paE5LbFMwdEhXYXFXSmswYTNab3dCUXNXVlBiMFRuMzIyV2ZpTG56QjNQRlF2L25tRzRtR2laU2RuRUlnUm80Y3FUNzU1Qk85RlIySXlPMnBuZlRWRFFMaC9Qbno2NjN3NGR4OSsvYVZ5SC9zMkxFUysvaGJXM0l2VHM3RERRcDBmR1hBalVRSkFmOUlnb2RPb3RSSUlBR0RYN2ZuNmFKYVh4SXlkNEJweEdyVXJsMWJzbm5SaEtYNnVDbUNYamVXTFZ1bUdqZHVyTGNpZzZsck1FajlNL3R5YzFQRUU4eHVnaTBvamxnSXJCakNDdFN0VzFlM1JBNWZjTUgvVTkzMC94Sk1RcERWdzVvUUlMNEpldlhxcGViUG55L0wrUDJaT0hHaUJMQ1ZLMWZXTFVrREtXa0NhS2FxL2k3aTZOR2o4cXl3dWs3YU9oQmhDWUVUa2VZbDlkdTBhZE9JbHBoemprQTVlQzZFaHpsbHloUlJOaTRtV01mQjJlOFdGeEJuK0taeThiZUJQdHVCNC9HM2dmQk5ML3ZDS0Z1OGVMRk16VDc5OUZNSjVsaE8xNzE3ZDVrNjR0WjhaekJjbDFzZ0RVeU5mVCtIN1lUdUE3QkdoSFEyN2hFM1NlekZ3Sm94WTRZTTJJU3NaY2kxQms3RWgyREtFd1BCRTlOQXQxd0FGb0ZaQjhkeEF6Qy9iaUFZMzZLU1AreG5adUxVUlRDeCtHeTNPZ25IODdtQnhFSU5nQ2xhc0drcGRRQ080MEV5eHc4VTA1Q2RaTDliTE1VM3hYaWY4L0NkdkVrb1lnRE9Ud0NMSldJUThCV0FZSDEyU0ZBSWpIclVqUVhnMEZCT2F2am5FZFExa0J4YXNHQ0JpQUJmUTFYTThPL0UxU0w0UTBCRzBJRVBMMWFzbUc1OU05QmxUSit4VHFIRFBjTzl1TG1Za0lVQTFQNnBLeXhjdURDc2ZJSFhiTjY4V1ZMVUJIZUJBamhEZkloLytCNHBPWWxBaENVRTVxTk1RK3JYcnk5VGxUY3hJZ21tU0VLUnhDTC9ZUENHc0lZVEdUSUVRQkRKYnlCRUc2TCtDUk1tU0JSTnJ0M2dIV0hiVmN3TFgzQmh2cHpRQWhFdlFRUXNrYU9DeHFJVEV4OTRTMFFPbGl3Z1A0VEJXcmhvaUlHOEF3bVNreWRQeXByRFNOUFpCbmZDaWhGODRXMWtyS2lNc2RpVW9sQlN3Sklzdm14TFlvVmdOYUVGR0liSWlGZ0lEbndSWnNPR0RhcENoUXFTZVBMcXh5eW91ckVla2gvaW9IeEtjWXRxcFNGcFNMUVFnRVVUNU5SWncwZEpsS1hXYnN1MVE0RzgvZkxseTlXTkd6ZGtlZm5ISDMvc1dnTXdlSU1uUW5ENDRZY2Z4RlZRQWFOV1QvazFkKzdja2pzUFZtZ2gvNDhMSUh2NTg4OC95LytzTW1LR3d1SVBROUxqcVJDQW9ndUxKR0ppWXVRdkFtQzlISVVlMWkvd2wwS1Nzd0tZRncrZUY4a2hMQUFyblp6ZlhEUkVCOCtGNEF0K25ud0RpMXBaUmtiMFR4c2ZTVllRUVZCcHBLS0pCWW5HcjY4WUFwT2tRdkRIS2ZNNlFpQk5iZklCYndkUkZZTGg3Y1U0WVlOZ2hHQVFqQkFNZ2hHQ1FUQkNNQWhHQ0FZYnBmNEg2TWllSzNGaEUrQUFBQUFBU1VWT1JLNUNZSUk9IiwKICAgICAgIkxvd2VyTGVmdFgiOm51bGwsCiAgICAgICJMb3dlckxlZnRZIjo1MCwKICAgICAgIlNjYWxlIjo0MAogICB9LAogICAiUmVjdCI6ewogICAgICAiTG93ZXJMZWZ0WCI6MjE1LAogICAgICAiTG93ZXJMZWZ0WSI6MTAsCiAgICAgICJVcHBlclJpZ2h0WCI6NDA1LAogICAgICAiVXBwZXJSaWdodFkiOjg1LAogICAgICAiQm9yZGVyUmFkaXVzIjowLAogICAgICAiQm9yZGVyV2VpZ2h0IjoxLAogICAgICAiQm9yZGVyQ29sb3IiOnsKICAgICAgICAgIlJlZCI6NzUsCiAgICAgICAgICJHcmVlbiI6MTMsCiAgICAgICAgICJCbHVlIjoxMDAKICAgICAgfSwKICAgICAgIkJhY2tncm91bmRDb2xvciI6bnVsbCwKICAgICAgIkNvbnRlbnRNYXJnaW4iOjUKICAgfSwKICAgIlBhZ2UiOjEKfQ=="
    
    Add-DssProcessingRule -Format PDF -DocumentsFormats pdf -Parameters @{ "PdfSignatureAppearance"=$appearance ; "PdfSignatureTemplateId"="2"; "PDFReason"="Цифровая подпись"; "PDFLocation"="DSS"; "PDFFormat"="CMS" }
    
    # Вывести список правил для получения ID
    # Add-DssProcessingRule
    
    New-DssProcessingTemplate -ProcessingRulesIds X -Description "Видимая PDF-подпись"
    

    Пример настройки шаблона отображаемой подписи PDF-документа с подстановочными параметрами:

    {
       "Content":[
          {
             "Text":"Подлинник электронного документа, подписанного ЭП, хранится в системе электронного документооборота Минкомсвзяи России.",
             "Margin":50,
             "Font":{
                "FontSize":4,
                "FontFamily":"arial",
                "FontStyle":0,
                "FontColor":{
                   "Red":0,
                   "Green":0,
                   "Blue":0
                }
             }
          },
          {
             "Text":"СВЕДЕНИЯ О СЕРТИФИКАТЕ ЭП",
             "Margin":50,
             "Font":{
                "FontSize":8,
                "FontFamily":"times",
                "FontStyle":0,
                "FontColor":{
                   "Red":0,
                   "Green":0,
                   "Blue":0
                }
             }
          },
          {
             "Text":"Кому выдан: {0:SnCN}",
             "Font":{
                "FontSize":8,
                "FontFamily":"times",
                "FontStyle":0,
                "FontColor":{
                   "Red":0,
                   "Green":0,
                   "Blue":0
                }
             }
          },
          {
             "Text":"Кем выдан: {0:IssuerO}",
             "Font":{
                "FontSize":8,
                "FontFamily":"times",
                "FontStyle":0,
                "FontColor":{
                   "Red":0,
                   "Green":0,
                   "Blue":0
                }
             }
          },
          {
             "Text":"Действителен: с {0:NotBefore} по {0:NotAfter}",
             "Font":{
                "FontSize":8,
                "FontFamily":"times",
                "FontStyle":0,
                "FontColor":{
                   "Red":0,
                   "Green":0,
                   "Blue":0
                }
             }
          }
       ],
       "TemplateId":2,
       "Icon":{
          "Image":"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",
          "LowerLeftX":null,
          "LowerLeftY":50,
          "Scale":40
       },
       "Rect":{
          "LowerLeftX":215,
          "LowerLeftY":10,
          "UpperRightX":405,
          "UpperRightY":85,
          "BorderRadius":0,
          "BorderWeight":1,
          "BorderColor":{
             "Red":75,
             "Green":13,
             "Blue":100
          },
          "BackgroundColor":null,
          "ContentMargin":5
       },
       "Page":1
    }
    

    Простой текстовый шаблон

    Данный шаблон является наиболее простым в конфигурации и используется в случае, когда отображаемая подпись включает в себя только текстовые данные.

    Конфигурация шаблона включает в себя следующие поля.

    Поле Тип Описание
    Content TextBlock[] Содержимое представления в виде массива текстовых блоков
    Page int Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу
    Rect SignatureRect Описание прямоугольника подписи
    TemplateId int Идентификатор шаблона. Должен иметь значение 1

    Шаблон с логотипом и текстом

    Данный шаблон может включать в себя графическое изображение (например, логотип компании) в добавление к текстовой информации, описывающей подписываемые данные.

    Шаблон включает в себя следующие поля.

    Поле Тип Описание
    Content TextBlock[] Содержимое представления в виде массива текстовых блоков
    Page int Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу
    Icon ImageBlock Описание параметров логотипа
    Rect SignatureRect Описание прямоугольника подписи
    TemplateId int Идентификатор шаблона. Должен иметь значение 2

    Шаблон в виде изображения

    Данный шаблон позволяет использовать цельное изображение в качестве отображаемой подписи.

    Поле Тип Описание
    Content TextBlock[] Содержимое представления в виде массива текстовых блоков
    Page int Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу
    Background ImageBlock Описание параметров изображения
    Rect SignatureRect Описание прямоугольника подписи
    TemplateId int Идентификатор шаблона. Должен иметь значение 3

    Передача параметров шаблона в метод подписи документов

    Если в документ необходимо поставить видимую подпись, то в дополнительные параметры следует поместить два значения:

    • идентификатор шаблона в качестве значения параметра PdfSignatureTemplateId,
    • параметры шаблона в качестве значения параметра PdfSignatureAppearance.
    Примечание

    Возможные значения параметра PdfSignatureTemplateId зависят от вида шаблона отображаемой подписи. Поле TemplateId при использовании каждого из шаблонов должно иметь значение 1, 2 или 3 соответственно.

    Содержимое шаблона должно быть представлено как json-объект, сериализованный в UTF-8 строку и закодированный в Base64.

    Пример запроса на подпись PDF-документа, включающий в себя отображаемую подпись в виде набора текстовых данных:

    POST http://<hostname>/SignServer/rest/api/documents HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer 
    Host: hostname
    Accept-Encoding: gzip, deflate
    Content-Length: 74210
    Connection: keep-alive
    
    {
        "Content": "JVBERi0xL...",
        "Signature": {
            "Type": "PDF",
            "Parameters": {
                "PDFFormat": "CMS",
                "PdfSignatureAppearance":"eyJDb2...",
                "PdfSignatureTemplateId": "1"
            },
            "CertificateId": 1006,
            "PinCode": ""
        }
    }
    

    Передача индивидуальных для каждого документа параметров шаблона в метод подписи пакета документов

    Если при пакетной подписи PDF-документов необходимо поставить видимую подпись с индивидуальным шаблонам для каждого из переданных PDF-документов, то в дополнительные параметры следует положить параметр PdfSignatureAppearancesData. Значение этого параметра должно быть представлено как массив json-объектов, сериализованный в UTF-8 строку и закодированный в Base64. Размер этого массива должен быть равен количеству переданных на подпись PDF документов, порядок элементов массива должен соответствовать порядку переданных на подпись PDF-документов.

    Структура массива объектов с информацией о формате отображаемой подписи:

    Примечание

    В данном примере для первого подписываемого PDF-документа будет использован формат отображаемой подписи с идентификатором шаблона = 1, а для второго документа будет использован формат отображаемой подписи с идентификатором шаблона = 3.

    [
        {
            "TemplateId": "1",
            "Appearance": "ewoJIkNv..."
        },
        {
            "TemplateId": "3",
            "Appearance": "ewogICAiQ..."
        }
    ]
    

    Для того чтобы закодировать этот json-массив для передачи внутри параметра подписи, необходимо сначала из json-строки, в которую сериализуется массив, извлечь байты в кодировке UTF-8:

    // Encoding.UTF8.GetBytes()
    91,123,34,84,101,109,112,108,97,116,101,73,100,34,58,34,49,34,44,34,...
    

    А затем закодировать получившийся массив байтов в Base64:

    // Convert.ToBase64String()
    W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlI...
    

    Получившееся значение необходимо добавть в словарь параметров подписи с ключом PdfSignatureAppearancesData:

    POST http://<hostname>/SignServer/rest/api/documents/packagesignature HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer 
    Host: hostname
    Accept-Encoding: gzip, deflate
    Content-Length: 74210
    Connection: keep-alive
    
    {
        "Documents": [
            { Content: "JVBERi0xL..." },
            { Content: "Vfasdhgaj..." },
        ],
        "Signature": {
            "Type": "PDF",
            "Parameters": {
                "PDFFormat": "CMS",
                "PdfSignatureAppearancesData": "W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlI..."
            },
            "CertificateId": 1006,
            "PinCode": ""
        }
    }
    
    Примечание

    Параметры PdfSignatureAppearancesData и PdfSignatureAppearance являются взаимоисключающими. При попытке их одновременного использования Сервис Подписи вернет ошибку invalid_signature_params.

    Пример закодированного списка шаблонов:

    W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlIjoiZXdvSklrTnZiblJsYm5RaU9pQmJld29KQ1NKVVpYaDBJam9nSXRDZjBMN1F0TkM3MExqUXZkQzkwTGpRdWlEUmpkQzcwTFhRdXRHQzBZRFF2dEM5MEwzUXZ0Q3owTDRnMExUUXZ0QzYwWVBRdk5DMTBMM1JndEN3TENEUXY5QyswTFRRdjlDNDBZSFFzTkM5MEwzUXZ0Q3owTDRnMEszUW55d2cwWVhSZ05DdzBMM1F1TkdDMFlIUmp5RFFzaURSZ2RDNDBZSFJndEMxMEx6UXRTRFJqZEM3MExYUmd0QzYwWURRdnRDOTBMM1F2dEN6MEw0ZzBMVFF2dEM2MFlQUXZOQzEwTDNSZ3RDKzBMN1FzZEMrMFlEUXZ0R0MwTEFnMEp6UXVOQzkwTHJRdnRDODBZSFFzdEMzMFkvUXVDRFFvTkMrMFlIUmdkQzQwTGd1SWl3S0NRa2lSbTl1ZENJNklIc0tDUWtKSWtadmJuUlRhWHBsSWpvZ05Dd0tDUWtKSWtadmJuUkdZVzFwYkhraU9pQWlZWEpwWVd3aUxBb0pDUWtpUm05dWRGTjBlV3hsSWpvZ01Dd0tDUWtKSWtadmJuUkRiMnh2Y2lJNklIc0tDUWtKQ1NKU1pXUWlPaUF3TEFvSkNRa0pJa2R5WldWdUlqb2dNQ3dLQ1FrSkNTSkNiSFZsSWpvZ01Bb0pDUWw5Q2drSmZRb0pmU3dLQ1hzS0NRa2lWR1Y0ZENJNklDTFFvZENTMEpYUWxOQ1YwSjNRbU5DdklOQ2VJTkNoMEpYUW9OQ2kwSmpRcE5DWTBKclFrTkNpMEpVZzBLM1Fuem9pTEFvSkNTSkdiMjUwSWpvZ2V3b0pDUWtpUm05dWRGTnBlbVVpT2lBNExBb0pDUWtpUm05dWRFWmhiV2xzZVNJNklDSjBhVzFsY3lJc0Nna0pDU0pHYjI1MFUzUjViR1VpT2lBd0xBb0pDUWtpUm05dWRFTnZiRzl5SWpvZ2V3b0pDUWtKSWxKbFpDSTZJREFzQ2drSkNRa2lSM0psWlc0aU9pQXdMQW9KQ1FrSklrSnNkV1VpT2lBd0Nna0pDWDBLQ1FsOUNnbDlMQW9KZXdvSkNTSlVaWGgwSWpvZ0l0Q2EwTDdRdk5HRElOQ3kwWXZRdE5DdzBMMDZJTkNZMExMUXNOQzkwTDdRc2lEUW1OQ3kwTERRdlNEUW1OQ3kwTERRdmRDKzBMTFF1TkdISWl3S0NRa2lSbTl1ZENJNklIc0tDUWtKSWtadmJuUlRhWHBsSWpvZ09Dd0tDUWtKSWtadmJuUkdZVzFwYkhraU9pQWlkR2x0WlhNaUxBb0pDUWtpUm05dWRGTjBlV3hsSWpvZ01Dd0tDUWtKSWtadmJuUkRiMnh2Y2lJNklIc0tDUWtKQ1NKU1pXUWlPaUF3TEFvSkNRa0pJa2R5WldWdUlqb2dNQ3dLQ1FrSkNTSkNiSFZsSWpvZ01Bb0pDUWw5Q2drSmZRb0pmU3dLQ1hzS0NRa2lWR1Y0ZENJNklDTFFtdEMxMEx3ZzBMTFJpOUMwMExEUXZUb2cwS1BRcGlEUW5OQzQwTDNRdXRDKzBMelJnZEN5MFkvUXQ5QzRJaXdLQ1FraVJtOXVkQ0k2SUhzS0NRa0pJa1p2Ym5SVGFYcGxJam9nT0N3S0NRa0pJa1p2Ym5SR1lXMXBiSGtpT2lBaWRHbHRaWE1pTEFvSkNRa2lSbTl1ZEZOMGVXeGxJam9nTUN3S0NRa0pJa1p2Ym5SRGIyeHZjaUk2SUhzS0NRa0pDU0pTWldRaU9pQXdMQW9KQ1FrSklrZHlaV1Z1SWpvZ01Dd0tDUWtKQ1NKQ2JIVmxJam9nTUFvSkNRbDlDZ2tKZlFvSmZTd0tDWHNLQ1FraVZHVjRkQ0k2SUNMUWxOQzEwTG5SZ2RHQzBMTFF1TkdDMExYUXU5QzEwTDA2SU5HQklERXlMakV5TGpJd01UVWcwTC9RdmlBeE1pNHhNaTR5TURFMklpd0tDUWtpUm05dWRDSTZJSHNLQ1FrSklrWnZiblJUYVhwbElqb2dPQ3dLQ1FrSklrWnZiblJHWVcxcGJIa2lPaUFpZEdsdFpYTWlMQW9KQ1FraVJtOXVkRk4wZVd4bElqb2dNQ3dLQ1FrSklrWnZiblJEYjJ4dmNpSTZJSHNLQ1FrSkNTSlNaV1FpT2lBd0xBb0pDUWtKSWtkeVpXVnVJam9nTUN3S0NRa0pDU0pDYkhWbElqb2dNQW9KQ1FsOUNna0pmUW9KZlYwc0Nna2lWR1Z0Y0d4aGRHVkpaQ0k2SURFc0Nna2lVbVZqZENJNklIc0tDUWtpVEc5M1pYSk1aV1owV0NJNklESXhOU3dLQ1FraVRHOTNaWEpNWldaMFdTSTZJREV3TEFvSkNTSlZjSEJsY2xKcFoyaDBXQ0k2SURRd05Td0tDUWtpVlhCd1pYSlNhV2RvZEZraU9pQTROU3dLQ1FraVFtOXlaR1Z5VW1Ga2FYVnpJam9nTUN3S0NRa2lRbTl5WkdWeVYyVnBaMmgwSWpvZ01Td0tDUWtpUW05eVpHVnlRMjlzYjNJaU9pQjdDZ2tKQ1NKU1pXUWlPaUEzTlN3S0NRa0pJa2R5WldWdUlqb2dNVE1zQ2drSkNTSkNiSFZsSWpvZ01UQXdDZ2tKZlN3S0NRa2lRbUZqYTJkeWIzVnVaRU52Ykc5eUlqb2diblZzYkN3S0NRa2lRMjl1ZEdWdWRFMWhjbWRwYmlJNklEVUtDWDBzQ2draVVHRm5aU0k2SURFS2ZRbz0ifSx7IlRlbXBsYXRlSWQiOiIyIiwiQXBwZWFyYW5jZSI6ImV3b2dJQ0FpUTI5dWRHVnVkQ0k2V3dvZ0lDQWdJQ0I3Q2lBZ0lDQWdJQ0FnSUNKVVpYaDBJam9pMEovUXZ0QzAwTHZRdU5DOTBMM1F1TkM2SU5HTjBMdlF0ZEM2MFlMUmdOQyswTDNRdmRDKzBMUFF2aURRdE5DKzBMclJnOUM4MExYUXZkR0MwTEFzSU5DLzBMN1F0TkMvMExqUmdkQ3cwTDNRdmRDKzBMUFF2aURRcmRDZkxDRFJoZEdBMExEUXZkQzQwWUxSZ2RHUElOQ3lJTkdCMExqUmdkR0MwTFhRdk5DMUlOR04wTHZRdGRHQzBMclJnTkMrMEwzUXZkQyswTFBRdmlEUXROQyswTHJSZzlDODBMWFF2ZEdDMEw3UXZ0Q3gwTDdSZ05DKzBZTFFzQ0RRbk5DNDBMM1F1dEMrMEx6UmdkQ3kwTGZSajlDNElOQ2cwTDdSZ2RHQjBMalF1QzRpTEFvZ0lDQWdJQ0FnSUNBaVRXRnlaMmx1SWpvMU1Dd0tJQ0FnSUNBZ0lDQWdJa1p2Ym5RaU9uc0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRhWHBsSWpvMExBb2dJQ0FnSUNBZ0lDQWdJQ0FpUm05dWRFWmhiV2xzZVNJNkltRnlhV0ZzSWl3S0lDQWdJQ0FnSUNBZ0lDQWdJa1p2Ym5SVGRIbHNaU0k2TUN3S0lDQWdJQ0FnSUNBZ0lDQWdJa1p2Ym5SRGIyeHZjaUk2ZXdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpVW1Wa0lqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWlSM0psWlc0aU9qQXNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDSkNiSFZsSWpvd0NpQWdJQ0FnSUNBZ0lDQWdJSDBLSUNBZ0lDQWdJQ0FnZlFvZ0lDQWdJQ0I5TEFvZ0lDQWdJQ0I3Q2lBZ0lDQWdJQ0FnSUNKVVpYaDBJam9pMEtIUWt0Q1YwSlRRbGRDZDBKalFyeURRbmlEUW9kQ1YwS0RRb3RDWTBLVFFtTkNhMEpEUW90Q1ZJTkN0MEo4aUxBb2dJQ0FnSUNBZ0lDQWlUV0Z5WjJsdUlqbzFNQ3dLSUNBZ0lDQWdJQ0FnSWtadmJuUWlPbnNLSUNBZ0lDQWdJQ0FnSUNBZ0lrWnZiblJUYVhwbElqbzRMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRVpoYldsc2VTSTZJblJwYldWeklpd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRkSGxzWlNJNk1Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkRiMnh2Y2lJNmV3b2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBaVVtVmtJam93TEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpUjNKbFpXNGlPakFzQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0pDYkhWbElqb3dDaUFnSUNBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNCOUxBb2dJQ0FnSUNCN0NpQWdJQ0FnSUNBZ0lDSlVaWGgwSWpvaTBKclF2dEM4MFlNZzBMTFJpOUMwMExEUXZUb2cwSmpRc3RDdzBMM1F2dEN5SU5DWTBMTFFzTkM5SU5DWTBMTFFzTkM5MEw3UXN0QzQwWWNpTEFvZ0lDQWdJQ0FnSUNBaVJtOXVkQ0k2ZXdvZ0lDQWdJQ0FnSUNBZ0lDQWlSbTl1ZEZOcGVtVWlPamdzQ2lBZ0lDQWdJQ0FnSUNBZ0lDSkdiMjUwUm1GdGFXeDVJam9pZEdsdFpYTWlMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRk4wZVd4bElqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRU52Ykc5eUlqcDdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDSlNaV1FpT2pBc0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNKSGNtVmxiaUk2TUN3S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSWtKc2RXVWlPakFLSUNBZ0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNBZ0lDQjlDaUFnSUNBZ0lIMHNDaUFnSUNBZ0lIc0tJQ0FnSUNBZ0lDQWdJbFJsZUhRaU9pTFFtdEMxMEx3ZzBMTFJpOUMwMExEUXZUb2cwS1BRcGlEUW5OQzQwTDNRdXRDKzBMelJnZEN5MFkvUXQ5QzRJaXdLSUNBZ0lDQWdJQ0FnSWtadmJuUWlPbnNLSUNBZ0lDQWdJQ0FnSUNBZ0lrWnZiblJUYVhwbElqbzRMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRVpoYldsc2VTSTZJblJwYldWeklpd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRkSGxzWlNJNk1Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkRiMnh2Y2lJNmV3b2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBaVVtVmtJam93TEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpUjNKbFpXNGlPakFzQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0pDYkhWbElqb3dDaUFnSUNBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNCOUxBb2dJQ0FnSUNCN0NpQWdJQ0FnSUNBZ0lDSlVaWGgwSWpvaTBKVFF0ZEM1MFlIUmd0Q3kwTGpSZ3RDMTBMdlF0ZEM5T2lEUmdTQXhNaTR4TWk0eU1ERTFJTkMvMEw0Z01USXVNVEl1TWpBeE5pSXNDaUFnSUNBZ0lDQWdJQ0pHYjI1MElqcDdDaUFnSUNBZ0lDQWdJQ0FnSUNKR2IyNTBVMmw2WlNJNk9Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkdZVzFwYkhraU9pSjBhVzFsY3lJc0NpQWdJQ0FnSUNBZ0lDQWdJQ0pHYjI1MFUzUjViR1VpT2pBc0NpQWdJQ0FnSUNBZ0lDQWdJQ0pHYjI1MFEyOXNiM0lpT25zS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSWxKbFpDSTZNQ3dLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJa2R5WldWdUlqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWlRbXgxWlNJNk1Bb2dJQ0FnSUNBZ0lDQWdJQ0I5Q2lBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnZlFvZ0lDQmRMQW9nSUNBaVZHVnRjR3hoZEdWSlpDSTZNaXdLSUNBZ0lrbGpiMjRpT25zS0lDQWdJQ0FnSWtsdFlXZGxJam9pYVZaQ1QxSjNNRXRIWjI5QlFVRkJUbE5WYUVWVlowRkJRVWxKUVVGQlFUWkRRVmxCUVVGQ09HMXZTR3hCUVVGQlFrZGtRbFJWUlVGQldXRm5UV1ZwVjFoM1FVRkJRV3gzVTBac2VrRkJRVTk0UVVGQlJITlJRbXhUYzA5SGQwRkJRVUZLYVZNd1pFVkJVQ3RJYWpoNUwwRkJRVUZLV0ZKR1YwaFNhMWxZVW14UGJVNTVXbGRHTUZwUlFYbE5SRVV5VEZSRmVFeFVTVEZXUkVFMVQycEplVTlxUVRCTGVrRjRUMnBCZDJjMVpsUTBaMEZCUVVOV01GSldhREJhUjBZd1dsUndkR0l5VW5CYWJtdEJUV3BCZUU1cE1IaE5VekI1VGxaUmQwOVViM2xOYW05M1RrTnpkMDFVYjNkTlVFeExZVEUwUVVGQmNuTlRWVkpDVmtob1pUZGFkMGh5UWxKV1JqaGpkbTVaUkRCS2FUTXdTbWRHUTJKM1drTlNlbkZEV1U5blVXdERTVUp4WTBaRFZsaHZia0ZyYjNaUldsTklSREJLU2tORFIxRkZSMjlKVGxOQlpIQlRjVGxHTUZkWllqTTNiak5sUm1JNWRUTnpNamt3TTJJd1J6bDJNbFI2TTNSNVdtNWlNSG80Tnk5dWJraDJUek5WTVcweVUycEVaalUzYXl0eEwyaFFORFJTWjJ0RmQxRnFRVWxTWjJkSGQxRnFRa2xDWjJoSFNWTnZRelJJV2paemRWaE1MMWRYTkZjd2FIbG1TVWxRVDNwdWVqVXJja0YzWTA5eFVETTNPVFowVkhBd05uQlhOMlIxTm1JeGVIQkZlVnBWYUZWMVdFWnBWa3N4WkU5MlppOHJLM2x3ZGpOeWQzRmxaa3hyUzJ4dGVWcFFiMGxSTjFSM1dFRnBNMkk1T1ZkUE0yWjFWa2gyTWpkR1NHNTZjREZVY1ZaTGJGVnpWMHhHTVdZMU9IVldWREppU214VksyNVRjRnBOU0dwVloyVlFTR2xuY213ckwzSnVOemMzVkdReE9XVndWakpXWlRGaGJGWldjekphVGxaaVJtbFNXREZIVVhwVWQxWkJhWEpXY1RGVE5qbGhkRlY1T1dWMlJrSldjV3hTVWpka2RUTldORlZMUmxwS09XSnhVR01yWm1jdkx5OTRWRGRrYVhoUkx6TXdNREF2Y1M5Mk16ZExiR1YxV0VkeVZYRkdSWEZVTlRRNGMzUXJVWFJJWjJsQ1RYb3Zka2h1ZWxwSlVUTmhPVnBOZEZkcVVsRnJXaTl3VDNwaWREQTVkRE5NYUZJdlpreE1URFp3UW1kM1lYRmhPV1YxUzI0ek5qbEljWFpKVTJ4SmRFSkViWHBLYTJwSk4ydzRLMlpLY1N0UVJHaExiVE5oZEVod1VEUnhRbUpDZHpobFZrOVFTR28xWkhwVWNEQTJWbVI1VEVsWGJVbFhRV2d2THk4eU0yMXFWbkpzZEhFNVpUZG1jVE5NYlhvcmRrUkVSQzlWWldJM2JEYzVOalpoVGtkdFUwOXVVRzFxVEdkTFFrZGtTVUZvUWtOMVRtZDZRVzEyZHpSTlJsZHRlbHAwY2t4T2Jub3JjbGR3VFUxWGJsZFdZa2h4ZEZaeE1XRlhURlI2WkdGMlExTnBVRWxKWXl0bVQyeFZhQzk0U1dkU2NXMXFVbTl5YnpFMlZXbFNTVzlZY1RNM0t5OXhiRk53YTNKcFNWZ3pMemxXWlRoNFpVbFpWMUpOYWtWNGMySkxlVVI0TWpkS2FIVnBVell5SzB0NFQyNVVjbkJNV1U1WWFFZFZVbk5CU1hKV2NYbFJiVlZIV2sxdFZqQmhMMU4zS3paMUt5dFBTVXdyVkhSMU0wUnFaR0YyUTBOelNWTjNZM1ZXUzJ4VVJtcFNkRmRxVW5jdlpFVnNNMGxTVjFSSmEwVkdNVGM1TldSSVZEVTRWMFkwUjJJelEyUk9WSGdyTDFCb1ZrWm9RM2RDYjAxSFJGWk1WSEF3SzFoMFVFTmlOWFZpVG0xNlMzUlNRbWxIZUU5T2NVVmFXWFZZVTNCNkswbGpVRWc0YnpKQlZuWmlkRzB6WmtOb1JrRnFhSGMxYWtGbk9IaEdWVWt4UVV4SlJXSlNjakV3TlhReVlrcEdWWEkwWkU4ellsVmxkek12VG14NFpIYzRlVnBOT1ZoWGNsWjJNV3hvU2t4UlR6Sm5WbkV4WVhWcFZYbHVhakUzY0hBMEsyWmhjWGxhVFcxcFZ6RTNiams1T1M5V0t5c3JLelkwWTFJM1ZWTlJWa3RTZWtwcmVuQTNaM0ZZT1dnek56azBPWE5STmtKSlQyeEdNMk5LU21ReFRVUTBXbnBDZVhWQ1dXMVlabVZsVldOVFYyWlVRa1JqTlVKSVkxTXphR3RNYURkT1MyeFRLMHQ1VTNCUmIwVmhLeTluVFhWc2VqaEdaekJHUjFwQ1ZucG5hM2xrVURWR2NIQkxNVU5uWjBkMlpFSnlhbTFGZVdSUGFVTlhibVkyUm1FNFNrTkdORVpEY1ZaRGJrbzRSMWhQYmtadE0yaE5aWFZZWW5acmRrbEhhUzl4UmtSb05tOWhUbGR3U1d4dVRGUndhekZUWjAxeFZVdGFVSE5SZVVKc2VUVmFWbmMwV1U1bE0xZEVlVlJoVTJSV2VYbGFTV3h6S3pkT2J6QlRTakUyVGtGb2NWbE5RVVEwY2xCVFNqQTJkR04zT0M5UFJtMTBNbnBhVldkVFVGY3JWRGgzVEVaUGVrbFJiMEZhUmsxdWFuaGFhVzF2T0hGRVJtcDRhMmRzT1dJek16TndUVWg2V0haMFlXRTFjVE5pY1RGSVR6bEJkMUF6YW1wNkswc3lRVXBDZGxsWk9HcG1UVUZQTTFSdlNVZ3JOVE4zZVdkUUx6YzBVWHBXY0RCclZERTNkREZpY25OTldEZDFkVE16TXpaeWFXaFJjRWwxU1M5bWRuazBRMHAwSzFwek1tRldVaTlzUVd0SlNYaEpkMXBOTm5wSGFsSnpTR1pFVm5ZemRIaGhjMGREUWxwWk9ESm1XRlJ2YTBKdE1HSTFjbVZwYzNSVFoyZ3lSVmRxUlhoTlpra3Zja1oxTTNwcWNEWTVTMnBsYVcxUU56bDFNbGRRVjA5M04wNUZjVEkyWkZCdU4xbzJPWFYzY0M4dmRHcFFkMmx5VmpZNVpURnZRVUpCTTFOTVdsWXlLMlpPYTJGUFNFTm5NMjl5VUhoWmMxaE1ablJDTm1FeldDdG1jbkp5ZVRFM2JFOXRkQzh6VUhReWFsZHlWemRrZFRGd05EbGxNMUpNU0VrNFpWQmlTVzFVU21kblRIcExha1J3ZVdZMk0wUkVibkJ3WWpVNEsyWXhNWFZYV21KMmJURTNXblJOVm1wTWJIa3JNMUIyTHpoak9UQlRaSGN2U25aSk5HVlFWSEpsVFRaR1puUm9aM1JYZUZNMlNsUkNhRlJTT0dSSFJHMTRjMkpIY1ZNMVkzVk5jMGxVUVRKaWRYVXJLeXRGTTFCaGNHc3dZak5TYjBod1YyeG1OblJUY0c4eGNURmhhVmhXZVZkRVVYWTJLeXNyYTNGRFZ6TTRlbUZzSzNvdmFUZ3JMM0F2Ym5kSWRIZExOSGhKWmpkQk5qVkVZWEZXTml0MVZ5dExaMWR0Ynk5TVNFWk9ValEwWXpCaE1YZ3ZVRmhZV0M5eEx6QlFRakZWWkhkdVlXcDBXVzVYVUVocWEydGlNWEJLV2toV1lVbzJZakIyT1VkMllYUkhiSEU1ZFhwYU5HcGlZMmxGWjBsRWRIYzBWRTlwVVVsVlVHbFlWM2x2Y2tadGVsSjJlRnAyTXpjNVozWnZLMEkwY0U5WVNGRjNkbll2SzJWNFJsWjVXa2xzWjNvM05IaEpTemRKVDFsSk5XOW1OemxQYTJwS1dGVjJORlEzYUc5cGJsUkJLemRIWm5oRU5WRjJPWGRFWW1kMVRuaEpiRUpCWXpZNVQxZFlXRGh2U1VORlpuUk1SMGhFYkhsTGExVk1iSG8xTURRNE1XWjBhVzB6T0ZKNWEyTm1abVZSTm5keU1rTldWbXBGUTBWNWRETmphV1ZRWW5VMlkzVlhTek4yU1U5bmEyZHVVMDFhUTBwb1VWVnpka3RNTDNKeWFHbFNRMEZMUW5GeVowUk1XSEpzTTNKTFoycFZWRTVEUjFOVFYwbFJlbmhQUVU5aFVHWjZjMjFyYUZJemRGZHlWbVJOZG5JNFQwRjRNRE5pWTBWS1NqRlRVM2d5WmtORGVtMVhRVkV3VGtkWVdVZFpOVWxtZVVaYWMyTjVTVzVvWTBwU1dWQldOV2hSVkdkWFRGRklMMlE0UlhkSlJHeDNkMVV3VUM5cFRtRkNhbWhRVW5OcE4xSkVjV3BWYUZGeldEbEtOMWhSVVZKVlIyUnNVRGxOYzNsUFJITnZWVFF3WVU1UmNXOW1jelpNVXk5cVoyZDNMMFZLVlZGRUsyaHFjVUV6V1ZSbE1FbG5aM0pPYm5vNGNEbFpRMVZaWVRCQlIwUjROemhoWjBFMVoyYzRNa3BSWW5WVU4wRXJaVU5aUlVocWQwdFlZamtyZG1Gd1dISTFOWFZFVVhkQ1JIbzJUMlJFVlhabmFERXZkVUZHTnprck5sWnhVMFZYYUdkMmJGRlVaSE15UmtGbU9GUnhUVVZzTjA5a1EzTmhUVXRqVURGSVpHWklUWE5aY1ZKQ05ETTNXblF5T0ZJMlRYRldiWEJtWm5FeFlYUnNVV0pCUkRrMVR6aFNla0ozY1dOSVYyWXpiMmxvVGt0c1V6QjBTRmRoY1ZkS2F6QmhNMXB2ZDBKUmMxZFdVR0l3Vkc0ek1qSlhabWxNYm5wQ00xQkdVWFl2Ym0xSE5HMUhhVnBUWkc1RlNXZFNielJqY1ZRM05UVkNUemxHVWpKSmVVOHljRzVtVkZaRVVVeG9MMUJ1ZWpZMk0zYzBaSGc1S3k5aFZubElMM015VEVWVEt5OW9ZbGN6U1haVWN6ZEVSRkZ3TUdaSFdFRnFWVkZLUVdZNVNXZHZaRTl2ZEZKSlNVRkhSRmczWm00MllVcGhXSGhKZVdRMFFuQjRSM0pWY213eFluTnVibEpvUzFnMmRVTnRRMWhxWlZkTVZuVnRSMnBrZFhKTVkybG5ObXh5VFVWcU9VMHZkSGxqTVZCRlJUaDRkV2RwTUc5cWJHZEpja0pxUTBOMFUzUlhNV1V6VWtFMVptTk5TQzlWT1RNd0wzaEtUVkZ3UkZaM05XOVJTVXcwU21WMldIRndaV0pRYm5rdlRDdFFNbHBQU0VkcFFreERWa3N4WmxkTVZXdEVTMWRyUTJGTFlYRXZhVGRwTms1SGFqaHhlWGQxYXpkaFQyaENhRU5aUlZSclpWbHNPV1IxTUdGa1QwbHNjR2g2YW10Qk5XVkROa1ZvZW14c2VXaFNVazVwTkcxWFRXWkNNbVU0VjBaNFFtNHJTMXA1T0dKbFFsQjBkVUkwTDBjeloyWkNUa3d2ZGtOTFJuVTRaVXhHVFhwVU56azVSazFLTld4b1R6RTNNVGRrTldzMk5IUmFPRnA2UW1Oc01YTm5SRlY1VG1aVUswZzNXVlIxUVRkQ1IyaElVVEkzYUVVelUyVjZSbmRLYjNoWk5GbE5Na2xUYzFwamFURkNhemRGYURKRVMwVjNVRUpGT1U1QmRERjNRVVp2UmxwQ09HUjRRWHBETDJKcFFWa3pOa3RUVUN0NGJscDFURlZTVkVONEswZDVNMDluYmtnNE4yMUNlRVZKVG1kRGJHRnpSMnR3WkZGRFR6UXdSWGw0ZHpoVk1EVkRaRnBNT1dKTVRWVXplRmhwWmpndlEyUjJSV3R2V1dkRVQxUjNRMHhLVjBsUk9FSlhRVmxJTVRKVFJrRkpha2h5VldwUldHY3dSa0pQWVhacWJrVmtVVEZyUW5oaGMwZERRbWxCUW1aUk1WaE5PRTh2UlRGVFREUlJNRUpITUVsRlVFd3hZWE50UnpVNVRUbENiRlJLSzNoVWNVaEVVR05QT1hWTWJWbHJTVlZCTVZBMmNFdDVlR04xUkVOelprbElXR0pPTmpoWFZreFZRa2hsUWtGcWFFUm1TV2d2SzBJMGNFOVpiRUZvUTFWRk5YRk9UVkVyY2xoeWVUbFViRlJqZUVsbmJXMVRSVXRTZUVOTUwxbFFRMGR6U1ZsVVIxUkpSVkZDUkVwaWVVSkZSelpNSzBOU1RXMVRRbEpPY25RelowaFhTR0pXWTNkTVdETkNhSFp3ZWxGQmFFVjJVVkZSYzJ0aFQwTjRjVWxVUlhnNU5GTXdVVTlzYVhkblVEUlVRbGR5YUc5cFNVYzRRWGR0VTJ0NVpGQjVjSEpFVTA1UVdrSnVaa05wYUVZNE5GY3hhM0pMYVUxelpHbFZiMnhDVTNkS1NYTjJiWGhNV1c5V1owNWhSVVpIU1dKSmFVWm5TVVJ1ZDFKYWMwOUhSR0Z3UTJoUmNWTmxVRXh4ZUhsNWIzVnlSV1ZyYUM5cGIwaDRTMk5aZEhGd1UwWndVMHhSVVdkRlZWUTFUbEphZHpCa1NteExXRmRpYzNVeFVUUkhPQzltVEd4NU9WZE9SM3BrYTJWbWJraElNeTl6VjJkTmQyVkpUVzVSYmtRME5GbGpabmhHVmxGQllVNVhWQzlyTVdRck4yTnJhbk5RVm0xbmFDODBPRXhKU0hZMU9EZzRMM2t2SzNOTmJVdEhkM1ZKVUZFNVRHcHhVa05CYjJkMVRFcEhTbWxaZFZGMlFXMURPVWhKVldVeGFTOTNiREJMVTNOM1MxbEdkeXRsUmpocmFFeEJRWEp1V25wbVdFUlNSVUk0SzBZMFFYUXJibTUzUkdreGNGcFNhMkl3VkhoelpsTldXVkZSVmtKd2NFdExTa0paYmtkeU5qaFpRWEJQYTFGMlJFaExaazAyVVdsQ1RtSm1TVUppZDJSU1JsbE1hRGRqVlRSWldVNW5hRWRCVVdwQ1FVMW5hRWREVVZSQ1EwMUJhRWREUVZsaWNHWTBTRFpOYVdWTE0wWm9SU3RCUVVGQlFVRlRWVlpQVWtzMVExbEpTVDBpTEFvZ0lDQWdJQ0FpVEc5M1pYSk1aV1owV0NJNmJuVnNiQ3dLSUNBZ0lDQWdJa3h2ZDJWeVRHVm1kRmtpT2pVd0xBb2dJQ0FnSUNBaVUyTmhiR1VpT2pRd0NpQWdJSDBzQ2lBZ0lDSlNaV04wSWpwN0NpQWdJQ0FnSUNKTWIzZGxja3hsWm5SWUlqb3lNVFVzQ2lBZ0lDQWdJQ0pNYjNkbGNreGxablJaSWpveE1Dd0tJQ0FnSUNBZ0lsVndjR1Z5VW1sbmFIUllJam8wTURVc0NpQWdJQ0FnSUNKVmNIQmxjbEpwWjJoMFdTSTZPRFVzQ2lBZ0lDQWdJQ0pDYjNKa1pYSlNZV1JwZFhNaU9qQXNDaUFnSUNBZ0lDSkNiM0prWlhKWFpXbG5hSFFpT2pFc0NpQWdJQ0FnSUNKQ2IzSmtaWEpEYjJ4dmNpSTZld29nSUNBZ0lDQWdJQ0FpVW1Wa0lqbzNOU3dLSUNBZ0lDQWdJQ0FnSWtkeVpXVnVJam94TXl3S0lDQWdJQ0FnSUNBZ0lrSnNkV1VpT2pFd01Bb2dJQ0FnSUNCOUxBb2dJQ0FnSUNBaVFtRmphMmR5YjNWdVpFTnZiRzl5SWpwdWRXeHNMQW9nSUNBZ0lDQWlRMjl1ZEdWdWRFMWhjbWRwYmlJNk5Rb2dJQ0I5TEFvZ0lDQWlVR0ZuWlNJNk1RcDkifSx7IlRlbXBsYXRlSWQiOiIzIiwiQXBwZWFyYW5jZSI6ImV3b2dJQ0FpUW1GamEyZHliM1Z1WkNJNmV3b2dJQ0FnSUNBaVNXMWhaMlVpT2lKcFZrSlBVbmN3UzBkbmIwRkJRVUZPVTFWb1JWVm5RVUZCVEdkQlFVRkNUVU5CV1VGQlFVUmxUVWd6U1VGQlFVRkNSMlJDVkZWRlFVRk1SMUJETDNob1FsRkJRVUZCUm5wVmEyUkRRVXMzVDBoUGEwRkJRVUZuV1RCb1UxUlJRVUZsYVZsQlFVbERSVUZCUkRaQlFVRkJaMDluUVVGSVZYZEJRVVJ4V1VGQlFVOXdaMEZCUW1SM2JreHdVbEJCUVVGQlFWcHBVekJrUlVGUU9FRXZkMFF2YjB3eWJtdDNRVUZCUVd4M1UwWnNla0ZCUVhWSmQwRkJUR2xOUW1WTFZTOWtaMEZCUkRJeFNsSkZSbFZsVG5KMGJsaHNNRlpPVldSNGVqaDZRVmRTU2tGb1IxRk1VbWxLVXpaWGNGSlZWMkZuY1V4cFpuUjRkMDlaV1V0eVZWaHhVV1ZYYjNSaE1qRk1WbGhDZVhGc1lrdGhNMkZwYkhWdlYza3hiMmsyUmt0eE4yaFRSbkpIUzBoS1YzRkRSMHhaZDNoWmExRkNZVk50WmpkNGRtTTVZMmhwVkhwS2NHdDBlV1l5WlUxNVpWUnRWR1l6TTJaMlpUa3ZOM1ZpTnpCUVNFSjNZMGhDZDJOSVFuZGpTRUozWTBoQ2QyTklRbmRqU0VKM1kwaE9iM1ZCY1c1MVFVVkNLMVZVUmtGQ05rRklNRUV2YjBRdlVVWmpiMEpOTURnNFVWVkJTSE5CVEZsQlJ6UkZlVFJEYzJjNVRWZGpRMkZyWldoclRXRkphVlZGVGpSUlJ6WkJXVTFDYTFsQmR6UkZRMWxCUTFGcVVXcG1SMUJaUkRWalFqWTBSVTVuVFdKQlZWZEJUbFZCZW1wRFR6QkRVME5YTmtsSVVVUjVaMEYxUVRCalFYZEtUR3hFZDBVMlp6Rk1kekpCZEhWU01VRTBSRWRaYWpSMldVWmpORUZvWjBsT1JHUk9SamhIVEVGSUswRmllRzB2Ym1SRllpdGtTVU56UlhSWmFEaEdXRUZYVFUxbE9YSm5WbGhCTWpoQ1F6UkhUbWRGZVVveFRGSjRTVlZGZG5sa01GUkZTR2RuWTBRMWQwOXVTVXBKU0RCYVV5OVhibWRpT0VSdGVVaFpZekpuT0ZOVGJrTk1hMHd3VVhOaE9VaDRUalJHVEVGQ2JVa3ZWbWxMT0ROUmJ6WXpNazAxUWxWUWQxQTBTR3BCVXpaQmQzTkNMelpKY0ZCd1pXTkZVblppTUdkWmQxTXljR1pSYjNkR1ZHZE9Na0ZtVFVGNE5FWnNhRVpJWm1ScmFXVjVXWGREY21kUFQwRjBTamxNYmtGT1IwSnNkazAzYmpCRWNWRkZTVWxpYzI1VlJtWm5VazFDZG05blUxZ3dVREJ2SzNKRk1HdDVZeTgwY3pSSVRHZEdiVk00Wm1kaVkyaHphR1UxTUdwbFVHaENXR2RzZEZOMFEyTjNRbHBwU1hCUVZFUjNRWGxUWVZCb1dtWlVhMkZVWWt0NFlVRlhOVWN6WjFGeFNGRnJZaTkxU1VjNFJYUlJkbFZFWm1ka1kybGlkMmhyTkVWWVoxQXljRWxLVkhCV2VtWm5WM1ZFV0RWMk1HWm5USFZCZGxrM2EySlNka0pQVEdRelIxQkJRV3R3V1hKblVqaERlalZGYVdOelVGaHhPRlpsVWs5eWNtdGxkbmhhTW1sR05sZGFUbFJKWXpKcFNYZzBUa2RLU1d0dk1HczVlbXByY0hKelJ5dGhWbFJpZEZOV2NubDNhSEF5UWpCSFJUSTJNV05xWjFCU2MwWnFTbUpyUmtsM1QyeGhPSE5UVjJ0bVNGSkxSRVpyZEhkTE9IZ3JRelZNV1c1NVJqRTBSakZKVUdKck9WZFFNbGxDT1hsRlNYRkhNMjluYlVwcksxSjBSWGt6VTNkVE1WTnFRVVZsUVhseFFuRTBTRFZyUkRkclluRkVVRUZVVVVwbU5EbFZiR3BGYnpGS0sxZG1XRnB2VUhWTGFHY3pPRVIxUVZCdlFYWjNWeXRDWld0TU1VWk5kamhNUVV4UFUxQklkMnBqYVZsS1VrUnRNRTE2VTJFMGExbFRTRWxPV0d0dE9FUjZkMEpPUVU5R00wbzNZMGd3Y25oeE5FUXhhVVU1VUVaeWNraEZOWFJDUlRCcEswRlhRMk0xUlc5bVJYWlZVa0p1VkRadlNFWkRUVEpKWWk4MFJuRlRURWcxVUhGRWFtNUZSakF5YkhCR1MyRlhkMnA1ZEVoVVFXaE9XSHBPYVhwNmRuTTBSMkpyVTJnNFYyNUpZelZMTW5GcmEydDJjR2Q2ZDFwMWIwTTBSSHBWVDFJeFVqWnlOelZTUW1aT1IyeHJSMjlNTTFGUlIxTnNORUV6WjJZeWFsSnNkMHd3Y2pOdVFXeFlRVkpqUkVjeGEwcDFhQzlaUkZCNWNFdENjRXAzZWpaTloxUnpTSEV4S3poT1lrODNVMWw0VmxOVU16WkxZM0pqWkVoT1NVOW1hVkkwWm5sVE5WQm1NVEJNWmtrckwwRlljSEp5WW1FMGRVTlJWbTFuVDNkUlNIRm5VR1JTSzBoelpVcDBZelpzVlZKMmQzWjBhR3A2UlUxeVkyUlBZVTlHTVVORFNYWkdPR2dyUTJsV05qZEpXWFl3VFVFeE9UaHpUakF3V1VGR1lsWXdRa2R3VVhoTWJGb3ZSMjkxZDFReFZVRjJPVWRCV2s0elowNXdOR3QwZW1OeVFrNVNXSFpsWm1kVU1sSk9PR2xMY0VrMVFqbGFkM3BuWkROSk9WaGplRTFvTkhwNlNWaGxRbGg1UTB0dlp5dDRlWEY1YzAwMU1YQnRiV3B2YVVWNVYwRlJjVUZJTmtGeGIxcFhWMFZhY2xCemNFWTNLMHA2YlVSMFVXUjFUVTh3T1RsNlRWZFRNRlZIWm5Wc1lURlRRblJFVG00MGJYRnZhbnByYjI1TVFWVXhTR2xYZDBKc1kxTTBSeTl2YXpoWVoyTlJNMlI2YmtGalFXczFSSHAzWjNkd2VqZHVWalZITlZvMVlsbDNkemsyUldJNVVUWk5RM1JQTDJoVGFGWnZhMGRQYlU0NU0xRm1WVVJHZVVGaWNubHpVMjVvSzJKMmFUaEVZVzFNYUZkRmMwUlFWakpCVXpGSVJucFFNMEV3WVZjMWFGRkdja3B6WTBSQ1lXZGhOa05FUTFkR1NFbzNObEJ6ZDBSS2VsRlJSazlTZG01blRsTm9ZWFZTTW13NFZqVnlUSFJoZG1kUGQwbDVWRGhaY0ZKMGExSjFiRlJHWjI5UEwxRkpORTUxU3pkQlUyZFFabkZDY0VvMmRWSldObGsxTTNkU1ZXczBjbkJZTTJKRlkxUnJiMlZsTXpCcFVGbDVWV1J0WlRFNVpXZEhaVGc0VWs1U2VXOUJValJGWkZjMldHOWpZMEpXWTBOSVVuQlpPR1p4YURsUFdtcG1VRlEzVTBoT2N5ODBaekpVYWt3elMyOUJiV0pLYXpWbWFIaDVVMDUzUkRsRE4wNU1abmhoTW14MmRtb3dWRkk0UldWQmR6UklMMEZJVDBFdmVVeENPSGgzVTNCUU0zTXpNR1JFUWpFNVNGSlZaSFkwVFdaQksxVnFVMUJzZFdGWE4yZGtSWEZsTWxkRVptOUZhRkpLYmxrM2NVMU5VRzA0ZVVOVFIwUmthbGhLZW0xM2RtTkRhV3hCWVdKNFduZFhNelZTWTJFek5WQm9lbmgwTjBaNmFtZGtUMUZOV2pFMVEyOVpVVU4yU1ZwUFFpOVZXVnA0Y25Kc1pVaHRZVnBzTkRGMWNVVm9hMmRTYkc1Wk4yZFRLMlpTYmtrNVdGSk9kbmRFWVUxTVpGbHlOMHhCYURkTVRIbHhUMFJOY0ZadGVtSmxhWFJNZGtWamFuQXdUa1JaTVRaUFNuWTVNelp5UkhacGVHd3lTVXMxVFhkaGNUTkNTVVJRZFVSMVltRk1jMWR2U21SWk1YVk5hamhRYUdST2NuRXpORkZNZDBrM1p6TnJSMHBTVW1WQ2EzRmpTR2xzVGt4bGQwMTBOR3QwTkdneVFuQkpTMVI1UkVST01sTndRMmRtUVVNNVNHNUdlRloyUVM4MlJXSjFXbFZLVDFkWGVHNUVOa1UwUldKclNrWTVUVlpHVjNkaldqQXphV0kyTmxCeldUWXZjMmhhYVhoUVNXaE1WVkpNVVZaNmFUaHhXRzlsVTNrMmNVRXlORWRRWjB0WU5WSmpWM2MxU2tkRWVuUlFXVkJaZEd4a1ZGcDBhRVYwZWtNelkwSm1NRmRDZDBWbFFXTTBRelZ3Y1RGRVZVdFdWa1kzVWxObVVqVTFMM1JNWTNkeU0xVkdOVUV2YWxSNE0yc3dkSHBETUZCU2RVSllkbVpJUkZGd1JHNVdaRTlTZUZsR2FIQmliVVYzV0cxeFRHUldUMGhKVjJ4VlozRlRNM0kxZUhvMk5XazFVMEZ4VFdsMVJ6aFhXV2RqY1RsQlJqazJkRzVLZUVwQ2NFZzJWVzlSVEhKdGIyRjFaeTl0YzBObmJXYzVWMmxUWkd0NFIwSjVNRk5NYTBGQ2QxaFBjM0l3T1VkTE9Xc3dSMmxDTTNoUU9YWkpNM1JzVEVoRFl6TTBkVlJMUjFOaGFuQlRXWHBvT0ZKcEt6UlZRbGxRVGxGQ1kwUjJkMGR4YlhWRlpDdEJjbVEyVERkU1JHOTRVVlJaV1dkTFZteFBaWFYzVFdScVozbHFTaXRzV0dreGIwTnNkVUp3T1VSUFFUQmpiSFZoSzFaTFFpc3ZTQzlYTVVOS1kyZFpjamhDYW1FNFl6RjFaWHBVVkhOWVVYWlJWa3BhUlVVNU9VRlFLME5WZVRkRFdVTlFWbkJKT1VSNFJUZDBWa2w2T1ROVVZFNWtXRUkyVkdKV1ZGWXhhMFZZZFdzMVFTc3ZlV3BMWkZVdlIzUm1UMFEwT1VGWFIxbDFaMkZVWldjNVpETmlOWFU0U2xObE5YSkJTekpES3pWQ2JrdENkalJxZFd3M2FHTTRNazVwUW5aNVoybG5WVGRUUkdzelYxUkJjME16UlVSSWJtOU5hRzl3ZUdoSk4zWnNNR00xUm1GVmIwaExlbk53WWpST1l6bERjbTR3Vm5abk5IUnFkRk5VWkZsblUzb3ZiSE5EWW1WSlRGRmhZbGx1YURVMWRVSmlZMmg2TUdKQ1JtNVNhakJTZVhablFpdGlMMGhIVWpCbVozSlNTRkpNYlN0NFFubEhLMWxUTTJSelZsWjVVRlJFZW05b0x5OVNNMnRTVml0YU1teDFOR0p2YjJkM2MyaEVPRU42ZVVGT1UycFplbGx6YUZwelJrNVJURFZrWkhOU1FqWkxZVTFrVUZGRWRHOXFVMWc1UlhKS05rbFBUM1JOYjJKbVZrTkpWall4UTBGVlEwSkJVbXBuZUU1TVpVVlhRbUozWTNsVGMxaHFVMlphVTBrM1dVZGxUWHBsTlVWQmNUbDZkRUZPVkhSamVGZHZZVUpNY2xrNWFrRXdhR2xNTUVOeFVWY3JNRkJCVmpnMVJ6VXpVbXBQT1dRek5WSTRVVU13YmtrNVNGWm1Oa1JyVkhOeWJYSjJjRXBLVVRGUFVrNVVXVFZ3YlVORFJqbE9kRm8zUjFWQ2NWRnlkMDVwVlRSdlJuUkROMDVNWlhkUU5tOVdTMFZLS3pkUVQxSlpVRzVqTm1wMlJWaG9kbk5rVkc1eGNrVjVNa0pPSzBoNWRHeHRTVVF5Y1hwdlkweE5XVUp0TjBWM2EzRmxOVUZSWVZVMldVaGFLMVZZUm1wbGJXTmtUVUpVY0M5dVYwbEJRakZPU0RrM1FXbG5RVEkxYkhGcldHcFdXbWhrZUdJMFUyRlBWRkpXTWxWQ0wzY3laVE42VGpFeVVqVk9PRXBGU1dsbU9VRTBhR3hYYXpJNGJVMUlSV05tTWtreFpuTTNaRk55U25sRVFsWlpNM04wUm1wUlJUWXhRMVprUlU5VVFtSkNOakZDUldGblluZE5jek5NV0ZGdFdVRlZNVVI1T1ZBNVMwVnZOWFI0UjFOQ05VWjFUbmhXU21sUU0wbDVMMEZzTDNaa1EzWkNjRW92WWtoRmRtOTNiVVpPV2tWWE5FOU5kRlZIYjJkTlRWQXJhVUV4WWxreE0xbGxUMFZ2VDI1RVJrOXllbGd6WVdsaE56UkdTekI0ZGxaS1pIazRMMnRSTnpkUGJVOUhTR3h4VVhoSFNISkRiMEpVWWtwSlVHZFlVMFp2SzJoa2JscHhiMWRDYmpNeVNYUkNNbEYzVm10T2VrY3JRVFZHTmpRclFsWnBNM2x2ZFdoRWQwMU9Oa0prZFdRMlFuUkZNMU5YYjIxTmVreFBRbmhWTW5OaFVHSkxUVGw1VFdOVlZVTXJiRTFDZGtFMWN6a3pSMlk1ZVVzeE4zcDNNRFpqY0RoMFRqaFFjbU42VUdOSFF6QnpNRVZyVldkbVptbGpURkZHTmt4blVXeHVaV2h0VlhSRWRESmliVEZsUW14eWRGaG5TV1JSYjBOQ1pYRnJUVmxUWTFSS1lVRjFUWGcyTTNwd2FVMHliMVpZVWpJMVNUWkhibkZuTTBwRVJsTlFhV3RDUWxsUVUzQkNaR1JVYXpBM2RHVXlVSEk0U1hGWFVIcEpPWEJ3UlVscloyVkVWa3MyY210REsxa3dMM2xrZFhkTVFucFFZMHd3YURJeU5GVmxialJVYUdRMVVHaDRZVlF6VFhaUlMzZExLMnBXWVVzNFoxSmpiek5vWldoNlFubFlVV0ZSWVhSQmFuWTJhalJ2VDNSbldsWXhUMUZwYTFaRUswNUVRV2xaUWpkM1NpOVNNMnQ1Y0RoRVFrcE1aaXRJTkdKRE9VaFBVWEY2UVhFMGEyNTNSVVJKWjBwcFMyUTVVVEZuWmpaTFUzSmplazR6V1ZaSmRtZDVjRkZUVUdwTlFWbDJjVEkwYlhOb2RsTlhXSEEzSzBKUlJqQXdZV2hHWldRMFZFMWhaMlZSVjFKeE0xVmhPR2RxWkZONGNuTlBiV0UwVlZselUzWkdZV2t2U2pWNFVVeFpXRVJFVkd0NmExSmFjVGRRVVhGcWIyUnBTbkZJUVhaSVZIZGtaV0pETDNORlNtOXpkR2xqVlZCUE9VSkxPRkpCYVRWUlVrVXJUMWxuYWtWTU0weDNURVpyVURkcmRHOTZUa1Z4VkZSVWFrZzVXRFEyYVhaaVdFbFdWSEpWZGt3NFZqVmtSMnN3TDFsbGJURkJZVGd5VVRBclUxbG9LekpCV0Rod09GQlJWUzkyWlVKc1RsVnFLelpQZEVKNVozVTVSM2s0YzBSTFNXNUhNVFo1UzBWbE9HaElaalJuYVRsdE5uVmtjMUY1WVRsQk1GUkhVV1oyTkZJdmJucDBTR3hoWjBOUGJEaGFUR2N4YUZReWJWZzRjMnAxTkZVeVVWQktla1Y2TlVReVdrSk9RbGtyY1RCbVZYUmlaWGRCWTNnelEwdEdZWGRJVDFkdGJrbHhNbXBuTkdsVU9GWXdPQzh4TmpkNlkxSlhTV1o1Wld4aU56WlFaR0ZqSzNsWVJWbzRkbEpEY1dRM0t6RkVURXN2UzBweFVpdFFTVTlUYzFrMVJtRlNiV1V3Wm5GeFIxWjBUVUpSTDA1eVpXcGFhaTlKV2xwd2FWUldOM1UyZWxCVFFsWlJaMU53UkRabmF6QTBVM1V4UmxrcmJtSlJka1ZNYld4YVUxTjBWRUpMTkc0NFVXMUdUVmhEU2xRemNtUTFSREUyTWlzNVNEQklhRFpVUkhJMGIxTlJUVWRTV1hWRVVuZHdSVE55ZFRCWmNYTjJiMGRMTkdKQlpsUk5iRGxsYTFaVlowbG9MMWxHVUhkVGRsSlpiRkpNZVVkWVZHd3pXSFZvY1ZGbWRtTlZWV3hqSzFKdWNWcG5NRTVoZDFrclN6UjFiRU5ZTkdSYWNsbGtUVkJaTUhrckt6VkZVSFZQTURsNmNsbHpSRmxSVUdOSFRYZzJTREZaUWpsNVUzcGpXbkJYTlZkSGEwcEZWR1ZSVEV0UVNHeFZkRXB6TUROMVpsazNaMVYxVkdvNVluQm1aMnRJY0RSbFZWcHVRVnAxWWpSc2RYb3pTVk5YWlRJMGFHdDFTVE5KVWk5dFpVOVROMkpETTBsTkx6TlBVbWRYTjNFd2FXWlRhREpJZUhWSWJFZFZWM1JCYjNKSVJYZzBSMGxXTHpSRlNsRm1ZMms1Y0M5b2VFc3dLemgxUzBac2NrbG5jVTFxUVdVclUzVmtLMDg0VTA5bFJXbHlkRk5vU0dWNFpYRXlUR2ROTUc1amFtVmtUM1pKU0hKcE1uUldTV0ZyT0d4bGJVUkliMUpYYVZKVk9WcE5NRGgyUVRCWEwzZHBhblJqVkdsTFlYRTNUa3RTYUU1UGFqSTVla0Z4UVdwRlRWSjRRbkpuU2pocVVETjVjSE5DTkdaWk1FOU1TRU5HY1ZBMlVITkJjRmRLTms1YVkyWkJjVmh3VVc1TFRETkZWVzlCZEhOT2NsUjRVRFJ1ZWpSaVVscDRaVlUyYlVsbWJDdFdRbXBSUXpWR09FcExiMWxYV2pGeGEyaDBlV1F3VWpZNWJsSlZORzVWTXpCelJsUTVjRUpoYURoUmFreG5VVWhRUmxkc1EzVXhlR3RaVFZObWN6VkRiSFUzUzI1SlRGSjBZMnR0WlZnMVVuTmtaWFkzY1dwQlpVTnZjV2x3TWtkRmNWWnBjbVpTZUdGSFYwa3JPRFZOTVdoYWJuUjVURGxPYjJwVlowaHpkMGRZU0VwSlNsZHNhMmg1U0ZWcmFFaEpPV1pUU0ZOcGRuVk5ZVkoxS3pCcVNWWjFVRWRZU2pGUmFuVmxWR3RIZFhoQ1ZrbGhjRnBuTUdsclZGRlVSRXhsT1UxVVIxcE5NMjB2VHk5cU0zcGxjaXRIZGpST2FXaEVVMEpvWlN0MFdsSkVjMUkzVWpVMlFXWkxNSFpKYjB0RmVGbFRValpLWWpWNmMxVmxXRTkxVW5nMlpGTm9VMDExYnpoSFRtNDVNMkZPZEVrclQyRlNiSE53ZVVKVGNWaEhiMHBKZEhkcVZqRnlNa3ByZFRGeVNWUmllVmRoVVN0Q1J6RkVaSEEwTlhveFJIb3JVMHhyVFZoclZuQXlLek5UZVZKc1pERlRUR2xCVFZGQllUbERkVzVGVVZaYVozTlJVa281UWxOS04wOVNTRkJzWWtoaGVVVkJOMVpvTWtzNWFGbGpRM0IzUjBaTFMzUkNObkJSZVdSdmN6bE1VMFJqY1RoT2FDOWhTSEJITnk5aE5VY3dSQzlMZVZoSlNYRnhabk5uYzNVNVJqbFlibko2WkRoa1Uwa3ljRkp4U0RGTVQxTkhTRWxEUzJGUWMybHpkR05vUVM5WmREbEVhVlpTV21wSmNFTk9NaXN3WWtzNWNtVXlSRTVHUW1GQmRtUTBWV2x4TlhsRlJITlVUVTV3ZUV4VlNWSldia2MyY0M4dlFVSjBReTlaWlV0dWFFODJlbmRaYUN0UmFVaFVXbmQwTVRFMk0yUkJiVTFJTWtGM01VSnJUa0pPVG1oRGIydDZZM1JTVVZjNFdqSnZjWFJGY0hsclpHNUNkMk5JUW5kalNFSjNZMGhDZDJOSVFuZGpTRUozWTBoQ2QyTklRbTltTDJjdmIwSlZSMHhuZFZwWVFtdEJRVUZCYkdSRlZsbGtSMUpvWkVkVk5sa3pTbXhaV0ZKc1FVUkpkMDFVV1hSTlZFRjBUVlJTVlUxRWF6Wk9SRUUyVFhwUmNrMUVTVFpOUkVSYUwxTjJZMEZCUVVGS1dGSkdWMGhTYTFsWVVteFBiVEYyV2tkc2JXVlJRWGxOUkVVeVRGUkZkMHhVUlRCV1JFRTFUMnBSZDA5cVRUQkxla0Y1VDJwQmQzRkxRMVJaUVVGQlFVSnNNRkpXYURCVk1qbHRaRWhrYUdOdFZVRlJWMUoyV1cxVloxTlhNV2hhTWxaVFdsZEdhMlZZU0VwYVZIZEJRVUZCUVZOVlZrOVNTelZEV1VsSlBTSUtJQ0FnZlN3S0lDQWdJbFJsYlhCc1lYUmxTV1FpT2pNc0NpQWdJQ0pTWldOMElqcDdDaUFnSUNBZ0lDSk1iM2RsY2t4bFpuUllJam94TUN3S0lDQWdJQ0FnSWt4dmQyVnlUR1ZtZEZraU9qRXdMQW9nSUNBZ0lDQWlWWEJ3WlhKU2FXZG9kRmdpT2pFNU5Dd0tJQ0FnSUNBZ0lsVndjR1Z5VW1sbmFIUlpJam80TmdvZ0lDQjlMQW9nSUNBaVVHRm5aU0k2TVFwOSJ9XQ==
    
    В начало © ООО "КРИПТО-ПРО", 2000–2025