{
  "version": 1,
  "article": {
    "url": "https://neosimvolist.team-wiki.ru/posts/demo-ai-moderation",
    "title": "ИИ-агент в комментариях: как отказаться от капч",
    "publishedAt": "2026-10-22T21:57:01.236Z",
    "modifiedAt": "2026-10-22T21:57:01.236Z"
  },
  "text": "Коротко\nКапчи убивают конверсию комментариев. Заменили на LLM-модерацию: уверенность выше порога - публикуем, ниже - очередь автору блога.\n\nКапча на комментариях - это отказ от читателей. Она отсекает ровно тех,\nкто готов был написать thoughtful-ответ, но не хочет разгадывать картинки с машинами.\n\nИдея\n\nЕсли блог - про ИИ, то и защита от спама должна быть ИИ. Модель читает комментарий\nвместе с контекстом: заголовком статьи, именем автора и его историей.\n\n \n Важное ограничение\nМодель - не судья. Её решение всегда можно перебить вручную, а каждое решение логируется.\n\nПромпт\n\n \n Ты модератор комментариев инженерного блога о разработке и ИИ.\n\nПубликовать: обычное мнение, вопрос, конструктивная критика, сарказм без оскорблений.\nОтклонить: спам, реклама, оскорбления, угрозы.\nНа проверку: сомнительные случаи и всё, в чём не уверен.\n\nВАЖНО: не запрещай критику автора, критику технологий и грубую\nпрофессиональную лексику вроде \"говнокод\". Ты модератор, а не цензор.\n\nОтветь ТОЛЬКО JSON: {\"verdict\":\"...\",\"score\":0.0,\"reason\":\"...\",\"categories\":[]}\n\n \nПорог уверенности\n\nОдна настройка определяет всю политику:\n\n \n export function applyPolicy(result: ModerationResult) {\n if (result.verdict === 'approve') {\n return result.score >= 0.86 ? 'published' : 'pending';\n }\n if (result.verdict === 'reject') return 'rejected';\n return 'pending';\n}\n\n \n\nscore ≥ 0.86 → публикуем сразу\n\nscore 0.5-0.86 → автору блога в очередь\n\nverdict reject → отклоняем\n\n \n Почему не публиковать всё автоматически\nМодель иногда путает резкий профессиональный тон с токсичностью.\nПоэтому approve с низкой уверенностью уходит человеку, а не читателям.\n\nПодключение Mastra\n\nMastra-агент может не только модерировать, но и переоценивать комментарий постфактум -\nнапример, когда через час накопился контекст из ответов:\n\n \n // Mastra agent\nexport const moderator = new Agent({\n name: 'moderator',\n instructions: 'Оцени комментарий для инженерного блога...',\n tools: { searchContext },\n});\n\n// Наш сервер принимает результат:\napp.post('/api/moderation/callback', async (req, res) => {\n if (!verifyHmac(req, process.env.MODERATION_WEBHOOK_SECRET)) {\n return res.status(403).end();\n }\n applyVerdict(req.body.commentId, req.body.verdict);\n});\n\n \n\n \n Развилка по уверенности модели: публикуем, на проверку или отклоняем\n\nИтог за месяц\n\nМетрика\nДо (капча)\nПосле (LLM)\n\nОставлено комментариев\n3%\n47%\n\nСпам прошёл\n0%\n0.4%\n\nВремя ручной проверки\n0\n~6 мин/день\n\nОтказов от комментария\n91%\n12%\n\n \n Главный вывод\nМодерация - это не фильтр. Это политика, записанная в промпт. Фильтр отсекает,\nполитика решает, а человек применяет её к граничным случаям.",
  "textB64": "0JrQvtGA0L7RgtC60L4K0JrQsNC/0YfQuCDRg9Cx0LjQstCw0Y7RgiDQutC+0L3QstC10YDRgdC40Y4g0LrQvtC80LzQtdC90YLQsNGA0LjQtdCyLiDQl9Cw0LzQtdC90LjQu9C4INC90LAgTExNLdC80L7QtNC10YDQsNGG0LjRjjog0YPQstC10YDQtdC90L3QvtGB0YLRjCDQstGL0YjQtSDQv9C+0YDQvtCz0LAgLSDQv9GD0LHQu9C40LrRg9C10LwsINC90LjQttC1IC0g0L7Rh9C10YDQtdC00Ywg0LDQstGC0L7RgNGDINCx0LvQvtCz0LAuCgrQmtCw0L/Rh9CwINC90LAg0LrQvtC80LzQtdC90YLQsNGA0LjRj9GFIC0g0Y3RgtC+INC+0YLQutCw0Lcg0L7RgiDRh9C40YLQsNGC0LXQu9C10LkuINCe0L3QsCDQvtGC0YHQtdC60LDQtdGCINGA0L7QstC90L4g0YLQtdGFLArQutGC0L4g0LPQvtGC0L7QsiDQsdGL0Lsg0L3QsNC/0LjRgdCw0YLRjCB0aG91Z2h0ZnVsLdC+0YLQstC10YIsINC90L4g0L3QtSDRhdC+0YfQtdGCINGA0LDQt9Cz0LDQtNGL0LLQsNGC0Ywg0LrQsNGA0YLQuNC90LrQuCDRgSDQvNCw0YjQuNC90LDQvNC4LgoK0JjQtNC10Y8KCtCV0YHQu9C4INCx0LvQvtCzIC0g0L/RgNC+INCY0JgsINGC0L4g0Lgg0LfQsNGJ0LjRgtCwINC+0YIg0YHQv9Cw0LzQsCDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0JjQmC4g0JzQvtC00LXQu9GMINGH0LjRgtCw0LXRgiDQutC+0LzQvNC10L3RgtCw0YDQuNC5CtCy0LzQtdGB0YLQtSDRgSDQutC+0L3RgtC10LrRgdGC0L7QvDog0LfQsNCz0L7Qu9C+0LLQutC+0Lwg0YHRgtCw0YLRjNC4LCDQuNC80LXQvdC10Lwg0LDQstGC0L7RgNCwINC4INC10LPQviDQuNGB0YLQvtGA0LjQtdC5LgoKIAog0JLQsNC20L3QvtC1INC+0LPRgNCw0L3QuNGH0LXQvdC40LUK0JzQvtC00LXQu9GMIC0g0L3QtSDRgdGD0LTRjNGPLiDQldGRINGA0LXRiNC10L3QuNC1INCy0YHQtdCz0LTQsCDQvNC+0LbQvdC+INC/0LXRgNC10LHQuNGC0Ywg0LLRgNGD0YfQvdGD0Y4sINCwINC60LDQttC00L7QtSDRgNC10YjQtdC90LjQtSDQu9C+0LPQuNGA0YPQtdGC0YHRjy4KCtCf0YDQvtC80L/RggoKIAog0KLRiyDQvNC+0LTQtdGA0LDRgtC+0YAg0LrQvtC80LzQtdC90YLQsNGA0LjQtdCyINC40L3QttC10L3QtdGA0L3QvtCz0L4g0LHQu9C+0LPQsCDQviDRgNCw0LfRgNCw0LHQvtGC0LrQtSDQuCDQmNCYLgoK0J/Rg9Cx0LvQuNC60L7QstCw0YLRjDog0L7QsdGL0YfQvdC+0LUg0LzQvdC10L3QuNC1LCDQstC+0L/RgNC+0YEsINC60L7QvdGB0YLRgNGD0LrRgtC40LLQvdCw0Y8g0LrRgNC40YLQuNC60LAsINGB0LDRgNC60LDQt9C8INCx0LXQtyDQvtGB0LrQvtGA0LHQu9C10L3QuNC5LgrQntGC0LrQu9C+0L3QuNGC0Yw6INGB0L/QsNC8LCDRgNC10LrQu9Cw0LzQsCwg0L7RgdC60L7RgNCx0LvQtdC90LjRjywg0YPQs9GA0L7Qt9GLLgrQndCwINC/0YDQvtCy0LXRgNC60YM6INGB0L7QvNC90LjRgtC10LvRjNC90YvQtSDRgdC70YPRh9Cw0Lgg0Lgg0LLRgdGRLCDQsiDRh9GR0Lwg0L3QtSDRg9Cy0LXRgNC10L0uCgrQktCQ0JbQndCeOiDQvdC1INC30LDQv9GA0LXRidCw0Lkg0LrRgNC40YLQuNC60YMg0LDQstGC0L7RgNCwLCDQutGA0LjRgtC40LrRgyDRgtC10YXQvdC+0LvQvtCz0LjQuSDQuCDQs9GA0YPQsdGD0Y4K0L/RgNC+0YTQtdGB0YHQuNC+0L3QsNC70YzQvdGD0Y4g0LvQtdC60YHQuNC60YMg0LLRgNC+0LTQtSAi0LPQvtCy0L3QvtC60L7QtCIuINCi0Ysg0LzQvtC00LXRgNCw0YLQvtGALCDQsCDQvdC1INGG0LXQvdC30L7RgC4KCtCe0YLQstC10YLRjCDQotCe0JvQrNCa0J4gSlNPTjogeyJ2ZXJkaWN0IjoiLi4uIiwic2NvcmUiOjAuMCwicmVhc29uIjoiLi4uIiwiY2F0ZWdvcmllcyI6W119CgogCtCf0L7RgNC+0LMg0YPQstC10YDQtdC90L3QvtGB0YLQuAoK0J7QtNC90LAg0L3QsNGB0YLRgNC+0LnQutCwINC+0L/RgNC10LTQtdC70Y/QtdGCINCy0YHRjiDQv9C+0LvQuNGC0LjQutGDOgoKIAogZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UG9saWN5KHJlc3VsdDogTW9kZXJhdGlvblJlc3VsdCkgewogaWYgKHJlc3VsdC52ZXJkaWN0ID09PSAnYXBwcm92ZScpIHsKIHJldHVybiByZXN1bHQuc2NvcmUgPj0gMC44NiA/ICdwdWJsaXNoZWQnIDogJ3BlbmRpbmcnOwogfQogaWYgKHJlc3VsdC52ZXJkaWN0ID09PSAncmVqZWN0JykgcmV0dXJuICdyZWplY3RlZCc7CiByZXR1cm4gJ3BlbmRpbmcnOwp9CgogCgpzY29yZSDiiaUgMC44NiDihpIg0L/Rg9Cx0LvQuNC60YPQtdC8INGB0YDQsNC30YMKCnNjb3JlIDAuNS0wLjg2IOKGkiDQsNCy0YLQvtGA0YMg0LHQu9C+0LPQsCDQsiDQvtGH0LXRgNC10LTRjAoKdmVyZGljdCByZWplY3Qg4oaSINC+0YLQutC70L7QvdGP0LXQvAoKIAog0J/QvtGH0LXQvNGDINC90LUg0L/Rg9Cx0LvQuNC60L7QstCw0YLRjCDQstGB0ZEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LgK0JzQvtC00LXQu9GMINC40L3QvtCz0LTQsCDQv9GD0YLQsNC10YIg0YDQtdC30LrQuNC5INC/0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3Ri9C5INGC0L7QvSDRgSDRgtC+0LrRgdC40YfQvdC+0YHRgtGM0Y4uCtCf0L7RjdGC0L7QvNGDIGFwcHJvdmUg0YEg0L3QuNC30LrQvtC5INGD0LLQtdGA0LXQvdC90L7RgdGC0YzRjiDRg9GF0L7QtNC40YIg0YfQtdC70L7QstC10LrRgywg0LAg0L3QtSDRh9C40YLQsNGC0LXQu9GP0LwuCgrQn9C+0LTQutC70Y7Rh9C10L3QuNC1IE1hc3RyYQoKTWFzdHJhLdCw0LPQtdC90YIg0LzQvtC20LXRgiDQvdC1INGC0L7Qu9GM0LrQviDQvNC+0LTQtdGA0LjRgNC+0LLQsNGC0YwsINC90L4g0Lgg0L/QtdGA0LXQvtGG0LXQvdC40LLQsNGC0Ywg0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQv9C+0YHRgtGE0LDQutGC0YPQvCAtCtC90LDQv9GA0LjQvNC10YAsINC60L7Qs9C00LAg0YfQtdGA0LXQtyDRh9Cw0YEg0L3QsNC60L7Qv9C40LvRgdGPINC60L7QvdGC0LXQutGB0YIg0LjQtyDQvtGC0LLQtdGC0L7QsjoKCiAKIC8vIE1hc3RyYSBhZ2VudApleHBvcnQgY29uc3QgbW9kZXJhdG9yID0gbmV3IEFnZW50KHsKIG5hbWU6ICdtb2RlcmF0b3InLAogaW5zdHJ1Y3Rpb25zOiAn0J7RhtC10L3QuCDQutC+0LzQvNC10L3RgtCw0YDQuNC5INC00LvRjyDQuNC90LbQtdC90LXRgNC90L7Qs9C+INCx0LvQvtCz0LAuLi4nLAogdG9vbHM6IHsgc2VhcmNoQ29udGV4dCB9LAp9KTsKCi8vINCd0LDRiCDRgdC10YDQstC10YAg0L/RgNC40L3QuNC80LDQtdGCINGA0LXQt9GD0LvRjNGC0LDRgjoKYXBwLnBvc3QoJy9hcGkvbW9kZXJhdGlvbi9jYWxsYmFjaycsIGFzeW5jIChyZXEsIHJlcykgPT4gewogaWYgKCF2ZXJpZnlIbWFjKHJlcSwgcHJvY2Vzcy5lbnYuTU9ERVJBVElPTl9XRUJIT09LX1NFQ1JFVCkpIHsKIHJldHVybiByZXMuc3RhdHVzKDQwMykuZW5kKCk7CiB9CiBhcHBseVZlcmRpY3QocmVxLmJvZHkuY29tbWVudElkLCByZXEuYm9keS52ZXJkaWN0KTsKfSk7CgogCgogCiDQoNCw0LfQstC40LvQutCwINC/0L4g0YPQstC10YDQtdC90L3QvtGB0YLQuCDQvNC+0LTQtdC70Lg6INC/0YPQsdC70LjQutGD0LXQvCwg0L3QsCDQv9GA0L7QstC10YDQutGDINC40LvQuCDQvtGC0LrQu9C+0L3Rj9C10LwKCtCY0YLQvtCzINC30LAg0LzQtdGB0Y/RhgoK0JzQtdGC0YDQuNC60LAK0JTQviAo0LrQsNC/0YfQsCkK0J/QvtGB0LvQtSAoTExNKQoK0J7RgdGC0LDQstC70LXQvdC+INC60L7QvNC80LXQvdGC0LDRgNC40LXQsgozJQo0NyUKCtCh0L/QsNC8INC/0YDQvtGI0ZHQuwowJQowLjQlCgrQktGA0LXQvNGPINGA0YPRh9C90L7QuSDQv9GA0L7QstC10YDQutC4CjAKfjYg0LzQuNC9L9C00LXQvdGMCgrQntGC0LrQsNC30L7QsiDQvtGCINC60L7QvNC80LXQvdGC0LDRgNC40Y8KOTElCjEyJQoKIAog0JPQu9Cw0LLQvdGL0Lkg0LLRi9Cy0L7QtArQnNC+0LTQtdGA0LDRhtC40Y8gLSDRjdGC0L4g0L3QtSDRhNC40LvRjNGC0YAuINCt0YLQviDQv9C+0LvQuNGC0LjQutCwLCDQt9Cw0L/QuNGB0LDQvdC90LDRjyDQsiDQv9GA0L7QvNC/0YIuINCk0LjQu9GM0YLRgCDQvtGC0YHQtdC60LDQtdGCLArQv9C+0LvQuNGC0LjQutCwINGA0LXRiNCw0LXRgiwg0LAg0YfQtdC70L7QstC10Log0L/RgNC40LzQtdC90Y/QtdGCINC10ZEg0Log0LPRgNCw0L3QuNGH0L3Ri9C8INGB0LvRg9GH0LDRj9C8Lg==",
  "textHash": "sha256:62853e16e0e1055bb5dea8f220887ff92a35ece227ee432c39315b5bd3c63c72",
  "record": "https://neosimvolist.team-wiki.ru/posts/demo-ai-moderation\n2026-10-22T21:57:01.236Z\nsha256:62853e16e0e1055bb5dea8f220887ff92a35ece227ee432c39315b5bd3c63c72",
  "recordB64": "aHR0cHM6Ly9uZW9zaW12b2xpc3QudGVhbS13aWtpLnJ1L3Bvc3RzL2RlbW8tYWktbW9kZXJhdGlvbgoyMDI2LTEwLTIyVDIxOjU3OjAxLjIzNloKc2hhMjU2OjYyODUzZTE2ZTBlMTA1NWJiNWRlYThmMjIwODg3ZmY5MmEzNWVjZTIyN2VlNDMyYzM5MzE1YjViZDNjNjNjNzI=",
  "recordHash": "sha256:ecf5ee2e47ee3ddbf9dca22521eb8d3b04b666d4953f169da22cc2f09190c634",
  "timestamp": {
    "service": "freetsa.org",
    "issuedAt": "2026-10-23T05:59:33.000Z",
    "token": "MIISFjADAgEAMIISDQYJKoZIhvcNAQcCoIIR/jCCEfoCAQMxDzANBglghkgBZQMEAgMFADCCAYYGCyqGSIb3DQEJEAEEoIIBdQSCAXEwggFtAgEBBgQqAwQBMDEwDQYJYIZIAWUDBAIBBQAEINwQOY9AnpB9Oq4hPW6TL29ifgWe37aj59MSX32jZspUAgQJX9e3GA8yMDI2MTAyMzA1NTkzM1oBAf+gggETpIIBDzCCAQsxETAPBgNVBAoMCEZyZWUgVFNBMQwwCgYDVQQLDANUU0ExdjB0BgNVBA0MbVRoaXMgY2VydGlmaWNhdGUgZGlnaXRhbGx5IHNpZ25zIGRvY3VtZW50cyBhbmQgdGltZSBzdGFtcCByZXF1ZXN0cyBtYWRlIHVzaW5nIHRoZSBmcmVldHNhLm9yZyBvbmxpbmUgc2VydmljZXMxGDAWBgNVBAMMD3d3dy5mcmVldHNhLm9yZzEkMCIGCSqGSIb3DQEJARYVYnVzaWxlemFzQG1haWxib3gub3JnMRIwEAYDVQQHDAlXdWVyemJ1cmcxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm6ggg5nMIIGYDCCBEigAwIBAgIJAMLphhYNqOnNMA0GCSqGSIb3DQEBDQUAMIGVMREwDwYDVQQKEwhGcmVlIFRTQTEQMA4GA1UECxMHUm9vdCBDQTEYMBYGA1UEAxMPd3d3LmZyZWV0c2Eub3JnMSIwIAYJKoZIhvcNAQkBFhNidXNpbGV6YXNAZ21haWwuY29tMRIwEAYDVQQHEwlXdWVyemJ1cmcxDzANBgNVBAgTBkJheWVybjELMAkGA1UEBhMCREUwHhcNMjYwMjE1MTk0NDIyWhcNNDAwMjAyMTk0NDIyWjCCAQsxETAPBgNVBAoMCEZyZWUgVFNBMQwwCgYDVQQLDANUU0ExdjB0BgNVBA0MbVRoaXMgY2VydGlmaWNhdGUgZGlnaXRhbGx5IHNpZ25zIGRvY3VtZW50cyBhbmQgdGltZSBzdGFtcCByZXF1ZXN0cyBtYWRlIHVzaW5nIHRoZSBmcmVldHNhLm9yZyBvbmxpbmUgc2VydmljZXMxGDAWBgNVBAMMD3d3dy5mcmVldHNhLm9yZzEkMCIGCSqGSIb3DQEJARYVYnVzaWxlemFzQG1haWxib3gub3JnMRIwEAYDVQQHDAlXdWVyemJ1cmcxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASiFeGhstbLhxix0o4UAumNSwHUUlOe3DBvs8fYs580wADW59oqGSCx15bp61TSmXkwLm1JW48XnbLLizP6ZtjcvshV3H9uz2bS53sgDXhg1wLbIhAtraC+fHCytHeuVaujggHmMIIB4jAJBgNVHRMEAjAAMB0GA1UdDgQWBBQVwL0m69RdgtFdkyYxL+9wsotGXjAfBgNVHSMEGDAWgBT6VQ2MNGZRQ0z357OnbJWveuaklzALBgNVHQ8EBAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwbAYIKwYBBQUHAQEEYDBeMDMGCCsGAQUFBzAChidodHRwOi8vd3d3LmZyZWV0c2Eub3JnL2ZpbGVzL2NhY2VydC5wZW0wJwYIKwYBBQUHMAGGG2h0dHA6Ly93d3cuZnJlZXRzYS5vcmc6MjU2MDA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vd3d3LmZyZWV0c2Eub3JnL2NybC9yb290X2NhLmNybDCByAYDVR0gBIHAMIG9MIG6BgMrBQgwgbIwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZnJlZXRzYS5vcmcvZnJlZXRzYV9jcHMuaHRtbDAyBggrBgEFBQcCARYmaHR0cDovL3d3dy5mcmVldHNhLm9yZy9mcmVldHNhX2Nwcy5wZGYwRwYIKwYBBQUHAgIwOxo5RnJlZVRTQSB0cnVzdGVkIHRpbWVzdGFtcGluZyBTb2Z0d2FyZSBhcyBhIFNlcnZpY2UgKFNhYVMpMA0GCSqGSIb3DQEBDQUAA4ICAQBrMVS/YfnfMr0ziZnesBUOrDNRrNNgt3IgMNDwNhwl6oKWHVIhlYnM/5boljfbpZTAbqvxHI3ztT0/swxQOqTat5qBJRAY/VH1n/T4M9uDjSuu3qfh0ZH5PL9ENqoVW44i5NT/znQev2MGXOAHwz9kZwwzz9MFX6hbGhBqWa+nlAqb7Y72KFzj33m1OVHxV2Wl4YD9f91bZTFpUEGW4Ktbkmxpf/iGIPaf4WHpoBW/O6EzofMKYlz4yXyEBh0wRRVyXltLrj+MFHqhe+PsMBllq/dCaO4W/F+AuHElu7aUYWMASelphWAJiUsNMr5HAoeCSSgilqf1CSoWC+k6e4334Fym+Iy4csMex+PG4rSdqXJVQ+AWEdRajSPKh7yDfpNkdnO6yqQJ/tSd11XQ5cL0M9jWuCD1zHlgA+u+R2cry3yo23jD7qTGLhZqUvXCyWigH30/Q/RXjjDwrc4DJiQ+gRY0FhdTYqlvgMBPr4LcJKnNksivdj+kbz7bVSbrBAzRiazK9l841/5XMtP9BvD0hKCpQFvP9PSgCC8EQnKqgSe26FSJBaAQcA5TnK8NF4jkbElBxf/zyh7P3IjHso35jtgUWD1/itg9BJWbYUwJ4tfILpB2F0wbk1GcZDCDZoyW3Xf3trApz/Zd93gF3joc9Hh9RFveKRzWQ7ddUt3egTCCB/8wggXnoAMCAQICCQDB6YYWDajpgDANBgkqhkiG9w0BAQ0FADCBlTERMA8GA1UEChMIRnJlZSBUU0ExEDAOBgNVBAsTB1Jvb3QgQ0ExGDAWBgNVBAMTD3d3dy5mcmVldHNhLm9yZzEiMCAGCSqGSIb3DQEJARYTYnVzaWxlemFzQGdtYWlsLmNvbTESMBAGA1UEBxMJV3VlcnpidXJnMQ8wDQYDVQQIEwZCYXllcm4xCzAJBgNVBAYTAkRFMB4XDTE2MDMxMzAxNTIxM1oXDTQxMDMwNzAxNTIxM1owgZUxETAPBgNVBAoTCEZyZWUgVFNBMRAwDgYDVQQLEwdSb290IENBMRgwFgYDVQQDEw93d3cuZnJlZXRzYS5vcmcxIjAgBgkqhkiG9w0BCQEWE2J1c2lsZXphc0BnbWFpbC5jb20xEjAQBgNVBAcTCVd1ZXJ6YnVyZzEPMA0GA1UECBMGQmF5ZXJuMQswCQYDVQQGEwJERTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALYCjg4wMvERENlkzalLnQJ44ZQq6ROqpZkHzaaXk5lb2ax+M7rZ/jcE2hwBqY0hr+P1kaWdcGdwUWeZj1AWci4KtGKyH0ORcdLPzEWT83Na95SlqzEfbAEMeJjeM9dcRRDudvS9HRSYzxfTA/BqXdn3lsxsqbZXpW/j6k/vvnzmtqGNPjWjDO5f8XDRzzmjM9P9qJZNIttoWynlYb6JDwqoRYc7LoSrJquDn/6PrenSO7MeYdJzzJuIBkkYX6vs+gU0YAq6kBthTi6FRYLeoiJvwZzX31K+1Q2Hd82ZiMBTo/x9wyh6BopP8StxPNmANmbpVThUVv84+AKYz2uThW6SJHdKZs8c3RHC+O/YUgPXRYslZksT7WOc3tT/gRPWzFNT0nKUc8PDBxV8ciqltd0L+y1sOLG5N0nIgexgAm0IlRs4JL1xusvORzrr1jbwuRi0osj/RpTwdFevLW8c+CVU0XcP15/10xTc0QTN3KvJQTgFbfzwF+frhXL9UvcBRPGI2gX1gj9Y3QYpfnOHvtLXcsE9qCZmAQRf5BLdcJhsDJh7pzRLkDc4dRbSWOeIW1H4lot/JgEhO8TLTIX4/wuEr2qYgzfN+4GGj37PMdymcW1+wt2ALBZyYp5cAFLLNX3Smq/EP2FbOx/51OHOCMccc+H+u33FajNiEynp7WwjAgMBAAGjggJOMIICSjAMBgNVHRMEBTADAQH/MA4GA1UdDwEB/wQEAwIBxjAdBgNVHQ4EFgQU+lUNjDRmUUNM9+ezp2yVr3rmpJcwgcoGA1UdIwSBwjCBv4AU+lUNjDRmUUNM9+ezp2yVr3rmpJehgZukgZgwgZUxETAPBgNVBAoTCEZyZWUgVFNBMRAwDgYDVQQLEwdSb290IENBMRgwFgYDVQQDEw93d3cuZnJlZXRzYS5vcmcxIjAgBgkqhkiG9w0BCQEWE2J1c2lsZXphc0BnbWFpbC5jb20xEjAQBgNVBAcTCVd1ZXJ6YnVyZzEPMA0GA1UECBMGQmF5ZXJuMQswCQYDVQQGEwJERYIJAMHphhYNqOmAMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly93d3cuZnJlZXRzYS5vcmcvcm9vdF9jYS5jcmwwgc8GA1UdIASBxzCBxDCBwQYKKwYBBAGB8iQBATCBsjAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5mcmVldHNhLm9yZy9mcmVldHNhX2Nwcy5odG1sMDIGCCsGAQUFBwIBFiZodHRwOi8vd3d3LmZyZWV0c2Eub3JnL2ZyZWV0c2FfY3BzLnBkZjBHBggrBgEFBQcCAjA7GjlGcmVlVFNBIHRydXN0ZWQgdGltZXN0YW1waW5nIFNvZnR3YXJlIGFzIGEgU2VydmljZSAoU2FhUykwNwYIKwYBBQUHAQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vd3d3LmZyZWV0c2Eub3JnOjI1NjAwDQYJKoZIhvcNAQENBQADggIBAGivfr+ThWLvTOs7WAvi+vbMNaJncpYvPZWQH6VjDIfQkZiYTOigajP4qcKC7Z8csRrGwj4XEI7k785vspTelcEzJiJVclUiymGXHUo7f3glDfuNSu7A+xlZsWQQBSC5wQ5kxiZi5K1NCrriKY/JSPxOmejZ5rj9vkQEEh7HwUIurLLJ1zKOBzluYLTzu4A61KVVyA/vtT+F53ZKCp+0r8OZ9M0vX79YcQXGCBzz0FM3trt9GwELdJ9IiMkS82lrobaQLXe338BGwEoMwexPjRheLaVd+3vCogNsYhkkak+Z3btvH4KTmPO4A9wK2Q3LWb70wnx3QEuZBDt4JxhnmRFSw5nxLL/ExiWtwJY1WuRONCEA7FF6UC4vBvlAuNQ1mbvBFU+K52GgsNVV+0oTkdTzQgr42/EvLX3bnXfc4VN4BAdK8XXk8tbVWzS11vfcvdMXMK9WSA1MDP8UP56DvBUYZtC6Dwu9xH/ieGQXa71sGrhd8yXt93eIm8RHG/P6c+VsxZHosWDNp7B4ah7ASsOyT6LijV0Z5eSABNXhZqg8guxv1U+zheuvcTOoW1LeRttSROHDSujTbnEvn84NST19Pt1YbGGY4+w+bpY0b0F6yfIh4K/zOo9qCx70wCNjC3atqo2RQzgl7MQcSaW5ixgcfaMOmXq5VMc8LNgFr9qZMYIB7TCCAekCAQEwgaMwgZUxETAPBgNVBAoTCEZyZWUgVFNBMRAwDgYDVQQLEwdSb290IENBMRgwFgYDVQQDEw93d3cuZnJlZXRzYS5vcmcxIjAgBgkqhkiG9w0BCQEWE2J1c2lsZXphc0BnbWFpbC5jb20xEjAQBgNVBAcTCVd1ZXJ6YnVyZzEPMA0GA1UECBMGQmF5ZXJuMQswCQYDVQQGEwJERQIJAMLphhYNqOnNMA0GCWCGSAFlAwQCAwUAoIG4MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMDIzMDU1OTMzWjArBgsqhkiG9w0BCRACDDEcMBowGDAWBBRIH9U8U004QYDAKGUZoDb5iFRHZjBPBgkqhkiG9w0BCQQxQgRAqrYaviZfDjBKMiRRixNRY2F9CTieC1DUH+7Ha4BSJ3IyszRyBsA2Irb15CJttboCB/+NIXEU7aCBEj3HGyq7tDAKBggqhkjOPQQDBARoMGYCMQDj2JdwLLKXde5gg3+D7teJqLxsSIjEsouAJntYAioMhOfV8tw8odX5E1PzZBvU/VACMQDcn7TEGChNuER2Urf/RlEQn89YnRYzHZIQJI1KWMusi1J4niRcp+1vSQoiVlrRnuc=",
    "query": "MDkCAQEwMTANBglghkgBZQMEAgEFAAQg3BA5j0CekH06riE9bpMvb2J+BZ7ftqPn0xJffaNmylQBAf8=",
    "certificates": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdZRENDQkVpZ0F3SUJBZ0lKQU1McGhoWU5xT25OTUEwR0NTcUdTSWIzRFFFQkRRVUFNSUdWTVJFd0R3WUQKVlFRS0V3aEdjbVZsSUZSVFFURVFNQTRHQTFVRUN4TUhVbTl2ZENCRFFURVlNQllHQTFVRUF4TVBkM2QzTG1aeQpaV1YwYzJFdWIzSm5NU0l3SUFZSktvWklodmNOQVFrQkZoTmlkWE5wYkdWNllYTkFaMjFoYVd3dVkyOXRNUkl3CkVBWURWUVFIRXdsWGRXVnllbUoxY21jeER6QU5CZ05WQkFnVEJrSmhlV1Z5YmpFTE1Ba0dBMVVFQmhNQ1JFVXcKSGhjTk1qWXdNakUxTVRrME5ESXlXaGNOTkRBd01qQXlNVGswTkRJeVdqQ0NBUXN4RVRBUEJnTlZCQW9NQ0VaeQpaV1VnVkZOQk1Rd3dDZ1lEVlFRTERBTlVVMEV4ZGpCMEJnTlZCQTBNYlZSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnClpHbG5hWFJoYkd4NUlITnBaMjV6SUdSdlkzVnRaVzUwY3lCaGJtUWdkR2x0WlNCemRHRnRjQ0J5WlhGMVpYTjAKY3lCdFlXUmxJSFZ6YVc1bklIUm9aU0JtY21WbGRITmhMbTl5WnlCdmJteHBibVVnYzJWeWRtbGpaWE14R0RBVwpCZ05WQkFNTUQzZDNkeTVtY21WbGRITmhMbTl5WnpFa01DSUdDU3FHU0liM0RRRUpBUllWWW5WemFXeGxlbUZ6ClFHMWhhV3hpYjNndWIzSm5NUkl3RUFZRFZRUUhEQWxYZFdWeWVtSjFjbWN4Q3pBSkJnTlZCQVlUQWtSRk1ROHcKRFFZRFZRUUlEQVpDWVhsbGNtNHdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUFJZ05pQUFTaUZlR2hzdGJMaHhpeAowbzRVQXVtTlN3SFVVbE9lM0RCdnM4ZllzNTgwd0FEVzU5b3FHU0N4MTVicDYxVFNtWGt3TG0xSlc0OFhuYkxMCml6UDZadGpjdnNoVjNIOXV6MmJTNTNzZ0RYaGcxd0xiSWhBdHJhQytmSEN5dEhldVZhdWpnZ0htTUlJQjRqQUoKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJRVndMMG02OVJkZ3RGZGt5WXhMKzl3c290R1hqQWZCZ05WSFNNRQpHREFXZ0JUNlZRMk1OR1pSUTB6MzU3T25iSld2ZXVha2x6QUxCZ05WSFE4RUJBTUNCc0F3RmdZRFZSMGxBUUgvCkJBd3dDZ1lJS3dZQkJRVUhBd2d3YkFZSUt3WUJCUVVIQVFFRVlEQmVNRE1HQ0NzR0FRVUZCekFDaGlkb2RIUncKT2k4dmQzZDNMbVp5WldWMGMyRXViM0puTDJacGJHVnpMMk5oWTJWeWRDNXdaVzB3SndZSUt3WUJCUVVITUFHRwpHMmgwZEhBNkx5OTNkM2N1Wm5KbFpYUnpZUzV2Y21jNk1qVTJNREEzQmdOVkhSOEVNREF1TUN5Z0txQW9oaVpvCmRIUndPaTh2ZDNkM0xtWnlaV1YwYzJFdWIzSm5MMk55YkM5eWIyOTBYMk5oTG1OeWJEQ0J5QVlEVlIwZ0JJSEEKTUlHOU1JRzZCZ01yQlFnd2diSXdNd1lJS3dZQkJRVUhBZ0VXSjJoMGRIQTZMeTkzZDNjdVpuSmxaWFJ6WVM1dgpjbWN2Wm5KbFpYUnpZVjlqY0hNdWFIUnRiREF5QmdnckJnRUZCUWNDQVJZbWFIUjBjRG92TDNkM2R5NW1jbVZsCmRITmhMbTl5Wnk5bWNtVmxkSE5oWDJOd2N5NXdaR1l3UndZSUt3WUJCUVVIQWdJd094bzVSbkpsWlZSVFFTQjAKY25WemRHVmtJSFJwYldWemRHRnRjR2x1WnlCVGIyWjBkMkZ5WlNCaGN5QmhJRk5sY25acFkyVWdLRk5oWVZNcApNQTBHQ1NxR1NJYjNEUUVCRFFVQUE0SUNBUUJyTVZTL1lmbmZNcjB6aVpuZXNCVU9yRE5Sck5OZ3QzSWdNTkR3Ck5od2w2b0tXSFZJaGxZbk0vNWJvbGpmYnBaVEFicXZ4SEkzenRUMC9zd3hRT3FUYXQ1cUJKUkFZL1ZIMW4vVDQKTTl1RGpTdXUzcWZoMFpINVBMOUVOcW9WVzQ0aTVOVC96blFldjJNR1hPQUh3ejlrWnd3eno5TUZYNmhiR2hCcQpXYStubEFxYjdZNzJLRnpqMzNtMU9WSHhWMldsNFlEOWY5MWJaVEZwVUVHVzRLdGJrbXhwZi9pR0lQYWY0V0hwCm9CVy9PNkV6b2ZNS1lsejR5WHlFQmgwd1JSVnlYbHRMcmorTUZIcWhlK1BzTUJsbHEvZENhTzRXL0YrQXVIRWwKdTdhVVlXTUFTZWxwaFdBSmlVc05NcjVIQW9lQ1NTZ2lscWYxQ1NvV0MrazZlNDMzNEZ5bStJeTRjc01leCtQRwo0clNkcVhKVlErQVdFZFJhalNQS2g3eURmcE5rZG5PNnlxUUovdFNkMTFYUTVjTDBNOWpXdUNEMXpIbGdBK3UrClIyY3J5M3lvMjNqRDdxVEdMaFpxVXZYQ3lXaWdIMzAvUS9SWGpqRHdyYzRESmlRK2dSWTBGaGRUWXFsdmdNQlAKcjRMY0pLbk5rc2l2ZGora2J6N2JWU2JyQkF6Umlheks5bDg0MS81WE10UDlCdkQwaEtDcFFGdlA5UFNnQ0M4RQpRbktxZ1NlMjZGU0pCYUFRY0E1VG5LOE5GNGprYkVsQnhmL3p5aDdQM0lqSHNvMzVqdGdVV0QxL2l0ZzlCSldiCllVd0o0dGZJTHBCMkYwd2JrMUdjWkRDRFpveVczWGYzdHJBcHovWmQ5M2dGM2pvYzlIaDlSRnZlS1J6V1E3ZGQKVXQzZWdRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvekNDQmVlZ0F3SUJBZ0lKQU1IcGhoWU5xT21BTUEwR0NTcUdTSWIzRFFFQkRRVUFNSUdWTVJFd0R3WUQKVlFRS0V3aEdjbVZsSUZSVFFURVFNQTRHQTFVRUN4TUhVbTl2ZENCRFFURVlNQllHQTFVRUF4TVBkM2QzTG1aeQpaV1YwYzJFdWIzSm5NU0l3SUFZSktvWklodmNOQVFrQkZoTmlkWE5wYkdWNllYTkFaMjFoYVd3dVkyOXRNUkl3CkVBWURWUVFIRXdsWGRXVnllbUoxY21jeER6QU5CZ05WQkFnVEJrSmhlV1Z5YmpFTE1Ba0dBMVVFQmhNQ1JFVXcKSGhjTk1UWXdNekV6TURFMU1qRXpXaGNOTkRFd016QTNNREUxTWpFeldqQ0JsVEVSTUE4R0ExVUVDaE1JUm5KbApaU0JVVTBFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEdEQVdCZ05WQkFNVEQzZDNkeTVtY21WbGRITmhMbTl5Clp6RWlNQ0FHQ1NxR1NJYjNEUUVKQVJZVFluVnphV3hsZW1GelFHZHRZV2xzTG1OdmJURVNNQkFHQTFVRUJ4TUoKVjNWbGNucGlkWEpuTVE4d0RRWURWUVFJRXdaQ1lYbGxjbTR4Q3pBSkJnTlZCQVlUQWtSRk1JSUNJakFOQmdrcQpoa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQXRnS09EakF5OFJFUTJXVE5xVXVkQW5qaGxDcnBFNnFsCm1RZk5wcGVUbVZ2WnJINHp1dG4rTndUYUhBR3BqU0d2NC9XUnBaMXdaM0JSWjVtUFVCWnlMZ3EwWXJJZlE1RngKMHMvTVJaUHpjMXIzbEtXck1SOXNBUXg0bU40ejExeEZFTzUyOUwwZEZKalBGOU1EOEdwZDJmZVd6R3lwdGxlbApiK1BxVCsrK2ZPYTJvWTArTmFNTTdsL3hjTkhQT2FNejAvMm9sazBpMjJoYktlVmh2b2tQQ3FoRmh6c3VoS3NtCnE0T2Yvbyt0NmRJN3N4NWgwblBNbTRnR1NSaGZxK3o2QlRSZ0NycVFHMkZPTG9WRmd0NmlJbS9Cbk5mZlVyN1YKRFlkM3pabUl3Rk9qL0gzREtIb0dpay94SzNFODJZQTJadWxWT0ZSVy96ajRBcGpQYTVPRmJwSWtkMHBtenh6ZApFY0w0NzloU0E5ZEZpeVZtU3hQdFk1emUxUCtCRTliTVUxUFNjcFJ6dzhNSEZYeHlLcVcxM1F2N0xXdzRzYmszClNjaUI3R0FDYlFpVkd6Z2t2WEc2eTg1SE91dldOdkM1R0xTaXlQOUdsUEIwVjY4dGJ4ejRKVlRSZHcvWG4vWFQKRk56UkJNM2NxOGxCT0FWdC9QQVg1K3VGY3YxUzl3RkU4WWphQmZXQ1AxamRCaWwrYzRlKzB0ZHl3VDJvSm1ZQgpCRi9rRXQxd21Hd01tSHVuTkV1UU56aDFGdEpZNTRoYlVmaVdpMzhtQVNFN3hNdE1oZmovQzRTdmFwaUROODM3CmdZYVBmczh4M0taeGJYN0MzWUFzRm5KaW5sd0FVc3MxZmRLYXI4US9ZVnM3SC9uVTRjNEl4eHh6NGY2N2ZjVnEKTTJJVEtlbnRiQ01DQXdFQUFhT0NBazR3Z2dKS01Bd0dBMVVkRXdRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRRApBZ0hHTUIwR0ExVWREZ1FXQkJUNlZRMk1OR1pSUTB6MzU3T25iSld2ZXVha2x6Q0J5Z1lEVlIwakJJSENNSUcvCmdCVDZWUTJNTkdaUlEwejM1N09uYkpXdmV1YWtsNkdCbTZTQm1EQ0JsVEVSTUE4R0ExVUVDaE1JUm5KbFpTQlUKVTBFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEdEQVdCZ05WQkFNVEQzZDNkeTVtY21WbGRITmhMbTl5WnpFaQpNQ0FHQ1NxR1NJYjNEUUVKQVJZVFluVnphV3hsZW1GelFHZHRZV2xzTG1OdmJURVNNQkFHQTFVRUJ4TUpWM1ZsCmNucGlkWEpuTVE4d0RRWURWUVFJRXdaQ1lYbGxjbTR4Q3pBSkJnTlZCQVlUQWtSRmdna0F3ZW1HRmcybzZZQXcKTXdZRFZSMGZCQ3d3S2pBb29DYWdKSVlpYUhSMGNEb3ZMM2QzZHk1bWNtVmxkSE5oTG05eVp5OXliMjkwWDJOaApMbU55YkRDQnp3WURWUjBnQklISE1JSEVNSUhCQmdvckJnRUVBWUh5SkFFQk1JR3lNRE1HQ0NzR0FRVUZCd0lCCkZpZG9kSFJ3T2k4dmQzZDNMbVp5WldWMGMyRXViM0puTDJaeVpXVjBjMkZmWTNCekxtaDBiV3d3TWdZSUt3WUIKQlFVSEFnRVdKbWgwZEhBNkx5OTNkM2N1Wm5KbFpYUnpZUzV2Y21jdlpuSmxaWFJ6WVY5amNITXVjR1JtTUVjRwpDQ3NHQVFVRkJ3SUNNRHNhT1VaeVpXVlVVMEVnZEhKMWMzUmxaQ0IwYVcxbGMzUmhiWEJwYm1jZ1UyOW1kSGRoCmNtVWdZWE1nWVNCVFpYSjJhV05sSUNoVFlXRlRLVEEzQmdnckJnRUZCUWNCQVFRck1Da3dKd1lJS3dZQkJRVUgKTUFHR0cyaDBkSEE2THk5M2QzY3VabkpsWlhSellTNXZjbWM2TWpVMk1EQU5CZ2txaGtpRzl3MEJBUTBGQUFPQwpBZ0VBYUs5K3Y1T0ZZdTlNNnp0WUMrTDY5c3cxb21keWxpODlsWkFmcFdNTWg5Q1JtSmhNNktCcU0vaXB3b0x0Cm54eXhHc2JDUGhjUWp1VHZ6bSt5bE42VndUTW1JbFZ5VlNMS1laY2RTanQvZUNVTis0MUs3c0Q3R1ZteFpCQUYKSUxuQkRtVEdKbUxrclUwS3V1SXBqOGxJL0U2WjZObm11UDIrUkFRU0hzZkJRaTZzc3NuWE1vNEhPVzVndFBPNwpnRHJVcFZYSUQrKzFQNFhuZGtvS243U3Z3NW4welM5ZnYxaHhCY1lJSFBQUVV6ZTJ1MzBiQVF0MG4waUl5Ukx6CmFXdWh0cEF0ZDdmZndFYkFTZ3pCN0UrTkdGNHRwVjM3ZThLaUEyeGlHU1JxVDVuZHUyOGZncE9ZODdnRDNBcloKRGN0WnZ2VENmSGRBUzVrRU8zZ25HR2VaRVZMRG1mRXN2OFRHSmEzQWxqVmE1RTQwSVFEc1VYcFFMaThHK1VDNAoxRFdadThFVlQ0cm5ZYUN3MVZYN1NoT1IxUE5DQ3ZqYjhTOHRmZHVkZDl6aFUzZ0VCMHJ4ZGVUeTF0VmJOTFhXCjk5eTkweGN3cjFaSURVd00veFEvbm9POEZSaG0wTG9QQzczRWYrSjRaQmRydld3YXVGM3pKZTMzZDRpYnhFY2IKOC9wejVXekZrZWl4WU0ybnNIaHFIc0JLdzdKUG91S05YUm5sNUlBRTFlRm1xRHlDN0cvVlQ3T0Y2Njl4TTZoYgpVdDVHMjFKRTRjTks2Tk51Y1MrZnpnMUpQWDArM1Zoc1laamo3RDV1bGpSdlFYcko4aUhnci9NNmoyb0xIdlRBCkkyTUxkcTJxalpGRE9DWHN4QnhKcGJtTEdCeDlvdzZaZXJsVXh6d3MyQVd2MnBrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
  },
  "howToVerify": [
    "1. sha256 от text должен совпадать с textHash:",
    "     jq -r .textB64 proof.json | base64 -d | sha256sum",
    "2. sha256 от record должен совпадать с recordHash:",
    "     jq -r .recordB64 proof.json | base64 -d | sha256sum",
    "3. подпись времени:",
    "     jq -r .timestamp.token        proof.json | base64 -d > token.tsr",
    "     jq -r .timestamp.query        proof.json | base64 -d > query.tsq",
    "     jq -r .timestamp.certificates proof.json | base64 -d > certs.pem",
    "     openssl ts -verify -in token.tsr -queryfile query.tsq -CAfile certs.pem",
    "   Ожидается: Verification: OK",
    "",
    "Хешировать нужно поля textB64 и recordB64, а не text и record:",
    "те печатаются текстом и теряют байты при разборе."
  ]
}