<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://saberpedia.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shadowmaster69</id>
	<title>Сейберпедия - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://saberpedia.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shadowmaster69"/>
	<link rel="alternate" type="text/html" href="https://saberpedia.no/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Shadowmaster69"/>
	<updated>2026-10-24T13:44:34Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://saberpedia.no/index.php?title=MatroCholo&amp;diff=10311</id>
		<title>MatroCholo</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MatroCholo&amp;diff=10311"/>
		<updated>2026-10-23T12:01:18Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: /* Личная жизнь */ очепяточка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Челик&lt;br /&gt;
| name = MatroCholo&lt;br /&gt;
| image = &lt;br /&gt;
| nicknames = ByloTonix, MatroCholo&lt;br /&gt;
| activity_years = 2021-2023&lt;br /&gt;
| activity = в прошлом Ржаксфюрер&lt;br /&gt;
| language = русский&lt;br /&gt;
| location = предположительно Москва, Россия&lt;br /&gt;
| irl_name = Аркадий&lt;br /&gt;
| status = жив; ведет деятельность вне сообщества OpenVK&lt;br /&gt;
| alignment = Хаотичное зло&lt;br /&gt;
| politviews = консервативные; рашизм&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MatroCholo&#039;&#039;&#039; (также известный как &#039;&#039;ByloTonix&#039;&#039; или Аркадий) — программист-онанист, известный в сообществе [[OpenVK]] как основатель [[Ржака OpenVK|Ржаки]] и первый Ржаксфюрер.&lt;br /&gt;
&lt;br /&gt;
В прошлом влиятельная личность в сообществе, нынче же прекратил свою деятельность и больше в нём не появляется. Новые любители OpenVK уже и не знают, кто это, а старые уже потихоньку начали забывать про него. &lt;br /&gt;
== Личная жизнь ==&lt;br /&gt;
О личной жизни Аркадия мало что известно, кроме того, что он является студентом в Высшей Школе Экономики в г. Москва. Вероятно, его уход из сообщества связан с желанием посвятить себя учёбе и последующему карьерному росту. &lt;br /&gt;
=== Политическая позиция ===&lt;br /&gt;
Подозревается в рашистских взглядах, в 2023 году публично показал свои консерватистские убеждения, причём не абы где, а сразу в канале Ржаки, где он опубликовал пост с весьма нелепым осуждением ЛГБТ-сообщества и администрации OpenVK (они заменили выбор пола на выбор местоимений). За подобную выходку был разжалован Рудзиком и исключён из Ржаксмейстеров.&lt;br /&gt;
&lt;br /&gt;
== Деятельность в OpenVK ==&lt;br /&gt;
В сентябре 2021 года основал юмористический канал, посвящённый OpenVK, на тот момент известный как «Ржака OpenVK». После возврата Рудзика в сообщество, позвал его заниматься мемоделством вместе. Владея основным неофициальным каналом, MatroCholo быстро получил признание сообщества и подмял под себя чуть ли не всё влияние в фендоме.&lt;br /&gt;
&lt;br /&gt;
При этом официальный админсостав, кроме [[Целестора|Целесторы]], к нему относился не очень хорошо. В основном из-за того, что он иногда использовал свою видимость в сообществе для провокаций и розжига розни. В частности, MatroCholo известен тем, что поссорился с [[Veselcraft]]&#039;ом из-за коммунизма и, после своего исключения из чата OpenVK, [[OpenVK#Исход_Министерства_в_2022_году|удалил свою страницу и группу на сайте]] и полностью перешёл в [[VepurOVK]], сменив контент на восхваление VepurOVK и высмеивание OpenVK, чем и [[SaursVepur#Критика|подкидывал дрова в конфликт]] между сайтами. &lt;br /&gt;
=== Выход из сообщества ===&lt;br /&gt;
Со временем Аркадий начал задумываться о подготовке к поступлению в ВУЗ и начал всё меньше и меньше времени уделять Ржаке, при этом какую-никакую активность он сохранял. Однако Рудзик получал всё чаще управлял Ржакой вместо Аркадия и в какой-то момент получил права владельца на канал и чат.&lt;br /&gt;
&lt;br /&gt;
В течении одного из периодов, когда Рудзик был де-факто владельцем канала, произошёл забавный инцидент: в OpenVK вышло обновление, которое заменяло механику выбора пола на выбор местоимений. Сделано это было с целью повышения доступности социальной сети для ЛГБТ-сообщества, в частности для небинарных личностей и людей, предпочитаемые местоимения которых не совпадают с их биологическим полом. Не смотря на то, что обновление даже не добавляло неопронаунсы, MatroCholo не выдержал и, посчитав подобный поворот событий излишне woke, решил осудить администрацию OpenVK постом&amp;lt;ref&amp;gt;https://t.me/openvkfun/2567&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рудзик решил на этот раз не спускать с рук MatroCholo и, будучи де-факто и.о. Ржаксфюрера, разжаловал его и стал полноправным Ржаксфюрером.&lt;br /&gt;
&lt;br /&gt;
Вскоре после произошедшего Аркадий ушёл из сообщества и даже попросил Целестору стереть упоминания о нём из OpenVK и [[Сейберпедия|Сейберпедии]], из-за чего какое-то время в статьях о Ржаке его имя было вырезано. В 2024 году, при помощи публичного голосования в уже удалённом первом чате Сейберпедии, было принято решение восстановить статью о MatroCholo, однако это не помешало статье существовать примерно год в полупустом состоянии.&lt;br /&gt;
&lt;br /&gt;
В том же году Аркадий предпринял попытку вернуться в сообщество, зайдя в чат OpenVK и рассказав присутствующим о смягчении своей позиции. Этот воврат так ничем и не закончился и, по состоянию на май 2025 года, Аркадий в сообществе OpenVK не принимает участия. Существует теория заговора о том, что настоящий Аркадий никогда в OpenVK и не возвращался, а зашедший в чат пользователь был просто подставной Искоркой. &lt;br /&gt;
{{Navbox OpenVK}}&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=OpenVK&amp;diff=10310</id>
		<title>OpenVK</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=OpenVK&amp;diff=10310"/>
		<updated>2026-10-20T06:40:31Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Сайт&lt;br /&gt;
| slogan = время подавать напитки и вершить судьбы&lt;br /&gt;
| logo = [[File:OpenVK.jpeg|70px|center]]&lt;br /&gt;
| screenshot = [[File:OpenVK_Screenshot.png|260px|center]]&lt;br /&gt;
| caption = OpenVK в 2023 году&lt;br /&gt;
| url = [https://openvk.su https://openvk.su], [https://openvk.org https://openvk.org]&lt;br /&gt;
| type = социальная сеть, пародия на старый ВКонтакте, свободный движок соцсети&lt;br /&gt;
| commercial = &#039;&#039;де-юре&#039;&#039;: некоммерческий&lt;br /&gt;
&#039;&#039;де-факто&#039;&#039;: частично коммерческий, для покупки подарков и рейтинга необходимы голоса, которые можно получить на раздачах или купив за криптовалюту&lt;br /&gt;
| registration = не обязательная, свободная&lt;br /&gt;
| languages = в основном русский, движок переведён на 12 языков&lt;br /&gt;
| tech = PHP, MySQL, кастомный фреймворк + Go, Preact (диалоги)&lt;br /&gt;
| serverloc = Франция&lt;br /&gt;
| owner = Фонд OpenVK&lt;br /&gt;
| creator = [[Владимир Баринов]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Daniel Myslivets|Даниил Мысливец]]&lt;br /&gt;
| birthday = 2017 год&lt;br /&gt;
| status = OpenVK Classic, Reborn закрыты, OpenVK 2.0 активен и развивается с 2019.&lt;br /&gt;
}}&#039;&#039;&#039;OpenVK&#039;&#039;&#039; — социальная сеть с открытым исходным кодом и явление интернет-культуры, возникшая летом 2017 года благодаря усилиям [[Владимир Баринов|Владимира Баринова]] и множеству других интернет-задротов.&lt;br /&gt;
&lt;br /&gt;
== Ранняя история ==&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Classic ===&lt;br /&gt;
Первое воплощение OpenVK, написанное [[Veselcraft|Владимиром Бариновым]] совместно с ОСОБА_7, [[Kos Furler]] и немного [[Ponywka]] в 2017—2019 годах. Координация разработки шла в ныне заброшенной/ых группе/ах в VK. При разработке не использовалось php-фреймворков, шаблонизаторов и прочего, только процедурный php, отчего проект сильно пострадает в будущем. В дизайне сайта прослеживались многие новичковые ошибки, а именно неровные отступы, разная цветовая палитра, неровная ширина блоков, неоправданный размер шрифта и т. д.&lt;br /&gt;
&lt;br /&gt;
Обрёл первую популярность благодаря треду от Veselcraft’а на имиджборде Двач. Сайт стали часто взламывать из-за большого количества дыр. Сеть была относительно популярной, но всё же закрылась, после масштабного взлома жопы с вайпом базы данных.&lt;br /&gt;
&lt;br /&gt;
Репозитории с кодом OpenVK Classic были запривачены какое-то время чтобы люди случайно не ставили его себе на сервер, но на декабрь 2024 они открыты. Но некоторые зачем-то продолжают его ставить, наверное из за простоты в установке.&lt;br /&gt;
&lt;br /&gt;
==== l-lacker Social ====&lt;br /&gt;
OpenVK, будучи open-source проектом, часто вдохновляет людей на создание своих инстансов и на форкинг. Один из самых популярных форков OpenVK Classic — l-lacker Social, созданная [[Лласкер|l-lackerом]]. l-laSocial имела слегка иной внешний вид, разные скины, большое количество галочек и различные улучшения, а также API. Имел пропатченные SQL-уязвимости. Изначально размещался на InfinityFree, но после взлома админ-панели пользователем [[Cipherka]], айпи которого был забанен InfinityFree, хостинг-аккаунт сети был заблокирован, после этого сеть переехала на SpringHosting (нынче UnlimitSpace).&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Reborn ===&lt;br /&gt;
Командой OpenVK нередко предпринимались попытки переписать OpenVK Classic более правильно. Проект по возрождению OpenVK назывался OpenVK Reborn. Изначально он курировался [[Kordenz|Коробкой]], но коробка не смог пояснить команде всё целиком, из-за чего проект быстро сдулся. После он был переименован в OpenVK Classic Reborn и разработка была начата заново, уже под руководством [[Ponywka|Поньки]]. На этот раз в OpenVK появился роутер и шаблоны. Но вскоре и Понька покинул проект, сказав, что его надо переписать. Тогда де-факто вторым руководителем разработки стала [[Целестора]], после чего в OpenVK Classic Reborn появился новый роутер и новые шаблоны, что позволило незначительно ускорить темп разработки, однако даже так закончить проект, хотя бы до релиза, не удалось. У Reborn’а не было публичных релизов и стадии публичного бета-тестирования.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:OpenVK Reborn.png|Одна из страниц OpenVK Reborn&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== «Клоны» OpenVK ===&lt;br /&gt;
У OpenVK было много не только форков, но и «клонов», проектов, которые писались другими разработчиками и косили в определённой степени под OpenVK (клон клона, ахуй). Их было не очень-то и много, правда. Из значимых можно отметить разве что OpenVK Поньки, LibreSoc Целесторы (на тот момент известной как Вр*ска) и OpenVK 5. Ни один из проектов не сыскал какой-либо большой популярности. LibreSoc, к слову, был частично написан на компонентах Laravel и имел AJAX-подгрузку всего в стиле [https://turbo.hotwired.dev/ Turbo]. Скриншотов LibreSoc’а не осталось: (&lt;br /&gt;
&lt;br /&gt;
== OpenVK 2 ==&lt;br /&gt;
&#039;&#039;Этот раздел ещё не закончен&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
OpenVK 2.0, теперь уже без Classic, был последней попыткой переписать OpenVK. На этот раз, на удивление, получилось. В этот раз за основу движка лёг самописный php-фреймворк libchandler, который правда оказался говном, но он поддерживает шаблоны Latte, ACL и прочие приколы. Разработка OpenVK 2.0 началась с 2019 года и с тех пор то активно, то пассивно ведётся. По состоянию на 2025 год, она притихла, но проект продолжает жить благодаря глобальной ленте и чату в Telegram и в какой-то степени развиваться.&lt;br /&gt;
&lt;br /&gt;
Существует т. н. «Команда разработчиков OpenVK», в которую входят [[Veselcraft|Владимир Баринов]], [[Daniel Myslivets|Даниил Мысливец]], [[Kos Furler]], ОСОБА_7, [[WerySkok]], [[Целестора]], *, [[maksales]], *, n1rwana, mrilyew, *, и, что удивительно, *. Примерно с 2021 у первых 6 разработчиков стало меньше времени на активное развитие проекта, и оно стало вестись в основном 8ым, 10ым и 11ым человеками из списка.&lt;br /&gt;
&lt;br /&gt;
В отличии от прошлых воплощений OpenVK, это — самое популярное и имеет вокруг себя живой фендом; может классифицироваться почти как явление.&lt;br /&gt;
&lt;br /&gt;
=== Фичи и философия ===&lt;br /&gt;
В отличии от предыдущих версий OpenVK, в этой разработчики, кажется, смирились с тем, что не смогут сделать 1:1 копию старого ВКонтакте, поэтому просто начали творить всё подряд, что хочется; из-за чего OpenVK 2.0 представляет из себя сборную солянку фич, некоторые из которых были в VK, некоторых не было, некоторые вовсе не понятно откуда взялись, но они просто есть. Основные функции присутствуют, но хотелось бы отметить данные вещи:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Фича&lt;br /&gt;
!Есть в OpenVK?&lt;br /&gt;
!Была в VK?&lt;br /&gt;
|-&lt;br /&gt;
|Музыка&lt;br /&gt;
|Не было ощутимое время&lt;br /&gt;
|Была и есть&lt;br /&gt;
|-&lt;br /&gt;
|Анонимные посты&lt;br /&gt;
|Удалено в августе-сентябре 2025&lt;br /&gt;
|В 2017 в качестве эксперимента&lt;br /&gt;
|-&lt;br /&gt;
|API.execute&lt;br /&gt;
|Реализован Клаудией&lt;br /&gt;
|Есть!!!&lt;br /&gt;
|-&lt;br /&gt;
|Глобальная лента&lt;br /&gt;
|Да&lt;br /&gt;
|Если постараться, можно найти.&lt;br /&gt;
|-&lt;br /&gt;
|Темы оформления&lt;br /&gt;
|Да/но с проблемами&lt;br /&gt;
|Нет/но есть тёмная тема&lt;br /&gt;
|-&lt;br /&gt;
|Рейтинг&lt;br /&gt;
|Да&lt;br /&gt;
|Был до 2011; на данный момент присутствует в скрытом виде&lt;br /&gt;
|-&lt;br /&gt;
|Фоны профилей&lt;br /&gt;
|Да&lt;br /&gt;
|Нет, но есть обложки.&lt;br /&gt;
|-&lt;br /&gt;
|Беседы&lt;br /&gt;
|Вообще нет!&lt;br /&gt;
|Да!&lt;br /&gt;
|-&lt;br /&gt;
|Кастомные поля&lt;br /&gt;
|Есть, но ты про них даже не знал&lt;br /&gt;
|Нету, но есть куча других полей&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Анонимка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK была добавлена 7 ноября 2017 года в качестве эксперимента. В OpenVK появилась 15 ноября 2021. В отличии от обычных постов, у анонимных автор будет заменён на анонимный аккаунт. Стена анонима на основном инстансе долгое время была открыта, но на данный момент она таковой не является. У анонимки есть баг, который не был исправлен с момента выхода фичи, а именно в уведомлении автор не заменяется на анонима. Плюс нельзя комментировать от анонима, так что если на твоё высказывание ответили, придётся отвечать от своего имени.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;API.execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK это метод, позволяющий вызвать одновременно до 25 других методов API и вернуть в своём json формате. В OpenVK такого нет, потому что~ ~сложно. Поэтому с клиентами vk ovk не оч совместим. Плюс нет хранимых процедур и API-приложений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Глобальная лента&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Глобальная лента это по сути абсолютно все посты с сайта в порядке их выхода, за исключением тех стен которые ты проигнорировал/интровертных стен. Охуенно вечерком почитать что запостили аниме аватарочки и сколько лайков поставили на твои посты.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Темы оформления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Говоря цинично, папка, загружаемая на сервер, которая представляет собой themepack, который можно выбрать в настройках сайта. Themepack позволяет заменить шаблоны и стили сайта на свои. Чаще всего используется для перекраса цветов и ассетов сайта. Ввиду сложности создания (придётся целый инстанс openvk на компьютер ставить, целого админа просить чтобы он добавил твою тему!!) не пользуются популярностью. Да и после двух обновлений поиска на основном инстансе 50 % тем развалились и чинить их никто не собирается. Так что люди пользуются сторонними инструментами по типу stylus или tampermonkey.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рейтинг&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Функция в ВК, существовавшая до 2011, приносящая виртуальную репутацию твоему профилю и продвигающая тебя в поиске. Но её удалили где-то в 2011, а все деньги, потраченные на неё, исчезли. В OpenVK существует в качестве постиронии. Рейтинг в овк повышается через голоса и его можно повысить другому человеку (правда со своей страницы). Раньше от него вообще не было никакого смысла, но сейчас можно посмотреть топ людей в рейтинге, нажав на кнопку «поиск» в шапке. Вот ты посмотри, и подумай, сможешь ли выйти хотя бы в топ-30.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Топ популярных групп&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Отображал список 30 самых популярных групп на инстанции. Но был удалён через полгода из-за нестабильности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NSFW-метка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Позволяет пометить пост как «небезопасный для работы», и тогда его покроет чёрный квадратик, убирающийся при клике. В VK есть, но не знаю как она ставится.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Фоны профилей&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Появились 12 декабря 2022. Задают тон твоей странице. Некоторым людям они не нравятся, потому что нарушают минимализм.&lt;br /&gt;
&lt;br /&gt;
===== Беседы =====&lt;br /&gt;
&lt;br /&gt;
Разговоры о реализации бесед велись с 2020 года, когда было выпущено последнее крупное обновление для раздела сообщений.&lt;br /&gt;
Однако почему-то довести сообщения до ума никому не удавалось (да и попыток особо не было) вплоть до 2026 года, когда разработчики завезли микросервис на Golang и заменили старый фронтенд, использующий KnockoutJS, на новый, написанный на Preact. С 4 октября 2026&lt;br /&gt;
года эти изменения стали публичными и на сайте появились наконец долгожданные диалоги, вместе с прикреплением медиа, групповыми чатами&lt;br /&gt;
до 100 человек, стикерами, блекджеком и шлюхами. Правда, фронтенд пока что находится в сыроватом состоянии и имеет некоторое дерьмо (баги).&lt;br /&gt;
&lt;br /&gt;
=== Разработка ===&lt;br /&gt;
Разработка ведётся на [https://github.com/openvk/openvk GitHub]. Проект распространяется под лицензией GNU LGPLv2.0, что позволяет не раскрывать исходные тексты своего сайта, если не распространять его дистрибутивы. Также допускается использование OpenVK для создания на его основе проприетарных решений, однако таких на данный момент нет.&lt;br /&gt;
&lt;br /&gt;
==== Федиверс ====&lt;br /&gt;
В OpenVK ещё с 2021 года есть планы сделать поддержку протокола [[ActivityPub]]&amp;lt;ref&amp;gt;https://github.com/openvk/openvk/issues/61&amp;lt;/ref&amp;gt;, тем самым включив соцсеть в состав [[Федиверс]]а, на что так же есть намёк в описании проекта на GitHub: «&#039;&#039;&#039;Not-yet-federated&#039;&#039;&#039; open source social network inspired by VK.»&lt;br /&gt;
&lt;br /&gt;
Несмотря на это, поддержка так и не реализована, потому что это не сильно интересно разработчикам, а для желающих всё же помацать федерированный клон ВК есть [[Smithereen]].&lt;br /&gt;
&lt;br /&gt;
=== Популярность и критика ===&lt;br /&gt;
OpenVK 2 значительно популярнее предыдущих итераций OpenVK. На основной инстанции на осени 2026 зарегистрировано 44 тысячи пользователей. Костяк нёрдовой аудитории перешёл от видеоблогера [[Алексей Лещенко|Алексея Лещенко]], с [https://www.youtube.com/watch?v=iqoO2zBwvJg видео от 5 января 2021]. Существенная часть новых пользователей пришла также благодаря вирусным роликам в TikTok. Начиная с 2024 года проект рекламируют многие телеграм-говномедиа (с зачастую технарьским уклоном!).&lt;br /&gt;
&lt;br /&gt;
На момент сентября 2026, из-за влияния многих факторов, средний онлайн на сайте составляет 100 человек.&lt;br /&gt;
&lt;br /&gt;
В начале 2026 была составлена шизопаста из готового уже сообщения одного из разработчиков OpenVK (спасибо ему за пищу для размышления). Она будет ниже, однако актуальность оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Главной причиной низкой активности, вероятно, является эффект сильного первого впечатления, который характерен для подобных сабжу проектов с ретро-тематикой. На людей, заставших «те самые» времена, когда ВКонтакте ещё не принадлежал формально государству, и в целом когда трава была зеленее а небо — голубее, OpenVK действует как платформа для ностальгии. В теории именно такая труЪ аудитория и должна составлять основу проекта — по крайней мере, согласно тому образу, который транслируют популярные источники типа попсовых телеграм-каналов, которые упоминались выше.&lt;br /&gt;
&lt;br /&gt;
На практике же, как вы уже поняли всё куда сложнее: представители этой категории пользователей появляются здесь относительно редко, несмотря на концепцию платформы.&lt;br /&gt;
&lt;br /&gt;
Для новых поколений, OpenVK, напротив, предоставляет укунуться в эпоху, которую они не застали по причине возраста или отсутствия тогдашней осознанности.&lt;br /&gt;
&lt;br /&gt;
Под впечатлением от сайта именно они и создают контент, как-либо пытающийся имитировать интернет нулевых, романтизируя это через образы эмо-субкультуры и смежных направлений, не учитывая при этом негативные аспекты того времени, которых было более чем достаточно. Это приводит к формированию специфического контента — странной смеси современной интернет-культуры с элементами эстетики нулевых. Отдельным фактором остаётся и мода на ностальгические штуки вроде Frutiger Aero, которую активно продвигает поколение Альфа; этот хайп даёт сабжу что-то типо профита, однако с этим же и более высок риск рака.&lt;br /&gt;
&lt;br /&gt;
При этом живое коммьюнити формируется не на самом сайте, а вокруг него — главным образом в [[Telegram]]. Во многом это связано с недостаточным взаимодействием разработчиков с аудиторией и отсутствием официальной площадки для общения. В результате значительная часть пользователей остаётся исключительно на сайте, однако построить полноценный блог им проблематично, а нормальную функциональность диалогов так и не завезли к началу 2026 года.&lt;br /&gt;
&lt;br /&gt;
Со временем такие пользователи просто уходят, так и не узнав о внешних ресурсах для обсуждения OpenVK, которые поддерживаются сообществом, которому ± не всё равно. Мимикрирующих под олдфагов-ностальгаторов немного: пишут что-то в global feed 1-2 дня, после чего уходят. Есть, конечно, [[Дмитрий Бесфамильный|исключения]], но они лишь подчёркивают общую картину.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DDoS-атаки ====&lt;br /&gt;
Из-за популярности OpenVK, он является частой мишенью для начинающих ддосеров. Долгое время ддосами промышлял [[Overlord]], но периодически появляются новые оверлордята, которым заняться кроме ддоса нечем. Атаки на OpenVK фиксируются с 2020 года; их интенсивность и частота менялись, и на настоящий момент они редки, но не исключены. Оное не является следствием какого-либо конфликта, а скорее просто устоявшейся в рудудосе традицией использовать OpenVK как тренировочную цель. &lt;br /&gt;
&lt;br /&gt;
В 2026 сайт сумел поменять два сервиса по защите сайтов от дудоса сразу, перейдя с Cloudflare на GrayWeb, а с него на Anubis. GrayWeb вызывал лютейшую критику со стороны  пользователей. Сервис хоть и позволял жителям РФ сидеть на сайте без VPN, тот существенно затруднял просмотр сайта назойливым UAM или его аналогом. В результате команда приняла решение о переходе на чудесный Anubis.&lt;br /&gt;
==== Блокировки ====&lt;br /&gt;
С 16 по 20 августа 2024 года сайт был заблокирован&amp;lt;ref&amp;gt;https://t.me/openvk/2661&amp;lt;/ref&amp;gt; на территории России из-за публикации одним из пользователей песни «Антифа-лезгинка» группы Warriors of Zion, включённой в Федеральный список экстремистских материалов. Роскомнадзор присылал Veselcraft’у на почту предложение обойтись без блокировки, однако письмо, по всей видимости, попало в папку «Спам».&lt;br /&gt;
&lt;br /&gt;
=== Политическая позиция ===&lt;br /&gt;
Администраторы OpenVK в большинстве своём придерживаются относительно либеральных взглядов, однако это не оказывает влияния на работу площадки.&lt;br /&gt;
&lt;br /&gt;
==== Ермаков ====&lt;br /&gt;
[[Файл:Ермаков овк.png|мини|Архивный кадр с включённым ClearType.]]&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Основная статья: [[Даниил Ермаков#OpenVK|Даниил Ермаков]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ермаков создал страницу в OpenVK 20 августа 2022 года и изначально был миролюбив.&lt;br /&gt;
&lt;br /&gt;
Но 20 февраля 2023 на его страницу был совершён рейд, в ходе которого сначала реальные люди стали писать ему на страницу оскорбления, а затем некто под псевдонимом Максим Кац начал флудить на его стене белорусской фразой с помощью API. Через два месяца, 12 апреля 2023 он ЖЁСТКО реагирует на данный инцидент и начинает жёсткую политическую дискуссию прямо в комментариях openvk с его политическими оппонентами. Дойдя до точки кипения, 16 апреля 2023 он удаляет страницу, назвав сайт &amp;quot;хохляцкой помойкой&amp;quot;. Несмотря на это, Ермаков вернулся на сайт в августе 2024, со своего более старого аккаунта (id136).&lt;br /&gt;
&lt;br /&gt;
==== Свобода слова в OpenVK ====&lt;br /&gt;
Фонд OpenVK в целом толерантно относится к носителям не левой идеологии, однако за откровенную про-Z риторику, можно получить бан в чатах OpenVK. Не смотря на это, в самой сети зачастую пользователи не преследуются администрацией за мнение или высказывания. Хотя особо людоедские высказывания запрещены там правилами, да и по правилам вместе с баном в чате должна баниться и страница в сети, случаи блокировок по идеологическим причинам в OpenVK не были зафиксированы. Большинство несогласных самостоятельно уходят из проекта, не получая приемлемого отклика от местных пользователей.&lt;br /&gt;
&lt;br /&gt;
===== Сотрудничество с украинскими спецслужбами =====&lt;br /&gt;
Ходили слухи о том, что OpenVK сотрудничает с властями Украины, однако они основаны на одном случае, когда одна украинофобная фотокарточка была изъята из публичного доступа по причине якобы официального обращения со стороны Национальной Полиции Украины. Политологи склонны считать, что это был рофл.&lt;br /&gt;
&lt;br /&gt;
=== Коммьюнити ===&lt;br /&gt;
OpenVK Chat, живший в 2018 году во ВКонтакте, развалился два раза. В покойной [[moshWiki]] было отмечено, что, вероятно, жизненный путь OpenVK станет темой ещё не одной статьи из-за особенности OpenVK сближать людей вокруг себя и заставлять их сраться похлеще, чем это делают в самой забитой фан-группе по геншину. Ну, что же, moshWiki не обманули. И чат OpenVK в Telegram, кстати, тоже развалился два раза.&lt;br /&gt;
&lt;br /&gt;
==== Чат OpenVK в Telegram ====&lt;br /&gt;
Основное место скопления любителей OpenVK. Главным администратором до 2024 является де-юре [[WerySkok]]. Из-за большого количества оффтопа в чате и нежелания Владимира Баринова и Скока его терпеть, чат разваливался аж два раза. Первый раз случился тогда, когда Вова решил из него выйти, но случайно вместо этого удалил. Чат после этого был пересоздан, но Скока продолжила задалбывать тенденция местных оффтопить люто, поэтому чат был развален во второй раз. На этот раз, правда, чат не был удалён, в нём просто запретили оффтопить, а для оффтопа был создан отдельный чат. Однако чётко определить границы оффтопа весьма сложно, поэтому идея с оффтопиком себя не оправдала: мало того, что она изначально разозлила активную часть фендома, так и оффтоп никуда не делся. За всё время двоечатия был либо оффтоп в OpenVK Discussions, либо обсуждение самого OpenVK в OpenVK Offtopic. Вскоре, чаты были дебалканизированы назад в основной, который стал называться [[OpenVK General|OpenVK // General]].&lt;br /&gt;
&lt;br /&gt;
В чате зарождается бóльшая часть локальных мемов, иногда они начинают форситься и выходить из под контроля. Тогда ВериСкок, когда тот администрировал чат обычно объявлял их «нежелательными говнофорсами» и распространение мема подавлялось силовым крылом чата.&lt;br /&gt;
&lt;br /&gt;
В ноябре 2024 произошли глобальные изменения в чате: админка передалась администраторше Целесторе, а чат становился неаффилированым с администрацией OpenVK (не смотря на то что тогдашняя владелица была одним из админов сабжа) и переименовался в OpenVK // Unofficial. После этого приколы про Верискока и говнофорсы официально можно было считать протухшими.&lt;br /&gt;
&lt;br /&gt;
В январе 2026 года [[Ekyloff|Федя Жопа]] создал свой чат, в котором общаются некоторые активные участники OpenVK. После ухода Анофишла из [[Ржаксфедерация|Ржаксфедерации]] чат Феди стал более активным, а Дженерал стал медленно, но умирать. При этом между владельцами двух чатиков нет никакой вражды. На момент сентябре 2026, активен в основном преимущественно чат Феди, где сформировалась своя атмосфера, но не обошлось и без конфликтов. Но это уже совсем другая история.&lt;br /&gt;
&lt;br /&gt;
==== Ржака ====&lt;br /&gt;
{{ОПГ&lt;br /&gt;
| name = Министерство ржаки&lt;br /&gt;
| logo = [[File:rjaka.jpeg|80px|center]]&lt;br /&gt;
| members = 11 групп в OpenVK, 1 канал в Telegram&lt;br /&gt;
| type = неофициальный фан-клуб, сетка групп&lt;br /&gt;
| gensec = Никита Сергеев (?) (на момент 31 января 2026 года)&lt;br /&gt;
| le_dudes = &lt;br /&gt;
| birthday = 18 сентября 2021 года&lt;br /&gt;
| founders = [[ByloTonix]], rudzik8&lt;br /&gt;
| status = мертва&lt;br /&gt;
| url = [https://t.me/rjakz В Telegram], [https://openvk.su/openvkfun В OpenVK]&lt;br /&gt;
| deathdate = 2 февраля 2026 года&lt;br /&gt;
}}&lt;br /&gt;
У коммьюнити OpenVK был отдельный неофициальный канал, посвящённый мемам, которые каким-либо образом были связаны с OpenVK. Канал назывался «[[Ржака OpenVK]]» и находился под управлением так называемого Министерства ржаки.&lt;br /&gt;
&lt;br /&gt;
Министерство ржаки являлось важным двигателем актива в сообществе сабжа. Группы, принадлежащие Министерству в OpenVK, какое-то время входили в топ групп OpenVK и [[VepurOVK]]. После [[OpenVK General|OpenVK // General]], чат и канал Ржаки являлись самой большой фабрикой оригинальных мемов по OpenVK. Большинство активных пользователей OpenVK также были подписаны и на Ржаку. Чаты ржаки играли ключевую роль во времена репрессивной фазы администрации OpenVK // General, когда самые смешные мемы банились по причине «говнофорс».&lt;br /&gt;
&lt;br /&gt;
В 2022 году Министерство временно прекратило свою работу в OpenVK и полностью перешло в [[VepurOVK]]. Причиной этого события стало политическое разногласие MatroCholo и Rudzik8 с основателем OpenVK, [[Veselcraft|Владимиром Бариновым]], который забанил их в чате Дженерала за разведение срача по поводу коммунизма и Советского Союза. Основатели Ржаки не были согласны с вердиктом администрации, который признал их «провокаторами», после чего они удалили свои страницы в OpenVK и ушли в VepurOVK. Мемы в Ржаке тогда начали высмеивать OpenVK за низкую степень актива, медленную работу сайта и лень разработчиков. Большинство членов сообщества не оценили такую смену контента, а между VepurOVK и OpenVK разгорелся небольшой вялотекущий конфликт.&lt;br /&gt;
&lt;br /&gt;
Впоследствии конфликт был улажен, однако группы в OpenVK и телеграм-канал Ржаки постепенно утратили активность из-за перераспределения ресурсов на другие проекты. Расширение тематики канала также не привело к заметному росту аудитории.&lt;br /&gt;
&lt;br /&gt;
Из-за разногласий вокруг этой ситуации, а также последующих споров по вопросам оплаты серверов проект покинула администратор Целестора, после чего инфраструктура была перенесена на серверы Senko Digital.&lt;br /&gt;
&lt;br /&gt;
На фоне накопившихся противоречий и снижения интереса к проекту в начале февраля 2026 года Ржака была официально закрыта.&lt;br /&gt;
&lt;br /&gt;
==== Форсы ====&lt;br /&gt;
Большинство мемов про OpenVK являются быстро переходящими, очень редко какой-либо из них становится долгоиграющим форсом. Тем не менее, с форсами [[OpenVK General|OpenVK // General]] и ассоциируется, из-за двух очень больших форсов, на подавление которых ушло достаточно большое количество админресурса Александра Скока.&lt;br /&gt;
&lt;br /&gt;
===== Какао прокакалось =====&lt;br /&gt;
Мем, порождённый [[Matty Mellis|Метти]], русскоговорящим иностранцем, которого смешила фраза «какао прокакалось». Кроме него, её никто смешной не находил, а его привычка постить её, после чего начинать парад говностикеров, послужила основной причиной, почему эту фразу так сильно захейтили. Парадоксально, но не смотря на лютую ненависть фендома к этой фразе, чем больше её ненавидели, тем больше её постили направо и налево. Сейчас её тоже можно увидеть во многих местах, где есть участники сабжа, но во время пика популярности её произношение в тогдашних чатах OpenVK было запрещено. Позже появилась альтернативная версия произошедшего: якобы Метти просто притворялся и на самом деле владеет русским языком как родным. Однако остаётся неизвестным, жил ли он реально в США (Метти давал номер с кодом +1), или это был высший уровень отыгрыша. Метти официально подтвердил эту историю, добавив, что тот кидал множество раз один из стикеров с крокодилом во время того, как употреблял наркотики.&lt;br /&gt;
&lt;br /&gt;
===== Максим Кац =====&lt;br /&gt;
Наверное, самый вялотекущий форс в OpenVK, из-за чего он не был жертвой репрессий со стороны Скока. Форс заключается в приплетении Максима Каца куда угодно и регистрации страниц на его имя в OpenVK. Частично перекликается с мемом про то, что Ермаков якобы встречается с Кацем. Иронично, но сам Кац в OpenVK не зарегистрирован и про сам сайт очевидно не знает.&lt;br /&gt;
&lt;br /&gt;
===== Бочка хуила =====&lt;br /&gt;
Самый лютый форс в OpenVK, на время активного форса был запрещен в чатах сабжа. Зародился из смешной мясной переписки в чате General, где была запощена фотокарточка с Хитори Гото, также известной как Боччи, из аниме-сериала «Bocchi the Rock!», которую кто-то прокомментировал вопросом «кто это», на что получил ответ «хуила». После этого Боччи прозвали бочкой-хуилой. Ржака быстро подхватила форс, а вскоре в видеочате OpenVK // General прошёл совместный просмотр сериала, после чего форс только усилился и не прекращался естественными причинами. Разумеется, форс был убит Скоком из-за невозможности контролировать происходящее в чате по причине спама фразой «бочка хуила».&lt;br /&gt;
===== Музыка =====&lt;br /&gt;
Связан с довольно долгим отсутствием и разработки функционала аудиозаписей в OpenVK, который длился с 2017 по 2023. Было множество спекуляций, шуток, мемов на эту тему, но в конечном итоге они появилась 12 ноября 2023 в полночь, и к ним быстро привыкли. Релизу предшествовала долгая разработка, в которой участвовали Целестора (бекенд), n1rwana (фронтенд, по просьбе следующего человека), mrilyew (фронтенд, по просьбе друга) и Зубная Паста (скрипт загрузки).&lt;br /&gt;
&lt;br /&gt;
===== OpenVK от VK =====&lt;br /&gt;
25 декабря 2024 VK выпустил свою инициативу под названием «OpenVK». Ожидалось, что корпорация начнёт отстаивать свой бренд, началась подготовка к смене названия, но по итогу этого так и не произошло.&lt;br /&gt;
&lt;br /&gt;
=== Финансирование ===&lt;br /&gt;
Не смотря на то, что OpenVK продаёт голоса за криптовалюту, доход с этого очень маленький. В основном работа OpenVK финансируется добровольными пожертвованиями со стороны сообщества. Но часто спонсором выступает VepurOVK.&lt;br /&gt;
&lt;br /&gt;
==== Задолженность провайдеру ====&lt;br /&gt;
В 2023 году задолженность OpenVK своему хостинг-провайдеру перевалила за 50 евро, после чего сервер был отключён. Летом 2023 года началась процедура по выплате долга, однако вскоре сервер снова был отключён из-за невозможности OpenVK расплатиться с долгом в срок. Тогда какой-то челик закинул две тысячи рублей, которые были использованы чтобы погасить остаток долга. Ня!&lt;br /&gt;
&lt;br /&gt;
=== Организационная структура ===&lt;br /&gt;
Фонд OpenVK не имеет чёткой организационной структуры, как и юридического лица в какой-либо стране. Все решения принимаются максимально децентрализовано лицами, входящими в совет разработчиков. Зачастую это играет положительную роль и позволяет одним администратором «компенсировать» поведение других. Например, в чатах Скок и Вова часто банят людей, а Целестора разбанивает. Весело.&lt;br /&gt;
&lt;br /&gt;
=== Альтернативные инстанции ===&lt;br /&gt;
Так как OpenVK имеет открытый исходный код, каждый может создать свою инстанцию.&lt;br /&gt;
&lt;br /&gt;
===== [[VepurOVK]] =====&lt;br /&gt;
Был открыт 12 апреля 2022 года. Второй по популярности инстанс OpenVK. Является личным проектом Вячеслава Петрова (saursvepur). Для перелива актива с OpenVK Вепур добавляет фичи из незавершённых веток и пулл-реквестов, но это не особо помогает. В основном там сидят те, кого не устраивает основная инстанция. &lt;br /&gt;
&lt;br /&gt;
===== Astorium =====&lt;br /&gt;
Было и было. См. отдельную статью&lt;br /&gt;
&lt;br /&gt;
===== [[OVKisser]] =====&lt;br /&gt;
&lt;br /&gt;
===== test.openvk.su =====&lt;br /&gt;
Тестовая инстанция. Была открыта 27 декабря 2021 для теста федивёрса, но потом на него забили как собственно и на инстанс. О нём вспомнили в июне 2023, когда нужно было потестить фичу с много картинок, но сейчас опять забили. 11 августа 2023 был открыт https://venti.openvk.uk, который использует ту же базу данных, что и официальная инстанция, но зачем, неизвестно.&lt;br /&gt;
&lt;br /&gt;
После смена домена на ovk.to оба сайта стали недоступны.&lt;br /&gt;
&lt;br /&gt;
===== [[Fetbuk|Fetbuk Social]] =====&lt;br /&gt;
Был создан [[WerySkok]] в сентябре 2021 года. Работает с переменным успехом, обновляется редко.&lt;br /&gt;
&lt;br /&gt;
=== Мобильные приложения ===&lt;br /&gt;
Существует два мобильных приложения: OpenVK Legacy и OpenVK Refresh.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[OpenVK Legacy]]&#039;&#039;&#039; имеет 1 в 1 такой же интерфейс, как и приложение ВКонтакте 3.0, потому что сам создатель этого приложения (Grishka) предоставил макеты [[Tinelix]]. В нём нет тёмной темы, так как, по словам разработчика, там всё завязано на растровых изображениях, и потому будет трудно перекрасить их всех, чтобы это выглядело адекватно.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;OpenVK Refresh&#039;&#039;&#039; имеет современный интерфейс.&lt;br /&gt;
&lt;br /&gt;
На Windows Phone есть OpenVK Star, который представляет собой WebView версию полной версии.&lt;br /&gt;
&lt;br /&gt;
=== Инциденты ===&lt;br /&gt;
[[Файл:Долбаёбы.png|мини|188x188пкс]]&lt;br /&gt;
Время от времени всякие анонимы забивают глобальную ленту грубыми и плохими словами по типу «MAT EBAL PIDORAS» «[рандомный номер] PIDORAS», «[IP] [плохая надпись]», создают группы с непристойными названиями, но их быстро удаляют. Но есть и более уникальные инциденты.&lt;br /&gt;
&lt;br /&gt;
==== 31.01.2023 incident ====&lt;br /&gt;
31 января 2023 всем в личку пришло письмо счастья «Какао прокакалось» от пользователя с таким же именем, но его быстро забанили. На данный момент ведётся расследование, кто стоял за этим аккаунтом. Бан вызвал постиронический протест в глобальной ленте с хэштегом «#РазбанКакаоПрокакалось». После блокировки оказалось, что в API есть дырка, позволяющая сидеть в OpenVK даже после бана, но её поправили.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Какаосообщалось.png&lt;br /&gt;
Файл:Какао.png&lt;br /&gt;
Файл:Какао разбанилос.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 10.02.2023 incident ====&lt;br /&gt;
[[Файл:Xss thing.png|мини|252x252пкс]]&lt;br /&gt;
28 января в OpenVK появился плеер, стилизованный под старый ВК, у него был «постер»: название видео и под ним имя автора, а так же большая кнопка проигрывания. Название видео не экранированировалось, этим и воспользовались в данном инциденте. В название видео ставился тег audio, который вызывал ошибку и подгружал скрипт, который репостил на страницу пользователя видео с подписью «Какао прокакалось». Все, кто тогда сидел в OpenVK (это было ночью) репостили это видео к себе и глобальная лента &amp;lt;s&amp;gt;засиралась&amp;lt;/s&amp;gt; прокакивалась. К счастью или к сожалению, уязвимость была быстро пропатчена. На данный момент неизвестно, кто стоял за инцидентом. То самое видео до сих пор можно посмотреть&amp;lt;ref&amp;gt;https://openvk.su/video10289_9&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 16.09.2023 incident ====&lt;br /&gt;
После добавления функции редактирования поста, автор пулл-реквеста выпустил патч, который запрещал редактировать посты старше одной недели. Однако он пропустил одно условие в проверке, из-за чего чужие посты стали редактируемыми для всех. Этим воспользовался [[SaursVepur|saursvepur]] и, пока это было возможно, прибавил к содержанию последних постов в глобальной ленте «vepurovk.xyz». Уязвимость быстро исправили, а оригинальное содержание постов вернули.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{Navbox OpenVK|title=Ещё про OpenVK}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сайты]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbox_OpenVK&amp;diff=10309</id>
		<title>Шаблон:Navbox OpenVK</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbox_OpenVK&amp;diff=10309"/>
		<updated>2026-10-20T06:39:19Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Navbox|navbox&lt;br /&gt;
| имя                     = Navbox OpenVK&lt;br /&gt;
| state                   = collapsed&lt;br /&gt;
| заголовок               = {{{title|{{PAGENAME}} &amp;amp;mdash; важная часть фендома OpenVK}}}&lt;br /&gt;
&lt;br /&gt;
| вверху        = [[OpenVK]]&lt;br /&gt;
&lt;br /&gt;
| группа1       = Инстанции&lt;br /&gt;
| список1       = [[OpenVK|Основная]] • [[VepurOVK]] • [[Astorium]] • [[Fetbuk]] • [[OVKisser]] • [[Gamma World|Gamma ID]] • [[Сетка]]&lt;br /&gt;
| группа2       = Разработчики&lt;br /&gt;
| список2       = [[Владимир Баринов]] • &amp;lt;s&amp;gt;[[Целестора]]&amp;lt;/s&amp;gt; • [[WerySkok]] • [[Daniel Myslivets]] • [[Eversiege]] • [[Миля Лисова]]&lt;br /&gt;
| группа3       = Известные личности&lt;br /&gt;
| список3       = [[Grishka]]  • [[Эш]] • [[Виктор Безденежных|vituz67]] • [[Kurumisaiko]] • [[Worthymelight]] • [[Legro]] • [[ZAZiOs]] • [[Никита Сергеев]] • [[MatroCholo]] • [[Koke228]] • [[Ekyloff|Федя Жопа]] &lt;br /&gt;
| группа4       = [[Список клиентов совместимых с OpenVK|Клиенты]]&lt;br /&gt;
| список4       = [[OpenVK Legacy]] • [[OpenVK Flux]] &lt;br /&gt;
| группа5       = Чаты&lt;br /&gt;
| список5       = [[OpenVK General]] • [[Чат ржаки]] • [[Openvkapp]]&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc}}&lt;br /&gt;
[[Категория:Шаблоны]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:PeasInACan.webp&amp;diff=10293</id>
		<title>Файл:PeasInACan.webp</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:PeasInACan.webp&amp;diff=10293"/>
		<updated>2026-10-12T12:41:05Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%AD%D0%BD%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D1%81%D0%B0%D0%BC%D1%81%D0%BE%D0%BD%D0%B8%D1%8F&amp;diff=10291</id>
		<title>Энциклосамсония</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%AD%D0%BD%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D1%81%D0%B0%D0%BC%D1%81%D0%BE%D0%BD%D0%B8%D1%8F&amp;diff=10291"/>
		<updated>2026-10-12T12:30:36Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Сайт&lt;br /&gt;
| name = Энциклосамсония&lt;br /&gt;
| slogan = Семь раз попсихуй, один раз загугли&lt;br /&gt;
| logo = [[Файл:Encyclologo.jpg|130px|center]]&lt;br /&gt;
| caption = текущая заглавная страница&lt;br /&gt;
| screenshot = [[Файл:Encycloscreen.jpg|260px|center]]&lt;br /&gt;
| url = https://komputersem.com&lt;br /&gt;
| type = вики&lt;br /&gt;
| commercial = некоммерческий&lt;br /&gt;
| registration = необязательная&lt;br /&gt;
| languages = русский&lt;br /&gt;
| serverloc = Москва, Российская Федерация&lt;br /&gt;
| creator = [[Instagramming Lol The Exector]]&lt;br /&gt;
| birthday = 30 августа 2025&lt;br /&gt;
| status = работает&lt;br /&gt;
| tech = Apache, MariaDB, PHP, Debian GNU/Linux.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Цитата|quote=Сорян сайт не могу удалить, 250р должны до конца отработать|author=Инстагхраминг Лол Зе Ехзектур}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Энциклосамсония&#039;&#039;&#039; — вики-проект, посвящённый видеоблогеру [[Komputersem]].&lt;br /&gt;
&lt;br /&gt;
== История создания ==&lt;br /&gt;
Идея создания вики про Кирюшу не нова, однако, в последнее время активно вынашивалась в [[Fan Клуб Komputersem|ФКК]] администратором Instagramming Lol. В конечном итоге, 30 августа 2025 года, по адресу komputersem.h1n.ru был открыт сайт на MediaWiki, где было решено создать энциклопедию про Кирилла Самсонова.&lt;br /&gt;
&lt;br /&gt;
Первая версия вики была максимально неряшливой, как минимум потому, что в качестве темы по умолчанию была установлена MinervaNeue, которая предназначена прежде всего для мобильных устройств. Чуть позже, к вики присоединился участник Joker666, который помог админам разобраться с программным обеспечением сайта. В результате, администраторы пришли к тому, что стоит оставить тему MonoBook, предварительно поэкспериментировав с Timeless и Citizen&amp;lt;ref&amp;gt;Скорее всего, из всех тем решили попробовать именно Citizen потому, что она является темой по умолчанию и по-совместительству единственной на [[Сейберпедия|Сейберпедии]], о которой админсостав в курсе.&amp;lt;/ref&amp;gt;. К настоящему времени было создано достаточно статей разного качества.&lt;br /&gt;
&lt;br /&gt;
== Домен ==&lt;br /&gt;
За своё существование Вики успела три раза поменять адрес и перейти с хостинга на собственный VDS. Изначально, Вики располагалась по бесплатному адресу komputersem.h1n.ru, но позже переехала на wiki.komputersem.com. В данный момент, домен komputersem.h1n.ru управляется неизвестным лицом, теперь там находится окно входа в некую админ-панель. &lt;br /&gt;
&lt;br /&gt;
В итоге — Вики переехала на домен komputersem.com. Примечательно то, что текущий домен зарегистрирован у той же компании, что и первый и оба домена работают у некоторого количества пользователей с перебоями, в особенности при попытке зайти на сайт через мобильный интернет, появляется ошибка о невозможности найти IP-адрес сервера.&lt;br /&gt;
&lt;br /&gt;
12 октября 2026 года домен komputersem.com окончательно перестал резолвится из-за снятия с делегации. Причины неизвестны, однако, предположительно, это связано с междоусобицами админсостава канала ФКК.&lt;br /&gt;
&lt;br /&gt;
== Конфликты ==&lt;br /&gt;
&lt;br /&gt;
=== С Daniel Myslivets ===&lt;br /&gt;
22 октября 2025 года [[Daniel Myslivets]] вместе с компанией H2O Лейбл написали жалобу хостинг-провайдеру вики из-за использования логотипа и ФИО Мысливеца, которые были указаны в статье о нём. По заялвениям админов, она была упущена из виду и поэтому не была удалена как та, что нарушает правила сайта, которые гласят о том, что все статьи должны быть связаны с Самсоновым. Админам сайта удалось &amp;quot;отбить&amp;quot; жалобу, написав длинный ответный документ. После этого вместо того, чтобы удалить статью — её переписали, чтобы, как заявили представители ФКК: &amp;quot;опозорить Мысливца&amp;quot;.&lt;br /&gt;
[[Категория:Сайты]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%AD%D0%BD%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D1%81%D0%B0%D0%BC%D1%81%D0%BE%D0%BD%D0%B8%D1%8F&amp;diff=10290</id>
		<title>Энциклосамсония</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%AD%D0%BD%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D1%81%D0%B0%D0%BC%D1%81%D0%BE%D0%BD%D0%B8%D1%8F&amp;diff=10290"/>
		<updated>2026-10-12T12:29:49Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: домен перестал резолвится&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цитата|quote=Сорян сайт не могу удалить, 250р должны до конца отработать|author=Инстагхраминг Лол Зе Ехзектур}}{{Сайт&lt;br /&gt;
| name = Энциклосамсония&lt;br /&gt;
| slogan = Семь раз попсихуй, один раз загугли&lt;br /&gt;
| logo = [[Файл:Encyclologo.jpg|130px|center]]&lt;br /&gt;
| caption = текущая заглавная страница&lt;br /&gt;
| screenshot = [[Файл:Encycloscreen.jpg|260px|center]]&lt;br /&gt;
| url = https://komputersem.com&lt;br /&gt;
| type = вики&lt;br /&gt;
| commercial = некоммерческий&lt;br /&gt;
| registration = необязательная&lt;br /&gt;
| languages = русский&lt;br /&gt;
| serverloc = Москва, Российская Федерация&lt;br /&gt;
| creator = [[Instagramming Lol The Exector]]&lt;br /&gt;
| birthday = 30 августа 2025&lt;br /&gt;
| status = работает&lt;br /&gt;
| tech = Apache, MariaDB, PHP, Debian GNU/Linux.&lt;br /&gt;
}}&#039;&#039;&#039;Энциклосамсония&#039;&#039;&#039; — вики-проект, посвящённый видеоблогеру [[Komputersem]].&lt;br /&gt;
&lt;br /&gt;
== История создания ==&lt;br /&gt;
Идея создания вики про Кирюшу не нова, однако, в последнее время активно вынашивалась в [[Fan Клуб Komputersem|ФКК]] администратором Instagramming Lol. В конечном итоге, 30 августа 2025 года, по адресу komputersem.h1n.ru был открыт сайт на MediaWiki, где было решено создать энциклопедию про Кирилла Самсонова.&lt;br /&gt;
&lt;br /&gt;
Первая версия вики была максимально неряшливой, как минимум потому, что в качестве темы по умолчанию была установлена MinervaNeue, которая предназначена прежде всего для мобильных устройств. Чуть позже, к вики присоединился участник Joker666, который помог админам разобраться с программным обеспечением сайта. В результате, администраторы пришли к тому, что стоит оставить тему MonoBook, предварительно поэкспериментировав с Timeless и Citizen&amp;lt;ref&amp;gt;Скорее всего, из всех тем решили попробовать именно Citizen потому, что она является темой по умолчанию и по-совместительству единственной на [[Сейберпедия|Сейберпедии]], о которой админсостав в курсе.&amp;lt;/ref&amp;gt;. К настоящему времени было создано достаточно статей разного качества.&lt;br /&gt;
&lt;br /&gt;
== Домен ==&lt;br /&gt;
За своё существование Вики успела три раза поменять адрес и перейти с хостинга на собственный VDS. Изначально, Вики располагалась по бесплатному адресу komputersem.h1n.ru, но позже переехала на wiki.komputersem.com. В данный момент, домен komputersem.h1n.ru управляется неизвестным лицом, теперь там находится окно входа в некую админ-панель. &lt;br /&gt;
&lt;br /&gt;
В итоге — Вики переехала на домен komputersem.com. Примечательно то, что текущий домен зарегистрирован у той же компании, что и первый и оба домена работают у некоторого количества пользователей с перебоями, в особенности при попытке зайти на сайт через мобильный интернет, появляется ошибка о невозможности найти IP-адрес сервера.&lt;br /&gt;
&lt;br /&gt;
12 октября 2026 года домен komputersem.com окончательно перестал резолвится из-за снятия с делегации. Причины неизвестны, однако, предположительно, это связано с междоусобицами админсостава канала ФКК.&lt;br /&gt;
&lt;br /&gt;
== Конфликты ==&lt;br /&gt;
&lt;br /&gt;
=== С Daniel Myslivets ===&lt;br /&gt;
22 октября 2025 года [[Daniel Myslivets]] вместе с компанией H2O Лейбл написали жалобу хостинг-провайдеру вики из-за использования логотипа и ФИО Мысливеца, которые были указаны в статье о нём. По заялвениям админов, она была упущена из виду и поэтому не была удалена как та, что нарушает правила сайта, которые гласят о том, что все статьи должны быть связаны с Самсоновым. Админам сайта удалось &amp;quot;отбить&amp;quot; жалобу, написав длинный ответный документ. После этого вместо того, чтобы удалить статью — её переписали, чтобы, как заявили представители ФКК: &amp;quot;опозорить Мысливца&amp;quot;.&lt;br /&gt;
[[Категория:Сайты]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=OpenVK&amp;diff=10259</id>
		<title>OpenVK</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=OpenVK&amp;diff=10259"/>
		<updated>2026-10-05T16:17:53Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: расписка диалогов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Сайт&lt;br /&gt;
| slogan = время подавать напитки и вершить судьбы&lt;br /&gt;
| logo = [[File:OpenVK.jpeg|70px|center]]&lt;br /&gt;
| screenshot = [[File:OpenVK_Screenshot.png|260px|center]]&lt;br /&gt;
| caption = OpenVK в 2023 году&lt;br /&gt;
| url = [https://openvk.su https://openvk.su], [https://openvk.org https://openvk.org]&lt;br /&gt;
| type = социальная сеть, пародия на старый ВКонтакте, свободный движок соцсети&lt;br /&gt;
| commercial = &#039;&#039;де-юре&#039;&#039;: некоммерческий&lt;br /&gt;
&#039;&#039;де-факто&#039;&#039;: частично коммерческий, для покупки подарков и рейтинга необходимы голоса, которые можно получить на раздачах или купив за криптовалюту&lt;br /&gt;
| registration = не обязательная, свободная&lt;br /&gt;
| languages = в основном русский, движок переведён на 12 языков&lt;br /&gt;
| tech = PHP, MySQL, кастомный фреймворк + Go, Preact (диалоги)&lt;br /&gt;
| serverloc = Франция&lt;br /&gt;
| owner = Фонд OpenVK&lt;br /&gt;
| creator = [[Владимир Баринов]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Daniel Myslivets|Даниил Мысливец]]&lt;br /&gt;
| birthday = 2017 год&lt;br /&gt;
| status = OpenVK Classic, Reborn закрыты, OpenVK 2.0 активен и развивается с 2019.&lt;br /&gt;
}}&#039;&#039;&#039;OpenVK&#039;&#039;&#039; — социальная сеть с открытым исходным кодом и явление интернет-культуры, возникшая летом 2017 года благодаря усилиям [[Владимир Баринов|Владимира Баринова]] и множеству других интернет-задротов.&lt;br /&gt;
&lt;br /&gt;
== Ранняя история ==&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Classic ===&lt;br /&gt;
Первое воплощение OpenVK, написанное [[Veselcraft|Владимиром Бариновым]] совместно с [[Lumaeris]], [[Kos Furler]] и немного [[Ponywka]] в 2017—2019 годах. Координация разработки шла в ныне заброшенной/ых группе/ах в VK. При разработке не использовалось php-фреймворков, шаблонизаторов и прочего, только процедурный php, отчего проект сильно пострадает в будущем. В дизайне сайта прослеживались многие новичковые ошибки, а именно неровные отступы, разная цветовая палитра, неровная ширина блоков, неоправданный размер шрифта и т. д.&lt;br /&gt;
&lt;br /&gt;
Обрёл первую популярность благодаря треду от Veselcraft’а на имиджборде Двач. Сайт стали часто взламывать из-за большого количества дыр. Сеть была относительно популярной, но всё же закрылась, после масштабного взлома жопы с вайпом базы данных.&lt;br /&gt;
&lt;br /&gt;
Репозитории с кодом OpenVK Classic были запривачены какое-то время чтобы люди случайно не ставили его себе на сервер, но на декабрь 2024 они открыты. Но некоторые зачем-то продолжают его ставить, наверное из за простоты в установке.&lt;br /&gt;
&lt;br /&gt;
==== l-lacker Social ====&lt;br /&gt;
OpenVK, будучи open-source проектом, часто вдохновляет людей на создание своих инстансов и на форкинг. Один из самых популярных форков OpenVK Classic — l-lacker Social, созданная [[Лласкер|l-lackerом]]. l-laSocial имела слегка иной внешний вид, разные скины, большое количество галочек и различные улучшения, а также API. Имел пропатченные SQL-уязвимости. Изначально размещался на InfinityFree, но после взлома админ-панели пользователем [[Cipherka]], айпи которого был забанен InfinityFree, хостинг-аккаунт сети был заблокирован, после этого сеть переехала на SpringHosting (нынче UnlimitSpace).&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Reborn ===&lt;br /&gt;
Командой OpenVK нередко предпринимались попытки переписать OpenVK Classic более правильно. Проект по возрождению OpenVK назывался OpenVK Reborn. Изначально он курировался [[Kordenz|Коробкой]], но коробка не смог пояснить команде всё целиком, из-за чего проект быстро сдулся. После он был переименован в OpenVK Classic Reborn и разработка была начата заново, уже под руководством [[Ponywka|Поньки]]. На этот раз в OpenVK появился роутер и шаблоны. Но вскоре и Понька покинул проект, сказав, что его надо переписать. Тогда де-факто вторым руководителем разработки стала [[Целестора]], после чего в OpenVK Classic Reborn появился новый роутер и новые шаблоны, что позволило незначительно ускорить темп разработки, однако даже так закончить проект, хотя бы до релиза, не удалось. У Reborn’а не было публичных релизов и стадии публичного бета-тестирования.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:OpenVK Reborn.png|Одна из страниц OpenVK Reborn&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== «Клоны» OpenVK ===&lt;br /&gt;
У OpenVK было много не только форков, но и «клонов», проектов, которые писались другими разработчиками и косили в определённой степени под OpenVK (клон клона, ахуй). Их было не очень-то и много, правда. Из значимых можно отметить разве что OpenVK Поньки, LibreSoc Целесторы (на тот момент известной как Вр*ска) и OpenVK 5. Ни один из проектов не сыскал какой-либо большой популярности. LibreSoc, к слову, был частично написан на компонентах Laravel и имел AJAX-подгрузку всего в стиле [https://turbo.hotwired.dev/ Turbo]. Скриншотов LibreSoc’а не осталось: (&lt;br /&gt;
&lt;br /&gt;
== OpenVK 2 ==&lt;br /&gt;
&#039;&#039;Этот раздел ещё не закончен&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
OpenVK 2.0, теперь уже без Classic, был последней попыткой переписать OpenVK. На этот раз, на удивление, получилось. В этот раз за основу движка лёг самописный php-фреймворк libchandler, который правда оказался говном, но он поддерживает шаблоны Latte, ACL и прочие приколы. Разработка OpenVK 2.0 началась с 2019 года и с тех пор то активно, то пассивно ведётся. По состоянию на 2025 год, она притихла, но проект продолжает жить благодаря глобальной ленте и чату в Telegram и в какой-то степени развиваться.&lt;br /&gt;
&lt;br /&gt;
Существует т. н. «Команда разработчиков OpenVK», в которую входят [[Veselcraft|Владимир Баринов]], [[Daniel Myslivets|Даниил Мысливец]], [[Kos Furler]], [[Lumaeris]], [[WerySkok]], [[Целестора]], *, [[maksales]], *, n1rwana, mrilyew, *, и, что удивительно, *. Примерно с 2021 у первых 6 разработчиков стало меньше времени на активное развитие проекта, и оно стало вестись в основном 8ым, 10ым и 11ым человеками из списка.&lt;br /&gt;
&lt;br /&gt;
В отличии от прошлых воплощений OpenVK, это — самое популярное и имеет вокруг себя живой фендом; может классифицироваться почти как явление.&lt;br /&gt;
&lt;br /&gt;
=== Фичи и философия ===&lt;br /&gt;
В отличии от предыдущих версий OpenVK, в этой разработчики, кажется, смирились с тем, что не смогут сделать 1:1 копию старого ВКонтакте, поэтому просто начали творить всё подряд, что хочется; из-за чего OpenVK 2.0 представляет из себя сборную солянку фич, некоторые из которых были в VK, некоторых не было, некоторые вовсе не понятно откуда взялись, но они просто есть. Основные функции присутствуют, но хотелось бы отметить данные вещи:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Фича&lt;br /&gt;
!Есть в OpenVK?&lt;br /&gt;
!Была в VK?&lt;br /&gt;
|-&lt;br /&gt;
|Музыка&lt;br /&gt;
|Не было ощутимое время&lt;br /&gt;
|Была и есть&lt;br /&gt;
|-&lt;br /&gt;
|Анонимные посты&lt;br /&gt;
|Удалено в августе-сентябре 2025&lt;br /&gt;
|В 2017 в качестве эксперимента&lt;br /&gt;
|-&lt;br /&gt;
|API.execute&lt;br /&gt;
|Реализован Клаудией&lt;br /&gt;
|Есть!!!&lt;br /&gt;
|-&lt;br /&gt;
|Глобальная лента&lt;br /&gt;
|Да&lt;br /&gt;
|Если постараться, можно найти.&lt;br /&gt;
|-&lt;br /&gt;
|Темы оформления&lt;br /&gt;
|Да/но с проблемами&lt;br /&gt;
|Нет/но есть тёмная тема&lt;br /&gt;
|-&lt;br /&gt;
|Рейтинг&lt;br /&gt;
|Да&lt;br /&gt;
|Был до 2011; на данный момент присутствует в скрытом виде&lt;br /&gt;
|-&lt;br /&gt;
|Фоны профилей&lt;br /&gt;
|Да&lt;br /&gt;
|Нет, но есть обложки.&lt;br /&gt;
|-&lt;br /&gt;
|Беседы&lt;br /&gt;
|Вообще нет!&lt;br /&gt;
|Да!&lt;br /&gt;
|-&lt;br /&gt;
|Кастомные поля&lt;br /&gt;
|Есть, но ты про них даже не знал&lt;br /&gt;
|Нету, но есть куча других полей&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Анонимка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK была добавлена 7 ноября 2017 года в качестве эксперимента. В OpenVK появилась 15 ноября 2021. В отличии от обычных постов, у анонимных автор будет заменён на анонимный аккаунт. Стена анонима на основном инстансе долгое время была открыта, но на данный момент она таковой не является. У анонимки есть баг, который не был исправлен с момента выхода фичи, а именно в уведомлении автор не заменяется на анонима. Плюс нельзя комментировать от анонима, так что если на твоё высказывание ответили, придётся отвечать от своего имени.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;API.execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK это метод, позволяющий вызвать одновременно до 25 других методов API и вернуть в своём json формате. В OpenVK такого нет, потому что~ ~сложно. Поэтому с клиентами vk ovk не оч совместим. Плюс нет хранимых процедур и API-приложений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Глобальная лента&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Глобальная лента это по сути абсолютно все посты с сайта в порядке их выхода, за исключением тех стен которые ты проигнорировал/интровертных стен. Охуенно вечерком почитать что запостили аниме аватарочки и сколько лайков поставили на твои посты.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Темы оформления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Говоря цинично, папка, загружаемая на сервер, которая представляет собой themepack, который можно выбрать в настройках сайта. Themepack позволяет заменить шаблоны и стили сайта на свои. Чаще всего используется для перекраса цветов и ассетов сайта. Ввиду сложности создания (придётся целый инстанс openvk на компьютер ставить, целого админа просить чтобы он добавил твою тему!!) не пользуются популярностью. Да и после двух обновлений поиска на основном инстансе 50 % тем развалились и чинить их никто не собирается. Так что люди пользуются сторонними инструментами по типу stylus или tampermonkey.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рейтинг&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Функция в ВК, существовавшая до 2011, приносящая виртуальную репутацию твоему профилю и продвигающая тебя в поиске. Но её удалили где-то в 2011, а все деньги, потраченные на неё, исчезли. В OpenVK существует в качестве постиронии. Рейтинг в овк повышается через голоса и его можно повысить другому человеку (правда со своей страницы). Раньше от него вообще не было никакого смысла, но сейчас можно посмотреть топ людей в рейтинге, нажав на кнопку «поиск» в шапке. Вот ты посмотри, и подумай, сможешь ли выйти хотя бы в топ-30.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Топ популярных групп&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Отображал список 30 самых популярных групп на инстанции. Но был удалён через полгода из-за нестабильности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NSFW-метка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Позволяет пометить пост как «небезопасный для работы», и тогда его покроет чёрный квадратик, убирающийся при клике. В VK есть, но не знаю как она ставится.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Фоны профилей&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Появились 12 декабря 2022. Задают тон твоей странице. Некоторым людям они не нравятся, потому что нарушают минимализм.&lt;br /&gt;
&lt;br /&gt;
===== Беседы =====&lt;br /&gt;
&lt;br /&gt;
Разговоры о реализации бесед велись с 2020 года, когда было выпущено последнее крупное обновление для раздела сообщений.&lt;br /&gt;
Однако почему-то довести сообщения до ума никому не удавалось (да и попыток особо не было) вплоть до 2026 года, когда разработчики&lt;br /&gt;
завезли микросервис на Golang и заменили старый фронтенд, использующий KnockoutJS, на новый, написанный на Preact. С 4 октября 2026&lt;br /&gt;
года эти изменения стали публичными и на сайте появились наконец долгожданные диалоги, вместе с прикреплением медиа, групповыми чатами&lt;br /&gt;
до 100 человек, стикерами, блекджеком и шлюхами. Правда, фронтенд пока что находится в сыроватом состоянии и имеет некоторое дерьмо (баги).&lt;br /&gt;
&lt;br /&gt;
=== Разработка ===&lt;br /&gt;
Разработка ведётся на [https://github.com/openvk/openvk GitHub]. Проект распространяется под лицензией GNU LGPLv2.0, что позволяет не раскрывать исходные тексты своего сайта, если не распространять его дистрибутивы. Также допускается использование OpenVK для создания на его основе проприетарных решений, однако таких на данный момент нет.&lt;br /&gt;
&lt;br /&gt;
==== Федиверс ====&lt;br /&gt;
В OpenVK ещё с 2021 года есть планы сделать поддержку протокола [[ActivityPub]]&amp;lt;ref&amp;gt;https://github.com/openvk/openvk/issues/61&amp;lt;/ref&amp;gt;, тем самым включив соцсеть в состав [[Федиверс]]а, на что так же есть намёк в описании проекта на GitHub: «&#039;&#039;&#039;Not-yet-federated&#039;&#039;&#039; open source social network inspired by VK.»&lt;br /&gt;
&lt;br /&gt;
Несмотря на это, поддержка так и не реализована, потому что это не сильно интересно разработчикам, а для желающих всё же помацать федерированный клон ВК есть [[Smithereen]].&lt;br /&gt;
&lt;br /&gt;
=== Популярность и критика ===&lt;br /&gt;
OpenVK 2 значительно популярнее предыдущих итераций OpenVK. На основной инстанции на осени 2026 зарегистрировано 44 тысячи пользователей. Костяк нёрдовой аудитории перешёл от видеоблогера [[Алексей Лещенко|Алексея Лещенко]], с [https://www.youtube.com/watch?v=iqoO2zBwvJg видео от 5 января 2021]. Существенная часть новых пользователей пришла также благодаря вирусным роликам в TikTok. Начиная с 2024 года проект рекламируют многие телеграм-говномедиа (с зачастую технарьским уклоном!).&lt;br /&gt;
&lt;br /&gt;
На момент сентября 2026, из-за влияния многих факторов, средний онлайн на сайте составляет 100 человек.&lt;br /&gt;
&lt;br /&gt;
В начале 2026 была составлена шизопаста из готового уже сообщения одного из разработчиков OpenVK (спасибо ему за пищу для размышления). Она будет ниже, однако актуальность оставляет желать лучшего.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Главной причиной низкой активности, вероятно, является эффект сильного первого впечатления, который характерен для подобных сабжу проектов с ретро-тематикой. На людей, заставших «те самые» времена, когда ВКонтакте ещё не принадлежал формально государству, и в целом когда трава была зеленее а небо — голубее, OpenVK действует как платформа для ностальгии. В теории именно такая труЪ аудитория и должна составлять основу проекта — по крайней мере, согласно тому образу, который транслируют популярные источники типа попсовых телеграм-каналов, которые упоминались выше.&lt;br /&gt;
&lt;br /&gt;
На практике же, как вы уже поняли всё куда сложнее: представители этой категории пользователей появляются здесь относительно редко, несмотря на концепцию платформы.&lt;br /&gt;
&lt;br /&gt;
Для новых поколений, OpenVK, напротив, предоставляет укунуться в эпоху, которую они не застали по причине возраста или отсутствия тогдашней осознанности.&lt;br /&gt;
&lt;br /&gt;
Под впечатлением от сайта именно они и создают контент, как-либо пытающийся имитировать интернет нулевых, романтизируя это через образы эмо-субкультуры и смежных направлений, не учитывая при этом негативные аспекты того времени, которых было более чем достаточно. Это приводит к формированию специфического контента — странной смеси современной интернет-культуры с элементами эстетики нулевых. Отдельным фактором остаётся и мода на ностальгические штуки вроде Frutiger Aero, которую активно продвигает поколение Альфа; этот хайп даёт сабжу что-то типо профита, однако с этим же и более высок риск рака.&lt;br /&gt;
&lt;br /&gt;
При этом живое коммьюнити формируется не на самом сайте, а вокруг него — главным образом в [[Telegram]]. Во многом это связано с недостаточным взаимодействием разработчиков с аудиторией и отсутствием официальной площадки для общения. В результате значительная часть пользователей остаётся исключительно на сайте, однако построить полноценный блог им проблематично, а нормальную функциональность диалогов так и не завезли к началу 2026 года.&lt;br /&gt;
&lt;br /&gt;
Со временем такие пользователи просто уходят, так и не узнав о внешних ресурсах для обсуждения OpenVK, которые поддерживаются сообществом, которому ± не всё равно. Мимикрирующих под олдфагов-ностальгаторов немного: пишут что-то в global feed 1-2 дня, после чего уходят. Есть, конечно, [[Дмитрий Бесфамильный|исключения]], но они лишь подчёркивают общую картину.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DDoS-атаки ====&lt;br /&gt;
Из-за популярности OpenVK, он является частой мишенью для начинающих ддосеров. Долгое время ддосами промышлял [[Overlord]], но периодически появляются новые оверлордята, которым заняться кроме ддоса нечем. Атаки на OpenVK фиксируются с 2020 года; их интенсивность и частота менялись, и на настоящий момент они редки, но не исключены. Оное не является следствием какого-либо конфликта, а скорее просто устоявшейся в рудудосе традицией использовать OpenVK как тренировочную цель. &lt;br /&gt;
&lt;br /&gt;
В 2026 сайт сумел поменять два сервиса по защите сайтов от дудоса сразу, перейдя с Cloudflare на GrayWeb, а с него на Anubis. GrayWeb вызывал лютейшую критику со стороны  пользователей. Сервис хоть и позволял жителям РФ сидеть на сайте без VPN, тот существенно затруднял просмотр сайта назойливым UAM или его аналогом. В результате команда приняла решение о переходе на чудесный Anubis.&lt;br /&gt;
==== Блокировки ====&lt;br /&gt;
С 16 по 20 августа 2024 года сайт был заблокирован&amp;lt;ref&amp;gt;https://t.me/openvk/2661&amp;lt;/ref&amp;gt; на территории России из-за публикации одним из пользователей песни «Антифа-лезгинка» группы Warriors of Zion, включённой в Федеральный список экстремистских материалов. Роскомнадзор присылал Veselcraft’у на почту предложение обойтись без блокировки, однако письмо, по всей видимости, попало в папку «Спам».&lt;br /&gt;
&lt;br /&gt;
=== Политическая позиция ===&lt;br /&gt;
Администраторы OpenVK в большинстве своём придерживаются относительно либеральных взглядов, однако это не оказывает влияния на работу площадки.&lt;br /&gt;
&lt;br /&gt;
==== Ермаков ====&lt;br /&gt;
[[Файл:Ермаков овк.png|мини|Архивный кадр с включённым ClearType.]]&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Основная статья: [[Даниил Ермаков#OpenVK|Даниил Ермаков]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ермаков создал страницу в OpenVK 20 августа 2022 года и изначально был миролюбив.&lt;br /&gt;
&lt;br /&gt;
Но 20 февраля 2023 на его страницу был совершён рейд, в ходе которого сначала реальные люди стали писать ему на страницу оскорбления, а затем некто под псевдонимом Максим Кац начал флудить на его стене белорусской фразой с помощью API. Через два месяца, 12 апреля 2023 он ЖЁСТКО реагирует на данный инцидент и начинает жёсткую политическую дискуссию прямо в комментариях openvk с его политическими оппонентами. Дойдя до точки кипения, 16 апреля 2023 он удаляет страницу, назвав сайт &amp;quot;хохляцкой помойкой&amp;quot;. Несмотря на это, Ермаков вернулся на сайт в августе 2024, со своего более старого аккаунта (id136).&lt;br /&gt;
&lt;br /&gt;
==== Свобода слова в OpenVK ====&lt;br /&gt;
Фонд OpenVK в целом толерантно относится к носителям не левой идеологии, однако за откровенную про-Z риторику, можно получить бан в чатах OpenVK. Не смотря на это, в самой сети зачастую пользователи не преследуются администрацией за мнение или высказывания. Хотя особо людоедские высказывания запрещены там правилами, да и по правилам вместе с баном в чате должна баниться и страница в сети, случаи блокировок по идеологическим причинам в OpenVK не были зафиксированы. Большинство несогласных самостоятельно уходят из проекта, не получая приемлемого отклика от местных пользователей.&lt;br /&gt;
&lt;br /&gt;
===== Сотрудничество с украинскими спецслужбами =====&lt;br /&gt;
Ходили слухи о том, что OpenVK сотрудничает с властями Украины, однако они основаны на одном случае, когда одна украинофобная фотокарточка была изъята из публичного доступа по причине якобы официального обращения со стороны Национальной Полиции Украины. Политологи склонны считать, что это был рофл.&lt;br /&gt;
&lt;br /&gt;
=== Коммьюнити ===&lt;br /&gt;
OpenVK Chat, живший в 2018 году во ВКонтакте, развалился два раза. В покойной [[moshWiki]] было отмечено, что, вероятно, жизненный путь OpenVK станет темой ещё не одной статьи из-за особенности OpenVK сближать людей вокруг себя и заставлять их сраться похлеще, чем это делают в самой забитой фан-группе по геншину. Ну, что же, moshWiki не обманули. И чат OpenVK в Telegram, кстати, тоже развалился два раза.&lt;br /&gt;
&lt;br /&gt;
==== Чат OpenVK в Telegram ====&lt;br /&gt;
Основное место скопления любителей OpenVK. Главным администратором до 2024 является де-юре [[WerySkok]]. Из-за большого количества оффтопа в чате и нежелания Владимира Баринова и Скока его терпеть, чат разваливался аж два раза. Первый раз случился тогда, когда Вова решил из него выйти, но случайно вместо этого удалил. Чат после этого был пересоздан, но Скока продолжила задалбывать тенденция местных оффтопить люто, поэтому чат был развален во второй раз. На этот раз, правда, чат не был удалён, в нём просто запретили оффтопить, а для оффтопа был создан отдельный чат. Однако чётко определить границы оффтопа весьма сложно, поэтому идея с оффтопиком себя не оправдала: мало того, что она изначально разозлила активную часть фендома, так и оффтоп никуда не делся. За всё время двоечатия был либо оффтоп в OpenVK Discussions, либо обсуждение самого OpenVK в OpenVK Offtopic. Вскоре, чаты были дебалканизированы назад в основной, который стал называться [[OpenVK General|OpenVK // General]].&lt;br /&gt;
&lt;br /&gt;
В чате зарождается бóльшая часть локальных мемов, иногда они начинают форситься и выходить из под контроля. Тогда ВериСкок, когда тот администрировал чат обычно объявлял их «нежелательными говнофорсами» и распространение мема подавлялось силовым крылом чата.&lt;br /&gt;
&lt;br /&gt;
В ноябре 2024 произошли глобальные изменения в чате: админка передалась администраторше Целесторе, а чат становился неаффилированым с администрацией OpenVK (не смотря на то что тогдашняя владелица была одним из админов сабжа) и переименовался в OpenVK // Unofficial. После этого приколы про Верискока и говнофорсы официально можно было считать протухшими.&lt;br /&gt;
&lt;br /&gt;
В январе 2026 года [[Ekyloff|Федя Жопа]] создал свой чат, в котором общаются некоторые активные участники OpenVK. После ухода Анофишла из [[Ржаксфедерация|Ржаксфедерации]] чат Феди стал более активным, а Дженерал стал медленно, но умирать. При этом между владельцами двух чатиков нет никакой вражды. На момент сентябре 2026, активен в основном преимущественно чат Феди, где сформировалась своя атмосфера, но не обошлось и без конфликтов. Но это уже совсем другая история.&lt;br /&gt;
&lt;br /&gt;
==== Ржака ====&lt;br /&gt;
{{ОПГ&lt;br /&gt;
| name = Министерство ржаки&lt;br /&gt;
| logo = [[File:rjaka.jpeg|80px|center]]&lt;br /&gt;
| members = 11 групп в OpenVK, 1 канал в Telegram&lt;br /&gt;
| type = неофициальный фан-клуб, сетка групп&lt;br /&gt;
| gensec = Никита Сергеев (?) (на момент 31 января 2026 года)&lt;br /&gt;
| le_dudes = &lt;br /&gt;
| birthday = 18 сентября 2021 года&lt;br /&gt;
| founders = [[ByloTonix]], rudzik8&lt;br /&gt;
| status = мертва&lt;br /&gt;
| url = [https://t.me/rjakz В Telegram], [https://openvk.su/openvkfun В OpenVK]&lt;br /&gt;
| deathdate = 2 февраля 2026 года&lt;br /&gt;
}}&lt;br /&gt;
У коммьюнити OpenVK был отдельный неофициальный канал, посвящённый мемам, которые каким-либо образом были связаны с OpenVK. Канал назывался «[[Ржака OpenVK]]» и находился под управлением так называемого Министерства ржаки.&lt;br /&gt;
&lt;br /&gt;
Министерство ржаки являлось важным двигателем актива в сообществе сабжа. Группы, принадлежащие Министерству в OpenVK, какое-то время входили в топ групп OpenVK и [[VepurOVK]]. После [[OpenVK General|OpenVK // General]], чат и канал Ржаки являлись самой большой фабрикой оригинальных мемов по OpenVK. Большинство активных пользователей OpenVK также были подписаны и на Ржаку. Чаты ржаки играли ключевую роль во времена репрессивной фазы администрации OpenVK // General, когда самые смешные мемы банились по причине «говнофорс».&lt;br /&gt;
&lt;br /&gt;
В 2022 году Министерство временно прекратило свою работу в OpenVK и полностью перешло в [[VepurOVK]]. Причиной этого события стало политическое разногласие MatroCholo и Rudzik8 с основателем OpenVK, [[Veselcraft|Владимиром Бариновым]], который забанил их в чате Дженерала за разведение срача по поводу коммунизма и Советского Союза. Основатели Ржаки не были согласны с вердиктом администрации, который признал их «провокаторами», после чего они удалили свои страницы в OpenVK и ушли в VepurOVK. Мемы в Ржаке тогда начали высмеивать OpenVK за низкую степень актива, медленную работу сайта и лень разработчиков. Большинство членов сообщества не оценили такую смену контента, а между VepurOVK и OpenVK разгорелся небольшой вялотекущий конфликт.&lt;br /&gt;
&lt;br /&gt;
Впоследствии конфликт был улажен, однако группы в OpenVK и телеграм-канал Ржаки постепенно утратили активность из-за перераспределения ресурсов на другие проекты. Расширение тематики канала также не привело к заметному росту аудитории.&lt;br /&gt;
&lt;br /&gt;
Из-за разногласий вокруг этой ситуации, а также последующих споров по вопросам оплаты серверов проект покинула администратор Целестора, после чего инфраструктура была перенесена на серверы Senko Digital.&lt;br /&gt;
&lt;br /&gt;
На фоне накопившихся противоречий и снижения интереса к проекту в начале февраля 2026 года Ржака была официально закрыта.&lt;br /&gt;
&lt;br /&gt;
==== Форсы ====&lt;br /&gt;
Большинство мемов про OpenVK являются быстро переходящими, очень редко какой-либо из них становится долгоиграющим форсом. Тем не менее, с форсами [[OpenVK General|OpenVK // General]] и ассоциируется, из-за двух очень больших форсов, на подавление которых ушло достаточно большое количество админресурса Александра Скока.&lt;br /&gt;
&lt;br /&gt;
===== Какао прокакалось =====&lt;br /&gt;
Мем, порождённый [[Matty Mellis|Метти]], русскоговорящим иностранцем, которого смешила фраза «какао прокакалось». Кроме него, её никто смешной не находил, а его привычка постить её, после чего начинать парад говностикеров, послужила основной причиной, почему эту фразу так сильно захейтили. Парадоксально, но не смотря на лютую ненависть фендома к этой фразе, чем больше её ненавидели, тем больше её постили направо и налево. Сейчас её тоже можно увидеть во многих местах, где есть участники сабжа, но во время пика популярности её произношение в тогдашних чатах OpenVK было запрещено. Позже появилась альтернативная версия произошедшего: якобы Метти просто притворялся и на самом деле владеет русским языком как родным. Однако остаётся неизвестным, жил ли он реально в США (Метти давал номер с кодом +1), или это был высший уровень отыгрыша. Метти официально подтвердил эту историю, добавив, что тот кидал множество раз один из стикеров с крокодилом во время того, как употреблял наркотики.&lt;br /&gt;
&lt;br /&gt;
===== Максим Кац =====&lt;br /&gt;
Наверное, самый вялотекущий форс в OpenVK, из-за чего он не был жертвой репрессий со стороны Скока. Форс заключается в приплетении Максима Каца куда угодно и регистрации страниц на его имя в OpenVK. Частично перекликается с мемом про то, что Ермаков якобы встречается с Кацем. Иронично, но сам Кац в OpenVK не зарегистрирован и про сам сайт очевидно не знает.&lt;br /&gt;
&lt;br /&gt;
===== Бочка хуила =====&lt;br /&gt;
Самый лютый форс в OpenVK, на время активного форса был запрещен в чатах сабжа. Зародился из смешной мясной переписки в чате General, где была запощена фотокарточка с Хитори Гото, также известной как Боччи, из аниме-сериала «Bocchi the Rock!», которую кто-то прокомментировал вопросом «кто это», на что получил ответ «хуила». После этого Боччи прозвали бочкой-хуилой. Ржака быстро подхватила форс, а вскоре в видеочате OpenVK // General прошёл совместный просмотр сериала, после чего форс только усилился и не прекращался естественными причинами. Разумеется, форс был убит Скоком из-за невозможности контролировать происходящее в чате по причине спама фразой «бочка хуила».&lt;br /&gt;
===== Музыка =====&lt;br /&gt;
Связан с довольно долгим отсутствием и разработки функционала аудиозаписей в OpenVK, который длился с 2017 по 2023. Было множество спекуляций, шуток, мемов на эту тему, но в конечном итоге они появилась 12 ноября 2023 в полночь, и к ним быстро привыкли. Релизу предшествовала долгая разработка, в которой участвовали Целестора (бекенд), n1rwana (фронтенд, по просьбе следующего человека), mrilyew (фронтенд, по просьбе друга) и Зубная Паста (скрипт загрузки).&lt;br /&gt;
&lt;br /&gt;
===== OpenVK от VK =====&lt;br /&gt;
25 декабря 2024 VK выпустил свою инициативу под названием «OpenVK». Ожидалось, что корпорация начнёт отстаивать свой бренд, началась подготовка к смене названия, но по итогу этого так и не произошло.&lt;br /&gt;
&lt;br /&gt;
=== Финансирование ===&lt;br /&gt;
Не смотря на то, что OpenVK продаёт голоса за криптовалюту, доход с этого очень маленький. В основном работа OpenVK финансируется добровольными пожертвованиями со стороны сообщества. Но часто спонсором выступает VepurOVK.&lt;br /&gt;
&lt;br /&gt;
==== Задолженность провайдеру ====&lt;br /&gt;
В 2023 году задолженность OpenVK своему хостинг-провайдеру перевалила за 50 евро, после чего сервер был отключён. Летом 2023 года началась процедура по выплате долга, однако вскоре сервер снова был отключён из-за невозможности OpenVK расплатиться с долгом в срок. Тогда какой-то челик закинул две тысячи рублей, которые были использованы чтобы погасить остаток долга. Ня!&lt;br /&gt;
&lt;br /&gt;
=== Организационная структура ===&lt;br /&gt;
Фонд OpenVK не имеет чёткой организационной структуры, как и юридического лица в какой-либо стране. Все решения принимаются максимально децентрализовано лицами, входящими в совет разработчиков. Зачастую это играет положительную роль и позволяет одним администратором «компенсировать» поведение других. Например, в чатах Скок и Вова часто банят людей, а Целестора разбанивает. Весело.&lt;br /&gt;
&lt;br /&gt;
=== Альтернативные инстанции ===&lt;br /&gt;
Так как OpenVK имеет открытый исходный код, каждый может создать свою инстанцию.&lt;br /&gt;
&lt;br /&gt;
===== [[VepurOVK]] =====&lt;br /&gt;
Был открыт 12 апреля 2022 года. Второй по популярности инстанс OpenVK. Является личным проектом Вячеслава Петрова (saursvepur). Для перелива актива с OpenVK Вепур добавляет фичи из незавершённых веток и пулл-реквестов, но это не особо помогает. В основном там сидят те, кого не устраивает основная инстанция. &lt;br /&gt;
&lt;br /&gt;
===== Astorium =====&lt;br /&gt;
Было и было. См. отдельную статью&lt;br /&gt;
&lt;br /&gt;
===== [[OVKisser]] =====&lt;br /&gt;
&lt;br /&gt;
===== test.openvk.su =====&lt;br /&gt;
Тестовая инстанция. Была открыта 27 декабря 2021 для теста федивёрса, но потом на него забили как собственно и на инстанс. О нём вспомнили в июне 2023, когда нужно было потестить фичу с много картинок, но сейчас опять забили. 11 августа 2023 был открыт https://venti.openvk.uk, который использует ту же базу данных, что и официальная инстанция, но зачем, неизвестно.&lt;br /&gt;
&lt;br /&gt;
После смена домена на ovk.to оба сайта стали недоступны.&lt;br /&gt;
&lt;br /&gt;
===== [[Fetbuk|Fetbuk Social]] =====&lt;br /&gt;
Был создан [[WerySkok]] в сентябре 2021 года. Работает с переменным успехом, обновляется редко.&lt;br /&gt;
&lt;br /&gt;
=== Мобильные приложения ===&lt;br /&gt;
Существует два мобильных приложения: OpenVK Legacy и OpenVK Refresh.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[OpenVK Legacy]]&#039;&#039;&#039; имеет 1 в 1 такой же интерфейс, как и приложение ВКонтакте 3.0, потому что сам создатель этого приложения (Grishka) предоставил макеты [[Tinelix]]. В нём нет тёмной темы, так как, по словам разработчика, там всё завязано на растровых изображениях, и потому будет трудно перекрасить их всех, чтобы это выглядело адекватно.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;OpenVK Refresh&#039;&#039;&#039; имеет современный интерфейс.&lt;br /&gt;
&lt;br /&gt;
На Windows Phone есть OpenVK Star, который представляет собой WebView версию полной версии.&lt;br /&gt;
&lt;br /&gt;
=== Инциденты ===&lt;br /&gt;
[[Файл:Долбаёбы.png|мини|188x188пкс]]&lt;br /&gt;
Время от времени всякие анонимы забивают глобальную ленту грубыми и плохими словами по типу «MAT EBAL PIDORAS» «[рандомный номер] PIDORAS», «[IP] [плохая надпись]», создают группы с непристойными названиями, но их быстро удаляют. Но есть и более уникальные инциденты.&lt;br /&gt;
&lt;br /&gt;
==== 31.01.2023 incident ====&lt;br /&gt;
31 января 2023 всем в личку пришло письмо счастья «Какао прокакалось» от пользователя с таким же именем, но его быстро забанили. На данный момент ведётся расследование, кто стоял за этим аккаунтом. Бан вызвал постиронический протест в глобальной ленте с хэштегом «#РазбанКакаоПрокакалось». После блокировки оказалось, что в API есть дырка, позволяющая сидеть в OpenVK даже после бана, но её поправили.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Какаосообщалось.png&lt;br /&gt;
Файл:Какао.png&lt;br /&gt;
Файл:Какао разбанилос.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 10.02.2023 incident ====&lt;br /&gt;
[[Файл:Xss thing.png|мини|252x252пкс]]&lt;br /&gt;
28 января в OpenVK появился плеер, стилизованный под старый ВК, у него был «постер»: название видео и под ним имя автора, а так же большая кнопка проигрывания. Название видео не экранированировалось, этим и воспользовались в данном инциденте. В название видео ставился тег audio, который вызывал ошибку и подгружал скрипт, который репостил на страницу пользователя видео с подписью «Какао прокакалось». Все, кто тогда сидел в OpenVK (это было ночью) репостили это видео к себе и глобальная лента &amp;lt;s&amp;gt;засиралась&amp;lt;/s&amp;gt; прокакивалась. К счастью или к сожалению, уязвимость была быстро пропатчена. На данный момент неизвестно, кто стоял за инцидентом. То самое видео до сих пор можно посмотреть&amp;lt;ref&amp;gt;https://openvk.su/video10289_9&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 16.09.2023 incident ====&lt;br /&gt;
После добавления функции редактирования поста, автор пулл-реквеста выпустил патч, который запрещал редактировать посты старше одной недели. Однако он пропустил одно условие в проверке, из-за чего чужие посты стали редактируемыми для всех. Этим воспользовался [[SaursVepur|saursvepur]] и, пока это было возможно, прибавил к содержанию последних постов в глобальной ленте «vepurovk.xyz». Уязвимость быстро исправили, а оригинальное содержание постов вернули.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{Navbox OpenVK|title=Ещё про OpenVK}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сайты]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;diff=10065</id>
		<title>Модуль:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;diff=10065"/>
		<updated>2026-09-16T11:32:16Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Малая токмачка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Imported from: https://ru.wikipedia.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;amp;oldid=153386077&lt;br /&gt;
-- Modified 09-16-2026: removed lang (not enough time to import properly)&lt;br /&gt;
&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
require(&#039;strict&#039;);&lt;br /&gt;
local boxDate = require(&#039;Module:Calendar&#039;).bxDate;&lt;br /&gt;
&lt;br /&gt;
local error_cats = {&lt;br /&gt;
    [&#039;noname_param&#039;] = &#039;Категория:Служебная:Cite web (некорректное использование: непустой неименованный параметр)&#039;,&lt;br /&gt;
    [&#039;empty_title&#039;] = &#039;Категория:Служебная:Cite web (некорректное использование: не указан title)&#039;,&lt;br /&gt;
    [&#039;empty_url&#039;] = &#039;Категория:Служебная:Cite web (некорректное использование: не указан url)&#039;,&lt;br /&gt;
    [&#039;bad_archive&#039;] = &#039;Категория:Служебная:Cite web (некорректное использование: параметры архивации)&#039;,&lt;br /&gt;
    [&#039;deadlink&#039;] = &#039;Категория:Служебная:Cite web (недоступные ссылки без архивной копии)&#039;,&lt;br /&gt;
    -- [&#039;bad_lang&#039;] = &#039;К:Служебная:Cite web (неверный код языка)&#039;,&lt;br /&gt;
    -- [&#039;deadlink_old&#039;] = &#039;К:Служебная:Cite web (устаревшие параметры мёртвых ссылок)&#039;,&lt;br /&gt;
    [&#039;empty_lang&#039;] = &#039;Категория:Служебная:Cite web (не указан язык)&#039;,&lt;br /&gt;
    [&#039;bad_url&#039;] = &#039;Категория:Служебная:Cite web (некорректный url)&#039;,&lt;br /&gt;
    [&#039;webcitation_no&#039;] = &#039;Категория:Служебная:Cite web (заменить webcitation-архив: deadlink no)&#039;,&lt;br /&gt;
    [&#039;webcitation_yes&#039;] = &#039;Категория:Служебная:Cite web (заменить webcitation-архив: deadlink yes)&#039;,&lt;br /&gt;
}&lt;br /&gt;
local errors = {&lt;br /&gt;
    [&#039;noname_param&#039;] = &#039;{{error|Все параметры шаблона {{tl|cite web}} должны [[T:cite web#Неименованные_параметры|иметь имя]].}}&#039;,&lt;br /&gt;
    [&#039;empty_title&#039;] = &#039;{{error|Необходимо задать параметр {{code|title{{=}}}} в шаблоне {{tl|cite web}}.}}&#039;,&lt;br /&gt;
    [&#039;empty_url&#039;] = &#039;{{error|Необходимо задать параметр {{code|url{{=}}}} в шаблоне {{tl|cite web}}.}}&#039;,&lt;br /&gt;
    [&#039;bad_archive&#039;] = &#039;{{error|Если в шаблоне {{tl|cite web}} задаётся параметр {{code|archive-url{{=}}}}, должен задаваться и параметр {{code|archive-date{{=}}}}, и наоборот.}}&#039;,&lt;br /&gt;
}&lt;br /&gt;
local replace_params = {&lt;br /&gt;
    [&#039;accessdate&#039;] = &#039;access-date&#039;,&lt;br /&gt;
    [&#039;archivedate&#039;] = &#039;archive-date&#039;,&lt;br /&gt;
    [&#039;archiveurl&#039;] = &#039;archive-url&#039;,&lt;br /&gt;
    [&#039;authorlink&#039;] = &#039;author-link1&#039;,&lt;br /&gt;
    [&#039;author-link&#039;] = &#039;author-link1&#039;,&lt;br /&gt;
    [&#039;author&#039;] = &#039;author1&#039;,&lt;br /&gt;
    [&#039;first&#039;] = &#039;first1&#039;,&lt;br /&gt;
    [&#039;last&#039;] = &#039;last1&#039;,&lt;br /&gt;
    [&#039;deadurl&#039;] = &#039;deadlink&#039;,&lt;br /&gt;
    [&#039;dead-url&#039;] = &#039;deadlink&#039;,&lt;br /&gt;
    [&#039;language&#039;] = &#039;lang&#039;,&lt;br /&gt;
    [&#039;datepublished&#039;] = &#039;date&#039;,&lt;br /&gt;
    [&#039;work&#039;] = &#039;website&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- проверка существования переменной. возврат её, или nil если пустая&lt;br /&gt;
local function is(var)&lt;br /&gt;
    if (var == &#039;&#039; or var == nil) then return nil else return var end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- замена устаревших аргументов на их аналоги&lt;br /&gt;
local function prepareArgs(args)&lt;br /&gt;
    local bad_args = {};&lt;br /&gt;
    local new_args = {};&lt;br /&gt;
    for param, value in pairs(args) do&lt;br /&gt;
        if is(replace_params[param]) and not is(args[replace_params[param]]) then&lt;br /&gt;
            param = replace_params[param];&lt;br /&gt;
        end&lt;br /&gt;
        new_args[param] = value;&lt;br /&gt;
    end&lt;br /&gt;
    return new_args, bad_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function insertDot(str, insert)&lt;br /&gt;
    if insert == false then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(str, &#039;.&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function needDot(source_str)&lt;br /&gt;
    if mw.ustring.find(source_str, &#039;[.?!:…]»?$&#039;) ~= nil then&lt;br /&gt;
        return false&lt;br /&gt;
    else&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nowiki(text)&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    return frame:callParserFunction(&#039;#tag&#039;, { &#039;nowiki&#039;, text })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function replace(source_str, pattern, replace)&lt;br /&gt;
    return mw.ustring.gsub(source_str, pattern, replace)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- форматирование даты; в случае ошибки - возврат переданного значения без изменений&lt;br /&gt;
local function formatDate(strFormat, txtDateIn, params)&lt;br /&gt;
    local txtDateOut, date, status = boxDate(txtDateIn, strFormat, params)&lt;br /&gt;
    if status.brk then&lt;br /&gt;
        return txtDateIn&lt;br /&gt;
    else&lt;br /&gt;
        return txtDateOut&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- отрисовка ошибки по коду&lt;br /&gt;
local function expandError(code)&lt;br /&gt;
    return mw.getCurrentFrame():preprocess(errors[code]) .. &#039; &#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- отрисовка всех категорий по их кодам&lt;br /&gt;
local function expandCats(cats)&lt;br /&gt;
    local str = {};&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    for _, cat in pairs(cats) do&lt;br /&gt;
        table.insert(str, &#039;[[&#039; .. error_cats[cat] .. &#039;]]&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    return frame:preprocess(table.concat(str))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- разделение их&lt;br /&gt;
local function splitBySlash(string)&lt;br /&gt;
    local args = {};&lt;br /&gt;
    local iterator = mw.ustring.gmatch(string, &amp;quot;[^/]+&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for w in iterator do&lt;br /&gt;
        table.insert(args, w)&lt;br /&gt;
    end&lt;br /&gt;
    return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- оборачиваем главную ссылку в span с указанным языком (может быть полезно для rtl)&lt;br /&gt;
local function wrapLang(link, langs)&lt;br /&gt;
    local lang_code = &#039;und&#039;;&lt;br /&gt;
&lt;br /&gt;
    if is(langs) then&lt;br /&gt;
        local args = splitBySlash(langs);&lt;br /&gt;
        if #args ~= 0 then&lt;br /&gt;
            lang_code = args[1];&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return &#039;&amp;lt;span lang=&amp;quot;&#039; .. lang_code .. &#039;&amp;quot;&amp;gt;&#039; .. link .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- обёртка в тег цитирования&lt;br /&gt;
local function wrapCite(str, args)&lt;br /&gt;
    if is(args[&#039;ref&#039;]) then&lt;br /&gt;
        table.insert(str, 1, &#039;&amp;lt;span class=&amp;quot;citation&amp;quot; id=&amp;quot;CITEREF&#039; .. mw.uri.anchorEncode(args[&#039;ref&#039;]) .. &#039;&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
        if is(args[&#039;date&#039;]) then&lt;br /&gt;
            table.insert(str, 2,&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;citation&amp;quot; id=&amp;quot;CITEREF&#039; ..&lt;br /&gt;
                mw.uri.anchorEncode(args[&#039;ref&#039;] .. formatDate(&#039;Y&#039;, args[&#039;date&#039;])) .. &#039;&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
            table.insert(str, &#039;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(str, 1, &#039;&amp;lt;span class=&amp;quot;citation&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.insert(str, &#039;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local str = {}&lt;br /&gt;
    local cats = {}&lt;br /&gt;
&lt;br /&gt;
    local pFrame = frame:getParent();&lt;br /&gt;
    local args = mw.clone(pFrame.args);&lt;br /&gt;
    setmetatable(args, nil);&lt;br /&gt;
&lt;br /&gt;
    args = prepareArgs(args);&lt;br /&gt;
&lt;br /&gt;
    -- Проверки&lt;br /&gt;
    -- Проверка отсутствия неименованных параметров&lt;br /&gt;
    for i = 1, 6 do&lt;br /&gt;
		-- Поиск истинно пустых параметров или заполненных пробелами&lt;br /&gt;
        if is(mw.text.trim(args[i] or &#039;&#039;)) then&lt;br /&gt;
            table.insert(str, expandError(&#039;noname_param&#039;));&lt;br /&gt;
            table.insert(cats, &#039;noname_param&#039;);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка корректности заполнения параметров archive-url и archive-date&lt;br /&gt;
    if (is(args[&#039;archive-date&#039;]) ~= nil and is(args[&#039;archive-url&#039;]) == nil) or&lt;br /&gt;
        (is(args[&#039;archive-date&#039;]) == nil and is(args[&#039;archive-url&#039;]) ~= nil) then&lt;br /&gt;
        table.insert(str, expandError(&#039;bad_archive&#039;));&lt;br /&gt;
        table.insert(cats, &#039;bad_archive&#039;);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка устаревших параметров мёртвых ссылок&lt;br /&gt;
    -- if is(args[&#039;dead-url&#039;]) or is(args[&#039;deadurl&#039;]) then&lt;br /&gt;
    --     table.insert(cats, error_cats[&#039;deadlink_old&#039;])&lt;br /&gt;
    -- end&lt;br /&gt;
&lt;br /&gt;
    local urlstatus = &#039;live&#039;;&lt;br /&gt;
    if args[&#039;url-status&#039;] == &#039;live&#039; or args[&#039;url-status&#039;] == &#039;dead&#039; or args[&#039;url-status&#039;] == &#039;unfit&#039; then&lt;br /&gt;
        urlstatus = args[&#039;url-status&#039;]&lt;br /&gt;
    elseif args[&#039;deadlink&#039;] == &#039;yes&#039; then&lt;br /&gt;
        urlstatus = &#039;dead&#039;&lt;br /&gt;
    elseif args[&#039;deadlink&#039;] == &#039;unfit&#039; then&lt;br /&gt;
        urlstatus = &#039;unfit&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        if mw.ustring.find(args[&#039;archive-url&#039;], &#039;webcitation.org&#039;, 1, true) then&lt;br /&gt;
            if urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039; then&lt;br /&gt;
                table.insert(cats, &#039;webcitation_yes&#039;)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(cats, &#039;webcitation_no&#039;)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    elseif urlstatus == &#039;dead&#039; then&lt;br /&gt;
        table.insert(cats, &#039;deadlink&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка заполнения параметра url&lt;br /&gt;
    if is(args[&#039;url&#039;]) then&lt;br /&gt;
        if mw.ustring.find(args[&#039;url&#039;], &#039;^https?://&#039;, 1, false) ~= 1 and&lt;br /&gt;
            mw.ustring.find(args[&#039;url&#039;], &#039;^ftp://&#039;, 1, false) ~= 1 or mw.ustring.find(args[&#039;url&#039;], &#039; &#039;, 1, true) ~= nil then&lt;br /&gt;
            table.insert(cats, &#039;bad_url&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(str, expandError(&#039;empty_url&#039;));&lt;br /&gt;
        table.insert(cats, &#039;empty_url&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка заполнения параметра title&lt;br /&gt;
    if not is(args[&#039;title&#039;]) then&lt;br /&gt;
        table.insert(str, expandError(&#039;empty_title&#039;));&lt;br /&gt;
        table.insert(cats, &#039;empty_title&#039;)&lt;br /&gt;
    elseif not is(args[&#039;lang&#039;]) and mw.ustring.find(args[&#039;title&#039;], &#039;^[0-9А-яЁёXVILC«»„“:;,…!?•∙→ \194\160\n\226\128\175%(%)%.%&amp;quot;\&#039;—№–%/%|%&amp;amp;%#+-]+$&#039;) == nil then&lt;br /&gt;
        table.insert(cats, &#039;empty_lang&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Формирование вывода&lt;br /&gt;
    -- Авторы&lt;br /&gt;
    local authors_str = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
    	if (string.find( k, &#039;^last%d+&#039; ) or string.find( k, &#039;^author%d+&#039; )) and is(v) then&lt;br /&gt;
    		local i = replace( replace( k, &#039;last&#039;, &#039;&#039; ), &#039;author&#039;, &#039;&#039; )&lt;br /&gt;
    		local author = v;&lt;br /&gt;
    		if #authors_str &amp;gt; 0 then&lt;br /&gt;
	            author = nowiki(&#039;;&#039;) .. &#039;&amp;amp;#32;&#039; .. author;&lt;br /&gt;
			end&lt;br /&gt;
            if is(args[&#039;first&#039; .. i]) then&lt;br /&gt;
                author = author .. &#039;, &#039; .. args[&#039;first&#039; .. i]&lt;br /&gt;
            end&lt;br /&gt;
	        if is(args[&#039;author-link&#039; .. i]) then&lt;br /&gt;
	            table.insert(authors_str, &#039;[[&#039; .. args[&#039;author-link&#039; .. i] .. &#039;|&#039; .. author .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
	        else&lt;br /&gt;
	            table.insert(authors_str, author)&lt;br /&gt;
	        end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if is(args[&#039;coauthors&#039;]) then&lt;br /&gt;
        table.insert(authors_str, nowiki(&#039;;&#039;) .. &#039;&amp;amp;#32;&#039; .. replace(args[&#039;coauthors&#039;], &#039;^(.-)%.?$&#039;, &#039;%1.&#039;) .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
	&lt;br /&gt;
	if #authors_str &amp;gt; 0 then&lt;br /&gt;
	    table.insert(str, &#039;&amp;lt;i&amp;gt;&#039;)&lt;br /&gt;
		for k, v in pairs(authors_str) do&lt;br /&gt;
			table.insert(str, v)&lt;br /&gt;
		end&lt;br /&gt;
		insertDot(str, needDot(str[#str]))&lt;br /&gt;
	    table.insert(str, &#039;&amp;lt;/i&amp;gt;&amp;amp;#32;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Редактор&lt;br /&gt;
    if is(args[&#039;editor&#039;]) then&lt;br /&gt;
        table.insert(str, &#039; &#039; .. args[&#039;editor&#039;] .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- URL, заголовок&lt;br /&gt;
    local link;&lt;br /&gt;
    local title = replace(replace(args[&#039;title&#039;] or &#039;&#039;, &#039;%[&#039;, &#039;&amp;amp;#91;&#039;), &#039;%]&#039;, &#039;&amp;amp;#93;&#039;);&lt;br /&gt;
    local dot = needDot(title);&lt;br /&gt;
&lt;br /&gt;
    if (urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039;) and is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        link = &#039;[&#039; .. (args[&#039;archive-url&#039;] or &#039;&#039;) .. &#039; &#039; .. title .. &#039;]&#039;&lt;br /&gt;
    elseif urlstatus == &#039;unfit&#039; then&lt;br /&gt;
        link = title&lt;br /&gt;
    else&lt;br /&gt;
        link = &#039;[&#039; .. (args[&#039;url&#039;] or &#039;&#039;) .. &#039; &#039; .. title .. &#039;]&#039;&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(str, wrapLang(link, args[&#039;lang&#039;]))&lt;br /&gt;
&lt;br /&gt;
    -- Подзаголовок&lt;br /&gt;
    if is(args[&#039;subtitle&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;subtitle&#039;])&lt;br /&gt;
        dot = needDot(args[&#039;subtitle&#039;]);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Формат источника&lt;br /&gt;
    if is(args[&#039;format&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;format&#039;] .. &#039;)&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Пометка о недоступности&lt;br /&gt;
    if (urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039;) and not is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str,&lt;br /&gt;
            frame:expandTemplate { title = &#039;refinfo&#039;,&lt;br /&gt;
                args = { &#039;недоступная ссылка&amp;amp;nbsp;— [//web.archive.org/web/*/&#039; ..&lt;br /&gt;
                args[&#039;url&#039;] .. &#039; &amp;lt;i&amp;gt;история&amp;lt;/i&amp;gt;]&#039; } })&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Название сайта или проекта&lt;br /&gt;
    if is(args[&#039;website&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&amp;lt;i&amp;gt;&#039; .. args[&#039;website&#039;] .. &#039;&amp;lt;/i&amp;gt;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Страницы&lt;br /&gt;
    if is(args[&#039;pages&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;pages&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Страница&lt;br /&gt;
    if is(args[&#039;page&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;page&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Место, издательство&lt;br /&gt;
    if is(args[&#039;publisher&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039;);&lt;br /&gt;
        if is(args[&#039;location&#039;]) then&lt;br /&gt;
            table.insert(str, args[&#039;location&#039;] .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(str, args[&#039;publisher&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата&lt;br /&gt;
    if is(args[&#039;date&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;(&#039; .. formatDate(&#039;j xg Y&#039;, args[&#039;date&#039;]) .. &#039;)&#039;)&lt;br /&gt;
    elseif is(args[&#039;year&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        if is(args[&#039;month&#039;]) then&lt;br /&gt;
            table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;month&#039;] .. &#039; &#039; .. args[&#039;year&#039;] .. &#039;)&#039;)&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;year&#039;] .. &#039;)&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Точка&lt;br /&gt;
    insertDot(str, dot)&lt;br /&gt;
&lt;br /&gt;
    -- DOI&lt;br /&gt;
    if is(args[&#039;doi&#039;]) then&lt;br /&gt;
        table.insert(str,&lt;br /&gt;
            &#039;&amp;amp;#32;[[Идентификатор цифрового объекта|doi]]:[http://dx.doi.org/&#039; ..&lt;br /&gt;
            args[&#039;doi&#039;] .. &#039; &#039; .. args[&#039;doi&#039;] .. &#039;].&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Описание&lt;br /&gt;
    if is(args[&#039;description&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;nbsp;— &#039; .. args[&#039;description&#039;])&lt;br /&gt;
        insertDot(str, needDot(args[&#039;description&#039;]))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Цитата&lt;br /&gt;
    if is(args[&#039;quote&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;nbsp;— «&#039; .. args[&#039;quote&#039;] .. &#039;»&#039;)&lt;br /&gt;
        insertDot(str, needDot(args[&#039;quote&#039;]))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата обращения&lt;br /&gt;
    if is(args[&#039;access-date&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;Дата обращения: &#039; ..&lt;br /&gt;
            formatDate(&#039;j xg Y&#039;, args[&#039;access-date&#039;]) .. &#039;.&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата архивирования&lt;br /&gt;
    if is(args[&#039;archive-date&#039;]) and is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        if urlstatus == &#039;live&#039; then&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;[&#039; ..&lt;br /&gt;
                args[&#039;archive-url&#039;] ..&lt;br /&gt;
                &#039; Архивировано] &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        elseif urlstatus == &#039;unfit&#039; then&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;Архивировано &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;Архивировано из [&#039; ..&lt;br /&gt;
                args[&#039;url&#039;] ..&lt;br /&gt;
                &#039; оригинала] &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    wrapCite(str, args);&lt;br /&gt;
&lt;br /&gt;
    if #cats ~= 0 and mw.title.getCurrentTitle():inNamespace(0) then&lt;br /&gt;
        table.insert(str, expandCats(cats));&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(str)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Cite_web&amp;diff=10064</id>
		<title>Шаблон:Cite web</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Cite_web&amp;diff=10064"/>
		<updated>2026-09-16T11:28:04Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Касане тето&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:CiteWeb|render}}{{#invoke:check for unknown parameters|check&lt;br /&gt;
| unknown             = {{#if: {{NAMESPACE}}&lt;br /&gt;
  | [[К:Служебная:Cite web (страницы с неверным параметром)|_VALUE_]]&lt;br /&gt;
  | [[К:Служебная:Cite web (статьи с неверным параметром)|_VALUE_]]&lt;br /&gt;
  }}&lt;br /&gt;
| preview             = В шаблоне «cite web» обнаружен параметр «_VALUE_». [[Шаблон:Cite_web#Описание_параметров|Исправьте или удалите его]].&lt;br /&gt;
| showblankpositional = 1&lt;br /&gt;
| regexp1 = first[%d]*&lt;br /&gt;
| regexp2 = last[%d]*&lt;br /&gt;
| regexp3 = author[%d]*&lt;br /&gt;
| regexp4 = author%-link[%d]*&lt;br /&gt;
| access-date|accessdate|archive-date|archive-url|archivedate|archiveurl|authorlink|coauthors|date|datepublished|dead-url|deadlink|deadurl|description|doi|editor|format|lang|language|location|month|page|pages|publisher|quote|ref|subtitle|title|url|url-status|website|work|year&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;diff=10063</id>
		<title>Модуль:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;diff=10063"/>
		<updated>2026-09-16T11:26:22Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Import Module:CiteWeb from neolurk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Imported from: https://ru.wikipedia.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CiteWeb&amp;amp;oldid=153386077&lt;br /&gt;
-- Modified 09-16-2026: removed lang (not enough time to import properly)&lt;br /&gt;
&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
require(&#039;strict&#039;);&lt;br /&gt;
local boxDate = require(&#039;Module:Calendar&#039;).bxDate;&lt;br /&gt;
&lt;br /&gt;
local error_cats = {&lt;br /&gt;
    [&#039;noname_param&#039;] = &#039;К:Служебная:Cite web (некорректное использование: непустой неименованный параметр)&#039;,&lt;br /&gt;
    [&#039;empty_title&#039;] = &#039;К:Служебная:Cite web (некорректное использование: не указан title)&#039;,&lt;br /&gt;
    [&#039;empty_url&#039;] = &#039;К:Служебная:Cite web (некорректное использование: не указан url)&#039;,&lt;br /&gt;
    [&#039;bad_archive&#039;] = &#039;К:Служебная:Cite web (некорректное использование: параметры архивации)&#039;,&lt;br /&gt;
    [&#039;deadlink&#039;] = &#039;К:Служебная:Cite web (недоступные ссылки без архивной копии)&#039;,&lt;br /&gt;
    -- [&#039;bad_lang&#039;] = &#039;К:Служебная:Cite web (неверный код языка)&#039;,&lt;br /&gt;
    -- [&#039;deadlink_old&#039;] = &#039;К:Служебная:Cite web (устаревшие параметры мёртвых ссылок)&#039;,&lt;br /&gt;
    [&#039;empty_lang&#039;] = &#039;К:Служебная:Cite web (не указан язык)&#039;,&lt;br /&gt;
    [&#039;bad_url&#039;] = &#039;К:Служебная:Cite web (некорректный url)&#039;,&lt;br /&gt;
    [&#039;webcitation_no&#039;] = &#039;К:Служебная:Cite web (заменить webcitation-архив: deadlink no)&#039;,&lt;br /&gt;
    [&#039;webcitation_yes&#039;] = &#039;К:Служебная:Cite web (заменить webcitation-архив: deadlink yes)&#039;,&lt;br /&gt;
}&lt;br /&gt;
local errors = {&lt;br /&gt;
    [&#039;noname_param&#039;] = &#039;{{error|Все параметры шаблона {{tl|cite web}} должны [[T:cite web#Неименованные_параметры|иметь имя]].}}&#039;,&lt;br /&gt;
    [&#039;empty_title&#039;] = &#039;{{error|Необходимо задать параметр {{code|title{{=}}}} в шаблоне {{tl|cite web}}.}}&#039;,&lt;br /&gt;
    [&#039;empty_url&#039;] = &#039;{{error|Необходимо задать параметр {{code|url{{=}}}} в шаблоне {{tl|cite web}}.}}&#039;,&lt;br /&gt;
    [&#039;bad_archive&#039;] = &#039;{{error|Если в шаблоне {{tl|cite web}} задаётся параметр {{code|archive-url{{=}}}}, должен задаваться и параметр {{code|archive-date{{=}}}}, и наоборот.}}&#039;,&lt;br /&gt;
}&lt;br /&gt;
local replace_params = {&lt;br /&gt;
    [&#039;accessdate&#039;] = &#039;access-date&#039;,&lt;br /&gt;
    [&#039;archivedate&#039;] = &#039;archive-date&#039;,&lt;br /&gt;
    [&#039;archiveurl&#039;] = &#039;archive-url&#039;,&lt;br /&gt;
    [&#039;authorlink&#039;] = &#039;author-link1&#039;,&lt;br /&gt;
    [&#039;author-link&#039;] = &#039;author-link1&#039;,&lt;br /&gt;
    [&#039;author&#039;] = &#039;author1&#039;,&lt;br /&gt;
    [&#039;first&#039;] = &#039;first1&#039;,&lt;br /&gt;
    [&#039;last&#039;] = &#039;last1&#039;,&lt;br /&gt;
    [&#039;deadurl&#039;] = &#039;deadlink&#039;,&lt;br /&gt;
    [&#039;dead-url&#039;] = &#039;deadlink&#039;,&lt;br /&gt;
    [&#039;language&#039;] = &#039;lang&#039;,&lt;br /&gt;
    [&#039;datepublished&#039;] = &#039;date&#039;,&lt;br /&gt;
    [&#039;work&#039;] = &#039;website&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- проверка существования переменной. возврат её, или nil если пустая&lt;br /&gt;
local function is(var)&lt;br /&gt;
    if (var == &#039;&#039; or var == nil) then return nil else return var end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- замена устаревших аргументов на их аналоги&lt;br /&gt;
local function prepareArgs(args)&lt;br /&gt;
    local bad_args = {};&lt;br /&gt;
    local new_args = {};&lt;br /&gt;
    for param, value in pairs(args) do&lt;br /&gt;
        if is(replace_params[param]) and not is(args[replace_params[param]]) then&lt;br /&gt;
            param = replace_params[param];&lt;br /&gt;
        end&lt;br /&gt;
        new_args[param] = value;&lt;br /&gt;
    end&lt;br /&gt;
    return new_args, bad_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function insertDot(str, insert)&lt;br /&gt;
    if insert == false then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(str, &#039;.&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function needDot(source_str)&lt;br /&gt;
    if mw.ustring.find(source_str, &#039;[.?!:…]»?$&#039;) ~= nil then&lt;br /&gt;
        return false&lt;br /&gt;
    else&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nowiki(text)&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    return frame:callParserFunction(&#039;#tag&#039;, { &#039;nowiki&#039;, text })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function replace(source_str, pattern, replace)&lt;br /&gt;
    return mw.ustring.gsub(source_str, pattern, replace)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- форматирование даты; в случае ошибки - возврат переданного значения без изменений&lt;br /&gt;
local function formatDate(strFormat, txtDateIn, params)&lt;br /&gt;
    local txtDateOut, date, status = boxDate(txtDateIn, strFormat, params)&lt;br /&gt;
    if status.brk then&lt;br /&gt;
        return txtDateIn&lt;br /&gt;
    else&lt;br /&gt;
        return txtDateOut&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- отрисовка ошибки по коду&lt;br /&gt;
local function expandError(code)&lt;br /&gt;
    return mw.getCurrentFrame():preprocess(errors[code]) .. &#039; &#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- отрисовка всех категорий по их кодам&lt;br /&gt;
local function expandCats(cats)&lt;br /&gt;
    local str = {};&lt;br /&gt;
    local frame = mw.getCurrentFrame();&lt;br /&gt;
    for _, cat in pairs(cats) do&lt;br /&gt;
        table.insert(str, &#039;[[&#039; .. error_cats[cat] .. &#039;]]&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    return frame:preprocess(table.concat(str))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- разделение их&lt;br /&gt;
local function splitBySlash(string)&lt;br /&gt;
    local args = {};&lt;br /&gt;
    local iterator = mw.ustring.gmatch(string, &amp;quot;[^/]+&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for w in iterator do&lt;br /&gt;
        table.insert(args, w)&lt;br /&gt;
    end&lt;br /&gt;
    return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- оборачиваем главную ссылку в span с указанным языком (может быть полезно для rtl)&lt;br /&gt;
local function wrapLang(link, langs)&lt;br /&gt;
    local lang_code = &#039;und&#039;;&lt;br /&gt;
&lt;br /&gt;
    if is(langs) then&lt;br /&gt;
        local args = splitBySlash(langs);&lt;br /&gt;
        if #args ~= 0 then&lt;br /&gt;
            lang_code = args[1];&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return &#039;&amp;lt;span lang=&amp;quot;&#039; .. lang_code .. &#039;&amp;quot;&amp;gt;&#039; .. link .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- обёртка в тег цитирования&lt;br /&gt;
local function wrapCite(str, args)&lt;br /&gt;
    if is(args[&#039;ref&#039;]) then&lt;br /&gt;
        table.insert(str, 1, &#039;&amp;lt;span class=&amp;quot;citation&amp;quot; id=&amp;quot;CITEREF&#039; .. mw.uri.anchorEncode(args[&#039;ref&#039;]) .. &#039;&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
        if is(args[&#039;date&#039;]) then&lt;br /&gt;
            table.insert(str, 2,&lt;br /&gt;
                &#039;&amp;lt;span class=&amp;quot;citation&amp;quot; id=&amp;quot;CITEREF&#039; ..&lt;br /&gt;
                mw.uri.anchorEncode(args[&#039;ref&#039;] .. formatDate(&#039;Y&#039;, args[&#039;date&#039;])) .. &#039;&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
            table.insert(str, &#039;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(str, 1, &#039;&amp;lt;span class=&amp;quot;citation&amp;quot;&amp;gt;&#039;);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.insert(str, &#039;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local str = {}&lt;br /&gt;
    local cats = {}&lt;br /&gt;
&lt;br /&gt;
    local pFrame = frame:getParent();&lt;br /&gt;
    local args = mw.clone(pFrame.args);&lt;br /&gt;
    setmetatable(args, nil);&lt;br /&gt;
&lt;br /&gt;
    args = prepareArgs(args);&lt;br /&gt;
&lt;br /&gt;
    -- Проверки&lt;br /&gt;
    -- Проверка отсутствия неименованных параметров&lt;br /&gt;
    for i = 1, 6 do&lt;br /&gt;
		-- Поиск истинно пустых параметров или заполненных пробелами&lt;br /&gt;
        if is(mw.text.trim(args[i] or &#039;&#039;)) then&lt;br /&gt;
            table.insert(str, expandError(&#039;noname_param&#039;));&lt;br /&gt;
            table.insert(cats, &#039;noname_param&#039;);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка корректности заполнения параметров archive-url и archive-date&lt;br /&gt;
    if (is(args[&#039;archive-date&#039;]) ~= nil and is(args[&#039;archive-url&#039;]) == nil) or&lt;br /&gt;
        (is(args[&#039;archive-date&#039;]) == nil and is(args[&#039;archive-url&#039;]) ~= nil) then&lt;br /&gt;
        table.insert(str, expandError(&#039;bad_archive&#039;));&lt;br /&gt;
        table.insert(cats, &#039;bad_archive&#039;);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка устаревших параметров мёртвых ссылок&lt;br /&gt;
    -- if is(args[&#039;dead-url&#039;]) or is(args[&#039;deadurl&#039;]) then&lt;br /&gt;
    --     table.insert(cats, error_cats[&#039;deadlink_old&#039;])&lt;br /&gt;
    -- end&lt;br /&gt;
&lt;br /&gt;
    local urlstatus = &#039;live&#039;;&lt;br /&gt;
    if args[&#039;url-status&#039;] == &#039;live&#039; or args[&#039;url-status&#039;] == &#039;dead&#039; or args[&#039;url-status&#039;] == &#039;unfit&#039; then&lt;br /&gt;
        urlstatus = args[&#039;url-status&#039;]&lt;br /&gt;
    elseif args[&#039;deadlink&#039;] == &#039;yes&#039; then&lt;br /&gt;
        urlstatus = &#039;dead&#039;&lt;br /&gt;
    elseif args[&#039;deadlink&#039;] == &#039;unfit&#039; then&lt;br /&gt;
        urlstatus = &#039;unfit&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        if mw.ustring.find(args[&#039;archive-url&#039;], &#039;webcitation.org&#039;, 1, true) then&lt;br /&gt;
            if urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039; then&lt;br /&gt;
                table.insert(cats, &#039;webcitation_yes&#039;)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(cats, &#039;webcitation_no&#039;)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    elseif urlstatus == &#039;dead&#039; then&lt;br /&gt;
        table.insert(cats, &#039;deadlink&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка заполнения параметра url&lt;br /&gt;
    if is(args[&#039;url&#039;]) then&lt;br /&gt;
        if mw.ustring.find(args[&#039;url&#039;], &#039;^https?://&#039;, 1, false) ~= 1 and&lt;br /&gt;
            mw.ustring.find(args[&#039;url&#039;], &#039;^ftp://&#039;, 1, false) ~= 1 or mw.ustring.find(args[&#039;url&#039;], &#039; &#039;, 1, true) ~= nil then&lt;br /&gt;
            table.insert(cats, &#039;bad_url&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(str, expandError(&#039;empty_url&#039;));&lt;br /&gt;
        table.insert(cats, &#039;empty_url&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Проверка заполнения параметра title&lt;br /&gt;
    if not is(args[&#039;title&#039;]) then&lt;br /&gt;
        table.insert(str, expandError(&#039;empty_title&#039;));&lt;br /&gt;
        table.insert(cats, &#039;empty_title&#039;)&lt;br /&gt;
    elseif not is(args[&#039;lang&#039;]) and mw.ustring.find(args[&#039;title&#039;], &#039;^[0-9А-яЁёXVILC«»„“:;,…!?•∙→ \194\160\n\226\128\175%(%)%.%&amp;quot;\&#039;—№–%/%|%&amp;amp;%#+-]+$&#039;) == nil then&lt;br /&gt;
        table.insert(cats, &#039;empty_lang&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Формирование вывода&lt;br /&gt;
    -- Авторы&lt;br /&gt;
    local authors_str = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
    	if (string.find( k, &#039;^last%d+&#039; ) or string.find( k, &#039;^author%d+&#039; )) and is(v) then&lt;br /&gt;
    		local i = replace( replace( k, &#039;last&#039;, &#039;&#039; ), &#039;author&#039;, &#039;&#039; )&lt;br /&gt;
    		local author = v;&lt;br /&gt;
    		if #authors_str &amp;gt; 0 then&lt;br /&gt;
	            author = nowiki(&#039;;&#039;) .. &#039;&amp;amp;#32;&#039; .. author;&lt;br /&gt;
			end&lt;br /&gt;
            if is(args[&#039;first&#039; .. i]) then&lt;br /&gt;
                author = author .. &#039;, &#039; .. args[&#039;first&#039; .. i]&lt;br /&gt;
            end&lt;br /&gt;
	        if is(args[&#039;author-link&#039; .. i]) then&lt;br /&gt;
	            table.insert(authors_str, &#039;[[&#039; .. args[&#039;author-link&#039; .. i] .. &#039;|&#039; .. author .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
	        else&lt;br /&gt;
	            table.insert(authors_str, author)&lt;br /&gt;
	        end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if is(args[&#039;coauthors&#039;]) then&lt;br /&gt;
        table.insert(authors_str, nowiki(&#039;;&#039;) .. &#039;&amp;amp;#32;&#039; .. replace(args[&#039;coauthors&#039;], &#039;^(.-)%.?$&#039;, &#039;%1.&#039;) .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
	&lt;br /&gt;
	if #authors_str &amp;gt; 0 then&lt;br /&gt;
	    table.insert(str, &#039;&amp;lt;i&amp;gt;&#039;)&lt;br /&gt;
		for k, v in pairs(authors_str) do&lt;br /&gt;
			table.insert(str, v)&lt;br /&gt;
		end&lt;br /&gt;
		insertDot(str, needDot(str[#str]))&lt;br /&gt;
	    table.insert(str, &#039;&amp;lt;/i&amp;gt;&amp;amp;#32;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- Редактор&lt;br /&gt;
    if is(args[&#039;editor&#039;]) then&lt;br /&gt;
        table.insert(str, &#039; &#039; .. args[&#039;editor&#039;] .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- URL, заголовок&lt;br /&gt;
    local link;&lt;br /&gt;
    local title = replace(replace(args[&#039;title&#039;] or &#039;&#039;, &#039;%[&#039;, &#039;&amp;amp;#91;&#039;), &#039;%]&#039;, &#039;&amp;amp;#93;&#039;);&lt;br /&gt;
    local dot = needDot(title);&lt;br /&gt;
&lt;br /&gt;
    if (urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039;) and is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        link = &#039;[&#039; .. (args[&#039;archive-url&#039;] or &#039;&#039;) .. &#039; &#039; .. title .. &#039;]&#039;&lt;br /&gt;
    elseif urlstatus == &#039;unfit&#039; then&lt;br /&gt;
        link = title&lt;br /&gt;
    else&lt;br /&gt;
        link = &#039;[&#039; .. (args[&#039;url&#039;] or &#039;&#039;) .. &#039; &#039; .. title .. &#039;]&#039;&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(str, wrapLang(link, args[&#039;lang&#039;]))&lt;br /&gt;
&lt;br /&gt;
    -- Подзаголовок&lt;br /&gt;
    if is(args[&#039;subtitle&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;subtitle&#039;])&lt;br /&gt;
        dot = needDot(args[&#039;subtitle&#039;]);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Формат источника&lt;br /&gt;
    if is(args[&#039;format&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;format&#039;] .. &#039;)&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Пометка о недоступности&lt;br /&gt;
    if (urlstatus == &#039;dead&#039; or urlstatus == &#039;unfit&#039;) and not is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str,&lt;br /&gt;
            frame:expandTemplate { title = &#039;refinfo&#039;,&lt;br /&gt;
                args = { &#039;недоступная ссылка&amp;amp;nbsp;— [//web.archive.org/web/*/&#039; ..&lt;br /&gt;
                args[&#039;url&#039;] .. &#039; &amp;lt;i&amp;gt;история&amp;lt;/i&amp;gt;]&#039; } })&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Название сайта или проекта&lt;br /&gt;
    if is(args[&#039;website&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&amp;lt;i&amp;gt;&#039; .. args[&#039;website&#039;] .. &#039;&amp;lt;/i&amp;gt;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Страницы&lt;br /&gt;
    if is(args[&#039;pages&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;pages&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Страница&lt;br /&gt;
    if is(args[&#039;page&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039; .. args[&#039;page&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Место, издательство&lt;br /&gt;
    if is(args[&#039;publisher&#039;]) then&lt;br /&gt;
        insertDot(str, dot)&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;&#039;);&lt;br /&gt;
        if is(args[&#039;location&#039;]) then&lt;br /&gt;
            table.insert(str, args[&#039;location&#039;] .. &#039;:&amp;amp;#32;&#039;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(str, args[&#039;publisher&#039;])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата&lt;br /&gt;
    if is(args[&#039;date&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;(&#039; .. formatDate(&#039;j xg Y&#039;, args[&#039;date&#039;]) .. &#039;)&#039;)&lt;br /&gt;
    elseif is(args[&#039;year&#039;]) then&lt;br /&gt;
        dot = true;&lt;br /&gt;
        if is(args[&#039;month&#039;]) then&lt;br /&gt;
            table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;month&#039;] .. &#039; &#039; .. args[&#039;year&#039;] .. &#039;)&#039;)&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(str, &#039;&amp;amp;#32;(&#039; .. args[&#039;year&#039;] .. &#039;)&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Точка&lt;br /&gt;
    insertDot(str, dot)&lt;br /&gt;
&lt;br /&gt;
    -- DOI&lt;br /&gt;
    if is(args[&#039;doi&#039;]) then&lt;br /&gt;
        table.insert(str,&lt;br /&gt;
            &#039;&amp;amp;#32;[[Идентификатор цифрового объекта|doi]]:[http://dx.doi.org/&#039; ..&lt;br /&gt;
            args[&#039;doi&#039;] .. &#039; &#039; .. args[&#039;doi&#039;] .. &#039;].&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Описание&lt;br /&gt;
    if is(args[&#039;description&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;nbsp;— &#039; .. args[&#039;description&#039;])&lt;br /&gt;
        insertDot(str, needDot(args[&#039;description&#039;]))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Цитата&lt;br /&gt;
    if is(args[&#039;quote&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;nbsp;— «&#039; .. args[&#039;quote&#039;] .. &#039;»&#039;)&lt;br /&gt;
        insertDot(str, needDot(args[&#039;quote&#039;]))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата обращения&lt;br /&gt;
    if is(args[&#039;access-date&#039;]) then&lt;br /&gt;
        table.insert(str, &#039;&amp;amp;#32;Дата обращения: &#039; ..&lt;br /&gt;
            formatDate(&#039;j xg Y&#039;, args[&#039;access-date&#039;]) .. &#039;.&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Дата архивирования&lt;br /&gt;
    if is(args[&#039;archive-date&#039;]) and is(args[&#039;archive-url&#039;]) then&lt;br /&gt;
        if urlstatus == &#039;live&#039; then&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;[&#039; ..&lt;br /&gt;
                args[&#039;archive-url&#039;] ..&lt;br /&gt;
                &#039; Архивировано] &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        elseif urlstatus == &#039;unfit&#039; then&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;Архивировано &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(str,&lt;br /&gt;
                &#039;&amp;amp;#32;Архивировано из [&#039; ..&lt;br /&gt;
                args[&#039;url&#039;] ..&lt;br /&gt;
                &#039; оригинала] &#039; ..&lt;br /&gt;
                formatDate(&#039;j xg Y&#039;, args[&#039;archive-date&#039;]) .. &#039; года.&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    wrapCite(str, args);&lt;br /&gt;
&lt;br /&gt;
    if #cats ~= 0 and mw.title.getCurrentTitle():inNamespace(0) then&lt;br /&gt;
        table.insert(str, expandCats(cats));&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(str)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&amp;diff=10062</id>
		<title>Модуль:Calendar</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&amp;diff=10062"/>
		<updated>2026-09-16T11:23:08Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Import Module:Calendar from neolurk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Imported from: https://ru.wikipedia.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Calendar&amp;amp;oldid=154357263&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
-- Необходимые модули и переменные&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local mwlang = mw.getContentLanguage()&lt;br /&gt;
local err = &amp;quot;―&amp;quot; -- NthDay nil result&lt;br /&gt;
local tCon = table.concat&lt;br /&gt;
&lt;br /&gt;
-- Блок многократно используемых списков&lt;br /&gt;
local bool_to_number={ [true]=1, [false]=0 }&lt;br /&gt;
local monthlang = {&amp;quot;января&amp;quot;,&amp;quot;февраля&amp;quot;,&amp;quot;марта&amp;quot;,&amp;quot;апреля&amp;quot;,&amp;quot;мая&amp;quot;,&amp;quot;июня&amp;quot;,&amp;quot;июля&amp;quot;,&amp;quot;августа&amp;quot;,&amp;quot;сентября&amp;quot;,&amp;quot;октября&amp;quot;,&amp;quot;ноября&amp;quot;,&amp;quot;декабря&amp;quot;}&lt;br /&gt;
local month_to_num = {[&amp;quot;января&amp;quot;]=1,[&amp;quot;февраля&amp;quot;]=2,[&amp;quot;марта&amp;quot;]=3,[&amp;quot;апреля&amp;quot;]=4,[&amp;quot;мая&amp;quot;]=5,[&amp;quot;июня&amp;quot;]=6,&lt;br /&gt;
	[&amp;quot;июля&amp;quot;]=7,[&amp;quot;августа&amp;quot;]=8,[&amp;quot;сентября&amp;quot;]=9,[&amp;quot;октября&amp;quot;]=10,[&amp;quot;ноября&amp;quot;]=11,[&amp;quot;декабря&amp;quot;]=12,[&amp;quot;-&amp;quot;]=&amp;quot;&amp;quot;}&lt;br /&gt;
local monthd = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}&lt;br /&gt;
local params = { {&amp;quot;г&amp;quot;, &amp;quot;g&amp;quot;}, {&amp;quot;ю&amp;quot;, &amp;quot;j&amp;quot;}}&lt;br /&gt;
local comment = { &#039;&amp;lt;span style=&amp;quot;border-bottom: 1px dotted; cursor: help&amp;quot; title=&amp;quot;по юлианскому календарю&amp;quot;&amp;gt;&#039;,&#039;&amp;lt;/span&amp;gt;&#039;}&lt;br /&gt;
&lt;br /&gt;
-- duplicates:&lt;br /&gt;
-- AST, BST, CST, ECT, IST, MST, PST, SST, &lt;br /&gt;
local known_tzs = {&lt;br /&gt;
   ACDT=&#039;+10:30&#039;, ACST=&#039;+09:30&#039;, ACT =&#039;+08:00&#039;, ADT  =&#039;-03:00&#039;, AEDT =&#039;+11:00&#039;,&lt;br /&gt;
   AEST=&#039;+10:00&#039;, AFT =&#039;+04:30&#039;, AKDT=&#039;-08:00&#039;, AKST =&#039;-09:00&#039;, AMST =&#039;+05:00&#039;,&lt;br /&gt;
   AMT =&#039;+04:00&#039;, ART =&#039;-03:00&#039;, AST =&#039;+03:00&#039;, AST  =&#039;+04:00&#039;, AST  =&#039;+03:00&#039;,&lt;br /&gt;
   AST =&#039;-04:00&#039;, AWDT=&#039;+09:00&#039;, AWST=&#039;+08:00&#039;, AZOST=&#039;-01:00&#039;, AZT  =&#039;+04:00&#039;,&lt;br /&gt;
   BDT =&#039;+08:00&#039;, BIOT=&#039;+06:00&#039;, BIT =&#039;-12:00&#039;, BOT  =&#039;-04:00&#039;, BRT  =&#039;-03:00&#039;,&lt;br /&gt;
   BST =&#039;+06:00&#039;, BST =&#039;+01:00&#039;, BTT =&#039;+06:00&#039;, CAT  =&#039;+02:00&#039;, CCT  =&#039;+06:30&#039;,&lt;br /&gt;
   CDT =&#039;-05:00&#039;, CEDT=&#039;+02:00&#039;, CEST=&#039;+02:00&#039;, CET  =&#039;+01:00&#039;, CHAST=&#039;+12:45&#039;,&lt;br /&gt;
   CIST=&#039;-08:00&#039;, CKT =&#039;-10:00&#039;, CLST=&#039;-03:00&#039;, CLT  =&#039;-04:00&#039;, COST =&#039;-04:00&#039;,&lt;br /&gt;
   COT =&#039;-05:00&#039;, CST =&#039;-06:00&#039;, CST =&#039;+08:00&#039;, CVT  =&#039;-01:00&#039;, CXT  =&#039;+07:00&#039;,&lt;br /&gt;
   CHST=&#039;+10:00&#039;, DFT =&#039;+01:00&#039;, EAST=&#039;-06:00&#039;, EAT  =&#039;+03:00&#039;, ECT  =&#039;-04:00&#039;,&lt;br /&gt;
   ECT =&#039;-05:00&#039;, EDT =&#039;-04:00&#039;, EEDT=&#039;+03:00&#039;, EEST =&#039;+03:00&#039;, EET  =&#039;+02:00&#039;,&lt;br /&gt;
   EST =&#039;-05:00&#039;, FJT =&#039;+12:00&#039;, FKST=&#039;-03:00&#039;, FKT  =&#039;-04:00&#039;, GALT =&#039;-06:00&#039;,&lt;br /&gt;
   GET =&#039;+04:00&#039;, GFT =&#039;-03:00&#039;, GILT=&#039;+12:00&#039;, GIT  =&#039;-09:00&#039;, GMT  =&#039;+00:00&#039;,&lt;br /&gt;
   GST =&#039;-02:00&#039;, GYT =&#039;-04:00&#039;, HADT=&#039;-09:00&#039;, HAST =&#039;-10:00&#039;, HKT  =&#039;+08:00&#039;,&lt;br /&gt;
   HMT =&#039;+05:00&#039;, HST =&#039;-10:00&#039;, IRKT=&#039;+08:00&#039;, IRST =&#039;+03:30&#039;, IST  =&#039;+05:30&#039;,&lt;br /&gt;
   IST =&#039;+01:00&#039;, IST =&#039;+02:00&#039;, JST =&#039;+09:00&#039;, KRAT =&#039;+07:00&#039;, KST  =&#039;+09:00&#039;,&lt;br /&gt;
   LHST=&#039;+10:30&#039;, LINT=&#039;+14:00&#039;, MAGT=&#039;+11:00&#039;, MDT  =&#039;-06:00&#039;, MIT  =&#039;-09:30&#039;,&lt;br /&gt;
   MSD =&#039;+04:00&#039;, MSK =&#039;+03:00&#039;, MST =&#039;+08:00&#039;, MST  =&#039;-07:00&#039;, MST  =&#039;+06:30&#039;,&lt;br /&gt;
   MUT =&#039;+04:00&#039;, NDT =&#039;-02:30&#039;, NFT =&#039;+11:30&#039;, NPT  =&#039;+05:45&#039;, NST  =&#039;-03:30&#039;,&lt;br /&gt;
   NT  =&#039;-03:30&#039;, OMST=&#039;+06:00&#039;, PDT =&#039;-07:00&#039;, PETT =&#039;+12:00&#039;, PHOT =&#039;+13:00&#039;,&lt;br /&gt;
   PKT =&#039;+05:00&#039;, PST =&#039;-08:00&#039;, PST =&#039;+08:00&#039;, RET  =&#039;+04:00&#039;, SAMT =&#039;+04:00&#039;,&lt;br /&gt;
   SAST=&#039;+02:00&#039;, SBT =&#039;+11:00&#039;, SCT =&#039;+04:00&#039;, SLT  =&#039;+05:30&#039;, SST  =&#039;-11:00&#039;,&lt;br /&gt;
   SST =&#039;+08:00&#039;, TAHT=&#039;-10:00&#039;, THA =&#039;+07:00&#039;, UTC  =&#039;+00:00&#039;, UYST =&#039;-02:00&#039;,&lt;br /&gt;
   UYT =&#039;-03:00&#039;, VET =&#039;-04:30&#039;, VLAT=&#039;+10:00&#039;, WAT  =&#039;+01:00&#039;, WEDT =&#039;+01:00&#039;,&lt;br /&gt;
   WEST=&#039;+01:00&#039;, WET =&#039;+00:00&#039;, YAKT=&#039;+09:00&#039;, YEKT =&#039;+05:00&#039;,&lt;br /&gt;
   -- US Millitary (for RFC-822)&lt;br /&gt;
   Z=&#039;+00:00&#039;, A=&#039;-01:00&#039;, M=&#039;-12:00&#039;, N=&#039;+01:00&#039;, Y=&#039;+12:00&#039;,&lt;br /&gt;
   -- российское обозначение&lt;br /&gt;
   [&amp;quot;МСК&amp;quot;]=&#039;+03:00&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- имена по конвенции [[:Категория:Служебная:Статьи по типам недостатков]]:&lt;br /&gt;
-- «ошибочная работа» — результат выдать не удалось; «неполные или некорректные&lt;br /&gt;
-- параметры» — результат выдан, но параметры пришлось восстанавливать эвристиками&lt;br /&gt;
local cat_erroneous  = &amp;quot;[[Категория:Служебная:Статьи с ошибочной работой Модуль:Calendar]]&amp;quot;&lt;br /&gt;
local cat_incomplete = &amp;quot;[[Категория:Служебная:Статьи с неполными или некорректными параметрами Модуль:Calendar]]&amp;quot;&lt;br /&gt;
local category = {&lt;br /&gt;
	[&amp;quot;no_parameters&amp;quot;]         = cat_erroneous,&lt;br /&gt;
	[&amp;quot;incomplete_parameters&amp;quot;] = cat_incomplete,&lt;br /&gt;
	[&amp;quot;without_verification&amp;quot;]  = cat_incomplete,&lt;br /&gt;
	[&amp;quot;erroneous_parameters&amp;quot;]  = cat_erroneous,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- несколько параметров передаются вместе с кодом ошибки в таблице, один может быть передан простым значением&lt;br /&gt;
local e = {&lt;br /&gt;
	[&amp;quot;start&amp;quot;]=&amp;quot;&amp;lt;span class=error&amp;gt;Ошибка: &amp;quot;,&lt;br /&gt;
	[&amp;quot;ending&amp;quot;]=&amp;quot;.&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
	[&amp;quot;no_pattern_match&amp;quot;]=&amp;quot;строка «%s» не совпадает с заданными паттернами&amp;quot;,&lt;br /&gt;
	[&amp;quot;no_valid_date&amp;quot;]=&amp;quot;дата «%s» не является корректной&amp;quot;,&lt;br /&gt;
	[&amp;quot;wrong_jd&amp;quot;]=&amp;quot;юлианская дата %s вне диапазона&amp;quot;,&lt;br /&gt;
	[&amp;quot;no_data&amp;quot;]=&amp;quot;нет входящих данных&amp;quot;,&lt;br /&gt;
	[&amp;quot;too_many_arguments&amp;quot;]=&amp;quot;ожидается менее %i аргументов&amp;quot;,&lt;br /&gt;
	[&amp;quot;too_little_arguments&amp;quot;]=&amp;quot;ожидается более %i аргументов&amp;quot;,&lt;br /&gt;
	[&amp;quot;wrong_calculation&amp;quot;]=&amp;quot;даты %s и %s не прошли проверку, %s дней разница&amp;quot;,&lt;br /&gt;
	[&amp;quot;unknown_param&amp;quot;]=&amp;quot;параметр %s неизвестен&amp;quot;,&lt;br /&gt;
	[&amp;quot;unknown_error&amp;quot;]=&amp;quot;неизвестная ошибка&amp;quot;,&lt;br /&gt;
	[&amp;quot;tech_error&amp;quot;]=&amp;quot;ошибка в функции %s&amp;quot;,&lt;br /&gt;
	[&amp;quot;box_date&amp;quot;]=&amp;quot;строка «%s» не является верной датой, пожалуйста, укажите дату в формате ГГГГ-ММ-ДД&amp;quot;&lt;br /&gt;
--	[&amp;quot;&amp;quot;]=&amp;quot;&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local pattern = { -- для распознавания дат, переданных одним строчным параметром&lt;br /&gt;
	{&amp;quot;(-?%d%d%d%d?)[-%.%s/\\](%d%d)[-%.%s/\\](%d%d)&amp;quot;,  	[&amp;quot;order&amp;quot;] = {3,2,1} },  -- yyyy mm dd&lt;br /&gt;
	{&amp;quot;(%d+)[-%.%s/\\](%d+)[-%.%s/\\](%d%d%d%d?)&amp;quot;,	[&amp;quot;order&amp;quot;] = {1,2,3} }, 		-- dd mm yyyy&lt;br /&gt;
	{&amp;quot;(%d%d)[-%.%s/\\](%d%d%d%d?)&amp;quot;, [&amp;quot;order&amp;quot;] = {2,3} }, 	-- mm yyyy&lt;br /&gt;
	{&amp;quot;(%d%d%d%d?)[-%.%s/\\](%d%d)&amp;quot;, [&amp;quot;order&amp;quot;] = {3,2} }, 	-- yyyy mm&lt;br /&gt;
	{&amp;quot;(%d+)%s(%l+)%s(%d%d%d%d?)&amp;quot;, 	[&amp;quot;order&amp;quot;] = {1,2,3} }, 	-- d mmm y&lt;br /&gt;
	{&amp;quot;(%l+)%s(%d+),?%s(%d%d%d%d?)&amp;quot;, [&amp;quot;order&amp;quot;] = {2,1,3} }, 	-- mmm d, y&lt;br /&gt;
	{&amp;quot;(%l+)%s(%d%d%d%d?)&amp;quot;, 	[&amp;quot;order&amp;quot;] = {2,3} }, 			-- mmm y&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local time_units = {&amp;quot;year&amp;quot;,&amp;quot;month&amp;quot;,&amp;quot;day&amp;quot;} --не используется&lt;br /&gt;
--[[ local time_units = {&amp;quot;second&amp;quot;, &amp;quot;minute&amp;quot;, &amp;quot;hour&amp;quot;,&lt;br /&gt;
    &amp;quot;day_of_month&amp;quot;, &amp;quot;day_of_week&amp;quot;, &amp;quot;day_of_year&amp;quot;,&lt;br /&gt;
    &amp;quot;week&amp;quot;, &amp;quot;month&amp;quot;, &amp;quot;year&amp;quot;, &amp;quot;year_of_century&amp;quot;, &amp;quot;century&amp;quot;} ]]--&lt;br /&gt;
-- напоминание чтобы сделать более точные пересчёты - с часами / расчёт длительностей периодов&lt;br /&gt;
&lt;br /&gt;
local mnlang = {&amp;quot;ru_G&amp;quot;, &amp;quot;ru_N&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en_S&amp;quot;, &amp;quot;de&amp;quot;, &amp;quot;fr&amp;quot;}&lt;br /&gt;
local month_lang = {&lt;br /&gt;
	[&amp;quot;ru_G&amp;quot;] = {&amp;quot;января&amp;quot;,&amp;quot;февраля&amp;quot;,&amp;quot;марта&amp;quot;,&amp;quot;апреля&amp;quot;,&amp;quot;мая&amp;quot;,&amp;quot;июня&amp;quot;,&lt;br /&gt;
		&amp;quot;июля&amp;quot;,&amp;quot;августа&amp;quot;,&amp;quot;сентября&amp;quot;,&amp;quot;октября&amp;quot;,&amp;quot;ноября&amp;quot;,&amp;quot;декабря&amp;quot;},&lt;br /&gt;
	[&amp;quot;ru_N&amp;quot;] = {&amp;quot;январь&amp;quot;,&amp;quot;февраль&amp;quot;,&amp;quot;март&amp;quot;,&amp;quot;апрель&amp;quot;,&amp;quot;май&amp;quot;,&amp;quot;июнь&amp;quot;,&lt;br /&gt;
		&amp;quot;июль&amp;quot;,&amp;quot;август&amp;quot;,&amp;quot;сентябрь&amp;quot;,&amp;quot;октябрь&amp;quot;,&amp;quot;ноябрь&amp;quot;,&amp;quot;декабрь&amp;quot;},&lt;br /&gt;
	[&amp;quot;en&amp;quot;] = {&amp;quot;january&amp;quot;, &amp;quot;february&amp;quot;, &amp;quot;march&amp;quot;, &amp;quot;april&amp;quot;, &amp;quot;may&amp;quot;, &amp;quot;june&amp;quot;,&lt;br /&gt;
		&amp;quot;july&amp;quot;, &amp;quot;august&amp;quot;, &amp;quot;september&amp;quot;, &amp;quot;october&amp;quot;, &amp;quot;november&amp;quot;, &amp;quot;december&amp;quot;},&lt;br /&gt;
	[&amp;quot;en_S&amp;quot;] = {&amp;quot;jan&amp;quot;, &amp;quot;feb&amp;quot;, &amp;quot;mar&amp;quot;, &amp;quot;apr&amp;quot;, &amp;quot;may&amp;quot;, &amp;quot;jun&amp;quot;,&lt;br /&gt;
		&amp;quot;jul&amp;quot;, &amp;quot;aug&amp;quot;, &amp;quot;sep&amp;quot;, &amp;quot;oct&amp;quot;, &amp;quot;nov&amp;quot;, &amp;quot;dec&amp;quot;},&lt;br /&gt;
	[&amp;quot;de&amp;quot;] = {&amp;quot;januar&amp;quot;, &amp;quot;februar&amp;quot;, &amp;quot;märz&amp;quot;, &amp;quot;april&amp;quot;, &amp;quot;mai&amp;quot;, &amp;quot;juni&amp;quot;,&lt;br /&gt;
		&amp;quot;juli&amp;quot;, &amp;quot;august&amp;quot;, &amp;quot;september&amp;quot;, &amp;quot;oktober&amp;quot;, &amp;quot;november&amp;quot;, &amp;quot;dezember&amp;quot;},&lt;br /&gt;
	[&amp;quot;fr&amp;quot;] = {&amp;quot;janvier&amp;quot;, &amp;quot;février&amp;quot;, &amp;quot;mars&amp;quot;, &amp;quot;avril&amp;quot;, &amp;quot;mai&amp;quot;, &amp;quot;juin&amp;quot;,&lt;br /&gt;
		&amp;quot;juillet&amp;quot;, &amp;quot;août&amp;quot;, &amp;quot;septembre&amp;quot;, &amp;quot;octobre&amp;quot;, &amp;quot;novembre&amp;quot;, &amp;quot;décembre&amp;quot;}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
-- заполняется автоматически&lt;br /&gt;
local reverse_month_lang = {}&lt;br /&gt;
&lt;br /&gt;
-- вспомогательная функция для обращения таблиц (смена ключей со значениями)&lt;br /&gt;
local reverse_table = function (strait_table)&lt;br /&gt;
	local reversed_table = {}&lt;br /&gt;
	for k,v in pairs(strait_table) do&lt;br /&gt;
		reversed_table[v] = k&lt;br /&gt;
	end&lt;br /&gt;
	return reversed_table&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- запуск цикла по заполнению обратных таблиц, необходимых для распознавания дат&lt;br /&gt;
local filling_months = function (mnlang, month_lang)&lt;br /&gt;
	for i=1, #mnlang do&lt;br /&gt;
		reverse_month_lang[mnlang[i]] = reverse_table(month_lang[mnlang[i]])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Блок общих функций&lt;br /&gt;
local function trim(str)&lt;br /&gt;
	if not str then return nil&lt;br /&gt;
	else return str:match&#039;^()%s*$&#039; and &#039;&#039; or str:match&#039;^%s*(.*%S)&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function purif(str)&lt;br /&gt;
    if str == &amp;quot;&amp;quot; or str == nil then&lt;br /&gt;
        return nil&lt;br /&gt;
    elseif type(tonumber(str)) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(tonumber(str))&lt;br /&gt;
    else&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    -- need .5 -- ,5 number format converter?&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is(str)&lt;br /&gt;
	if (not str) or (str == &amp;quot;&amp;quot;) then return false&lt;br /&gt;
	else return yesno(str,false)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function init(num)&lt;br /&gt;
	local output = {}&lt;br /&gt;
	for i=1,num do&lt;br /&gt;
		table.insert(output, {[&amp;quot;year&amp;quot;]=&amp;quot;&amp;quot;, [&amp;quot;month&amp;quot;]=&amp;quot;&amp;quot;, [&amp;quot;day&amp;quot;]=&amp;quot;&amp;quot;})&lt;br /&gt;
	end&lt;br /&gt;
	return unpack(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isyear(tbl)&lt;br /&gt;
	if type(tbl) ~= &#039;table&#039; then return false&lt;br /&gt;
	elseif not tbl[&amp;quot;year&amp;quot;] then return false&lt;br /&gt;
	elseif type(tbl[&amp;quot;year&amp;quot;]) == &#039;number&#039; then return true&lt;br /&gt;
	else return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function inbord(val, down, up)&lt;br /&gt;
	return not (type(up) ~= &amp;quot;number&amp;quot; or type(down) ~= &amp;quot;number&amp;quot; or type(val) ~= &amp;quot;number&amp;quot; or up &amp;lt; down or val &amp;lt; down or val &amp;gt; up)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function shallowcopy(orig)&lt;br /&gt;
    local orig_type = type(orig)&lt;br /&gt;
    local copy&lt;br /&gt;
    if orig_type == &#039;table&#039; then&lt;br /&gt;
        copy = {}&lt;br /&gt;
        for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
            copy[orig_key] = orig_value&lt;br /&gt;
        end&lt;br /&gt;
    else -- number, string, boolean, etc&lt;br /&gt;
        copy = orig&lt;br /&gt;
    end&lt;br /&gt;
    return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inlist = function ( var, list )&lt;br /&gt;
    local n = #list&lt;br /&gt;
	local inlist = false&lt;br /&gt;
	for i=1,n do&lt;br /&gt;
		if var == list[i] then inlist = true end&lt;br /&gt;
	end&lt;br /&gt;
    return inlist&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Блок общих проверочных функций, связанных с датами&lt;br /&gt;
local function unwarp(tbl)&lt;br /&gt;
	if not tbl then return &amp;quot;&amp;quot;&lt;br /&gt;
	elseif type(tbl) ~= &amp;quot;table&amp;quot; then return tbl&lt;br /&gt;
	elseif (tbl.day or tbl.month or tbl.year) then&lt;br /&gt;
		return (tbl.year or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(tbl.month or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(tbl.day or &amp;quot;?&amp;quot;)&lt;br /&gt;
	else return (tbl[3] or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(tbl[2] or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(tbl[1] or &amp;quot;?&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function leap_year(y,jul)&lt;br /&gt;
	if (not y) or (type(y) ~= &amp;quot;number&amp;quot;)&lt;br /&gt;
		then return false&lt;br /&gt;
	elseif (y % 4) ~= 0&lt;br /&gt;
		then return false&lt;br /&gt;
	elseif not jul and (y % 100 == 0 and y % 400 ~= 0)&lt;br /&gt;
		then return false&lt;br /&gt;
	else return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- функция для вычисления последнего дня месяца для юлианского и григорианского календарей&lt;br /&gt;
local function month_end_day (month,year,is_julian)&lt;br /&gt;
	local month_end_day = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- если не задан год, дата 29 февраля считается допустимой&lt;br /&gt;
	if not month or type(month) ~= &amp;quot;number&amp;quot; or month &amp;lt; 1 or month &amp;gt; 12 then return nil&lt;br /&gt;
	elseif month ~= 2 or not year then return month_end_day[month] &lt;br /&gt;
	elseif month == 2 and (year % 4) == 0 and not ((not is_julian) and (year % 100 == 0 and year % 400 ~= 0)) then return 29&lt;br /&gt;
	elseif month == 2 then return 28&lt;br /&gt;
	else return nil -- в случае не целого значения входящих параметров или при иных непредусмотренных событиях&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isdate ( chain , jul ) -- можно использовать для проверки таблиц с полями day, month, year&lt;br /&gt;
	if not chain then return false&lt;br /&gt;
	elseif (not type(chain) == &amp;quot;table&amp;quot;)&lt;br /&gt;
	or (not inbord(chain.year,-9999,9999))&lt;br /&gt;
	or (not inbord(chain.month,1,12))&lt;br /&gt;
	or (not inbord(chain.day,1,31))&lt;br /&gt;
	or chain.day &amp;gt; monthd[chain.month]&lt;br /&gt;
--	or chain.year == 0&lt;br /&gt;
	then return false&lt;br /&gt;
	elseif chain.month == 2 and chain.day == 29 and not leap_year(chain.year,jul)&lt;br /&gt;
		then return false&lt;br /&gt;
	else return true end&lt;br /&gt;
--  check for other calendars needed?&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ispartdate ( chain )&lt;br /&gt;
	if not chain then return false&lt;br /&gt;
	elseif not (type(chain) == &amp;quot;table&amp;quot;) then return false&lt;br /&gt;
	elseif (inbord(chain.year,-9999,9999)&lt;br /&gt;
	or inbord(chain.month,1,12)&lt;br /&gt;
	or inbord(chain.day,1,31)) then return true&lt;br /&gt;
	else return false&lt;br /&gt;
	end&lt;br /&gt;
--	partial date&lt;br /&gt;
--  more detailed check for 31.02.0000 needed&lt;br /&gt;
--  check for other calendars needed&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- from date1 to date2 in one year (beetwen jan-dec, dec-jan needed)&lt;br /&gt;
local function partdist(date1,date2)&lt;br /&gt;
	local mont, dist = 0, 0&lt;br /&gt;
	local d1d, d1m, d2d, d2m = (date1[&amp;quot;day&amp;quot;] or &amp;quot;&amp;quot;), (date1[&amp;quot;month&amp;quot;] or &amp;quot;&amp;quot;),(date2[&amp;quot;day&amp;quot;] or &amp;quot;&amp;quot;), (date2[&amp;quot;month&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
	if not (inbord(d1d,1,31) and inbord(d2d,1,31)) then return false end&lt;br /&gt;
	-- нужна доп. проверка частичных дат на корректность&lt;br /&gt;
	if (inbord(d1m,1,12) or inbord(d2m,1,12))&lt;br /&gt;
	and (d1m == &amp;quot;&amp;quot; or d2m == &amp;quot;&amp;quot;) then&lt;br /&gt;
		mont = purif(date1[&amp;quot;month&amp;quot;] or date2[&amp;quot;month&amp;quot;])&lt;br /&gt;
		d1m, d2m = mont, mont&lt;br /&gt;
	end&lt;br /&gt;
--	mw.log(&amp;quot;📏 day: &amp;quot; ..d1d ..&amp;quot;-&amp;gt;&amp;quot;..d2d..&amp;quot; month: &amp;quot;.. d1m..&amp;quot;-&amp;gt;&amp;quot;..d2m )&lt;br /&gt;
	if (inbord(d1m,1,12) and d1d &amp;lt;= monthd[d1m])&lt;br /&gt;
	and (inbord(d2m,1,12) and d2d &amp;lt;= monthd[d2m])	then &lt;br /&gt;
		if d2m == d1m &lt;br /&gt;
		then dist = d2d - d1d&lt;br /&gt;
		else dist = monthd[d1m] - d1d + d2d&lt;br /&gt;
		end&lt;br /&gt;
		return dist&lt;br /&gt;
	else return math.huge&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dmdist(d1,d2)&lt;br /&gt;
	local p1,p2 = math.huge,math.huge&lt;br /&gt;
	if not not partdist(d1,d2) then &lt;br /&gt;
		p1=partdist(d1,d2)&lt;br /&gt;
	end&lt;br /&gt;
	if not not partdist(d2,d1) then &lt;br /&gt;
		p1=partdist(d2,d1)&lt;br /&gt;
	end&lt;br /&gt;
--	if (not p1) or (not p2) then&lt;br /&gt;
--		return  (p1 or &amp;quot;&amp;quot;) .. (p2 or &amp;quot;&amp;quot;)&lt;br /&gt;
--	else&lt;br /&gt;
--		mw.log(&amp;quot;d1, d2 = &amp;quot; .. undate(d1) .. &amp;quot;, &amp;quot; .. undate(d2))&lt;br /&gt;
		return math.min(tonumber(partdist(d1,d2)) or math.huge,tonumber(partdist(d2,d1)) or math.huge)&lt;br /&gt;
--	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Блок функций для обработки ввода-вывода дат&lt;br /&gt;
&lt;br /&gt;
local function undate(tbl)&lt;br /&gt;
	if not tbl then return &amp;quot;&amp;quot;&lt;br /&gt;
	else return (tbl.year or &amp;quot;&amp;quot;)..&amp;quot;-&amp;quot;..(tbl.month or &amp;quot;&amp;quot;)..&amp;quot;-&amp;quot;..(tbl.day or &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- функция для нормализации значений дат и перевода месяцев в числа&lt;br /&gt;
local function numerize(str)&lt;br /&gt;
    if type(str) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(str)&lt;br /&gt;
	elseif str == &amp;quot;&amp;quot; or str == nil or type(str) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
    elseif type(tonumber(str)) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(tonumber(str))&lt;br /&gt;
    else&lt;br /&gt;
    	for i=1, #mnlang do&lt;br /&gt;
    		if inlist(mw.ustring.lower(str),month_lang[mnlang[i]]) then&lt;br /&gt;
				return reverse_month_lang[mnlang[i]][mw.ustring.lower(str)]&lt;br /&gt;
			end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- функция распознавания даты, переданной одной строкой&lt;br /&gt;
local function parse_date(date_string)&lt;br /&gt;
	if type(date_string) ~= &amp;quot;string&amp;quot; or date_string == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
	local out_date_str = {&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;}&lt;br /&gt;
	local error_data = {}&lt;br /&gt;
	for i=1, #pattern do&lt;br /&gt;
		local result_1, result_2, result_3 = mw.ustring.match(mw.ustring.lower(date_string),pattern[i][1])&lt;br /&gt;
		if (result_1 or &amp;quot;&amp;quot;) &amp;gt; &amp;quot;&amp;quot; then&lt;br /&gt;
			out_date_str[pattern[i].order[1]] = result_1&lt;br /&gt;
    		out_date_str[pattern[i].order[2]] = result_2&lt;br /&gt;
    		if (pattern[i].order[3]) then out_date_str[pattern[i].order[3]] = result_3 end&lt;br /&gt;
    	--	mw.log(&amp;quot;Паттерн &amp;quot; .. i .. &amp;quot;, строка: &amp;quot; .. date_string)&lt;br /&gt;
    		break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local date = {&lt;br /&gt;
		[&amp;quot;day&amp;quot;]  =numerize(out_date_str[1]),&lt;br /&gt;
		[&amp;quot;month&amp;quot;]=numerize(out_date_str[2]),&lt;br /&gt;
		[&amp;quot;year&amp;quot;] =numerize(out_date_str[3])}&lt;br /&gt;
	return date --, error_data&lt;br /&gt;
end&lt;br /&gt;
-- DEPRECATED&lt;br /&gt;
local numstr2date = function(numstr)&lt;br /&gt;
	local format = &amp;quot;Y-m-d&amp;quot;&lt;br /&gt;
	local iso_date = mwlang:formatDate(format,numstr)&lt;br /&gt;
    local y,m,d = string.match(iso_date, &amp;quot;(%d+)-(%d+)-(%d+)&amp;quot;)&lt;br /&gt;
	local dateout = {[&amp;quot;year&amp;quot;]=purif(y), [&amp;quot;month&amp;quot;]=purif(m), [&amp;quot;day&amp;quot;]=purif(d)}&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
--local numstr2date = function(numstr)&lt;br /&gt;
--	local nums = {}&lt;br /&gt;
--    local dateout = {}&lt;br /&gt;
--    for num in string.gmatch(numstr,&amp;quot;(%d+)&amp;quot;) do&lt;br /&gt;
--        table.insert(nums,purif(num))&lt;br /&gt;
--    end&lt;br /&gt;
--    if #nums ~= 3 then error(&amp;quot;В поле даты вместо трёх чисел с разделителями указано &amp;quot; .. #nums)&lt;br /&gt;
--    elseif not inbord(nums[2],1,12) then error(&amp;quot;Месяц с номером &amp;quot; .. nums[2] .. &amp;quot; не найден&amp;quot;)&lt;br /&gt;
--    elseif not inbord(nums[3],1,31) then&lt;br /&gt;
--        dateout = {[&amp;quot;year&amp;quot;]=nums[3], [&amp;quot;month&amp;quot;]=nums[2], [&amp;quot;day&amp;quot;]=nums[1]}&lt;br /&gt;
--    elseif not inbord(nums[1],1,31) then&lt;br /&gt;
--        dateout = {[&amp;quot;year&amp;quot;]=nums[1], [&amp;quot;month&amp;quot;]=nums[2], [&amp;quot;day&amp;quot;]=nums[3]}&lt;br /&gt;
--    elseif inbord(nums[1],1,31) then&lt;br /&gt;
--        dateout = {[&amp;quot;year&amp;quot;]=nums[3], [&amp;quot;month&amp;quot;]=nums[2], [&amp;quot;day&amp;quot;]=nums[1]}&lt;br /&gt;
--    else&lt;br /&gt;
--		local mwlang = mw.getContentLanguage()&lt;br /&gt;
--		implement mwlang:formatDate(format,datein,true) here&lt;br /&gt;
--        return error(&amp;quot;Не распознано &amp;quot; .. numstr .. &amp;quot; как дата&amp;quot;)&lt;br /&gt;
--    end&lt;br /&gt;
--    return dateout&lt;br /&gt;
--end&lt;br /&gt;
&lt;br /&gt;
local function year2lang(numyear,yearmark,wiki)&lt;br /&gt;
	if not numyear then return &amp;quot;&amp;quot; end&lt;br /&gt;
	if not yearmark then yearmark = &amp;quot;&amp;quot; end&lt;br /&gt;
	local output = &amp;quot;&amp;quot;&lt;br /&gt;
	local bcmark = &amp;quot; до н. э.&amp;quot;&lt;br /&gt;
	if numyear &amp;gt; 0 then	bcmark = &amp;quot;&amp;quot;&lt;br /&gt;
	else numyear = 1 - numyear end&lt;br /&gt;
	if wiki then &lt;br /&gt;
--		output = tCon({&#039;[[&#039;, numyear,&#039; год&#039;,bcmark,&#039;|&#039;, numyear,&#039;]]&#039;, &amp;quot; &amp;quot;, yearmark, &amp;quot; &amp;quot;, bcmark})&lt;br /&gt;
		output = tCon({&#039;[[&#039;, numyear,&#039; год&#039;,bcmark,&#039;|&#039;, trim(numyear .. &amp;quot; &amp;quot; .. yearmark .. &amp;quot; &amp;quot; .. bcmark), &#039;]]&#039;})&lt;br /&gt;
	else&lt;br /&gt;
		output = tCon({numyear, &amp;quot; &amp;quot;, yearmark, bcmark})&lt;br /&gt;
	end&lt;br /&gt;
	return trim(output)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
-- prefix — текст перед днём внутри подписи ссылки (открывающая скобка при inner_brt)&lt;br /&gt;
local function day2lang(datein,wikidate,wiki,inner_brt,prefix)&lt;br /&gt;
--	if not isdate(wikidate) then wiki = false end&lt;br /&gt;
	if not ispartdate(datein) then return &amp;quot;&amp;quot; end&lt;br /&gt;
	local dm_separ, output = &amp;quot;&amp;quot;, nil&lt;br /&gt;
	if (not (not datein.day)) and (not (not datein.month)) then dm_separ = &amp;quot; &amp;quot; end&lt;br /&gt;
	if (not datein.month) then datein.month = &amp;quot;&amp;quot; end&lt;br /&gt;
	if (not datein.day) then datein.day = &amp;quot;&amp;quot; end&lt;br /&gt;
	if not prefix then prefix = &amp;quot;&amp;quot; end&lt;br /&gt;
	local monlan = monthlang[datein.month] or &amp;quot;&amp;quot;&lt;br /&gt;
	if wiki and not inner_brt then&lt;br /&gt;
		output = tCon({&amp;quot;[[&amp;quot;, wikidate.day, &amp;quot; &amp;quot;, monthlang[wikidate.month] or &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;|&amp;quot;, prefix, (datein.day or &amp;quot;&amp;quot;), dm_separ, monlan, &amp;quot;]]&amp;quot;})&lt;br /&gt;
	elseif wiki then&lt;br /&gt;
		output = tCon({&amp;quot;[[&amp;quot;, wikidate.day, &amp;quot; &amp;quot;, monthlang[wikidate.month] or &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;|&amp;quot;, prefix, (datein.day or &amp;quot;&amp;quot;), dm_separ, monlan})&lt;br /&gt;
	else&lt;br /&gt;
		output = tCon({prefix, datein.day, dm_separ, monlan})&lt;br /&gt;
	end&lt;br /&gt;
    return trim(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function triple_txt2date(d,m,y)&lt;br /&gt;
	-- добавить (args[1]:match(&amp;quot;(%a+)&amp;quot;) or &amp;quot;-&amp;quot;) для нестандартной записи&lt;br /&gt;
	-- mw.ustring.match((m or &amp;quot;&amp;quot;),&amp;quot;(%a+)&amp;quot;)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	local year = purif((y or &amp;quot;-&amp;quot;):match(&amp;quot;(%d+)&amp;quot;))&lt;br /&gt;
	local month = purif(month_to_num[string.lower(mw.ustring.match((m or &amp;quot;&amp;quot;),&amp;quot;(%a+)&amp;quot;))])&lt;br /&gt;
	local day = purif((d or &amp;quot;-&amp;quot;):match(&amp;quot;(%d+)&amp;quot;))&lt;br /&gt;
	if not month then &lt;br /&gt;
		msg = category.incomplete_parameters&lt;br /&gt;
		month = purif(month_to_num[string.lower(mw.ustring.match((d or &amp;quot;&amp;quot;),&amp;quot;(%a+)&amp;quot;) or &amp;quot;-&amp;quot;)]) &lt;br /&gt;
	end&lt;br /&gt;
	if (not day) and ((purif(string.match(m or &amp;quot;&amp;quot;,&amp;quot;(%d+)&amp;quot;) or &amp;quot;&amp;quot;) or 32) &amp;lt;= (monthd[month] or 31)) then &lt;br /&gt;
		msg = category.incomplete_parameters&lt;br /&gt;
		day = purif(m:match(&amp;quot;(%d+)&amp;quot;) or &amp;quot;&amp;quot;) &lt;br /&gt;
	end&lt;br /&gt;
	if not year then &lt;br /&gt;
		msg = category.incomplete_parameters&lt;br /&gt;
		year = purif(string.match(m or &amp;quot;&amp;quot;,&amp;quot;(%d+)&amp;quot;) or &amp;quot;&amp;quot;) &lt;br /&gt;
	end&lt;br /&gt;
	local dateout = {[&amp;quot;year&amp;quot;]=year, [&amp;quot;month&amp;quot;]=month, [&amp;quot;day&amp;quot;]=day, [&amp;quot;msg&amp;quot;]=msg}&lt;br /&gt;
	return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function glue(d1,m1,y1,d2,m2,y2)&lt;br /&gt;
	if (not d1) and (not m1) and (not y1) and (not d2) and (not m2) and (not y2) then&lt;br /&gt;
		return category.incomplete_parameters end&lt;br /&gt;
	local gd,gm,gy,jd,jm,jy = &lt;br /&gt;
		(d1 or &amp;quot;&amp;quot;),&lt;br /&gt;
		(m1 or &amp;quot;&amp;quot;),&lt;br /&gt;
		(y1 or &amp;quot;&amp;quot;),&lt;br /&gt;
		(d2 or &amp;quot;&amp;quot;),&lt;br /&gt;
		(m2 or &amp;quot;&amp;quot;),&lt;br /&gt;
		(y2 or &amp;quot;&amp;quot;)&lt;br /&gt;
	--mw.log(tCon({gd,gm,gy,jd,jm,jy}))&lt;br /&gt;
	local gm_sep = {&amp;quot; [[&amp;quot;,&amp;quot; год|&amp;quot;,&amp;quot;]]&amp;quot;}&lt;br /&gt;
	if (not gy) or (gy == &amp;quot;&amp;quot;) then gm_sep = {&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;} end&lt;br /&gt;
	return tCon({comment[1],trim(trim(jd .. &amp;quot; &amp;quot; .. jm) .. &amp;quot; &amp;quot; .. jy ),&lt;br /&gt;
		comment[2],&amp;quot; ([[&amp;quot;,trim(gd .. &amp;quot; &amp;quot; .. gm),&amp;quot;]]&amp;quot;,gm_sep[1],(gy:match(&amp;quot;(%d+)&amp;quot;) or &amp;quot;&amp;quot;),&lt;br /&gt;
		gm_sep[2],gy,gm_sep[3],&amp;quot;)&amp;quot;,category.incomplete_parameters})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- добавить отображение без года&lt;br /&gt;
local function double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	msg = (jdate.msg or &amp;quot;&amp;quot;) .. (gdate.msg or &amp;quot;&amp;quot;)&lt;br /&gt;
	local cd = {}&lt;br /&gt;
	local jd = shallowcopy(jdate)&lt;br /&gt;
	local gd = shallowcopy(gdate)&lt;br /&gt;
	local left = &amp;quot;(&amp;quot;&lt;br /&gt;
	local right = &amp;quot;)&amp;quot;&lt;br /&gt;
	if sq_brts then &lt;br /&gt;
		left = &amp;quot;&amp;amp;#091;&amp;quot;&lt;br /&gt;
		right = &amp;quot;&amp;amp;#093;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if (not isdate(jdate,true)) then return error((jdate.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (jdate.month or &amp;quot;&amp;quot;) ..&amp;quot;.&amp;quot; .. (jdate.year or &amp;quot;&amp;quot;) .. &amp;quot; неподходящая дата&amp;quot;)&lt;br /&gt;
	elseif (not isdate(gdate)) then return error((gdate.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (gdate.month or &amp;quot;&amp;quot;) ..&amp;quot;.&amp;quot; .. (gdate.year or &amp;quot;&amp;quot;) .. &amp;quot; неподходящая дата&amp;quot;) end&lt;br /&gt;
	if jd.year == gd.year then&lt;br /&gt;
		cd.year = gd.year&lt;br /&gt;
		gd.year, jd.year = nil, nil&lt;br /&gt;
	end&lt;br /&gt;
	if jd.month == gd.month then&lt;br /&gt;
		cd.month = gd.month&lt;br /&gt;
		gd.month, jd.month = nil, nil&lt;br /&gt;
	end	&lt;br /&gt;
	if (not not cd.month) and wm then&lt;br /&gt;
		-- ссылка тут сквозная (закрывается после общего месяца), поэтому открывающая&lt;br /&gt;
		-- скобка уходит внутрь подписи: [[21 февраля|(21) февраля]], а не ([[21 февраля|21) февраля]]&lt;br /&gt;
		local gday = day2lang(gd,gdate,wd,wm,left)&lt;br /&gt;
		if gday == &amp;quot;&amp;quot; then gday = left end&lt;br /&gt;
		return tCon({comment[1] .. trim(day2lang(jd,jdate,false) .. &amp;quot; &amp;quot; .. year2lang(jd.year,yearmark,false)) .. comment[2],&lt;br /&gt;
		trim(gday .. &amp;quot; &amp;quot; .. year2lang(gd.year,yearmark,wy)) .. right,&lt;br /&gt;
		day2lang(cd,gdate,false) .. &amp;quot;]]&amp;quot;, trim(year2lang(cd.year,yearmark,wy)..msg)}, &amp;quot; &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return tCon({comment[1] .. trim(day2lang(jd,jdate,false) .. &amp;quot; &amp;quot; .. year2lang(jd.year,yearmark,false)) .. comment[2], &lt;br /&gt;
		trim(left .. day2lang(gd,gdate,wd) .. &amp;quot; &amp;quot; .. year2lang(gd.year,yearmark,wy)) .. right, &lt;br /&gt;
		trim(day2lang(cd,gdate,false)), trim(year2lang(cd.year,yearmark,wy)..msg)}, &amp;quot; &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Блок функций для перевода дат с использованием [[Юлианская дата]]&lt;br /&gt;
&lt;br /&gt;
local function gri2jd( datein )&lt;br /&gt;
	if not isdate(datein) then return error((datein.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (datein.month or &amp;quot;&amp;quot;) ..&amp;quot;.&amp;quot; .. (datein.year or &amp;quot;&amp;quot;) .. &amp;quot; неподходящая дата&amp;quot;) end&lt;br /&gt;
    local year = datein.year&lt;br /&gt;
    local month = datein.month&lt;br /&gt;
    local day = datein.day&lt;br /&gt;
    -- jd calculation&lt;br /&gt;
    local a = math.floor((14 - month)/12)&lt;br /&gt;
    local y = year + 4800 - a&lt;br /&gt;
    local m = month + 12*a - 3&lt;br /&gt;
    local offset = math.floor(y/4) - math.floor(y/100) + math.floor(y/400) - 32045&lt;br /&gt;
    local jd = day + math.floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
    -- jd validation&lt;br /&gt;
    local low, high = -1931076.5, 5373557.49999&lt;br /&gt;
    if not (low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
        return error((datein.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (datein.month or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (datein.year or &amp;quot;&amp;quot;) .. &amp;quot; выходит за пределы разрешённого диапазона&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
	return jd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jd2jul( jd )&lt;br /&gt;
	if type(jd) ~= &amp;quot;number&amp;quot; then return error(&amp;quot;Промежуточная переменная &amp;quot; .. (jd or &amp;quot;&amp;quot;) .. &amp;quot; не является числом&amp;quot;) end&lt;br /&gt;
    -- calendar date calculation&lt;br /&gt;
    local c = jd + 32082&lt;br /&gt;
    local d = math.floor((4*c + 3)/1461)&lt;br /&gt;
    local e = c - math.floor(1461*d/4)&lt;br /&gt;
    local m = math.floor((5*e + 2)/153)&lt;br /&gt;
    local year_out = d - 4800 + math.floor(m/10)&lt;br /&gt;
    local month_out = m + 3 - 12*math.floor(m/10)&lt;br /&gt;
    local day_out = e - math.floor((153*m + 2)/5) + 1&lt;br /&gt;
    -- output&lt;br /&gt;
    local dateout = {[&amp;quot;year&amp;quot;]=year_out, [&amp;quot;month&amp;quot;]=month_out, [&amp;quot;day&amp;quot;]=day_out}&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jul2jd( datein )&lt;br /&gt;
	if not isdate(datein,true) then return error((datein.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (datein.month or &amp;quot;&amp;quot;) ..&amp;quot;.&amp;quot;.. (datein.year or &amp;quot;&amp;quot;) .. &amp;quot; неподходящая дата&amp;quot;) end&lt;br /&gt;
    local year = datein.year&lt;br /&gt;
    local month = datein.month&lt;br /&gt;
    local day = datein.day&lt;br /&gt;
    -- jd calculation&lt;br /&gt;
    local a = math.floor((14 - month)/12)&lt;br /&gt;
    local y = year + 4800 - a&lt;br /&gt;
    local m = month + 12*a - 3&lt;br /&gt;
    local offset = math.floor(y/4) - 32083&lt;br /&gt;
    local jd = day + math.floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
    -- jd validation&lt;br /&gt;
    local low, high = -1930999.5, 5373484.49999&lt;br /&gt;
    if not (low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
        return error((datein.day or &amp;quot;&amp;quot;) .. &amp;quot;.&amp;quot; .. (datein.month or &amp;quot;&amp;quot;) ..&amp;quot;.&amp;quot; .. (datein.year or &amp;quot;&amp;quot;) .. &amp;quot; выходит за пределы разрешённого диапазона&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
	return jd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jd2gri( jd )&lt;br /&gt;
	if type(jd) ~= &amp;quot;number&amp;quot; then return error(&amp;quot;Промежуточная переменная &amp;quot; .. (jd or &amp;quot;&amp;quot;) .. &amp;quot; не является числом&amp;quot;) end&lt;br /&gt;
    -- calendar date calculation&lt;br /&gt;
    local a = jd + 32044&lt;br /&gt;
    local b = math.floor((4*a + 3) / 146097)&lt;br /&gt;
    local c = a - math.floor(146097*b/4)&lt;br /&gt;
    local d = math.floor((4*c+3)/1461)&lt;br /&gt;
    local e = c - math.floor(1461*d/4)&lt;br /&gt;
    local m = math.floor((5*e+2)/153)&lt;br /&gt;
    local day_out =  e - math.floor((153*m+2)/5)+1&lt;br /&gt;
    local month_out = m + 3 - 12*math.floor(m/10)&lt;br /&gt;
    local year_out = 100*b + d - 4800 + math.floor(m/10)&lt;br /&gt;
    -- output&lt;br /&gt;
    local dateout = {[&amp;quot;year&amp;quot;]=year_out, [&amp;quot;month&amp;quot;]=month_out, [&amp;quot;day&amp;quot;]=day_out}&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function astroyear(num, bc)&lt;br /&gt;
	if not num then return error()&lt;br /&gt;
	elseif type(num) ~= &amp;quot;number&amp;quot; then return error()&lt;br /&gt;
	end&lt;br /&gt;
	if num &amp;lt; 1 then return num end&lt;br /&gt;
	if not bc then return num&lt;br /&gt;
	else return 1 - num&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function recalc(datein,calend)&lt;br /&gt;
	if inlist(calend,params[1]) then &lt;br /&gt;
		return jd2jul(gri2jd(datein)), datein&lt;br /&gt;
   	elseif inlist(calend,params[2]) then&lt;br /&gt;
		return datein, jd2gri(jul2jd(datein))&lt;br /&gt;
   	else error(&amp;quot;Параметр &amp;quot; .. (calend or &amp;quot;&amp;quot;) .. &amp;quot; не опознан, разрешённые: &amp;quot; .. tCon(params[1],&amp;quot; &amp;quot;) .. &amp;quot; и &amp;quot; .. tCon(params[2],&amp;quot; &amp;quot;))&lt;br /&gt;
   	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Функции для обработки UTC&lt;br /&gt;
&lt;br /&gt;
local function utc(str,margin)&lt;br /&gt;
	local d = 1&lt;br /&gt;
	local dchar = &amp;quot;+&amp;quot;&lt;br /&gt;
	local beginning = &amp;quot;[[UTC&amp;quot;&lt;br /&gt;
	local ending = &amp;quot;]]&amp;quot;&lt;br /&gt;
	local cat = &amp;quot;&amp;quot;&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	local hmarg, timedec = 0, 0&lt;br /&gt;
	local mmarg = &amp;quot;00&amp;quot;&lt;br /&gt;
	local output = &amp;quot;&amp;quot;&lt;br /&gt;
-- checking type of input&lt;br /&gt;
	if not margin then margin = 0&lt;br /&gt;
	elseif type(tonumber(margin)) ~= &#039;number&#039; then&lt;br /&gt;
		output = &amp;quot;Can&#039;t shift by &amp;quot; .. margin&lt;br /&gt;
		error(output)&lt;br /&gt;
	end&lt;br /&gt;
	if type(str) ~= &#039;string&#039; then&lt;br /&gt;
		error(&amp;quot;Нет входящей строки&amp;quot;)&lt;br /&gt;
	elseif str:byte(1) == 43 then&lt;br /&gt;
	elseif inbord(str:byte(1),48,57) then cat = &amp;quot;[[Категория:Википедия:Ошибка в часовом поясе НП]]&amp;quot;&lt;br /&gt;
	elseif str:byte(1) == 45 or string.sub(str,1,3) == &amp;quot;−&amp;quot; or string.sub(str,1,1)==&amp;quot;-&amp;quot; then d = -1&lt;br /&gt;
	else&lt;br /&gt;
		error(string.char(str:byte(1)) .. &amp;quot; недопустимый первый символ&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
-- parsing input&lt;br /&gt;
	for num in string.gmatch(str,&amp;quot;(%d+)&amp;quot;) do&lt;br /&gt;
        table.insert(nums,purif(num))&lt;br /&gt;
    end&lt;br /&gt;
	if #nums &amp;gt; 2 then error(&amp;quot;Ожидается всего 2 числа, а не &amp;quot; .. #nums)&lt;br /&gt;
	elseif #nums == 0 then error(&amp;quot;Необходимо что-то ввести&amp;quot;)&lt;br /&gt;
	elseif #nums == 1 then&lt;br /&gt;
		if inbord(nums[1],0,14) then timedec = d*nums[1] + margin&lt;br /&gt;
		else error(&amp;quot;Только часы от -14 до 14&amp;quot;) end&lt;br /&gt;
	elseif #nums == 2 then&lt;br /&gt;
		if not inbord(nums[1],0,14) then error(&amp;quot;Только часы от -14 до 14&amp;quot;)&lt;br /&gt;
		elseif not inbord(nums[2],0,59) then error(&amp;quot;Минуты только от 0 до 59&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			timedec = d*(nums[1] + nums[2]/60) + margin&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(timedec) == purif(timedec) then hmarg = timedec&lt;br /&gt;
	else&lt;br /&gt;
		local h, m = math.modf(math.abs(timedec))&lt;br /&gt;
		hmarg = h&lt;br /&gt;
		mmarg = math.floor(m*60 + 0.5)   -- без +0.5 «+4:35» давало 4:34: m*60 = 34.999…&lt;br /&gt;
	end&lt;br /&gt;
	if timedec == 0 then&lt;br /&gt;
		dchar = &amp;quot;±&amp;quot;&lt;br /&gt;
	elseif timedec &amp;gt; 0 then&lt;br /&gt;
	elseif timedec &amp;lt; 0 then&lt;br /&gt;
		dchar = &amp;quot;&amp;amp;minus;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
-- output&lt;br /&gt;
	output = beginning .. dchar .. math.abs(hmarg) .. &amp;quot;:&amp;quot; .. string.format(&amp;quot;%02d&amp;quot;,mmarg) .. ending .. cat&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Блок функций ввода-вывода&lt;br /&gt;
&lt;br /&gt;
function p.NthDay( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local num, wday, mont, yea, format = &lt;br /&gt;
    	purif(args[1]), purif(args[2]), purif(args[3]), purif(args[4]), args[5]&lt;br /&gt;
	if not format then format = &amp;quot;%d.%m.%y&amp;quot; end&lt;br /&gt;
    if not inbord(num,-5,5) then &lt;br /&gt;
    	return e.start .. &amp;quot;The number must be between -5 and 5&amp;quot; .. e.ending .. category.erroneous_parameters&lt;br /&gt;
    elseif num == 0 then &lt;br /&gt;
    	return e.start .. &amp;quot;The number must not be zero&amp;quot; .. e.ending .. category.erroneous_parameters end&lt;br /&gt;
    if not inbord(wday,0,6) then &lt;br /&gt;
    	return e.start .. &amp;quot;The day of the week must be between 0 and 6&amp;quot; .. e.ending .. category.erroneous_parameters end&lt;br /&gt;
    if not inbord(mont,1,12) then &lt;br /&gt;
    	return e.start .. &amp;quot;The month must be between 1 and 12&amp;quot; .. e.ending .. category.erroneous_parameters end&lt;br /&gt;
    if not inbord(yea,0,9999) then &lt;br /&gt;
    	return e.start .. &amp;quot;Wrong year number&amp;quot; .. e.ending .. category.erroneous_parameters end&lt;br /&gt;
    if inbord(num,1,5) then&lt;br /&gt;
        local m_start = os.time{year=yea, month=mont, day=1, hour=0}&lt;br /&gt;
        local m_wds = tonumber(os.date(&amp;quot;%w&amp;quot;, m_start)) &lt;br /&gt;
        local start_shift = (&lt;br /&gt;
            (num - bool_to_number[wday &amp;gt;= m_wds]) * 7 &lt;br /&gt;
            - (m_wds - wday)&lt;br /&gt;
            ) * 24 * 60 * 60&lt;br /&gt;
        local tim = m_start + start_shift&lt;br /&gt;
        if tonumber(os.date(&amp;quot;%m&amp;quot;, tim)) == mont then&lt;br /&gt;
            return (os.date(format, tim))&lt;br /&gt;
        else&lt;br /&gt;
            return (err)&lt;br /&gt;
        end&lt;br /&gt;
    elseif inbord(num,-5,-1) then&lt;br /&gt;
        local m_end = os.time{year = yea, month = mont + 1, day = 1, hour = 0} - 24 * 60 * 60&lt;br /&gt;
        local m_wde = tonumber(os.date(&amp;quot;%w&amp;quot;, m_end))&lt;br /&gt;
        local end_shift = ((math.abs(num + 1) + bool_to_number[wday &amp;gt; m_wde]) * 7 &lt;br /&gt;
            + (m_wde - wday)) * 24 * 60 * 60&lt;br /&gt;
        local tim = m_end - end_shift&lt;br /&gt;
        if tonumber(os.date(&amp;quot;%m&amp;quot;, tim)) == mont then&lt;br /&gt;
            return (os.date(format, tim))&lt;br /&gt;
        else&lt;br /&gt;
            return (err)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.ToIso(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;12 декабря 2020&amp;quot;}})&lt;br /&gt;
-- =p.ToIso(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;1.2.1602&amp;quot;}})&lt;br /&gt;
-- =p.ToIso(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;12.12.2021&amp;quot;}})&lt;br /&gt;
-- =p.ToIso(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;2021.12.12&amp;quot;}})&lt;br /&gt;
function p.ToIso( frame ) &lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local datein = args[1]&lt;br /&gt;
    -- инициализация, заполнение обратных таблиц, копирование параметров&lt;br /&gt;
	filling_months(mnlang, month_lang)&lt;br /&gt;
    -- парсинг входящей даты по шаблону&lt;br /&gt;
    local date = parse_date(datein)&lt;br /&gt;
    if not (type(date.year) == &#039;number&#039;) then &lt;br /&gt;
        return (&amp;quot;Wrong year: &amp;quot; .. unwarp(date))&lt;br /&gt;
    end&lt;br /&gt;
    if not (1 &amp;lt;= date.month and date.month &amp;lt;= 12) then &lt;br /&gt;
        return (&amp;quot;Wrong month: &amp;quot; .. unwarp(date))&lt;br /&gt;
    end&lt;br /&gt;
    if not date.day or not (1 &amp;lt;= date.day and date.day &amp;lt;= month_end_day(date.month,date.year)) then &lt;br /&gt;
        return (&amp;quot;Wrong day: &amp;quot; .. unwarp(date))&lt;br /&gt;
    end&lt;br /&gt;
    local timedate = os.time{year=date.year, month=date.month, day=date.day}&lt;br /&gt;
    local date = os.date(&amp;quot;%Y-%m-%d&amp;quot;, timedate)&lt;br /&gt;
    return date&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;12 декабря 2020&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;1.2.1602&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;декабрь 2020&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;12-2020&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;12.12.2021&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;2021.12.12&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;2021.11&amp;quot;}})&lt;br /&gt;
-- =p.BoxDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;11.2021&amp;quot;}})&lt;br /&gt;
function p.BoxDate( frame ) &lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local txtDateIn, strFormat  = args[1], args[2]&lt;br /&gt;
    local txtDateOut, date, status = p.bxDate(txtDateIn, strFormat, params)&lt;br /&gt;
	if status.brk then&lt;br /&gt;
		return e.start .. status.errorText .. e.ending .. (status.errorCat or &amp;quot;&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return txtDateOut&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.bxDate( txtDateIn , strFormat, params )&lt;br /&gt;
	local txtDateOut, date, status = &amp;quot;&amp;quot;, {}, {brk = false, errorCat = &amp;quot;&amp;quot;, errorText = &amp;quot;&amp;quot;}&lt;br /&gt;
	strFormat = strFormat or &amp;quot;j xg Y&amp;quot;&lt;br /&gt;
	-- заглушка - таблица параметров на будущее&lt;br /&gt;
	params = params or {}&lt;br /&gt;
	if not txtDateIn then &lt;br /&gt;
		status.errorText = e.no_data&lt;br /&gt;
		status.errorCat = category.no_parameters&lt;br /&gt;
		status.brk = true&lt;br /&gt;
	else&lt;br /&gt;
		-- заполнение служебных таблиц&lt;br /&gt;
		filling_months(mnlang, month_lang)&lt;br /&gt;
	end&lt;br /&gt;
	if not status.brk then&lt;br /&gt;
		-- парсинг входящей даты по шаблону&lt;br /&gt;
		date = parse_date(txtDateIn)&lt;br /&gt;
	    -- заменить сообщения об ошибках на списочные&lt;br /&gt;
	    if not (date.year and type(date.year) == &#039;number&#039;) then &lt;br /&gt;
	    	status.errorText = string.format(e.box_date,txtDateIn)&lt;br /&gt;
	    	status.errorCat = category.incomplete_parameters&lt;br /&gt;
	    	status.brk = true&lt;br /&gt;
	    end&lt;br /&gt;
	    if not inbord(date.month,1,12) then &lt;br /&gt;
	    	status.errorText = string.format(e.box_date,txtDateIn)&lt;br /&gt;
	    	status.errorCat = category.incomplete_parameters&lt;br /&gt;
	    	status.brk = true&lt;br /&gt;
	    end&lt;br /&gt;
	    if not date.day and string.find(strFormat,&amp;quot;[dDjlNwzW]&amp;quot;) then&lt;br /&gt;
	    	strFormat = trim(string.gsub(string.gsub(strFormat,&amp;quot;xg&amp;quot;,&amp;quot;F&amp;quot;),&amp;quot;[dDjlNwzW]&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
	    elseif not date.day then&lt;br /&gt;
	    elseif not inbord(date.day,1,month_end_day(date.month,date.year)) then &lt;br /&gt;
	    	status.errorText = string.format(e.box_date,txtDateIn)&lt;br /&gt;
	    	status.errorCat = category.incomplete_parameters&lt;br /&gt;
	    	status.brk = true&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	if not status.brk then&lt;br /&gt;
		txtDateOut = mwlang:formatDate(strFormat,tCon({date.year,date.month,date.day},&amp;quot;-&amp;quot;),true)&lt;br /&gt;
	end&lt;br /&gt;
    return txtDateOut, date, status&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ToDate( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local mwlang = mw.getContentLanguage()&lt;br /&gt;
    local datein = args[1]&lt;br /&gt;
    local format = &amp;quot;j xg Y&amp;quot;&lt;br /&gt;
    if not string.match(datein, &amp;quot;%p&amp;quot;) then return datein&lt;br /&gt;
    elseif not args[2] then&lt;br /&gt;
    else format = args[2]&lt;br /&gt;
    end&lt;br /&gt;
    return mwlang:formatDate(format,datein,true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.unitime(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;−1:30&amp;quot;,&amp;quot;1&amp;quot;}})&lt;br /&gt;
&lt;br /&gt;
-- ── Разбор пользовательской записи часового пояса ────────────────────────────&lt;br /&gt;
&lt;br /&gt;
-- Признак того, что в строке зашито второе значение (зимнее/летнее) или&lt;br /&gt;
-- диапазон: такую строку разбирать нельзя — потеряется половина смысла.&lt;br /&gt;
local function has_second_value(tail)&lt;br /&gt;
	if tail == &#039;&#039; then return false end&lt;br /&gt;
	local t = mw.ustring.lower(tail)&lt;br /&gt;
	return mw.ustring.find(t, &#039;[+±−%-]%s*%d&#039;) ~= nil&lt;br /&gt;
		or mw.ustring.find(t, &#039;лет[а-яё]&#039;) ~= nil&lt;br /&gt;
		or mw.ustring.find(t, &#039;зим[а-яё]&#039;) ~= nil&lt;br /&gt;
		or mw.ustring.find(t, &#039;dst&#039;) ~= nil&lt;br /&gt;
		or mw.ustring.find(t, &#039;summer&#039;) ~= nil&lt;br /&gt;
		or mw.ustring.find(t, &#039;winter&#039;) ~= nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Минуты из записи «часы&amp;lt;разделитель&amp;gt;дробь».&lt;br /&gt;
-- «:30» — канон; «.30» и «,30» — те же 30 минут; «.5» и «,5» — половина часа.&lt;br /&gt;
-- Второе возвращаемое значение — признак того, что применена эвристика.&lt;br /&gt;
local function minutes_from(sep, frac)&lt;br /&gt;
	if frac == &#039;&#039; then return 0, false end&lt;br /&gt;
	local n = tonumber(frac)&lt;br /&gt;
	if sep == &#039;:&#039; then return n, false end&lt;br /&gt;
	if mw.ustring.len(frac) == 2 and n &amp;lt;= 59 then return n, true end&lt;br /&gt;
	return math.floor(tonumber(&#039;0.&#039; .. frac) * 60 + 0.5), true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Приводит вход к каноническому «±H:MM» для utc(), отдельно возвращая&lt;br /&gt;
-- неразобранный хвост строки и признак применённой эвристики.&lt;br /&gt;
-- Первое значение nil — разбор не удался.&lt;br /&gt;
local function split_tz(input)&lt;br /&gt;
	local abbr = known_tzs[mw.ustring.upper(input)]&lt;br /&gt;
	if abbr then return abbr, &#039;&#039;, false end&lt;br /&gt;
	local letters, sign, hh, sep, mm, tail = mw.ustring.match(&lt;br /&gt;
		input, &#039;^(%a*)%s*([+±−%-]?)%s*(%d+)([:%.,]?)(%d*)(.-)%s*$&#039;)&lt;br /&gt;
	if not hh then return nil end&lt;br /&gt;
	if letters ~= &#039;&#039; and mw.ustring.upper(letters) ~= &#039;UTC&#039; then return nil end&lt;br /&gt;
	if sep ~= &#039;&#039; and mm == &#039;&#039; then return nil end          -- «+3:» — обрубок&lt;br /&gt;
	if has_second_value(tail) then return nil end&lt;br /&gt;
	local minutes, guessed = minutes_from(sep, mm)&lt;br /&gt;
	if minutes &amp;gt; 59 then return nil end&lt;br /&gt;
	if sign == &#039;&#039; or sign == &#039;±&#039; then sign = &#039;+&#039; end&lt;br /&gt;
	return sign .. hh .. &#039;:&#039; .. string.format(&#039;%02d&#039;, minutes), tail,&lt;br /&gt;
		guessed or tail ~= &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.unitime( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local DST = 0&lt;br /&gt;
    if args[2] then DST = 1 end&lt;br /&gt;
    local input = trim(args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
    if input == &amp;quot;&amp;quot; then return &amp;quot;&amp;quot; end&lt;br /&gt;
    -- уже оформленное (вики-ссылка или шаблон) возвращается как есть&lt;br /&gt;
    if string.sub(input,1,1) == &#039;[&#039; or string.sub(input,1,1) == &#039;{&#039; then&lt;br /&gt;
        return input&lt;br /&gt;
    end&lt;br /&gt;
    local utcin, tail, heuristic = split_tz(input)&lt;br /&gt;
    if not utcin then&lt;br /&gt;
        -- не распознано: вернуть как есть, пометить категорией&lt;br /&gt;
        return input .. category.erroneous_parameters&lt;br /&gt;
    end&lt;br /&gt;
    local ok, output&lt;br /&gt;
    if DST == 0 then&lt;br /&gt;
    	ok, output = pcall(function() return utc(utcin) .. tail end)&lt;br /&gt;
    else&lt;br /&gt;
    	ok, output = pcall(function()&lt;br /&gt;
    		return utc(utcin) .. tail .. &amp;quot;, [[летнее время|летом]] &amp;quot; .. utc(utcin,DST)&lt;br /&gt;
    	end)&lt;br /&gt;
    end&lt;br /&gt;
    if not ok then return input .. category.erroneous_parameters end&lt;br /&gt;
    if heuristic then return output .. category.incomplete_parameters end&lt;br /&gt;
    return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- DEPRECATED&lt;br /&gt;
-- =p.OldDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;20.02.2020&amp;quot;,&amp;quot;ю&amp;quot;,[&amp;quot;bc&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;wd&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;wy&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;sq_brts&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;yearmark&amp;quot;]=&amp;quot;г.&amp;quot;}})&lt;br /&gt;
function p.OldDate( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    if not args[1] then return err end&lt;br /&gt;
    local gdate, jdate = {}, {}&lt;br /&gt;
    local strin = args[1] &lt;br /&gt;
    local cal = (args[2] or &amp;quot;г&amp;quot;):lower()&lt;br /&gt;
    local bc = is(args[&amp;quot;bc&amp;quot;])&lt;br /&gt;
    local wd = is(args[&amp;quot;wd&amp;quot;])&lt;br /&gt;
    local wm = is(args[&amp;quot;wm&amp;quot;])&lt;br /&gt;
    local wy = is(args[&amp;quot;wy&amp;quot;])&lt;br /&gt;
    if not wd then wm = false end&lt;br /&gt;
    local sq_brts = is(args[&amp;quot;sq_brts&amp;quot;])&lt;br /&gt;
    local yearmark = &amp;quot;года&amp;quot;&lt;br /&gt;
    if yesno(args[&amp;quot;yearmark&amp;quot;]) then&lt;br /&gt;
    elseif yesno(args[&amp;quot;yearmark&amp;quot;]) == false then yearmark = &amp;quot;&amp;quot;&lt;br /&gt;
    else yearmark = trim(args[&amp;quot;yearmark&amp;quot;]) or &amp;quot;года&amp;quot; end&lt;br /&gt;
--  local infocard = is(args[&amp;quot;infocard&amp;quot;])&lt;br /&gt;
--  local catName = args[&amp;quot;catName&amp;quot;] or false&lt;br /&gt;
    local datein = numstr2date(strin)&lt;br /&gt;
    datein.year = astroyear(datein.year, bc)&lt;br /&gt;
    jdate, gdate = recalc(datein,cal)&lt;br /&gt;
	return double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.NewDate(mw.getCurrentFrame():newChild{title=&amp;quot;Salt&amp;quot;,args={&amp;quot;2020-02-20&amp;quot;}})&lt;br /&gt;
-- =p.NewDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;20.02.2020&amp;quot;,&amp;quot;ю&amp;quot;,[&amp;quot;bc&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;wd&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;wy&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;sq_brts&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;yearmark&amp;quot;]=&amp;quot;г.&amp;quot;}})&lt;br /&gt;
-- =p.NewDate(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;20.02.2020&amp;quot;,[&amp;quot;bc&amp;quot;]=&amp;quot;0&amp;quot;,[&amp;quot;wd&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;wy&amp;quot;]=&amp;quot;1&amp;quot;,[&amp;quot;sq_brts&amp;quot;]=&amp;quot;0&amp;quot;,[&amp;quot;yearmark&amp;quot;]=&amp;quot;&amp;quot;}})&lt;br /&gt;
function p.NewDate( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    if not args[1] then return err end&lt;br /&gt;
	local strin = args[1] &lt;br /&gt;
    local year, month, day&lt;br /&gt;
    if     not not strin:match( &amp;quot;(-?%d%d%d%d%d)-(%d%d)-(%d%d)&amp;quot; ) then&lt;br /&gt;
    	year, month, day = strin:match( &amp;quot;(-?%d%d%d%d%d)-(%d%d)-(%d%d)&amp;quot; )&lt;br /&gt;
    elseif not not strin:match( &amp;quot;(-?%d+)-(%d+)-(%d+)&amp;quot; ) then&lt;br /&gt;
    	year, month, day = strin:match( &amp;quot;(-?%d+)-(%d+)-(%d+)&amp;quot; )&lt;br /&gt;
    elseif not not strin:match( &amp;quot;(%d%d)%.(%d%d)%.(-?%d%d%d%d%d)&amp;quot; ) then&lt;br /&gt;
    	day, month, year = strin:match( &amp;quot;(%d%d)%.(%d%d)%.(-?%d%d%d%d%d)&amp;quot; )&lt;br /&gt;
    elseif not not strin:match( &amp;quot;(%d+)%.(%d+)%.(-?%d+)&amp;quot; ) then&lt;br /&gt;
    	day, month, year = strin:match( &amp;quot;(%d+)%.(%d+)%.(-?%d+)&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if not year then return error(args[1] .. &amp;quot; не подходит под форматы yyyy-mm-dd или dd.mm.yyyy&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local cal = &amp;quot;г&amp;quot;&lt;br /&gt;
	if (not args[2]) or (args[2] == &amp;quot;&amp;quot;) then cal = &amp;quot;г&amp;quot;&lt;br /&gt;
	else cal = args[2]:lower() end&lt;br /&gt;
&lt;br /&gt;
	local bc,wd,wm,wy,sq_brts = &lt;br /&gt;
		is(args[&amp;quot;bc&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wd&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wd&amp;quot;]) and is(args[&amp;quot;wm&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wy&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;sq_brts&amp;quot;])&lt;br /&gt;
		&lt;br /&gt;
	year = astroyear(purif(year),bc)&lt;br /&gt;
	local datein = {[&amp;quot;year&amp;quot;]=purif(year), [&amp;quot;month&amp;quot;]=purif(month), [&amp;quot;day&amp;quot;]=purif(day)}&lt;br /&gt;
&lt;br /&gt;
	local jdate, gdate = recalc(datein,cal)&lt;br /&gt;
&lt;br /&gt;
    local yearmark = &amp;quot;года&amp;quot;&lt;br /&gt;
    local ym = args[&amp;quot;yearmark&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
    if yesno(ym) then&lt;br /&gt;
    elseif yesno(ym) == false then yearmark = &amp;quot;&amp;quot; &lt;br /&gt;
    else&lt;br /&gt;
    	if not not ym:match(&amp;quot;(%d+)&amp;quot;) then &lt;br /&gt;
    		error(&amp;quot;Цифры в обозначении года: &amp;quot; .. ym)&lt;br /&gt;
    	else yearmark = trim(ym) or &amp;quot;года&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	return double_couple(jdate, gdate, wd, wm, wy, sq_brts, yearmark)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={}})&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;3&amp;quot;,&amp;quot;июня&amp;quot;,nil,&amp;quot;21&amp;quot;,&amp;quot;мая&amp;quot;}})&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;28 августа&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;1916 года&amp;quot;,&amp;quot;15&amp;quot;}})&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;3&amp;quot;,&amp;quot;июня&amp;quot;,&amp;quot;1900&amp;quot;,&amp;quot;21&amp;quot;,&amp;quot;мая&amp;quot;}})&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;6&amp;quot;,&amp;quot;июня&amp;quot;,&amp;quot;1889 год&amp;quot;,&amp;quot;25&amp;quot;,&amp;quot;мая&amp;quot;}}) &lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;28&amp;quot;,&amp;quot;ноября&amp;quot;,&amp;quot;1917&amp;quot;,&amp;quot;15&amp;quot;}})&lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;28 августа&amp;quot;,&amp;quot;nil&amp;quot;,&amp;quot;1916 года&amp;quot;,&amp;quot;15&amp;quot;}}) &lt;br /&gt;
-- =p.Test(mw.getCurrentFrame():newChild{title=&amp;quot;smth&amp;quot;,args={&amp;quot;4&amp;quot;,&amp;quot;января&amp;quot;,&amp;quot;1915&amp;quot;,&amp;quot;22&amp;quot;,&amp;quot;декабря&amp;quot;,&amp;quot;1914 года&amp;quot;}}) &lt;br /&gt;
-- {{OldStyleDate|день (НС)|месяц (НС)|год (НС)|день (СС)|месяц (СС)|год (СС)}}&lt;br /&gt;
&lt;br /&gt;
function p.Test( frame )&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	-- необходима проверка и замена nil на &amp;quot; &amp;quot;&lt;br /&gt;
--[[mw.log((args[1] or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot; .. &lt;br /&gt;
		(args[2] or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot; .. &lt;br /&gt;
		(args[3] or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot; .. &lt;br /&gt;
		(args[4] or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot; .. &lt;br /&gt;
		(args[5] or &amp;quot;&amp;quot;) .. &amp;quot; &amp;quot; .. &lt;br /&gt;
		(args[6] or &amp;quot;&amp;quot;)) ]]--&lt;br /&gt;
	local ingdate = triple_txt2date(args[1],args[2],args[3])&lt;br /&gt;
	local injdate = triple_txt2date(args[4],args[5],args[6])&lt;br /&gt;
	local j1date, g1date, j2date, g2date = init(4)&lt;br /&gt;
		mw.log(&amp;quot;ingdate-&amp;quot;.. (undate(ingdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;injdate-&amp;quot;.. (undate(injdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
	local bc,wd,wm,wy,sq_brts,ny = &lt;br /&gt;
		is(args[&amp;quot;bc&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wd&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wd&amp;quot;]) and is(args[&amp;quot;wm&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;wy&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;sq_brts&amp;quot;]),&lt;br /&gt;
		is(args[&amp;quot;ny&amp;quot;])&lt;br /&gt;
	-- подавление формата для локальных тестов&lt;br /&gt;
    local wd, wm, wy = true, true, true&lt;br /&gt;
    &lt;br /&gt;
    local yearmark = &amp;quot;года&amp;quot; &lt;br /&gt;
    local ym = args[&amp;quot;yearmark&amp;quot;] or ((mw.ustring.match((args[3] or &amp;quot;&amp;quot;),&amp;quot;(%a+)&amp;quot;) or mw.ustring.match((args[6] or &amp;quot;&amp;quot;),&amp;quot;(%a+)&amp;quot;)) or &amp;quot;&amp;quot;)&lt;br /&gt;
    -- mw.log(&amp;quot;ym &amp;quot; .. ym)&lt;br /&gt;
    if yesno(ym) then&lt;br /&gt;
    elseif yesno(ym) == false then yearmark = &amp;quot;&amp;quot; &lt;br /&gt;
    else&lt;br /&gt;
    	if not not ym:match(&amp;quot;(%d+)&amp;quot;) then &lt;br /&gt;
    		error(&amp;quot;Цифры в обозначении года: &amp;quot; .. ym)&lt;br /&gt;
    	else yearmark = trim(ym) or &amp;quot;года&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if isdate(ingdate) or isdate(injdate) then&lt;br /&gt;
		if isdate(ingdate) then&lt;br /&gt;
			j1date, g1date = recalc(ingdate,&amp;quot;g&amp;quot;)&lt;br /&gt;
			ingdate[&amp;quot;full&amp;quot;] = true&lt;br /&gt;
		end&lt;br /&gt;
		if isdate(injdate) then&lt;br /&gt;
			j2date, g2date = recalc(injdate,&amp;quot;j&amp;quot;)&lt;br /&gt;
			injdate[&amp;quot;full&amp;quot;] = true&lt;br /&gt;
		end&lt;br /&gt;
		if ispartdate(ingdate) and ispartdate(injdate) then&lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. dmdist(ingdate,injdate))&lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. dmdist(j1date,g1date))&lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. dmdist(j2date,g2date))&lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. dmdist(ingdate,g1date))&lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. dmdist(injdate,j2date))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if ny then &lt;br /&gt;
		if isyear(j1date) then&lt;br /&gt;
		else j1date[&amp;quot;year&amp;quot;] = &amp;quot;&amp;quot; end&lt;br /&gt;
		if isyear(j2date) == nil then&lt;br /&gt;
		else j2date[&amp;quot;year&amp;quot;] = &amp;quot;&amp;quot; end&lt;br /&gt;
		if isyear(g1date) == nil then&lt;br /&gt;
		else g1date[&amp;quot;year&amp;quot;] = &amp;quot;&amp;quot; end&lt;br /&gt;
		if isyear(g2date) == nil then&lt;br /&gt;
		else g2date[&amp;quot;year&amp;quot;] = &amp;quot;&amp;quot; end&lt;br /&gt;
	end&lt;br /&gt;
	if (isdate(j1date) and isdate(g1date) and isdate(j2date) and isdate(g2date)) then&lt;br /&gt;
		if ((j1date.year == j2date.year)&lt;br /&gt;
		and (j1date.month == j2date.month)&lt;br /&gt;
		and (j1date.day == j2date.day)) then&lt;br /&gt;
			return double_couple(j1date, g1date, wd, wm, wy, sq_brts, yearmark)&lt;br /&gt;
		else &lt;br /&gt;
			mw.log(&amp;quot;📏 &amp;quot; .. (tostring(dmdist(ingdate,injdate)) or &amp;quot;&amp;quot;))&lt;br /&gt;
			return glue(args[1],args[2],args[3],args[4],args[5],args[6])  &lt;br /&gt;
			-- категория (предположительная разница в днях) и частичный вывод&lt;br /&gt;
		end&lt;br /&gt;
	elseif isdate(j1date) and isdate(g1date) then&lt;br /&gt;
		return double_couple(j1date, g1date, wd, wm, wy, sq_brts, yearmark) -- категория плюс частичная проверка&lt;br /&gt;
	elseif isdate(j2date) and isdate(g2date) then&lt;br /&gt;
		return double_couple(j2date, g2date, wd, wm, wy, sq_brts, yearmark) -- категория плюс частичная проверка&lt;br /&gt;
	elseif (ispartdate(ingdate) and ispartdate(injdate)) then&lt;br /&gt;
		mw.log(&amp;quot;ingdate &amp;quot;.. (undate(ingdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;injdate &amp;quot;.. (undate(injdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;j1date &amp;quot; .. (undate(j1date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;j2date &amp;quot; .. (undate(j2date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;g1date &amp;quot; .. (undate(g1date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;g2date &amp;quot; .. (undate(g2date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;📏 &amp;quot; .. (tostring(partdist(ingdate,injdate)) or &amp;quot;&amp;quot;).. &amp;quot; — &amp;quot; .. (tostring(partdist(injdate,ingdate)) or &amp;quot;&amp;quot;))&lt;br /&gt;
		return glue(args[1],args[2],args[3],args[4],args[5],args[6]) &lt;br /&gt;
		-- частичный или полный вывод, категория&lt;br /&gt;
	else &lt;br /&gt;
		mw.log(&amp;quot;ingdate &amp;quot;.. (undate(ingdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;injdate &amp;quot;.. (undate(injdate) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;j1date &amp;quot; .. (undate(j1date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;j2date &amp;quot; .. (undate(j2date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;g1date &amp;quot; .. (undate(g1date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		mw.log(&amp;quot;g2date &amp;quot; .. (undate(g2date ) or &amp;quot;&amp;quot;))&lt;br /&gt;
		return err .. category.incomplete_parameters&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Блок реестра календарей и вывода дат по разным календарям&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;ГГГГ-ММ-ДД&amp;quot; → таблица {year, month, day}&lt;br /&gt;
local function iso2date(iso)&lt;br /&gt;
	local y, m, d = string.match(iso or &amp;quot;&amp;quot;, &amp;quot;^(-?%d+)-(%d%d?)-(%d%d?)$&amp;quot;)&lt;br /&gt;
	return {[&amp;quot;year&amp;quot;]=purif(y), [&amp;quot;month&amp;quot;]=purif(m), [&amp;quot;day&amp;quot;]=purif(d)}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Коптский календарь: арифметика через JD. Эпоха 1.1.1 = JD 1825030&lt;br /&gt;
-- (29 августа 284 года по юлианскому). Високосный год: y mod 4 == 3.&lt;br /&gt;
local function coptic2jd(y, m, d)&lt;br /&gt;
	return 1825029 + 365*(y-1) + math.floor(y/4) + 30*(m-1) + d&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jd2coptic(jd)&lt;br /&gt;
	local year = math.floor((4*(jd - 1825030) + 1463)/1461)&lt;br /&gt;
	local month = math.floor((jd - coptic2jd(year, 1, 1))/30) + 1&lt;br /&gt;
	local day = jd - coptic2jd(year, month, 1) + 1&lt;br /&gt;
	return {[&amp;quot;year&amp;quot;]=year, [&amp;quot;month&amp;quot;]=month, [&amp;quot;day&amp;quot;]=day}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Реестр календарей. Два вида записей:&lt;br /&gt;
--   fmt  = календарь умеет сам движок MediaWiki (коды x* в formatDate);&lt;br /&gt;
--   conv = своя математика: функция JD → таблица {year, month, day}.&lt;br /&gt;
-- Новый календарь = одна строка (fmt) либо строка + пара функций x2jd/jd2x.&lt;br /&gt;
local calreg = {&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;григорианский&amp;quot;,	[&amp;quot;name&amp;quot;]=&amp;quot;[[Григорианский календарь|Григорианский]]&amp;quot;,	[&amp;quot;fmt&amp;quot;]=&amp;quot;j xg Y&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;юлианский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Юлианский календарь|Юлианский]]&amp;quot;,			[&amp;quot;conv&amp;quot;]=jd2jul},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;исламский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Исламский календарь|Исламский (хиджра)]]&amp;quot;,	[&amp;quot;fmt&amp;quot;]=&amp;quot;xmj xmF xmY&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;иранский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Иранский календарь|Иранский (солнечная хиджра)]]&amp;quot;,	[&amp;quot;fmt&amp;quot;]=&amp;quot;xij xiF xiY&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;еврейский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Еврейский календарь|Еврейский]]&amp;quot;,			[&amp;quot;fmt&amp;quot;]=&amp;quot;xjj xjF xjY&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;тайский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Тайский солнечный календарь|Тайский солнечный]]&amp;quot;,	[&amp;quot;fmt&amp;quot;]=&amp;quot;j xg xkY&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;миньго&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Миньго|Миньго]]&amp;quot;,							[&amp;quot;fmt&amp;quot;]=&amp;quot;j xg xoY&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;нэнго&amp;quot;,			[&amp;quot;name&amp;quot;]=&amp;quot;[[Японское летосчисление|Японский (нэнго)]]&amp;quot;,	[&amp;quot;fmt&amp;quot;]=&amp;quot;j xg (xtY)&amp;quot;},&lt;br /&gt;
	{[&amp;quot;id&amp;quot;]=&amp;quot;коптский&amp;quot;,		[&amp;quot;name&amp;quot;]=&amp;quot;[[Коптский календарь|Коптский]]&amp;quot;,				[&amp;quot;conv&amp;quot;]=jd2coptic},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function cal_render(entry, iso, jd)&lt;br /&gt;
	if entry.fmt then&lt;br /&gt;
		return mwlang:formatDate(entry.fmt, iso)&lt;br /&gt;
	end&lt;br /&gt;
	local d = entry.conv(jd)&lt;br /&gt;
	return tCon({d.day, &amp;quot;.&amp;quot;, string.format(&amp;quot;%02d&amp;quot;, d.month), &amp;quot;.&amp;quot;, d.year})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:Песочница/Carn/Calendar|CalDate|2026-07-27|еврейский}} → 13 Ав 5786&lt;br /&gt;
-- Первый аргумент пустой = сегодня (по UTC).&lt;br /&gt;
function p.CalDate(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local iso = trim(args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	if iso == &amp;quot;&amp;quot; then iso = mwlang:formatDate(&amp;quot;Y-m-d&amp;quot;) end&lt;br /&gt;
	local date = iso2date(iso)&lt;br /&gt;
	if not isdate(date) then&lt;br /&gt;
		return e.start .. string.format(e.box_date, iso) .. e.ending .. category.erroneous_parameters&lt;br /&gt;
	end&lt;br /&gt;
	local id = trim(args[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
	for i = 1, #calreg do&lt;br /&gt;
		if calreg[i].id == id then&lt;br /&gt;
			return cal_render(calreg[i], iso, gri2jd(date))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return e.start .. string.format(e.unknown_param, id) .. e.ending .. category.erroneous_parameters&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Дашборд: {{#invoke:Песочница/Carn/Calendar|Today}} → таблица «сегодня по всем&lt;br /&gt;
-- календарям реестра». Необязательный аргумент — фиксированная дата для тестов.&lt;br /&gt;
function p.Today(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local iso = trim(args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	if iso == &amp;quot;&amp;quot; then iso = mwlang:formatDate(&amp;quot;Y-m-d&amp;quot;) end&lt;br /&gt;
	local date = iso2date(iso)&lt;br /&gt;
	if not isdate(date) then&lt;br /&gt;
		return e.start .. string.format(e.box_date, iso) .. e.ending .. category.erroneous_parameters&lt;br /&gt;
	end&lt;br /&gt;
	local jd = gri2jd(date)&lt;br /&gt;
	local rows = {&#039;{| class=&amp;quot;wikitable sortable&amp;quot;&#039;, &#039;! Календарь !! Дата&#039;}&lt;br /&gt;
	for i = 1, #calreg do&lt;br /&gt;
		table.insert(rows, &#039;|-&#039;)&lt;br /&gt;
		table.insert(rows, &#039;| &#039; .. calreg[i].name .. &#039; || &#039; .. cal_render(calreg[i], iso, jd))&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(rows, &#039;|}&#039;)&lt;br /&gt;
	return tCon(rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=10056</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=10056"/>
		<updated>2026-09-16T10:19:57Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: typewritr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:TypewriterMudaki.gif|1000px|frameless|class=wowaka-announce|link=https://t.me/saberpedia/193]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;generalframe pure-g&amp;quot; style=&amp;quot;align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;pure-u-1-1 pure-u-md-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;h2 style=&amp;quot;margin: 5px;&amp;quot;&amp;gt;Добро пожаловать на [[Сейберпедия|Сейберпедию]],&amp;lt;/h2&amp;gt;&lt;br /&gt;
&#039;&#039;{{Цитата|quote=Вики, которую мы не хотели, но которую мы заслужили.|author=[[WerySkok]], 2023}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{PLURAL:{{NUMBEROFARTICLES}}|Написана|Написаны|Написано}} [[Служебная:Все страницы|{{NUMBEROFARTICLES}} {{PLURAL:{{NUMBEROFARTICLES}}|статья|статьи|статей}}]] и [[Служебная:Свежие правки|{{NUMBEROFEDITS}} {{PLURAL:{{NUMBEROFEDITS}}|правка|правки|правок}}]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;pure-u-1-1 pure-u-md-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;logo&amp;quot;&amp;gt;[[Файл:Saberpedia.png|центр|240x240пкс]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;generalframe&amp;quot; style=&amp;quot;overflow-y: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 500px; margin:auto; text-align:center; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;5&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!width=&amp;quot;12%&amp;quot; class=&amp;quot;welcome-nav&amp;quot;|[[Файл:Icon_Characters.png|Персонажи|50px|link=Челики]]&amp;lt;br/&amp;gt;[[Челики]]&lt;br /&gt;
!width=&amp;quot;12%&amp;quot; class=&amp;quot;welcome-nav&amp;quot;|[[Файл:Icon_Sites.png|Сайты|50px|link=Сайты]]&amp;lt;br/&amp;gt;[[Сайты]]&lt;br /&gt;
!width=&amp;quot;12%&amp;quot; class=&amp;quot;welcome-nav&amp;quot;|[[Файл:Icon_ExcellentPages.png|Хорошие статьи|50px|link=Категория:Хорошие_статьи]]&amp;lt;br/&amp;gt;[[Избранное]]&lt;br /&gt;
!width=&amp;quot;12%&amp;quot; class=&amp;quot;welcome-nav&amp;quot;|[[Файл:Icon_Channels.png|Каналы|50px|link=Каналы]]&amp;lt;br/&amp;gt;[[Каналы]]&lt;br /&gt;
!width=&amp;quot;12%&amp;quot; class=&amp;quot;welcome-nav&amp;quot;|[[Файл:Icon_Weapons.png|Кланы|50px|link=Кланы]]&amp;lt;br/&amp;gt;[[Кланы]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;pure-g&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;generalframe pure-u-1-1 pure-u-md-1-2&amp;quot;&amp;gt;&lt;br /&gt;
=== Введение ===&lt;br /&gt;
&lt;br /&gt;
Сейберпедия — это энциклопедия, посвящённая любительским техноблогерам (как [[Daniel Myslivets|DM]] или [[Veselcraft]]) и их проектам, таким как [[OpenVK]]. Здесь каждый может отредактировать любую статью, как в Википедии или как это было в Луркоморье. Считайте это маленьким окуклившимся кусочком русской ютуб вики, только тупее.&lt;br /&gt;
&lt;br /&gt;
У нас &amp;lt;s&amp;gt;нет&amp;lt;/s&amp;gt; есть Портал сообщества, так что если вы хотите прояснить какой-то вопрос, то вам туда.&lt;br /&gt;
&lt;br /&gt;
Бтв, у нас есть чатик в телеге: [https://t.me/sbrpdk тык :3]&lt;br /&gt;
&lt;br /&gt;
=== Могу ли я написать статью? ===&lt;br /&gt;
&lt;br /&gt;
Конечно, пишите, если хотите. Наша вики на данный момент развивающаяся, а значит, тут почти ничего нет, но вы можете это исправить. Главное, пишите про что-то интересное и в тему. Тематика довольно расплывчатая, поэтому определить, что в тему, а что нет, достаточно сложно. Но вы можете руководствоваться следующим правилом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;Если это как-то связано с человеком/явлением, про которое у нас уже есть статья, то про это тоже нужно написать.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Условно, если вы знаете какого-то друга [[Daniel Myslivets|Мысливца]] или [[Veselcraft]]&#039;а, то обязательно о нём напишите. Если хочется, конечно. Алсо, можете почитать [[Проект:Гайдлайны|гайдлайны]].&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
break=yes&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
==== Про что лучше написать? ====&lt;br /&gt;
&lt;br /&gt;
Прямо сейчас вы можете добавить текст на какую-нибудь из статей, на которую ссылаются, но на которой нихуя нет:&lt;br /&gt;
&lt;br /&gt;
{{Служебная:Требуемые_страницы}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;generalframe pure-u-1-1 pure-u-md-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Хорошая статья: [[Стив Джобс]] ===&lt;br /&gt;
{{Шаблон:Избранная статья}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=10055</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=10055"/>
		<updated>2026-09-16T10:19:47Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: ой&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:root.skin-theme-clientpref-day {&lt;br /&gt;
	--color-base: #54595d;&lt;br /&gt;
	--color-subtle: #54595d;&lt;br /&gt;
	--color-base-fixed: #54595d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub, #contentSub, #contentSub2 {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-footer, .page-info__label, .mw-page-title-parenthesis,&lt;br /&gt;
.skin-citizen .mw-editform #editpage-copywarn {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.catlinks li &amp;gt; a:hover, .catlinks li &amp;gt; a:hover:visited {&lt;br /&gt;
    border-radius: var(--border-radius-pill);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
    border: 1px solid #0000000d;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    border-spacing: 3px;&lt;br /&gt;
    background-color: var(--color-surface-1);&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
    margin: 0 auto var(--space-md) var(--space-lg);&lt;br /&gt;
    padding: 0.2em;&lt;br /&gt;
    float: right;&lt;br /&gt;
    clear: right;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
    width: 22em;&lt;br /&gt;
    text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,.infobox-label,.infobox-above,.infobox-full-data,.infobox-data,.infobox-below,.infobox-subheader,.infobox-image,.infobox-navbar,.infobox th,.infobox td {&lt;br /&gt;
    vertical-align: top&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,.infobox-data,.infobox th,.infobox td {&lt;br /&gt;
    text-align: left&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-above,.infobox .infobox-title,.infobox caption {&lt;br /&gt;
    font-size: 125%;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,.infobox caption {&lt;br /&gt;
    padding: 0.2em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header,.infobox .infobox-subheader,.infobox .infobox-image,.infobox .infobox-full-data,.infobox .infobox-below {&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox tbody {&lt;br /&gt;
    display: table;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header {&lt;br /&gt;
    background-color: hsl(0deg 71.43% 53.33% / 10%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
td.infobox-data {&lt;br /&gt;
    word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    table.infobox {&lt;br /&gt;
    	margin-left: auto;&lt;br /&gt;
        float: unset;&lt;br /&gt;
        display: block;&lt;br /&gt;
        margin: auto;&lt;br /&gt;
        max-width: 90vw;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    border: 1px solid var(--border-color-base);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin: 1em auto 0;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 90%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,.navbox-subgroup {&lt;br /&gt;
    width: 100%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,.navbox-title,.navbox-abovebelow {&lt;br /&gt;
    padding: 0.25em 1em;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    line-height: 1.6em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,tr + tr &amp;gt; .navbox-group,tr + tr &amp;gt; .navbox-image,tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
    border-top: 2px solid var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
th.navbox-group {&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,.navbox-subgroup {&lt;br /&gt;
    background: var(--color-surface-1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox th,.navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,th.navbox-group,.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .hlist td dl,.navbox .hlist td ol,.navbox .hlist td ul,.navbox td.hlist dl,.navbox td.hlist ol,.navbox td.hlist ul {&lt;br /&gt;
    padding: 1px 0 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
    margin-top: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox {&lt;br /&gt;
    margin-top: -1px&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header {&lt;br /&gt;
    padding: 2px;&lt;br /&gt;
    background: linear-gradient(to right, #b9b9b9, white, #b9b9b9);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header &amp;gt; * {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header .logo img {&lt;br /&gt;
    -webkit-mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
Pure v3.0.0&lt;br /&gt;
Copyright 2013 Yahoo!&lt;br /&gt;
Licensed under the BSD License.&lt;br /&gt;
https://github.com/pure-css/pure/blob/master/LICENSE&lt;br /&gt;
*/&lt;br /&gt;
.pure-g{display:flex;flex-flow:row wrap;align-content:flex-start}.pure-u{display:inline-block;vertical-align:top}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%} @media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-12,.pure-u-sm-1-2,.pure-u-sm-1-24,.pure-u-sm-1-3,.pure-u-sm-1-4,.pure-u-sm-1-5,.pure-u-sm-1-6,.pure-u-sm-1-8,.pure-u-sm-10-24,.pure-u-sm-11-12,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-2-24,.pure-u-sm-2-3,.pure-u-sm-2-5,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24,.pure-u-sm-3-24,.pure-u-sm-3-4,.pure-u-sm-3-5,.pure-u-sm-3-8,.pure-u-sm-4-24,.pure-u-sm-4-5,.pure-u-sm-5-12,.pure-u-sm-5-24,.pure-u-sm-5-5,.pure-u-sm-5-6,.pure-u-sm-5-8,.pure-u-sm-6-24,.pure-u-sm-7-12,.pure-u-sm-7-24,.pure-u-sm-7-8,.pure-u-sm-8-24,.pure-u-sm-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%}.pure-u-sm-1-5{width:20%}.pure-u-sm-5-24{width:20.8333%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%}.pure-u-sm-7-24{width:29.1667%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%}.pure-u-sm-2-5{width:40%}.pure-u-sm-10-24,.pure-u-sm-5-12{width:41.6667%}.pure-u-sm-11-24{width:45.8333%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%}.pure-u-sm-13-24{width:54.1667%}.pure-u-sm-14-24,.pure-u-sm-7-12{width:58.3333%}.pure-u-sm-3-5{width:60%}.pure-u-sm-15-24,.pure-u-sm-5-8{width:62.5%}.pure-u-sm-16-24,.pure-u-sm-2-3{width:66.6667%}.pure-u-sm-17-24{width:70.8333%}.pure-u-sm-18-24,.pure-u-sm-3-4{width:75%}.pure-u-sm-19-24{width:79.1667%}.pure-u-sm-4-5{width:80%}.pure-u-sm-20-24,.pure-u-sm-5-6{width:83.3333%}.pure-u-sm-21-24,.pure-u-sm-7-8{width:87.5%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%}.pure-u-sm-23-24{width:95.8333%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-24-24,.pure-u-sm-5-5{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-12,.pure-u-md-1-2,.pure-u-md-1-24,.pure-u-md-1-3,.pure-u-md-1-4,.pure-u-md-1-5,.pure-u-md-1-6,.pure-u-md-1-8,.pure-u-md-10-24,.pure-u-md-11-12,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-2-24,.pure-u-md-2-3,.pure-u-md-2-5,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24,.pure-u-md-3-24,.pure-u-md-3-4,.pure-u-md-3-5,.pure-u-md-3-8,.pure-u-md-4-24,.pure-u-md-4-5,.pure-u-md-5-12,.pure-u-md-5-24,.pure-u-md-5-5,.pure-u-md-5-6,.pure-u-md-5-8,.pure-u-md-6-24,.pure-u-md-7-12,.pure-u-md-7-24,.pure-u-md-7-8,.pure-u-md-8-24,.pure-u-md-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%}.pure-u-md-1-5{width:20%}.pure-u-md-5-24{width:20.8333%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%}.pure-u-md-7-24{width:29.1667%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%}.pure-u-md-2-5{width:40%}.pure-u-md-10-24,.pure-u-md-5-12{width:41.6667%}.pure-u-md-11-24{width:45.8333%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%}.pure-u-md-13-24{width:54.1667%}.pure-u-md-14-24,.pure-u-md-7-12{width:58.3333%}.pure-u-md-3-5{width:60%}.pure-u-md-15-24,.pure-u-md-5-8{width:62.5%}.pure-u-md-16-24,.pure-u-md-2-3{width:66.6667%}.pure-u-md-17-24{width:70.8333%}.pure-u-md-18-24,.pure-u-md-3-4{width:75%}.pure-u-md-19-24{width:79.1667%}.pure-u-md-4-5{width:80%}.pure-u-md-20-24,.pure-u-md-5-6{width:83.3333%}.pure-u-md-21-24,.pure-u-md-7-8{width:87.5%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%}.pure-u-md-23-24{width:95.8333%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-24-24,.pure-u-md-5-5{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-12,.pure-u-lg-1-2,.pure-u-lg-1-24,.pure-u-lg-1-3,.pure-u-lg-1-4,.pure-u-lg-1-5,.pure-u-lg-1-6,.pure-u-lg-1-8,.pure-u-lg-10-24,.pure-u-lg-11-12,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-2-24,.pure-u-lg-2-3,.pure-u-lg-2-5,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24,.pure-u-lg-3-24,.pure-u-lg-3-4,.pure-u-lg-3-5,.pure-u-lg-3-8,.pure-u-lg-4-24,.pure-u-lg-4-5,.pure-u-lg-5-12,.pure-u-lg-5-24,.pure-u-lg-5-5,.pure-u-lg-5-6,.pure-u-lg-5-8,.pure-u-lg-6-24,.pure-u-lg-7-12,.pure-u-lg-7-24,.pure-u-lg-7-8,.pure-u-lg-8-24,.pure-u-lg-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%}.pure-u-lg-1-5{width:20%}.pure-u-lg-5-24{width:20.8333%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%}.pure-u-lg-7-24{width:29.1667%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%}.pure-u-lg-2-5{width:40%}.pure-u-lg-10-24,.pure-u-lg-5-12{width:41.6667%}.pure-u-lg-11-24{width:45.8333%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%}.pure-u-lg-13-24{width:54.1667%}.pure-u-lg-14-24,.pure-u-lg-7-12{width:58.3333%}.pure-u-lg-3-5{width:60%}.pure-u-lg-15-24,.pure-u-lg-5-8{width:62.5%}.pure-u-lg-16-24,.pure-u-lg-2-3{width:66.6667%}.pure-u-lg-17-24{width:70.8333%}.pure-u-lg-18-24,.pure-u-lg-3-4{width:75%}.pure-u-lg-19-24{width:79.1667%}.pure-u-lg-4-5{width:80%}.pure-u-lg-20-24,.pure-u-lg-5-6{width:83.3333%}.pure-u-lg-21-24,.pure-u-lg-7-8{width:87.5%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%}.pure-u-lg-23-24{width:95.8333%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-24-24,.pure-u-lg-5-5{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-12,.pure-u-xl-1-2,.pure-u-xl-1-24,.pure-u-xl-1-3,.pure-u-xl-1-4,.pure-u-xl-1-5,.pure-u-xl-1-6,.pure-u-xl-1-8,.pure-u-xl-10-24,.pure-u-xl-11-12,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-2-24,.pure-u-xl-2-3,.pure-u-xl-2-5,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24,.pure-u-xl-3-24,.pure-u-xl-3-4,.pure-u-xl-3-5,.pure-u-xl-3-8,.pure-u-xl-4-24,.pure-u-xl-4-5,.pure-u-xl-5-12,.pure-u-xl-5-24,.pure-u-xl-5-5,.pure-u-xl-5-6,.pure-u-xl-5-8,.pure-u-xl-6-24,.pure-u-xl-7-12,.pure-u-xl-7-24,.pure-u-xl-7-8,.pure-u-xl-8-24,.pure-u-xl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%}.pure-u-xl-1-5{width:20%}.pure-u-xl-5-24{width:20.8333%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%}.pure-u-xl-7-24{width:29.1667%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%}.pure-u-xl-2-5{width:40%}.pure-u-xl-10-24,.pure-u-xl-5-12{width:41.6667%}.pure-u-xl-11-24{width:45.8333%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%}.pure-u-xl-13-24{width:54.1667%}.pure-u-xl-14-24,.pure-u-xl-7-12{width:58.3333%}.pure-u-xl-3-5{width:60%}.pure-u-xl-15-24,.pure-u-xl-5-8{width:62.5%}.pure-u-xl-16-24,.pure-u-xl-2-3{width:66.6667%}.pure-u-xl-17-24{width:70.8333%}.pure-u-xl-18-24,.pure-u-xl-3-4{width:75%}.pure-u-xl-19-24{width:79.1667%}.pure-u-xl-4-5{width:80%}.pure-u-xl-20-24,.pure-u-xl-5-6{width:83.3333%}.pure-u-xl-21-24,.pure-u-xl-7-8{width:87.5%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%}.pure-u-xl-23-24{width:95.8333%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-24-24,.pure-u-xl-5-5{width:100%}}@media screen and (min-width:120em){.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-1-12,.pure-u-xxl-1-2,.pure-u-xxl-1-24,.pure-u-xxl-1-3,.pure-u-xxl-1-4,.pure-u-xxl-1-5,.pure-u-xxl-1-6,.pure-u-xxl-1-8,.pure-u-xxl-10-24,.pure-u-xxl-11-12,.pure-u-xxl-11-24,.pure-u-xxl-12-24,.pure-u-xxl-13-24,.pure-u-xxl-14-24,.pure-u-xxl-15-24,.pure-u-xxl-16-24,.pure-u-xxl-17-24,.pure-u-xxl-18-24,.pure-u-xxl-19-24,.pure-u-xxl-2-24,.pure-u-xxl-2-3,.pure-u-xxl-2-5,.pure-u-xxl-20-24,.pure-u-xxl-21-24,.pure-u-xxl-22-24,.pure-u-xxl-23-24,.pure-u-xxl-24-24,.pure-u-xxl-3-24,.pure-u-xxl-3-4,.pure-u-xxl-3-5,.pure-u-xxl-3-8,.pure-u-xxl-4-24,.pure-u-xxl-4-5,.pure-u-xxl-5-12,.pure-u-xxl-5-24,.pure-u-xxl-5-5,.pure-u-xxl-5-6,.pure-u-xxl-5-8,.pure-u-xxl-6-24,.pure-u-xxl-7-12,.pure-u-xxl-7-24,.pure-u-xxl-7-8,.pure-u-xxl-8-24,.pure-u-xxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxl-1-24{width:4.1667%}.pure-u-xxl-1-12,.pure-u-xxl-2-24{width:8.3333%}.pure-u-xxl-1-8,.pure-u-xxl-3-24{width:12.5%}.pure-u-xxl-1-6,.pure-u-xxl-4-24{width:16.6667%}.pure-u-xxl-1-5{width:20%}.pure-u-xxl-5-24{width:20.8333%}.pure-u-xxl-1-4,.pure-u-xxl-6-24{width:25%}.pure-u-xxl-7-24{width:29.1667%}.pure-u-xxl-1-3,.pure-u-xxl-8-24{width:33.3333%}.pure-u-xxl-3-8,.pure-u-xxl-9-24{width:37.5%}.pure-u-xxl-2-5{width:40%}.pure-u-xxl-10-24,.pure-u-xxl-5-12{width:41.6667%}.pure-u-xxl-11-24{width:45.8333%}.pure-u-xxl-1-2,.pure-u-xxl-12-24{width:50%}.pure-u-xxl-13-24{width:54.1667%}.pure-u-xxl-14-24,.pure-u-xxl-7-12{width:58.3333%}.pure-u-xxl-3-5{width:60%}.pure-u-xxl-15-24,.pure-u-xxl-5-8{width:62.5%}.pure-u-xxl-16-24,.pure-u-xxl-2-3{width:66.6667%}.pure-u-xxl-17-24{width:70.8333%}.pure-u-xxl-18-24,.pure-u-xxl-3-4{width:75%}.pure-u-xxl-19-24{width:79.1667%}.pure-u-xxl-4-5{width:80%}.pure-u-xxl-20-24,.pure-u-xxl-5-6{width:83.3333%}.pure-u-xxl-21-24,.pure-u-xxl-7-8{width:87.5%}.pure-u-xxl-11-12,.pure-u-xxl-22-24{width:91.6667%}.pure-u-xxl-23-24{width:95.8333%}.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-24-24,.pure-u-xxl-5-5{width:100%}}@media screen and (min-width:160em){.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-1-12,.pure-u-xxxl-1-2,.pure-u-xxxl-1-24,.pure-u-xxxl-1-3,.pure-u-xxxl-1-4,.pure-u-xxxl-1-5,.pure-u-xxxl-1-6,.pure-u-xxxl-1-8,.pure-u-xxxl-10-24,.pure-u-xxxl-11-12,.pure-u-xxxl-11-24,.pure-u-xxxl-12-24,.pure-u-xxxl-13-24,.pure-u-xxxl-14-24,.pure-u-xxxl-15-24,.pure-u-xxxl-16-24,.pure-u-xxxl-17-24,.pure-u-xxxl-18-24,.pure-u-xxxl-19-24,.pure-u-xxxl-2-24,.pure-u-xxxl-2-3,.pure-u-xxxl-2-5,.pure-u-xxxl-20-24,.pure-u-xxxl-21-24,.pure-u-xxxl-22-24,.pure-u-xxxl-23-24,.pure-u-xxxl-24-24,.pure-u-xxxl-3-24,.pure-u-xxxl-3-4,.pure-u-xxxl-3-5,.pure-u-xxxl-3-8,.pure-u-xxxl-4-24,.pure-u-xxxl-4-5,.pure-u-xxxl-5-12,.pure-u-xxxl-5-24,.pure-u-xxxl-5-5,.pure-u-xxxl-5-6,.pure-u-xxxl-5-8,.pure-u-xxxl-6-24,.pure-u-xxxl-7-12,.pure-u-xxxl-7-24,.pure-u-xxxl-7-8,.pure-u-xxxl-8-24,.pure-u-xxxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxxl-1-24{width:4.1667%}.pure-u-xxxl-1-12,.pure-u-xxxl-2-24{width:8.3333%}.pure-u-xxxl-1-8,.pure-u-xxxl-3-24{width:12.5%}.pure-u-xxxl-1-6,.pure-u-xxxl-4-24{width:16.6667%}.pure-u-xxxl-1-5{width:20%}.pure-u-xxxl-5-24{width:20.8333%}.pure-u-xxxl-1-4,.pure-u-xxxl-6-24{width:25%}.pure-u-xxxl-7-24{width:29.1667%}.pure-u-xxxl-1-3,.pure-u-xxxl-8-24{width:33.3333%}.pure-u-xxxl-3-8,.pure-u-xxxl-9-24{width:37.5%}.pure-u-xxxl-2-5{width:40%}.pure-u-xxxl-10-24,.pure-u-xxxl-5-12{width:41.6667%}.pure-u-xxxl-11-24{width:45.8333%}.pure-u-xxxl-1-2,.pure-u-xxxl-12-24{width:50%}.pure-u-xxxl-13-24{width:54.1667%}.pure-u-xxxl-14-24,.pure-u-xxxl-7-12{width:58.3333%}.pure-u-xxxl-3-5{width:60%}.pure-u-xxxl-15-24,.pure-u-xxxl-5-8{width:62.5%}.pure-u-xxxl-16-24,.pure-u-xxxl-2-3{width:66.6667%}.pure-u-xxxl-17-24{width:70.8333%}.pure-u-xxxl-18-24,.pure-u-xxxl-3-4{width:75%}.pure-u-xxxl-19-24{width:79.1667%}.pure-u-xxxl-4-5{width:80%}.pure-u-xxxl-20-24,.pure-u-xxxl-5-6{width:83.3333%}.pure-u-xxxl-21-24,.pure-u-xxxl-7-8{width:87.5%}.pure-u-xxxl-11-12,.pure-u-xxxl-22-24{width:91.6667%}.pure-u-xxxl-23-24{width:95.8333%}.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-24-24,.pure-u-xxxl-5-5{width:100%}}@media screen and (min-width:240em){.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-1-12,.pure-u-x4k-1-2,.pure-u-x4k-1-24,.pure-u-x4k-1-3,.pure-u-x4k-1-4,.pure-u-x4k-1-5,.pure-u-x4k-1-6,.pure-u-x4k-1-8,.pure-u-x4k-10-24,.pure-u-x4k-11-12,.pure-u-x4k-11-24,.pure-u-x4k-12-24,.pure-u-x4k-13-24,.pure-u-x4k-14-24,.pure-u-x4k-15-24,.pure-u-x4k-16-24,.pure-u-x4k-17-24,.pure-u-x4k-18-24,.pure-u-x4k-19-24,.pure-u-x4k-2-24,.pure-u-x4k-2-3,.pure-u-x4k-2-5,.pure-u-x4k-20-24,.pure-u-x4k-21-24,.pure-u-x4k-22-24,.pure-u-x4k-23-24,.pure-u-x4k-24-24,.pure-u-x4k-3-24,.pure-u-x4k-3-4,.pure-u-x4k-3-5,.pure-u-x4k-3-8,.pure-u-x4k-4-24,.pure-u-x4k-4-5,.pure-u-x4k-5-12,.pure-u-x4k-5-24,.pure-u-x4k-5-5,.pure-u-x4k-5-6,.pure-u-x4k-5-8,.pure-u-x4k-6-24,.pure-u-x4k-7-12,.pure-u-x4k-7-24,.pure-u-x4k-7-8,.pure-u-x4k-8-24,.pure-u-x4k-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-x4k-1-24{width:4.1667%}.pure-u-x4k-1-12,.pure-u-x4k-2-24{width:8.3333%}.pure-u-x4k-1-8,.pure-u-x4k-3-24{width:12.5%}.pure-u-x4k-1-6,.pure-u-x4k-4-24{width:16.6667%}.pure-u-x4k-1-5{width:20%}.pure-u-x4k-5-24{width:20.8333%}.pure-u-x4k-1-4,.pure-u-x4k-6-24{width:25%}.pure-u-x4k-7-24{width:29.1667%}.pure-u-x4k-1-3,.pure-u-x4k-8-24{width:33.3333%}.pure-u-x4k-3-8,.pure-u-x4k-9-24{width:37.5%}.pure-u-x4k-2-5{width:40%}.pure-u-x4k-10-24,.pure-u-x4k-5-12{width:41.6667%}.pure-u-x4k-11-24{width:45.8333%}.pure-u-x4k-1-2,.pure-u-x4k-12-24{width:50%}.pure-u-x4k-13-24{width:54.1667%}.pure-u-x4k-14-24,.pure-u-x4k-7-12{width:58.3333%}.pure-u-x4k-3-5{width:60%}.pure-u-x4k-15-24,.pure-u-x4k-5-8{width:62.5%}.pure-u-x4k-16-24,.pure-u-x4k-2-3{width:66.6667%}.pure-u-x4k-17-24{width:70.8333%}.pure-u-x4k-18-24,.pure-u-x4k-3-4{width:75%}.pure-u-x4k-19-24{width:79.1667%}.pure-u-x4k-4-5{width:80%}.pure-u-x4k-20-24,.pure-u-x4k-5-6{width:83.3333%}.pure-u-x4k-21-24,.pure-u-x4k-7-8{width:87.5%}.pure-u-x4k-11-12,.pure-u-x4k-22-24{width:91.6667%}.pure-u-x4k-23-24{width:95.8333%}.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-24-24,.pure-u-x4k-5-5{width:100%}}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav {&lt;br /&gt;
    background-color: #3E4556;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
    box-shadow: 0 0 5px #656565;&lt;br /&gt;
    font-size: 70%;&lt;br /&gt;
    height: 85px;&lt;br /&gt;
    line-height: 200%;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: 85px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav span, .welcome-nav a {&lt;br /&gt;
    color: #fff !important;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:first-child {&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:last-child {&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    height: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav br {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav img {&lt;br /&gt;
    filter: brightness(1);&lt;br /&gt;
    transition: .3s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover {&lt;br /&gt;
    background-color: #D3BC8E;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover a {&lt;br /&gt;
    color: #3E4556 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover img {&lt;br /&gt;
    filter: brightness(.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.generalframe {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
    border: 2em solid transparent;&lt;br /&gt;
    border-image-slice: calc(100%/6);&lt;br /&gt;
    border-image-repeat: stretch;&lt;br /&gt;
    border-image-width: 1.5;&lt;br /&gt;
    border-image-source: url(/resources/assets/teyvatborder.svg?1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-citizen-dark .tool-button {&lt;br /&gt;
	filter: invert(67%) sepia(7%) saturate(86%) hue-rotate(169deg) brightness(97%) contrast(89%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce .mw-file-element {&lt;br /&gt;
    width: min(100%, 90vw);&lt;br /&gt;
    max-width: 600px;&lt;br /&gt;
    height: unset;&lt;br /&gt;
    margin: auto;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 2vh;&lt;br /&gt;
    transition: .5s ease-in-out transform;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce a {&lt;br /&gt;
    display: flow-root;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce .mw-file-element:hover {&lt;br /&gt;
    transform: rotateY(360deg) scale3d(1.2, 1.2, 1.2);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=10052</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=10052"/>
		<updated>2026-09-16T10:18:29Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: add announce css!!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:root.skin-theme-clientpref-day {&lt;br /&gt;
	--color-base: #54595d;&lt;br /&gt;
	--color-subtle: #54595d;&lt;br /&gt;
	--color-base-fixed: #54595d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub, #contentSub, #contentSub2 {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-footer, .page-info__label, .mw-page-title-parenthesis,&lt;br /&gt;
.skin-citizen .mw-editform #editpage-copywarn {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.catlinks li &amp;gt; a:hover, .catlinks li &amp;gt; a:hover:visited {&lt;br /&gt;
    border-radius: var(--border-radius-pill);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
    border: 1px solid #0000000d;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    border-spacing: 3px;&lt;br /&gt;
    background-color: var(--color-surface-1);&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
    margin: 0 auto var(--space-md) var(--space-lg);&lt;br /&gt;
    padding: 0.2em;&lt;br /&gt;
    float: right;&lt;br /&gt;
    clear: right;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
    width: 22em;&lt;br /&gt;
    text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,.infobox-label,.infobox-above,.infobox-full-data,.infobox-data,.infobox-below,.infobox-subheader,.infobox-image,.infobox-navbar,.infobox th,.infobox td {&lt;br /&gt;
    vertical-align: top&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,.infobox-data,.infobox th,.infobox td {&lt;br /&gt;
    text-align: left&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-above,.infobox .infobox-title,.infobox caption {&lt;br /&gt;
    font-size: 125%;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,.infobox caption {&lt;br /&gt;
    padding: 0.2em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header,.infobox .infobox-subheader,.infobox .infobox-image,.infobox .infobox-full-data,.infobox .infobox-below {&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox tbody {&lt;br /&gt;
    display: table;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header {&lt;br /&gt;
    background-color: hsl(0deg 71.43% 53.33% / 10%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
td.infobox-data {&lt;br /&gt;
    word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    table.infobox {&lt;br /&gt;
    	margin-left: auto;&lt;br /&gt;
        float: unset;&lt;br /&gt;
        display: block;&lt;br /&gt;
        margin: auto;&lt;br /&gt;
        max-width: 90vw;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    border: 1px solid var(--border-color-base);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin: 1em auto 0;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 90%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,.navbox-subgroup {&lt;br /&gt;
    width: 100%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,.navbox-title,.navbox-abovebelow {&lt;br /&gt;
    padding: 0.25em 1em;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    line-height: 1.6em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,tr + tr &amp;gt; .navbox-group,tr + tr &amp;gt; .navbox-image,tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
    border-top: 2px solid var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
th.navbox-group {&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,.navbox-subgroup {&lt;br /&gt;
    background: var(--color-surface-1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox th,.navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,th.navbox-group,.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .hlist td dl,.navbox .hlist td ol,.navbox .hlist td ul,.navbox td.hlist dl,.navbox td.hlist ol,.navbox td.hlist ul {&lt;br /&gt;
    padding: 1px 0 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
    margin-top: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox {&lt;br /&gt;
    margin-top: -1px&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header {&lt;br /&gt;
    padding: 2px;&lt;br /&gt;
    background: linear-gradient(to right, #b9b9b9, white, #b9b9b9);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header &amp;gt; * {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header .logo img {&lt;br /&gt;
    -webkit-mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
Pure v3.0.0&lt;br /&gt;
Copyright 2013 Yahoo!&lt;br /&gt;
Licensed under the BSD License.&lt;br /&gt;
https://github.com/pure-css/pure/blob/master/LICENSE&lt;br /&gt;
*/&lt;br /&gt;
.pure-g{display:flex;flex-flow:row wrap;align-content:flex-start}.pure-u{display:inline-block;vertical-align:top}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%} @media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-12,.pure-u-sm-1-2,.pure-u-sm-1-24,.pure-u-sm-1-3,.pure-u-sm-1-4,.pure-u-sm-1-5,.pure-u-sm-1-6,.pure-u-sm-1-8,.pure-u-sm-10-24,.pure-u-sm-11-12,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-2-24,.pure-u-sm-2-3,.pure-u-sm-2-5,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24,.pure-u-sm-3-24,.pure-u-sm-3-4,.pure-u-sm-3-5,.pure-u-sm-3-8,.pure-u-sm-4-24,.pure-u-sm-4-5,.pure-u-sm-5-12,.pure-u-sm-5-24,.pure-u-sm-5-5,.pure-u-sm-5-6,.pure-u-sm-5-8,.pure-u-sm-6-24,.pure-u-sm-7-12,.pure-u-sm-7-24,.pure-u-sm-7-8,.pure-u-sm-8-24,.pure-u-sm-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%}.pure-u-sm-1-5{width:20%}.pure-u-sm-5-24{width:20.8333%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%}.pure-u-sm-7-24{width:29.1667%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%}.pure-u-sm-2-5{width:40%}.pure-u-sm-10-24,.pure-u-sm-5-12{width:41.6667%}.pure-u-sm-11-24{width:45.8333%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%}.pure-u-sm-13-24{width:54.1667%}.pure-u-sm-14-24,.pure-u-sm-7-12{width:58.3333%}.pure-u-sm-3-5{width:60%}.pure-u-sm-15-24,.pure-u-sm-5-8{width:62.5%}.pure-u-sm-16-24,.pure-u-sm-2-3{width:66.6667%}.pure-u-sm-17-24{width:70.8333%}.pure-u-sm-18-24,.pure-u-sm-3-4{width:75%}.pure-u-sm-19-24{width:79.1667%}.pure-u-sm-4-5{width:80%}.pure-u-sm-20-24,.pure-u-sm-5-6{width:83.3333%}.pure-u-sm-21-24,.pure-u-sm-7-8{width:87.5%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%}.pure-u-sm-23-24{width:95.8333%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-24-24,.pure-u-sm-5-5{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-12,.pure-u-md-1-2,.pure-u-md-1-24,.pure-u-md-1-3,.pure-u-md-1-4,.pure-u-md-1-5,.pure-u-md-1-6,.pure-u-md-1-8,.pure-u-md-10-24,.pure-u-md-11-12,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-2-24,.pure-u-md-2-3,.pure-u-md-2-5,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24,.pure-u-md-3-24,.pure-u-md-3-4,.pure-u-md-3-5,.pure-u-md-3-8,.pure-u-md-4-24,.pure-u-md-4-5,.pure-u-md-5-12,.pure-u-md-5-24,.pure-u-md-5-5,.pure-u-md-5-6,.pure-u-md-5-8,.pure-u-md-6-24,.pure-u-md-7-12,.pure-u-md-7-24,.pure-u-md-7-8,.pure-u-md-8-24,.pure-u-md-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%}.pure-u-md-1-5{width:20%}.pure-u-md-5-24{width:20.8333%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%}.pure-u-md-7-24{width:29.1667%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%}.pure-u-md-2-5{width:40%}.pure-u-md-10-24,.pure-u-md-5-12{width:41.6667%}.pure-u-md-11-24{width:45.8333%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%}.pure-u-md-13-24{width:54.1667%}.pure-u-md-14-24,.pure-u-md-7-12{width:58.3333%}.pure-u-md-3-5{width:60%}.pure-u-md-15-24,.pure-u-md-5-8{width:62.5%}.pure-u-md-16-24,.pure-u-md-2-3{width:66.6667%}.pure-u-md-17-24{width:70.8333%}.pure-u-md-18-24,.pure-u-md-3-4{width:75%}.pure-u-md-19-24{width:79.1667%}.pure-u-md-4-5{width:80%}.pure-u-md-20-24,.pure-u-md-5-6{width:83.3333%}.pure-u-md-21-24,.pure-u-md-7-8{width:87.5%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%}.pure-u-md-23-24{width:95.8333%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-24-24,.pure-u-md-5-5{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-12,.pure-u-lg-1-2,.pure-u-lg-1-24,.pure-u-lg-1-3,.pure-u-lg-1-4,.pure-u-lg-1-5,.pure-u-lg-1-6,.pure-u-lg-1-8,.pure-u-lg-10-24,.pure-u-lg-11-12,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-2-24,.pure-u-lg-2-3,.pure-u-lg-2-5,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24,.pure-u-lg-3-24,.pure-u-lg-3-4,.pure-u-lg-3-5,.pure-u-lg-3-8,.pure-u-lg-4-24,.pure-u-lg-4-5,.pure-u-lg-5-12,.pure-u-lg-5-24,.pure-u-lg-5-5,.pure-u-lg-5-6,.pure-u-lg-5-8,.pure-u-lg-6-24,.pure-u-lg-7-12,.pure-u-lg-7-24,.pure-u-lg-7-8,.pure-u-lg-8-24,.pure-u-lg-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%}.pure-u-lg-1-5{width:20%}.pure-u-lg-5-24{width:20.8333%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%}.pure-u-lg-7-24{width:29.1667%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%}.pure-u-lg-2-5{width:40%}.pure-u-lg-10-24,.pure-u-lg-5-12{width:41.6667%}.pure-u-lg-11-24{width:45.8333%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%}.pure-u-lg-13-24{width:54.1667%}.pure-u-lg-14-24,.pure-u-lg-7-12{width:58.3333%}.pure-u-lg-3-5{width:60%}.pure-u-lg-15-24,.pure-u-lg-5-8{width:62.5%}.pure-u-lg-16-24,.pure-u-lg-2-3{width:66.6667%}.pure-u-lg-17-24{width:70.8333%}.pure-u-lg-18-24,.pure-u-lg-3-4{width:75%}.pure-u-lg-19-24{width:79.1667%}.pure-u-lg-4-5{width:80%}.pure-u-lg-20-24,.pure-u-lg-5-6{width:83.3333%}.pure-u-lg-21-24,.pure-u-lg-7-8{width:87.5%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%}.pure-u-lg-23-24{width:95.8333%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-24-24,.pure-u-lg-5-5{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-12,.pure-u-xl-1-2,.pure-u-xl-1-24,.pure-u-xl-1-3,.pure-u-xl-1-4,.pure-u-xl-1-5,.pure-u-xl-1-6,.pure-u-xl-1-8,.pure-u-xl-10-24,.pure-u-xl-11-12,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-2-24,.pure-u-xl-2-3,.pure-u-xl-2-5,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24,.pure-u-xl-3-24,.pure-u-xl-3-4,.pure-u-xl-3-5,.pure-u-xl-3-8,.pure-u-xl-4-24,.pure-u-xl-4-5,.pure-u-xl-5-12,.pure-u-xl-5-24,.pure-u-xl-5-5,.pure-u-xl-5-6,.pure-u-xl-5-8,.pure-u-xl-6-24,.pure-u-xl-7-12,.pure-u-xl-7-24,.pure-u-xl-7-8,.pure-u-xl-8-24,.pure-u-xl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%}.pure-u-xl-1-5{width:20%}.pure-u-xl-5-24{width:20.8333%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%}.pure-u-xl-7-24{width:29.1667%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%}.pure-u-xl-2-5{width:40%}.pure-u-xl-10-24,.pure-u-xl-5-12{width:41.6667%}.pure-u-xl-11-24{width:45.8333%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%}.pure-u-xl-13-24{width:54.1667%}.pure-u-xl-14-24,.pure-u-xl-7-12{width:58.3333%}.pure-u-xl-3-5{width:60%}.pure-u-xl-15-24,.pure-u-xl-5-8{width:62.5%}.pure-u-xl-16-24,.pure-u-xl-2-3{width:66.6667%}.pure-u-xl-17-24{width:70.8333%}.pure-u-xl-18-24,.pure-u-xl-3-4{width:75%}.pure-u-xl-19-24{width:79.1667%}.pure-u-xl-4-5{width:80%}.pure-u-xl-20-24,.pure-u-xl-5-6{width:83.3333%}.pure-u-xl-21-24,.pure-u-xl-7-8{width:87.5%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%}.pure-u-xl-23-24{width:95.8333%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-24-24,.pure-u-xl-5-5{width:100%}}@media screen and (min-width:120em){.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-1-12,.pure-u-xxl-1-2,.pure-u-xxl-1-24,.pure-u-xxl-1-3,.pure-u-xxl-1-4,.pure-u-xxl-1-5,.pure-u-xxl-1-6,.pure-u-xxl-1-8,.pure-u-xxl-10-24,.pure-u-xxl-11-12,.pure-u-xxl-11-24,.pure-u-xxl-12-24,.pure-u-xxl-13-24,.pure-u-xxl-14-24,.pure-u-xxl-15-24,.pure-u-xxl-16-24,.pure-u-xxl-17-24,.pure-u-xxl-18-24,.pure-u-xxl-19-24,.pure-u-xxl-2-24,.pure-u-xxl-2-3,.pure-u-xxl-2-5,.pure-u-xxl-20-24,.pure-u-xxl-21-24,.pure-u-xxl-22-24,.pure-u-xxl-23-24,.pure-u-xxl-24-24,.pure-u-xxl-3-24,.pure-u-xxl-3-4,.pure-u-xxl-3-5,.pure-u-xxl-3-8,.pure-u-xxl-4-24,.pure-u-xxl-4-5,.pure-u-xxl-5-12,.pure-u-xxl-5-24,.pure-u-xxl-5-5,.pure-u-xxl-5-6,.pure-u-xxl-5-8,.pure-u-xxl-6-24,.pure-u-xxl-7-12,.pure-u-xxl-7-24,.pure-u-xxl-7-8,.pure-u-xxl-8-24,.pure-u-xxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxl-1-24{width:4.1667%}.pure-u-xxl-1-12,.pure-u-xxl-2-24{width:8.3333%}.pure-u-xxl-1-8,.pure-u-xxl-3-24{width:12.5%}.pure-u-xxl-1-6,.pure-u-xxl-4-24{width:16.6667%}.pure-u-xxl-1-5{width:20%}.pure-u-xxl-5-24{width:20.8333%}.pure-u-xxl-1-4,.pure-u-xxl-6-24{width:25%}.pure-u-xxl-7-24{width:29.1667%}.pure-u-xxl-1-3,.pure-u-xxl-8-24{width:33.3333%}.pure-u-xxl-3-8,.pure-u-xxl-9-24{width:37.5%}.pure-u-xxl-2-5{width:40%}.pure-u-xxl-10-24,.pure-u-xxl-5-12{width:41.6667%}.pure-u-xxl-11-24{width:45.8333%}.pure-u-xxl-1-2,.pure-u-xxl-12-24{width:50%}.pure-u-xxl-13-24{width:54.1667%}.pure-u-xxl-14-24,.pure-u-xxl-7-12{width:58.3333%}.pure-u-xxl-3-5{width:60%}.pure-u-xxl-15-24,.pure-u-xxl-5-8{width:62.5%}.pure-u-xxl-16-24,.pure-u-xxl-2-3{width:66.6667%}.pure-u-xxl-17-24{width:70.8333%}.pure-u-xxl-18-24,.pure-u-xxl-3-4{width:75%}.pure-u-xxl-19-24{width:79.1667%}.pure-u-xxl-4-5{width:80%}.pure-u-xxl-20-24,.pure-u-xxl-5-6{width:83.3333%}.pure-u-xxl-21-24,.pure-u-xxl-7-8{width:87.5%}.pure-u-xxl-11-12,.pure-u-xxl-22-24{width:91.6667%}.pure-u-xxl-23-24{width:95.8333%}.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-24-24,.pure-u-xxl-5-5{width:100%}}@media screen and (min-width:160em){.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-1-12,.pure-u-xxxl-1-2,.pure-u-xxxl-1-24,.pure-u-xxxl-1-3,.pure-u-xxxl-1-4,.pure-u-xxxl-1-5,.pure-u-xxxl-1-6,.pure-u-xxxl-1-8,.pure-u-xxxl-10-24,.pure-u-xxxl-11-12,.pure-u-xxxl-11-24,.pure-u-xxxl-12-24,.pure-u-xxxl-13-24,.pure-u-xxxl-14-24,.pure-u-xxxl-15-24,.pure-u-xxxl-16-24,.pure-u-xxxl-17-24,.pure-u-xxxl-18-24,.pure-u-xxxl-19-24,.pure-u-xxxl-2-24,.pure-u-xxxl-2-3,.pure-u-xxxl-2-5,.pure-u-xxxl-20-24,.pure-u-xxxl-21-24,.pure-u-xxxl-22-24,.pure-u-xxxl-23-24,.pure-u-xxxl-24-24,.pure-u-xxxl-3-24,.pure-u-xxxl-3-4,.pure-u-xxxl-3-5,.pure-u-xxxl-3-8,.pure-u-xxxl-4-24,.pure-u-xxxl-4-5,.pure-u-xxxl-5-12,.pure-u-xxxl-5-24,.pure-u-xxxl-5-5,.pure-u-xxxl-5-6,.pure-u-xxxl-5-8,.pure-u-xxxl-6-24,.pure-u-xxxl-7-12,.pure-u-xxxl-7-24,.pure-u-xxxl-7-8,.pure-u-xxxl-8-24,.pure-u-xxxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxxl-1-24{width:4.1667%}.pure-u-xxxl-1-12,.pure-u-xxxl-2-24{width:8.3333%}.pure-u-xxxl-1-8,.pure-u-xxxl-3-24{width:12.5%}.pure-u-xxxl-1-6,.pure-u-xxxl-4-24{width:16.6667%}.pure-u-xxxl-1-5{width:20%}.pure-u-xxxl-5-24{width:20.8333%}.pure-u-xxxl-1-4,.pure-u-xxxl-6-24{width:25%}.pure-u-xxxl-7-24{width:29.1667%}.pure-u-xxxl-1-3,.pure-u-xxxl-8-24{width:33.3333%}.pure-u-xxxl-3-8,.pure-u-xxxl-9-24{width:37.5%}.pure-u-xxxl-2-5{width:40%}.pure-u-xxxl-10-24,.pure-u-xxxl-5-12{width:41.6667%}.pure-u-xxxl-11-24{width:45.8333%}.pure-u-xxxl-1-2,.pure-u-xxxl-12-24{width:50%}.pure-u-xxxl-13-24{width:54.1667%}.pure-u-xxxl-14-24,.pure-u-xxxl-7-12{width:58.3333%}.pure-u-xxxl-3-5{width:60%}.pure-u-xxxl-15-24,.pure-u-xxxl-5-8{width:62.5%}.pure-u-xxxl-16-24,.pure-u-xxxl-2-3{width:66.6667%}.pure-u-xxxl-17-24{width:70.8333%}.pure-u-xxxl-18-24,.pure-u-xxxl-3-4{width:75%}.pure-u-xxxl-19-24{width:79.1667%}.pure-u-xxxl-4-5{width:80%}.pure-u-xxxl-20-24,.pure-u-xxxl-5-6{width:83.3333%}.pure-u-xxxl-21-24,.pure-u-xxxl-7-8{width:87.5%}.pure-u-xxxl-11-12,.pure-u-xxxl-22-24{width:91.6667%}.pure-u-xxxl-23-24{width:95.8333%}.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-24-24,.pure-u-xxxl-5-5{width:100%}}@media screen and (min-width:240em){.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-1-12,.pure-u-x4k-1-2,.pure-u-x4k-1-24,.pure-u-x4k-1-3,.pure-u-x4k-1-4,.pure-u-x4k-1-5,.pure-u-x4k-1-6,.pure-u-x4k-1-8,.pure-u-x4k-10-24,.pure-u-x4k-11-12,.pure-u-x4k-11-24,.pure-u-x4k-12-24,.pure-u-x4k-13-24,.pure-u-x4k-14-24,.pure-u-x4k-15-24,.pure-u-x4k-16-24,.pure-u-x4k-17-24,.pure-u-x4k-18-24,.pure-u-x4k-19-24,.pure-u-x4k-2-24,.pure-u-x4k-2-3,.pure-u-x4k-2-5,.pure-u-x4k-20-24,.pure-u-x4k-21-24,.pure-u-x4k-22-24,.pure-u-x4k-23-24,.pure-u-x4k-24-24,.pure-u-x4k-3-24,.pure-u-x4k-3-4,.pure-u-x4k-3-5,.pure-u-x4k-3-8,.pure-u-x4k-4-24,.pure-u-x4k-4-5,.pure-u-x4k-5-12,.pure-u-x4k-5-24,.pure-u-x4k-5-5,.pure-u-x4k-5-6,.pure-u-x4k-5-8,.pure-u-x4k-6-24,.pure-u-x4k-7-12,.pure-u-x4k-7-24,.pure-u-x4k-7-8,.pure-u-x4k-8-24,.pure-u-x4k-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-x4k-1-24{width:4.1667%}.pure-u-x4k-1-12,.pure-u-x4k-2-24{width:8.3333%}.pure-u-x4k-1-8,.pure-u-x4k-3-24{width:12.5%}.pure-u-x4k-1-6,.pure-u-x4k-4-24{width:16.6667%}.pure-u-x4k-1-5{width:20%}.pure-u-x4k-5-24{width:20.8333%}.pure-u-x4k-1-4,.pure-u-x4k-6-24{width:25%}.pure-u-x4k-7-24{width:29.1667%}.pure-u-x4k-1-3,.pure-u-x4k-8-24{width:33.3333%}.pure-u-x4k-3-8,.pure-u-x4k-9-24{width:37.5%}.pure-u-x4k-2-5{width:40%}.pure-u-x4k-10-24,.pure-u-x4k-5-12{width:41.6667%}.pure-u-x4k-11-24{width:45.8333%}.pure-u-x4k-1-2,.pure-u-x4k-12-24{width:50%}.pure-u-x4k-13-24{width:54.1667%}.pure-u-x4k-14-24,.pure-u-x4k-7-12{width:58.3333%}.pure-u-x4k-3-5{width:60%}.pure-u-x4k-15-24,.pure-u-x4k-5-8{width:62.5%}.pure-u-x4k-16-24,.pure-u-x4k-2-3{width:66.6667%}.pure-u-x4k-17-24{width:70.8333%}.pure-u-x4k-18-24,.pure-u-x4k-3-4{width:75%}.pure-u-x4k-19-24{width:79.1667%}.pure-u-x4k-4-5{width:80%}.pure-u-x4k-20-24,.pure-u-x4k-5-6{width:83.3333%}.pure-u-x4k-21-24,.pure-u-x4k-7-8{width:87.5%}.pure-u-x4k-11-12,.pure-u-x4k-22-24{width:91.6667%}.pure-u-x4k-23-24{width:95.8333%}.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-24-24,.pure-u-x4k-5-5{width:100%}}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav {&lt;br /&gt;
    background-color: #3E4556;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
    box-shadow: 0 0 5px #656565;&lt;br /&gt;
    font-size: 70%;&lt;br /&gt;
    height: 85px;&lt;br /&gt;
    line-height: 200%;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: 85px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav span, .welcome-nav a {&lt;br /&gt;
    color: #fff !important;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:first-child {&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:last-child {&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    height: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav br {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav img {&lt;br /&gt;
    filter: brightness(1);&lt;br /&gt;
    transition: .3s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover {&lt;br /&gt;
    background-color: #D3BC8E;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover a {&lt;br /&gt;
    color: #3E4556 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover img {&lt;br /&gt;
    filter: brightness(.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.generalframe {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
    border: 2em solid transparent;&lt;br /&gt;
    border-image-slice: calc(100%/6);&lt;br /&gt;
    border-image-repeat: stretch;&lt;br /&gt;
    border-image-width: 1.5;&lt;br /&gt;
    border-image-source: url(/resources/assets/teyvatborder.svg?1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-citizen-dark .tool-button {&lt;br /&gt;
	filter: invert(67%) sepia(7%) saturate(86%) hue-rotate(169deg) brightness(97%) contrast(89%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce .mw-file-element {&lt;br /&gt;
    width: min(100%, 60vw);&lt;br /&gt;
    height: unset;&lt;br /&gt;
    margin: auto;&lt;br /&gt;
    display: block;&lt;br /&gt;
    margin-bottom: 2vh;&lt;br /&gt;
    transition: .5s ease-in-out transform;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce a {&lt;br /&gt;
    display: flow-root;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wowaka-announce .mw-file-element:hover {&lt;br /&gt;
    transform: rotateY(360deg) scale3d(1.2, 1.2, 1.2);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TypewriterMudaki.gif&amp;diff=10051</id>
		<title>Файл:TypewriterMudaki.gif</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TypewriterMudaki.gif&amp;diff=10051"/>
		<updated>2026-09-16T10:10:01Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Privacy&amp;diff=10036</id>
		<title>MediaWiki:Privacy</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Privacy&amp;diff=10036"/>
		<updated>2026-09-16T07:21:33Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: tkmz curse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82:%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9&amp;diff=9995</id>
		<title>Проект:Удаление статей</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82:%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9&amp;diff=9995"/>
		<updated>2026-09-15T10:50:57Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Новое мыло contact@saberpedia.no&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вкратце ==&lt;br /&gt;
&lt;br /&gt;
Итак, Вы хотите удалить статью. Возможно, Вы уже попытались это сделать самостоятельно, а возможно Вы пытались заебать Мысливца или администрацию. В любом случае, запомните:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Мы, зачастую, не удаляем статьи и (или) информацию с них.&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы можем удалить статью если:&lt;br /&gt;
# Она говно&lt;br /&gt;
# В ней написана хуйня (неправдивая информация, слоп обиженки и так далее)&lt;br /&gt;
# Нас об этом просят правоохранительные органы или мы подозреваем что, скорее всего, нас попросят это сделать&lt;br /&gt;
&lt;br /&gt;
В остальных случаях мы, скорее всего, удалять статью не будем, она останется, а с Вас будут смеяться, даже если:&lt;br /&gt;
* Вы создали статью сами&lt;br /&gt;
* Вам очень не нравится то, что там написано&lt;br /&gt;
* Статья о Вашей девушке/собаке/oshi/лучшем друге&lt;br /&gt;
* Вы собираетесь стереть себя с интернета и уйти в подполье&lt;br /&gt;
&lt;br /&gt;
Этот сайт &amp;amp;mdash; храм правды и постиронии, а правду не удаляют. Если Вам не нравится, что о Вас пишут обидные вещи, попробуйте поменять своё поведение. Возможно, избавиться от абзацов с кринжатиной у Вас не получится, но вы всегда можете обрости более положительным лором, который кто-то сможет добавить в статью о Вас.&lt;br /&gt;
&lt;br /&gt;
== Мне всё равно хочется попросить удалить статью ==&lt;br /&gt;
&lt;br /&gt;
Если всё вышеописаное не останавливает Вас, то Вы можете нам написать с этой просьбой. Писать надо сюда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;contact@saberpedia.no&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Обратите внимание:&#039;&#039;&#039;&lt;br /&gt;
* Заёбывание админов и их знакомых в личке понижает Ваши шансы на успешный исход рассмотрения&lt;br /&gt;
* Schicksal подчиняется законам Израиля и нормативным актам, ратифицированным Израилем&lt;br /&gt;
* Мы не являемся судом или прокуратурой и не вмешиваемся на необоснованные жалобы челиков, которые, возможно, пострадали по знанию или не знанию наших редакторов&lt;br /&gt;
* Если у Вас нет достаточного авторитета в какой-либо стране, то вся Ваша корреспонденция будет принята за спам сообщения&lt;br /&gt;
* Если Вы считаете что вас кто-то задоксил или оклеветал, то следуйте установленным в Вашей стране законным путем и не пытайтесь вовлечь третью сторону в ваши споры&lt;br /&gt;
* &#039;&#039;&#039;Без судебного решения мы не предоставляем никаких данных и не обязаны предпринимать никакие действия&#039;&#039;&#039;&lt;br /&gt;
* Все попытки вовлечь нас в какой-либо спор, будут пресекаться судебными исками и уголовно преследоваться&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%B0%D1%81%D1%82%D1%8B_OpenVK&amp;diff=9886</id>
		<title>Подкасты OpenVK</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%B0%D1%81%D1%82%D1%8B_OpenVK&amp;diff=9886"/>
		<updated>2026-09-14T08:31:08Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: /* Список выпусков */ косметические прикольчики&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}{{Клан&lt;br /&gt;
| members = &lt;br /&gt;
| url = {{Ссылка/tg|nickname=podcastovk}}&lt;br /&gt;
| gensec = Aboba224&lt;br /&gt;
| founders = [[ZAZiOs]], Aboba224&lt;br /&gt;
| logo = [[Файл:Подкасты OpenVK pfp.jpg|220px]]&lt;br /&gt;
| birthday = 2022 год&lt;br /&gt;
| status = Выходит&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Подкасты OpenVK — это серия новостных подкастов которая касается [[OpenVK]] и смежных ей проектов. Главный ведущий – Алексей Чащин. Подкасты выходят каждый месяц, первого числа. Не смотря на название, подкаст никак не аффилирован с администрацией OpenVK.&lt;br /&gt;
&lt;br /&gt;
== История ==&lt;br /&gt;
=== Первоначальная попытка ===&lt;br /&gt;
Изначальна идея подкастов появилась в [[ZAZiOs]] в 2022 году. С его слов, идея пришла по приколу, делать новостную сводку по тому что происходит в опенвк в аудиоформате. Реализовывать идею он начал вместе с [[SdzkHelince|Хелинсом]], так Даниил записывал голос, а Хелинс стал сценаристом. Первые подкасты вышли в январе и в феврале того же года, длинною до 3 минут. Так же видеоверсии подкастов делал [[Даниил Мысливец]]. Подкасты задумывались как ежемесячные, но дальнейшем работа остановилась, поскольку Хелинсу надоело писать сценарий. &lt;br /&gt;
&lt;br /&gt;
15 ноября 2023, в группе Подкаст OpenVK было залито два выпуска в аудио формате. В тот же день было объявлено публично, что новых подкастов не будет, поскольку нету людей, которые бы писали сценарий&amp;lt;ref&amp;gt;https://openvk.org/wall-2689_3&amp;lt;/ref&amp;gt;. Через примерно полтора года, 19 мая 2025 был размещен опрос «Вернуть ли Подкаст OpenVK?» в котором проголосовали 17 человек, 14 из них захотели вернуть формат подкастов («&#039;&#039;&#039;Да, я бы слушал сводку новостей за месяц&#039;&#039;&#039;»)&amp;lt;ref&amp;gt;https://openvk.org/wall-2689_4&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Наше время ===&lt;br /&gt;
Инициативу с подкастами подхватил Алексей Чащин (он же Aboba224), была создана группа «Подкасты OpenVK», и выложен первый пост 29 июня 2025-го года об анонсе первого выпуска, с участием [[Дмитрий Стеклопакеты|Дмитрия Стеклопакеты]]&amp;lt;ref&amp;gt;https://openvk.org/wall-10067&amp;lt;/ref&amp;gt;. В дальнейшем один из дикторов подкаста стал [[ZAZiOs]] - первоначальный создатель подкастов OpenVK.&lt;br /&gt;
&lt;br /&gt;
26 октября по результатам опроса, был создан канал в телеграме &amp;quot;Подкасты OpenVK&amp;quot; с тем же контентом, однако там подкасты выпускаются раньше чем в OpenVK на час. Кроме самих подкастов и дополнений к ним, в группах выходят так же новости касаемо OpenVK и смежных проектов&lt;br /&gt;
&lt;br /&gt;
== Структура ==&lt;br /&gt;
Подкасты OpenVK выходят в рамках дозволенной длины аудиозаписи OpenVK — до 30 минут. Первоначально подкасты выходили в промежутке 3 минут, как оригинальные подкасты 2023-го года, так и первые выпуски подкастов Чащина. Кроме самого подкаста, выпускаемого в аудио формате, к ним прилагаются обложки, за авторством [[Жека Хинкаль|Жеки Хинкаль]]. По словам самого Aboba224, он платил ей 300 рублей за каждую обложку, и это становил весь бюджет одного подкаста. Не каждый подкаст обложку заказывал у Жеки, иногда обращались к другим людям, но в дальнейшем она стала главной художницей. &lt;br /&gt;
&lt;br /&gt;
Со временем, хронометраж расширялся, в некоторых случаях подкаст выходит в двух частях, зависимо насколько информативный выдался месяц. На других платформах, как Telegram, Spotify или Apple Music подкасты выходили одной частю, без деление. Обязательно сначала идет блок новостей, а под конец и интервью с кем то. Хронометраж удалось расширить не только благодаря новостям, но и расширению команды Подкаста, так [[Legro]] присоединился как звукорежисер, а так же все больше пометных личностей начали приходить на подкаст, к примеру [[Veselcraft]] или [[Даниил Мысливец]]. &lt;br /&gt;
&lt;br /&gt;
== Команда ==&lt;br /&gt;
* Aboba224 — главный ведущий, сценарист и CMM-щик подкастов.&lt;br /&gt;
* [[ZAZiOs]] — второй диктор.&lt;br /&gt;
* [[Legro]] — звукорежиссёр.&lt;br /&gt;
* [[Жека Хинкаль]] — главная художница обложек подкастов&lt;br /&gt;
&lt;br /&gt;
== Список выпусков ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список выпусков Подкасты OpenVK&lt;br /&gt;
! Дата&lt;br /&gt;
! Диктор&lt;br /&gt;
! Гости выпуска&lt;br /&gt;
! Примечания&lt;br /&gt;
|-&lt;br /&gt;
|9.01.2022&lt;br /&gt;
|[[ZAZiOs]]&lt;br /&gt;
|гостей не было&lt;br /&gt;
|Пилотный выпуск&lt;br /&gt;
|-&lt;br /&gt;
|02.2022&lt;br /&gt;
|[[ZAZiOs]]&lt;br /&gt;
|[[Rudzik8|Микита Вишневський]]&lt;br /&gt;
|Последний выпуск со старой командой&lt;br /&gt;
|-&lt;br /&gt;
|01.07.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Дмитрий Стеклопакеты]]&lt;br /&gt;
|Первый выпуск Подкасты OpenVK с новой командой&lt;br /&gt;
|-&lt;br /&gt;
|01.08.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|Чиёрт&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.09.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Tinelix]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.10.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|Роман Козловский&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.11.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Неру Асано]]&amp;lt;br/&amp;gt;[[Жека Хинкаль]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.12.2025&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Неру Асано]]&amp;lt;br/&amp;gt;[[Дмитрий Стеклопакеты]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.01.2026&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Даниил Мысливец]]&amp;lt;br/&amp;gt;[[Veselcraft|Владимир Баринов]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.02.2026&lt;br /&gt;
|Aboba224&lt;br /&gt;
|гостей не было&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.03.2026&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[chelka0]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.04.2026&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Ника Фалалеева]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.05.2026&lt;br /&gt;
|Aboba224&amp;lt;br/&amp;gt;[[ZAZiOs]]&lt;br /&gt;
|[[SaursVepur]]&lt;br /&gt;
|Первый выпуск современного подкаста, где Даниил вернулся в качестве диктора&lt;br /&gt;
|-&lt;br /&gt;
|01.06.2026&lt;br /&gt;
|Aboba224&amp;lt;br/&amp;gt;[[ZAZiOs]]&lt;br /&gt;
|[[Legro]]&amp;lt;br/&amp;gt;Overtake Lab&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.07.2026&lt;br /&gt;
|Aboba224&lt;br /&gt;
|[[Legro]], [[Неру Асано]], [[ZAZiOs]], [[Eversiege]], [[Даниил Мысливец|DM]], [[fayzetwin]], [[Дмитрий Стеклопакеты|Дмитрий Стеклопакет]], [[saursvepur]], [[Жека Хинкаль]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|01.08.2026&lt;br /&gt;
|[[ZAZiOs]], [[HayLin|Alex]], refrigerator god, mikuryzen, [[fayzetwin]], ersn&lt;br /&gt;
|дикей, [[chelka0]]&lt;br /&gt;
|В этом выпуске Алексей Чащин не смог озвучить выпуск, поэтому озвучили другие&lt;br /&gt;
|-&lt;br /&gt;
|01.09.2026&lt;br /&gt;
|Aboba224&amp;lt;br/&amp;gt;[[ZAZiOs]]&lt;br /&gt;
|[[fayzetwin]], [[eversiege]], Даниил Яковлев&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{Navbox OpenVK|title=Ещё про OpenVK}}&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=Ghost&amp;diff=9882</id>
		<title>Ghost</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=Ghost&amp;diff=9882"/>
		<updated>2026-09-13T11:34:53Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: потом допишу х2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
{{Челик&lt;br /&gt;
| image = [[File:Ghost.jpeg|128px]]&lt;br /&gt;
| caption = Аватарка Ghost на митубе&lt;br /&gt;
| birthday = 15 ноября 1997&lt;br /&gt;
| nicknames = Marz Mitzi, Ghostie-P, Ghost and Pals и много других&lt;br /&gt;
| activity_years = 2013 - н.в.&lt;br /&gt;
| activity = Музыкант, любитель синтезаторов голоса (Vocaloid, SynthV, CeVIO)&lt;br /&gt;
| language = Английский&lt;br /&gt;
| birthplace = США, предположительно [https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B5%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%8F%D1%81 библейский пояс]&lt;br /&gt;
| location = США, средний запад&amp;lt;ref&amp;gt;[https://web.archive.org/web/20200823131732/https://www.ghostandpals.com/ Архивировано. Home | hee hee. ghostandpals.com. Дата обращения: 23 августа 2020]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| status = Шизеет чутчут&lt;br /&gt;
| marital_status = Замужем&lt;br /&gt;
| orientation = Неизвестно, но имеет, возможно небинарную, жену&lt;br /&gt;
| yt = [https://www.youtube.com/@ghostandpals @ghostandpals]&lt;br /&gt;
| links_other = [https://www.ghostandpals.com/ Личный сайт]&lt;br /&gt;
}}&lt;br /&gt;
{{Цитата|quote=my friends abandoned meeeeeee ;______;|author=Ghost}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ghost&#039;&#039;&#039; &amp;amp;mdash; вокалоид-продюсер и художник-иллюстратор родом из американской глубинки и тамблера, специализирующийся на песенках про различные психические расстройства и прочие lowkey табуированые и &amp;quot;тёмные&amp;quot;, чувствительные темы. Начал деятельность за год и двадцать дней до аннексии Крыма (1 февраля 2013 года), загрузив нынче удалённую композицию &amp;quot;Cure&amp;quot; на ютубчик под именем Ghostie. Является небинарной персоной и использует местоимения they/them, однако допускает обращения через he/him в [https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%B0%D0%B2%D1%8F%D0%BD%D1%81%D0%BA%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8 языках, в которых singular they работает через жопу].&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ghost.jpeg&amp;diff=9880</id>
		<title>Файл:Ghost.jpeg</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ghost.jpeg&amp;diff=9880"/>
		<updated>2026-09-13T10:51:30Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=TORA_V4/en&amp;diff=9831</id>
		<title>TORA V4/en</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=TORA_V4/en&amp;diff=9831"/>
		<updated>2026-09-10T15:32:51Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: use displaytitle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:TORA V4}}&lt;br /&gt;
{{Изложение/en}}&lt;br /&gt;
{{Челик/en&lt;br /&gt;
|name=PKAkatora&lt;br /&gt;
|image=[[Image:TORA_V4.jpeg|92px]]&lt;br /&gt;
|caption=Tora&#039;s YouTube pfp (2025)&lt;br /&gt;
|nicknames=TORA_V4, Noramato&lt;br /&gt;
|activity_years=2013 - today&lt;br /&gt;
|activity=VOCALOID-producer&lt;br /&gt;
|language=english&lt;br /&gt;
|interests=music, suspicious porn&lt;br /&gt;
|yt=[https://www.youtube.com/@uzmk_mato Noramato]&lt;br /&gt;
|links_other=[https://soundcloud.com/uzmk_mato Soundcloud]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKAkatora&#039;&#039;&#039; (&#039;&#039;also known as PKBowsy, TORA_V4, Noramato, and 野良まと&#039;&#039;) is a dutch VOCALOID cover artist of moderate popularity. He has his own YouTube channel, which he has been running since 2013 and, as of November 26, 2024, has 160,000 subscribers&amp;lt;ref&amp;gt;[https://web.archive.org/web/20241126022427/https://www.youtube.com/@uzmk_mato Archived. 野良まと / Noramato. Channel. YouTube. Date of archival 26 november 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Tora is primarily focused on creating VOCALOID covers of various songs, including originally non-Vocaloid ones; occasionally publishes various jokes and post-ironic content&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=rxiSecU4EZg 野良まと / Noramato. hatsune miku loses her job. YouTube. Published online 18 april 2021.]&amp;lt;/ref&amp;gt;. Voiced at least one UTAUloid twice&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RVy0lmyoBS8 野良まと / Noramato. utauloid comparison (2013 vs 2021). YouTube. Published online 18 february 2021.]&amp;lt;/ref&amp;gt;. Collaborated with SilvaGunner&amp;lt;ref&amp;gt;[https://siivagunner.fandom.com/wiki/PKBowsy SiIvaGunner Wiki. PKBowsy. Fandom.com. Published online 25 november 2017.]&amp;lt;/ref&amp;gt; and TimmyTurnersGrandDad&amp;lt;ref&amp;gt;[https://ttgd.fandom.com/wiki/PKAkatora TimmyTurnersGrandDad Wiki. PKAkatora. Fandom.com. Published online 3 june 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
He is known for constantly getting into all sorts of trouble, which led to him changing his nickname several times and being removed from the VOCALOID wiki for not meeting community standards. He made some people so butthurt that they wrote a dossier on him on that groyper-incel shithole called Kiwifarms&amp;lt;ref&amp;gt;[https://kiwifarms.st/threads/pkakatora-believes-hes-above-end-user-lisence-agreements-copyright-crediting-creators-and-he-rarely-tells-the-full-story.73886/ Gumesis. PKAkatora believes he&#039;s above End User Lisence Agreements, copyright, crediting creators, and he rarely tells the full story. KiwiFarms. Published online 27 june 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Discography ==&lt;br /&gt;
&lt;br /&gt;
Tora produced [https://www.youtube.com/@uzmk_mato/videos a large amount of covers] and RIP remixes for [https://siivagunner.fandom.com/wiki/Category:PKBowsy SilvaGunner] (26) and [https://ttgd.fandom.com/wiki/Category:PKAkatora TTGD] (54). For the sake of brevity, the only compositions listed in this section are the ones to which PKAkatora has made significant contributions&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list Amandelen. TORA V4 songs list. Vocaloid Lyrics Wiki. Published online 22 august 2020.]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list/Tuning Neiranei. TORA V4 songs list. Vocaloid Lyrics Wiki. Published online 23 august 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JQ1Dqj0FG_Y Corona feat. Hatsune Miku (YouTube, 2020, 1M+)] &amp;amp;mdash; original song, inspired by a TikTok video made by Netta Brazilai;&lt;br /&gt;
* [https://yonkagor.bandcamp.com/track/fallacy-miku-ver YonKaGor - Fallacy (MIKU ver) (Bandcamp, 2022)] &amp;amp;mdash; YonKaGor&#039;s single, official cover, PKAkatora was invited as VOCALOID tuning expert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;JQ1Dqj0FG_Y&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;Rab4-FILXSI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criticism ==&lt;br /&gt;
&lt;br /&gt;
=== Conflict with Raki Saionji ===&lt;br /&gt;
&lt;br /&gt;
In 2019, Tora (known as PKBowsy at the time) used Project DIVA Future Tone Arcade hacked ROM for his content, which was produced by pro-trump&amp;lt;sup&amp;gt;[&#039;&#039;source?&#039;&#039;]&amp;lt;/sup&amp;gt; modder Raki Saionji. Tora allegedly didn&#039;t credit Raki, which made him very upset and led him to hiding the GitHub repo with the mod. PKBowsy changed his nickname after this incident.&lt;br /&gt;
&lt;br /&gt;
To this day it is not known if Tora has actually credited Raki. Various claims that he did so in YouTube comments once&amp;lt;ref&amp;gt;[https://github.com/rakisaionji/FrankenToneArcade/issues/1#issuecomment-488371448 Nastys. GitHub Comment. Published online 1 may 2019.]&amp;lt;/ref&amp;gt; exist, however there is no way to verify if that comment ever existed as it is not available today. Moreover, Tora himself told that he doesn&#039;t &amp;quot;credit waste&amp;quot; when asked about the situation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Rakisaionjimoment.png|Raki Saionji having a normal one&lt;br /&gt;
Файл:57110300-01595400-6d30-11e9-857c-a4b76d8376f7.png|PKBowsy doesn&#039;t credit waste it seems&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Piracy and UTAU porting ===&lt;br /&gt;
&lt;br /&gt;
PKAkatora used pirated VOCALOID voicebanks and even made UTAU ports of them. In western vocaloid community this behaviour represents cringe of the highest order&amp;lt;ref&amp;gt;[https://www.reddit.com/r/Vocaloid/comments/zfs60u/why_is_the_vocaloid_community_against_piracy/ Dr_Zwi. Why is the Vocaloid community against piracy? Reddit. Published online 8 december 2022.]&amp;lt;/ref&amp;gt;. Tora has never actually shared the ported voicebanks with anyone, however VOCALOID Wiki moderators found him uploading a cover made with UTAU-ported Kaito to be a sufficient reason for issuing a permanent ban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:AngelEmfrblResponse.png|Angel&#039;s ban reason and PKAkatora&#039;s &amp;quot;appeal&amp;quot;&lt;br /&gt;
Файл:BV1yJ411Y7uS_p1.ia.mp4|That Hameln cover made with UTAU Kaito&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KAFU voicebank incident ===&lt;br /&gt;
&lt;br /&gt;
[[File:1615280886666.jpg|мини|Tora got disqualified|200px]]&lt;br /&gt;
&lt;br /&gt;
Once upon a time PKAkatora managed to download KAFU voicebank from AHS website before the general release. He did so by guessing the URL address of the file, which was uploaded by AHS staff ahead of time without proper nginx access configuration. After successfully recovering the voicebank Tora allegedly leaked it and made a cover of some&amp;lt;sup&amp;gt;[&#039;&#039;which?&#039;&#039;]&amp;lt;/sup&amp;gt; song with it. According to Twitter, AHS expressed interest in taking legal action against Tora&amp;lt;ref&amp;gt;[https://x.com/mikumikufigures/status/1356181298696564739 mikumikufigures! ✿. Kafu&#039;s cevio ai voicebank was leaked by a popular cover artist. Twitter. Published online 1 february 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Despite this brief conflict with AHS, Tora has taken part in Koharu Rikka giveaway organized by them. They even called him a winner&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140756 Anonymous. Western Vocaloid Community. lolcow.farm. Published online 3 september 2021.]&amp;lt;/ref&amp;gt;, but later disqualified him after getting reminded that he was the one who leaked KAFU half a year ago&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140762 Anonymous. Western Vocaloid Community. lolcow.farm. Published online 3 september 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;220&amp;quot;&amp;gt;&lt;br /&gt;
File:KAFU.mp4|That KAFU cover&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Minors on Discord ===&lt;br /&gt;
&lt;br /&gt;
Tora had an NSFW channel on his Discord server. On a server with minors, yeah, just like [[Ермаков|DE]] did, except that instead of boots a guy named vito has posted shota-porn there. At that moment Tora was AFK, so moderator named Violin was the one to take the action against vito&#039;s tomfoolery. In the end, vito was banned by Violin&amp;lt;ref&amp;gt;[https://connection19.tumblr.com/post/674590646982541312/tora-v4-pkakatora-pkbowsy Connection19. About the Vocaloid cover artist TORA_V4 / PKAkatora / PKBowsy. Tumblr. Published online 27 january 2022]&amp;lt;/ref&amp;gt;, however Tora unbanned vito as soon as he became aware of his &amp;quot;exquisite taste&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Tora has denied that this situation ever happened on his Discord until the transcripts became available to the general public on Tumblr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:61a5d58ac5f74f1196976f3c056759dd2a93b63d.png&lt;br /&gt;
Файл:36182dc37db99a30aa6f79aab0e67ecd74011c57.png&lt;br /&gt;
Файл:bbba8075192c02a586acbad09c55b076762148b6.png|Tora denies accusations on Twitter&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Suspicious preferences ===&lt;br /&gt;
&lt;br /&gt;
Tora is a big fan of shota content and has even thirsted over a 16 year old character on Twitter which is, frankly, not that surprising given the whole vito situation that took place on his Discord server. Nontheless, on September 6th 2022 his nsfwtwt alt-account got exposed, which gave the general public an opportunity to learn about his &amp;quot;preferences&amp;quot;. They, apparently, include incest, noncon, furry stuff and pokemons. Like, non-humanized pokemons. Tora has also reposted NSFW content with chipmunks from Chip and Dale and with Big Man, a stingray from Splatoon&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1ozjU3QKPAs-CwNRde840PTKR-MKQKx9yzuxtF91CcGc/edit Galatea. Tora. Google Docs. Published online 6 september 2022.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;200&amp;quot; heights=&amp;quot;200&amp;quot; caption=&amp;quot;Example of reposts/subscriptions of @toraafterdark&amp;quot;&amp;gt;&lt;br /&gt;
noncredibleopenvk5.png&lt;br /&gt;
noncredibleopenvk1.png&lt;br /&gt;
noncredibleopenvk3.png&lt;br /&gt;
noncredibleopenvk2.png&lt;br /&gt;
noncredibleopenvk4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%91%D1%80%D0%B0%D0%B9%D0%B0%D0%BD_%D0%9B%D0%B0%D0%BD%D0%B4%D1%8E%D0%BA/en&amp;diff=9485</id>
		<title>Брайан Ландюк/en</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%91%D1%80%D0%B0%D0%B9%D0%B0%D0%BD_%D0%9B%D0%B0%D0%BD%D0%B4%D1%8E%D0%BA/en&amp;diff=9485"/>
		<updated>2026-08-22T19:59:31Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: потом дополню ай гесс&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Bryan Lunduke}}&lt;br /&gt;
{{Челик&lt;br /&gt;
| name = Bryan Lunduke&lt;br /&gt;
| image = [[Файл:Ландюк.png|220px]]&lt;br /&gt;
| caption = Bryan&#039;s face&lt;br /&gt;
| birthday = February 18th 1980 (alleged)&lt;br /&gt;
| activity_years = 2006 (ongoing)&lt;br /&gt;
| activity = Journalist-Podcaster, Software Engineer&lt;br /&gt;
| language = English, עִבְרִית&lt;br /&gt;
| location = Protland, OR, USA (alleged)&lt;br /&gt;
| irl_name = Bryan Lunduke&lt;br /&gt;
| status = Alive&lt;br /&gt;
| politviews = Conservative&lt;br /&gt;
| orientation = Heterosexual&lt;br /&gt;
| marital_status = Married&lt;br /&gt;
| interests = Computers, FLOSS (primarily Linux)&lt;br /&gt;
| links_other = [https://x.com/LundukeJournal Twitter], [https://lunduke.com Personal Website]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bryan Lunduke&#039;&#039;&#039; (ukrainian: &#039;&#039;&#039;Брайан Ландюк&#039;&#039;&#039;, hebrew: &#039;&#039;&#039;בריאן לונדוק&#039;&#039;&#039;; born February 18th 1980&amp;lt;ref&amp;gt;Alleged DOB, might also fall in 1981-1984 range, according to Bryan himself he was born in first half of the &#039;80s&amp;lt;/ref&amp;gt;; USA) is an American conservative journalist, podcaster and software developer.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=OpenVK&amp;diff=9484</id>
		<title>OpenVK</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=OpenVK&amp;diff=9484"/>
		<updated>2026-08-22T19:40:48Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: /* Фичи и философия */ Баринов попросил Клаудию добавить execute месяц назад&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Хорошая статья}}{{Сайт&lt;br /&gt;
| slogan = время подавать напитки и вершить судьбы&lt;br /&gt;
| logo = [[File:OpenVK.jpeg|70px|center]]&lt;br /&gt;
| screenshot = [[File:OpenVK_Screenshot.png|260px|center]]&lt;br /&gt;
| caption = OpenVK в 2023 году&lt;br /&gt;
| url = [https://openvk.su https://openvk.su], [https://openvk.org https://openvk.org]&lt;br /&gt;
| type = социальная сеть, пародия на старый ВКонтакте, свободный движок соцсети&lt;br /&gt;
| commercial = &#039;&#039;де-юре&#039;&#039;: некоммерческий&lt;br /&gt;
&#039;&#039;де-факто&#039;&#039;: частично коммерческий, для покупки подарков и рейтинга необходимы голоса, которые можно получить на раздачах или купив за криптовалюту&lt;br /&gt;
| registration = не обязательная, свободная&lt;br /&gt;
| languages = в основном русский, движок переведён на 12 языков&lt;br /&gt;
| tech = PHP, MySQL, Apache Kafka, кастомный фреймворк&lt;br /&gt;
| serverloc = Франция&lt;br /&gt;
| owner = Фонд OpenVK&lt;br /&gt;
| creator = [[Владимир Баринов]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Daniel Myslivets|Даниил Мысливец]]&lt;br /&gt;
| birthday = 2017 год&lt;br /&gt;
| status = OpenVK Classic, Reborn закрыты, OpenVK 2.0 активен и развивается с 2019.&lt;br /&gt;
}}&#039;&#039;&#039;OpenVK&#039;&#039;&#039; — социальная сеть с открытым исходным кодом и явление интернет-культуры, возникшая летом 2017 года благодаря усилиям [[Владимир Баринов|Владимира Баринова]] и множеству других интернет-задротов.&lt;br /&gt;
&lt;br /&gt;
== Ранняя история ==&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Classic ===&lt;br /&gt;
Первое воплощение OpenVK, написанное [[Veselcraft|Владимиром Бариновым]] совместно с [[Lumaeris]], [[Kos Furler]] и немного [[Ponywka]] в 2017—2019 годах. Координация разработки шла в ныне заброшенной/ых группе/ах в VK. При разработке не использовалось php-фреймворков, шаблонизаторов и прочего, только процедурный php, отчего проект сильно пострадает в будущем. В дизайне сайта прослеживались многие новичковые ошибки, а именно неровные отступы, разная цветовая палитра, неровная ширина блоков, неоправданный размер шрифта и т. д.&lt;br /&gt;
&lt;br /&gt;
Обрёл первую популярность благодаря треду от Veselcraft’а на имиджборде Двач. Сайт стали часто взламывать из-за большого количества дыр. Сеть была относительно популярной, но всё же закрылась, после масштабного взлома жопы с вайпом базы данных.&lt;br /&gt;
&lt;br /&gt;
Репозитории с кодом OpenVK Classic были запривачены какое-то время чтобы люди случайно не ставили его себе на сервер, но на декабрь 2024 они открыты. Но некоторые зачем-то продолжают его ставить, наверное из за простоты в установке.&lt;br /&gt;
&lt;br /&gt;
==== l-lacker Social ====&lt;br /&gt;
OpenVK, будучи open-source проектом, часто вдохновляет людей на создание своих инстансов и на форкинг. Один из самых популярных форков OpenVK Classic — l-lacker Social, созданная [[Лласкер|l-lackerом]]. l-laSocial имела слегка иной внешний вид, разные скины, большое количество галочек и различные улучшения, а также API. Имел пропатченные SQL-уязвимости. Изначально размещался на InfinityFree, но после взлома админ-панели пользователем [[Cipherka]], айпи которого был забанен InfinityFree, хостинг-аккаунт сети был заблокирован, после этого сеть переехала на SpringHosting (нынче UnlimitSpace).&lt;br /&gt;
&lt;br /&gt;
=== OpenVK Reborn ===&lt;br /&gt;
Командой OpenVK нередко предпринимались попытки переписать OpenVK Classic более правильно. Проект по возрождению OpenVK назывался OpenVK Reborn. Изначально он курировался [[Kordenz|Коробкой]], но коробка не смог пояснить команде всё целиком, из-за чего проект быстро сдулся. После он был переименован в OpenVK Classic Reborn и разработка была начата заново, уже под руководством [[Ponywka|Поньки]]. На этот раз в OpenVK появился роутер и шаблоны. Но вскоре и Понька покинул проект, сказав, что его надо переписать. Тогда де-факто вторым руководителем разработки стала [[Целестора]], после чего в OpenVK Classic Reborn появился новый роутер и новые шаблоны, что позволило незначительно ускорить темп разработки, однако даже так закончить проект, хотя бы до релиза, не удалось. У Reborn’а не было публичных релизов и стадии публичного бета-тестирования.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:OpenVK Reborn.png|Одна из страниц OpenVK Reborn&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== «Клоны» OpenVK ===&lt;br /&gt;
{{Плашка&lt;br /&gt;
| title = Информация в данном разделе устарела и не отображает текущую действительность.&lt;br /&gt;
| text = &lt;br /&gt;
}}&lt;br /&gt;
У OpenVK было много не только форков, но и «клонов», проектов, которые писались другими разработчиками и косили в определённой степени под OpenVK (клон клона, ахуй). Их было не очень-то и много, правда. Из значимых можно отметить разве что OpenVK Поньки, LibreSoc Целесторы (на тот момент известной как Вр*ска) и OpenVK 5. Ни один из проектов не сыскал какой-либо большой популярности. LibreSoc, к слову, был частично написан на компонентах Laravel и имел AJAX-подгрузку всего в стиле [https://turbo.hotwired.dev/ Turbo]. Скриншотов LibreSoc’а не осталось: (&lt;br /&gt;
&lt;br /&gt;
== OpenVK 2 ==&lt;br /&gt;
&#039;&#039;Этот раздел ещё не закончен&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
OpenVK 2.0, теперь уже без Classic, был последней попыткой переписать OpenVK. На этот раз, на удивление, получилось. В этот раз за основу движка лёг самописный php-фреймворк libchandler, который правда оказался говном, но он поддерживает шаблоны Latte, ACL и прочие приколы. Разработка OpenVK 2.0 началась с 2019 года и с тех пор то активно, то пассивно ведётся. По состоянию на 2025 год, она притихла, но проект продолжает жить благодаря глобальной ленте и чату в Telegram и в какой-то степени развиваться.&lt;br /&gt;
&lt;br /&gt;
Существует т. н. «Команда разработчиков OpenVK», в которую входят [[Veselcraft|Владимир Баринов]], [[Daniel Myslivets|Даниил Мысливец]], [[Kos Furler]], [[Lumaeris]], [[WerySkok]], [[Целестора]], *, [[maksales]], *, n1rwana, mrilyew, *, и, что удивительно, *. Примерно с 2021 у первых 6 разработчиков стало меньше времени на активное развитие проекта, и оно стало вестись в основном 8ым, 10ым и 11ым человеками из списка.&lt;br /&gt;
&lt;br /&gt;
В отличии от прошлых воплощений OpenVK, это — самое популярное и имеет вокруг себя живой фендом; может классифицироваться почти как явление.&lt;br /&gt;
&lt;br /&gt;
=== Фичи и философия ===&lt;br /&gt;
В отличии от предыдущих версий OpenVK, в этой разработчики, кажется, смирились с тем, что не смогут сделать 1:1 копию старого ВКонтакте, поэтому просто начали творить всё подряд, что хочется; из-за чего OpenVK 2.0 представляет из себя сборную солянку фич, некоторые из которых были в VK, некоторых не было, некоторые вовсе не понятно откуда взялись, но они просто есть. Основные функции присутствуют, но хотелось бы отметить данные вещи:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Фича&lt;br /&gt;
!Есть в OpenVK?&lt;br /&gt;
!Была в VK?&lt;br /&gt;
|-&lt;br /&gt;
|Музыка&lt;br /&gt;
|Не было ощутимое время&lt;br /&gt;
|Была и есть&lt;br /&gt;
|-&lt;br /&gt;
|Анонимные посты&lt;br /&gt;
|Удалено в августе-сентябре 2025&lt;br /&gt;
|В 2017 в качестве эксперимента&lt;br /&gt;
|-&lt;br /&gt;
|API.execute&lt;br /&gt;
|Реализован Клаудией&lt;br /&gt;
|Есть!!!&lt;br /&gt;
|-&lt;br /&gt;
|Глобальная лента&lt;br /&gt;
|Да&lt;br /&gt;
|Если постараться, можно найти.&lt;br /&gt;
|-&lt;br /&gt;
|Темы оформления&lt;br /&gt;
|Да/но с проблемами&lt;br /&gt;
|Нет/но есть тёмная тема&lt;br /&gt;
|-&lt;br /&gt;
|Рейтинг&lt;br /&gt;
|Да&lt;br /&gt;
|Был до 2011; на данный момент присутствует в скрытом виде&lt;br /&gt;
|-&lt;br /&gt;
|Фоны профилей&lt;br /&gt;
|Да&lt;br /&gt;
|Нет, но есть обложки.&lt;br /&gt;
|-&lt;br /&gt;
|Беседы&lt;br /&gt;
|Вообще нет!&lt;br /&gt;
|Да!&lt;br /&gt;
|-&lt;br /&gt;
|Кастомные поля&lt;br /&gt;
|Есть, но ты про них даже не знал&lt;br /&gt;
|Нету, но есть куча других полей&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Анонимка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK была добавлена 7 ноября 2017 года в качестве эксперимента. В OpenVK появилась 15 ноября 2021. В отличии от обычных постов, у анонимных автор будет заменён на анонимный аккаунт. Стена анонима на основном инстансе долгое время была открыта, но на данный момент она таковой не является. У анонимки есть баг, который не был исправлен с момента выхода фичи, а именно в уведомлении автор не заменяется на анонима. Плюс нельзя комментировать от анонима, так что если на твоё высказывание ответили, придётся отвечать от своего имени.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;API.execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В VK это метод, позволяющий вызвать одновременно до 25 других методов API и вернуть в своём json формате. В OpenVK такого нет, потому что~ ~сложно. Поэтому с клиентами vk ovk не оч совместим. Плюс нет хранимых процедур и API-приложений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Глобальная лента&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Глобальная лента это по сути абсолютно все посты с сайта в порядке их выхода, за исключением тех стен которые ты проигнорировал/интровертных стен. Охуенно вечерком почитать что запостили аниме аватарочки и сколько лайков поставили на твои посты.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Темы оформления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Говоря цинично, папка, загружаемая на сервер, которая представляет собой themepack, который можно выбрать в настройках сайта. Themepack позволяет заменить шаблоны и стили сайта на свои. Чаще всего используется для перекраса цветов и ассетов сайта. Ввиду сложности создания (придётся целый инстанс openvk на компьютер ставить, целого админа просить чтобы он добавил твою тему!!) не пользуются популярностью. Да и после двух обновлений поиска на основном инстансе 50 % тем развалились и чинить их никто не собирается. Так что люди пользуются сторонними инструментами по типу stylus или tampermonkey.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рейтинг&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Функция в ВК, существовавшая до 2011, приносящая виртуальную репутацию твоему профилю и продвигающая тебя в поиске. Но её удалили где-то в 2011, а все деньги, потраченные на неё, исчезли. В OpenVK существует в качестве постиронии. Рейтинг в овк повышается через голоса и его можно повысить другому человеку (правда со своей страницы). Раньше от него вообще не было никакого смысла, но сейчас можно посмотреть топ людей в рейтинге, нажав на кнопку «поиск» в шапке. Вот ты посмотри, и подумай, сможешь ли выйти хотя бы в топ-30.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Топ популярных групп&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Отображал список 30 самых популярных групп на инстанции. Но был удалён через полгода из-за нестабильности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NSFW-метка&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Позволяет пометить пост как «небезопасный для работы», и тогда его покроет чёрный квадратик, убирающийся при клике. В VK есть, но не знаю как она ставится.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Фоны профилей&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Появились 12 декабря 2022. Задают тон твоей странице. Некоторым людям они не нравятся, потому что нарушают минимализм.&lt;br /&gt;
&lt;br /&gt;
===== Беседы =====&lt;br /&gt;
Больная тема для OpenVK, ведь на сайте, целью которого указано общение, нет такого базового функционала как групповой чат. Это связано с реализацией сообщений, которая не обновлялась с 2020 года.&lt;br /&gt;
&lt;br /&gt;
⬆️🤓 LongPoll в ovk, а конкретней в Chandler рассчитан на одного пользователя; это можно понять, если открыть два окна с сообщениями и в одном из них что-нибудь написать: в другом окне сообщение не появится. Плюс раньше он часто отваливался. Так же «переписка» не реализована как модель и заточена конкретно на двух пользователей. Наработки бесед как entity можно увидеть в Web/Repositories/Conversations.php, но почему они не были доведены до ума, неизвестно. В диалогах ещё нельзя прикреплять файлы, из-за проблем с приватностью, а какой смысл в диалогах без медиа.&lt;br /&gt;
&lt;br /&gt;
⬇️🤓На январь 2025 ведутся работы по созданию бесед. Пожелаем удачи разработчикам.&lt;br /&gt;
&lt;br /&gt;
=== Разработка ===&lt;br /&gt;
Разработка ведётся на [https://github.com/openvk/openvk GitHub]. Проект распространяется под лицензией GNU LGPLv2.0, что позволяет не раскрывать исходные тексты своего сайта, если не распространять его дистрибутивы. Также допускается использование OpenVK для создания на его основе проприетарных решений, однако таких на данный момент нет.&lt;br /&gt;
&lt;br /&gt;
==== Федиверс ====&lt;br /&gt;
В OpenVK ещё с 2021 года есть планы сделать поддержку протокола [[ActivityPub]]&amp;lt;ref&amp;gt;https://github.com/openvk/openvk/issues/61&amp;lt;/ref&amp;gt;, тем самым включив соцсеть в состав [[Федиверс]]а, на что так же есть намёк в описании проекта на GitHub: «&#039;&#039;&#039;Not-yet-federated&#039;&#039;&#039; open source social network inspired by VK.»&lt;br /&gt;
&lt;br /&gt;
Несмотря на это, поддержка так и не реализована, потому что это не сильно интересно разработчикам, а для желающих всё же помацать федерированный клон ВК есть [[Smithereen]].&lt;br /&gt;
&lt;br /&gt;
=== Популярность и критика ===&lt;br /&gt;
OpenVK 2 значительно популярнее предыдущих итераций OpenVK. На основной инстанции на ноябрь 2025 зарегистрировано 34 тысячи пользователей. Костяк нёрдовой аудитории перешёл от видеоблогера [[Алексей Лещенко|Алексея Лещенко]], с [https://www.youtube.com/watch?v=iqoO2zBwvJg видео от 5 января 2021]. Существенная часть новых пользователей пришла также благодаря вирусным роликам в TikTok. Начиная с 2024 года проект рекламировали многие популярные каналы в Telegram, в том числе «Рифмы и Панчи».&lt;br /&gt;
&lt;br /&gt;
Не смотря на такие факторы, активных пользователей всё равно в районе 20-50 человек.&lt;br /&gt;
&lt;br /&gt;
Главной причиной низкой активности, вероятно, является эффект сильного первого впечатления, который характерен для подобных сабжу проектов с ретро-тематикой. На людей, заставших «те самые» времена, когда ВКонтакте ещё не принадлежал формально государству, и в целом когда трава была зеленее а небо — голубее, OpenVK действует как платформа для ностальгии. В теории именно такая труЪ аудитория и должна составлять основу проекта — по крайней мере, согласно тому образу, который транслируют популярные источники типа попсовых телеграм-каналов, один из которых упоминался выше.&lt;br /&gt;
&lt;br /&gt;
На практике же, как вы уже поняли всё куда сложнее: представители этой категории пользователей появляются здесь относительно редко, несмотря на концепцию платформы.&lt;br /&gt;
&lt;br /&gt;
Для новых поколений, OpenVK, напротив, предоставляет укунуться в эпоху, которую они не застали по причине возраста или отсутствия тогдашней осознанности.&lt;br /&gt;
&lt;br /&gt;
Под впечатлением от сайта именно они и создают контент, как-либо пытающийся имитировать интернет нулевых, романтизируя это через образы эмо-субкультуры и смежных направлений, не учитывая при этом негативные аспекты того времени, которых было более чем достаточно. Это приводит к формированию специфического контента — странной смеси современной интернет-культуры с элементами эстетики нулевых. Отдельным фактором остаётся и мода на ностальгические штуки вроде Frutiger Aero, которую активно продвигает поколение Альфа; этот хайп даёт сабжу что-то типо профита, однако с этим же и более высок риск рака.&lt;br /&gt;
&lt;br /&gt;
При этом живое коммьюнити формируется не на самом сайте, а вокруг него — главным образом в [[Telegram]]. Во многом это связано с недостаточным взаимодействием разработчиков с аудиторией и отсутствием официальной площадки для общения. В результате значительная часть пользователей остаётся исключительно на сайте, однако построить полноценный блог им проблематично, а нормальную функциональность диалогов так и не завезли к началу 2026 года.&lt;br /&gt;
&lt;br /&gt;
Со временем такие пользователи просто уходят, так и не узнав о внешних ресурсах для обсуждения OpenVK, которые поддерживаются сообществом, которому ± не всё равно. Мимикрирующих под олдфагов-ностальгаторов немного: пишут что-то в global feed 1-2 дня, после чего уходят. Есть, конечно, [[Дмитрий Бесфамильный|исключения]], но они лишь подчёркивают общую картину.&lt;br /&gt;
&lt;br /&gt;
==== DDoS-атаки ====&lt;br /&gt;
Из-за популярности OpenVK, он является частой мишенью для начинающих ддосеров. Долгое время ддосами промышлял [[Overlord]], но периодически появляются новые оверлордята, которым заняться кроме ддоса нечем. Атаки на OpenVK фиксируются с 2020 года; их интенсивность и частота менялись, и на настоящий момент они редки, но не исключены. Оное не является следствием какого-либо конфликта, а скорее просто устоявшейся в рудудосе традицией использовать OpenVK как тренировочную цель, предположительно из-за того, что OpenVK «защищён» Cloudflare, но при этом хостится на Intel Atom, что позволяет атакующим проверить их методы обхода CF.&lt;br /&gt;
&lt;br /&gt;
==== Блокировки ====&lt;br /&gt;
С 16 по 20 августа 2024 года сайт был заблокирован&amp;lt;ref&amp;gt;https://t.me/openvk/2661&amp;lt;/ref&amp;gt; из-за публикации одним из пользователей песни «Антифа-лезгинка» группы Warriors of Zion, включённой в Федеральный список экстремистских материалов. Роскомнадзор присылал Veselcraft’у на почту предложение обойтись без блокировки, однако письмо, по всей видимости, попало в папку «Спам».&lt;br /&gt;
&lt;br /&gt;
=== Политическая позиция ===&lt;br /&gt;
Администраторы OpenVK в большинстве своём придерживаются относительно либеральных взглядов, однако это не оказывает влияния на работу площадки.&lt;br /&gt;
&lt;br /&gt;
==== Ермаков ====&lt;br /&gt;
[[Файл:Ермаков овк.png|мини|Архивный кадр с включённым ClearType.]]&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Основная статья: [[Даниил Ермаков#OpenVK|Даниил Ермаков]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ермаков создал страницу в OpenVK 20 августа 2022 года и изначально был миролюбив.&lt;br /&gt;
&lt;br /&gt;
Но 20 февраля 2023 на его страницу был совершён рейд, в ходе которого сначала реальные люди стали писать ему на страницу оскорбления, а затем некто под псевдонимом Максим Кац начал флудить на его стене белорусской фразой с помощью API. Через два месяца, 12 апреля 2023 он ЖЁСТКО реагирует на данный инцидент и начинает жёсткую политическую дискуссию прямо в комментариях openvk с его политическими оппонентами. Дойдя до точки кипения, 16 апреля 2023 он удаляет страницу, назвав сайт &amp;quot;хохляцкой помойкой&amp;quot;. Несмотря на это, Ермаков вернулся на сайт в августе 2024, со своего более старого аккаунта (id136).&lt;br /&gt;
&lt;br /&gt;
==== Свобода слова в OpenVK ====&lt;br /&gt;
Фонд OpenVK в целом толерантно относится к носителям не левой идеологии, однако за откровенную про-Z риторику, можно получить бан в чатах OpenVK. Не смотря на это, в самой сети зачастую пользователи не преследуются администрацией за мнение или высказывания. Хотя особо людоедские высказывания запрещены там правилами, да и по правилам вместе с баном в чате должна баниться и страница в сети, случаи блокировок по идеологическим причинам в OpenVK не были зафиксированы. Большинство несогласных самостоятельно уходят из проекта, не получая приемлемого отклика от местных пользователей.&lt;br /&gt;
&lt;br /&gt;
===== Сотрудничество с украинскими спецслужбами =====&lt;br /&gt;
Ходили слухи о том, что OpenVK сотрудничает с властями Украины, однако они основаны на одном случае, когда одна украинофобная фотокарточка была изъята из публичного доступа по причине якобы официального обращения со стороны Национальной Полиции Украины. Политологи склонны считать, что это был рофл.&lt;br /&gt;
&lt;br /&gt;
=== Коммьюнити ===&lt;br /&gt;
OpenVK Chat, живший в 2018 году во ВКонтакте, развалился два раза. В покойной [[moshWiki]] было отмечено, что, вероятно, жизненный путь OpenVK станет темой ещё не одной статьи из-за особенности OpenVK сближать людей вокруг себя и заставлять их сраться похлеще, чем это делают в самой забитой фан-группе по геншину. Ну, что же, moshWiki не обманули. И чат OpenVK в Telegram, кстати, тоже развалился два раза.&lt;br /&gt;
&lt;br /&gt;
==== Чат OpenVK в Telegram ====&lt;br /&gt;
Основное место скопления любителей OpenVK. Главным администратором до 2024 является де-юре [[WerySkok]]. Из-за большого количества оффтопа в чате и нежелания Владимира Баринова и Скока его терпеть, чат разваливался аж два раза. Первый раз случился тогда, когда Вова решил из него выйти, но случайно вместо этого удалил. Чат после этого был пересоздан, но Скока продолжила задалбывать тенденция местных оффтопить люто, поэтому чат был развален во второй раз. На этот раз, правда, чат не был удалён, в нём просто запретили оффтопить, а для оффтопа был создан отдельный чат. Однако чётко определить границы оффтопа весьма сложно, поэтому идея с оффтопиком себя не оправдала: мало того, что она изначально разозлила активную часть фендома, так и оффтоп никуда не делся. За всё время двоечатия был либо оффтоп в OpenVK Discussions, либо обсуждение самого OpenVK в OpenVK Offtopic. Вскоре, чаты были дебалканизированы назад в основной, который стал называться [[OpenVK General|OpenVK // General]].&lt;br /&gt;
&lt;br /&gt;
В чате зарождается бóльшая часть локальных мемов, иногда они начинают форситься и выходить из под контроля. Тогда ВериСкок, когда тот администрировал чат обычно объявлял их «нежелательными говнофорсами» и распространение мема подавлялось силовым крылом чата.&lt;br /&gt;
&lt;br /&gt;
В ноябре 2024 произошли глобальные изменения в чате: админка передалась администраторше Целесторе, а чат становился неаффилированым с администрацией OpenVK (не смотря на то что тогдашняя владелица была одним из админов сабжа) и переименовался в OpenVK // Unofficial. После этого приколы про Верискока и говнофорсы официально можно было считать протухшими.&lt;br /&gt;
&lt;br /&gt;
В январе 2026 года [[Ekyloff|Федя Жопа]] после начала недовольства пиаром [[Никита Сергеев|Омисусом]] Ржаки создал свой чат, в котором общаются некоторые активные участники OpenVK. При этом, после ухода Анофишла из [[Ржаксфедерация|Ржаксфедерации]], чат Феди по активу где-то примерно на равне с Анофишлом. При этом между владельцами двух чатиков нет никакой вражды.&lt;br /&gt;
&lt;br /&gt;
==== Ржака ====&lt;br /&gt;
{{ОПГ&lt;br /&gt;
| name = Министерство ржаки&lt;br /&gt;
| logo = [[File:rjaka.jpeg|80px|center]]&lt;br /&gt;
| members = 11 групп в OpenVK, 1 канал в Telegram&lt;br /&gt;
| type = неофициальный фан-клуб, сетка групп&lt;br /&gt;
| gensec = Никита Сергеев (?) (на момент 31 января 2026 года)&lt;br /&gt;
| le_dudes = &lt;br /&gt;
| birthday = 18 сентября 2021 года|&lt;br /&gt;
| founders = [[ByloTonix]], rudzik8&lt;br /&gt;
| status = мертва&lt;br /&gt;
| url = [https://t.me/rjakz В Telegram], [https://openvk.su/openvkfun В OpenVK]&lt;br /&gt;
| deathdate = 2 февраля 2026 года&lt;br /&gt;
}}&lt;br /&gt;
У коммьюнити OpenVK был отдельный неофициальный канал, посвящённый мемам, которые каким-либо образом были связаны с OpenVK. Канал назывался «[[Ржака OpenVK]]» и находился под управлением так называемого Министерства ржаки.&lt;br /&gt;
&lt;br /&gt;
Министерство ржаки являлось важным двигателем актива в сообществе сабжа. Группы, принадлежащие Министерству в OpenVK, какое-то время входили в топ групп OpenVK и [[VepurOVK]]. После [[OpenVK General|OpenVK // General]], чат и канал Ржаки являлись самой большой фабрикой оригинальных мемов по OpenVK. Большинство активных пользователей OpenVK также подписаны и на Ржаку. Чаты ржаки играли ключевую роль во времена репрессивной фазы администрации OpenVK // General, когда самые смешные мемы банились по причине «говнофорс».&lt;br /&gt;
&lt;br /&gt;
В 2022 году Министерство временно прекратило свою работу в OpenVK и полностью перешло в [[VepurOVK]]. Причиной этого события стало политическое разногласие MatroCholo и Rudzik8 с основателем OpenVK, [[Veselcraft|Владимиром Бариновым]], который забанил их в чате Дженерала за разведение срача по поводу коммунизма и Советского Союза. Основатели Ржаки не были согласны с вердиктом администрации, который признал их «провокаторами», после чего они удалили свои страницы в OpenVK и ушли в VepurOVK. Мемы в Ржаке тогда начали высмеивать OpenVK за низкую степень актива, медленную работу сайта и лень разработчиков. Большинство членов сообщества не оценили такую смену контента, а между VepurOVK и OpenVK разгорелся небольшой вялотекущий конфликт.&lt;br /&gt;
&lt;br /&gt;
Впрочем, впоследствии конфликт был улажен. Однако группы в OpenVK, входившие в состав Министерства, оказались заброшены, а Telegram-канал со временем также был заброшен — предпочтение отдавалось более релевантным проектам, вроде этой Вики. Ржака из проекта, посвящённого исключительно OpenVK, постепенно превратилась в канал и по смежным тематикам, однако существенного прироста актива это не дало.&lt;br /&gt;
&lt;br /&gt;
Начиная с осени 2025 года между создателем OpenVK Владимиром Бариновым и администраторами «Ржаки» (которая к тому моменту уже была в составе Ржаксфедерации в боте Rose, из-за чего брендинг Ржаки с ней прочно ассоциировался) возникли споры о целесообразности сохранения в администрации OpenVK «Просто Димочки» (также известного как Жимас или Dmitry Daemon). Причиной стали его, мягко говоря, странные наклонности и действия, не приветствуемые в нормальном обществе. Подробнее про это можно почитать [https://t.me/systemdru_gems здесь].&lt;br /&gt;
&lt;br /&gt;
Дмитрия сняли с админки OpenVK, после чего он в целом ушёл из интернета — по крайней мере, под своим текущим никнеймом. При этом справедливо отметить, что инцидент с Димой стал лишь формальным поводом: причины взаимной неприязни, вероятнее всего, возникли значительно раньше.&lt;br /&gt;
&lt;br /&gt;
Досталось и Целесторе, которая была на стороне Ржаки по вопросу с Димочкой. Впоследствии предпринимались две попытки выставить Целестору в негативном свете из-за несвоевременной оплаты серверов, несмотря на то что в обоих случаях уведомление об оплате передавалось заранее. Итогом оного стало уход с админки Целесторы и переходом на новый сервер от [[Senko Digital]].&lt;br /&gt;
&lt;br /&gt;
Из-за накопившихся негативных событий подобного рода Ржака просуществовала до начала февраля 2026 года, после чего была официально закрыта по причине утраты актуальности проекта.&lt;br /&gt;
&lt;br /&gt;
==== Форсы ====&lt;br /&gt;
Большинство мемов про OpenVK являются быстро переходящими, очень редко какой-либо из них становится долгоиграющим форсом. Тем не менее, с форсами [[OpenVK General|OpenVK // General]] и ассоциируется, из-за двух очень больших форсов, на подавление которых ушло достаточно большое количество админресурса Александра Скока.&lt;br /&gt;
&lt;br /&gt;
===== Какао прокакалось =====&lt;br /&gt;
Мем, порождённый [[Matty Mellis|Метти]], русскоговорящим иностранцем, которого смешила фраза «какао прокакалось». Кроме него, её никто смешной не находил, а его привычка постить её, после чего начинать парад говностикеров, послужила основной причиной, почему эту фразу так сильно захейтили. Парадоксально, но не смотря на лютую ненависть фендома к этой фразе, чем больше её ненавидели, тем больше её постили направо и налево. Сейчас её тоже можно увидеть в чатах OpenVK, так как срок на какаопрокакальные ограничения истёк, но во время пика популярности её произношение было запрещено. Позже появилась альтернативная версия произошедшего: якобы Метти просто притворялся и на самом деле владеет русским языком как родным. Однако остаётся неизвестным, жил ли он реально в США (Метти давал номер с кодом +1), или это был высший уровень отыгрыша. Метти официально подтвердил эту историю, добавив, что тот кидал множество раз один из стикеров с крокодилом во время того, как употреблял наркотики.&lt;br /&gt;
&lt;br /&gt;
===== Максим Кац =====&lt;br /&gt;
Наверное, самый вялотекущий форс в OpenVK, из-за чего он не был жертвой репрессий со стороны Скока. Форс заключается в приплетении Максима Каца куда угодно и регистрации страниц на его имя в OpenVK. Частично перекликается с мемом про то, что Ермаков якобы встречается с Кацем. Иронично, но сам Кац в OpenVK не зарегистрирован и в ближайших планах этого не имеет.&lt;br /&gt;
&lt;br /&gt;
===== Бочка хуила =====&lt;br /&gt;
Самый лютый форс в OpenVK, на время активного форса был запрещен в чатах сабжа. Зародился из смешной мясной переписки в чате General, где была запощена фотокарточка с Хитори Гото, также известной как Боччи, из аниме-сериала «Bocchi the Rock!», которую кто-то прокомментировал вопросом «кто это», на что получил ответ «хуила». После этого Боччи прозвали бочкой-хуилой. Ржака быстро подхватила форс, а вскоре в видеочате OpenVK // General прошёл совместный просмотр сериала, после чего форс только усилился и не прекращался естественными причинами. Разумеется, форс был убит Скоком из-за невозможности контролировать происходящее в чате по причине спама фразой «бочка хуила».&lt;br /&gt;
===== Музыка =====&lt;br /&gt;
Связан с довольно долгим отсутствием и разработки функционала аудиозаписей в OpenVK, который длился с 2017 по 2023. Было множество спекуляций, шуток, мемов на эту тему, но в конечном итоге они появилась 12 ноября 2023 в полночь, и к ним быстро привыкли. Релизу предшествовала долгая разработка, в которой участвовали Целестора (бекенд), n1rwana (фронтенд, по просьбе следующего человека), mrilyew (фронтенд, по просьбе друга) и Зубная Паста (скрипт загрузки).&lt;br /&gt;
&lt;br /&gt;
===== OpenVK от VK =====&lt;br /&gt;
25 декабря 2024 VK выпустил свою инициативу под названием «OpenVK». Ожидалось, что корпорация начнёт отстаивать свой бренд, началась подготовка к смене названия, но по итогу этого так и не произошло.&lt;br /&gt;
&lt;br /&gt;
=== Финансирование ===&lt;br /&gt;
Не смотря на то, что OpenVK продаёт голоса за криптовалюту, доход с этого очень маленький. В основном работа OpenVK финансируется добровольными пожертвованиями со стороны сообщества. Но часто спонсором выступает VepurOVK.&lt;br /&gt;
&lt;br /&gt;
==== Задолженность провайдеру ====&lt;br /&gt;
В 2023 году задолженность OpenVK своему хостинг-провайдеру перевалила за 50 евро, после чего сервер был отключён. Летом 2023 года началась процедура по выплате долга, однако вскоре сервер снова был отключён из-за невозможности OpenVK расплатиться с долгом в срок. Тогда какой-то челик закинул две тысячи рублей, которые были использованы чтобы погасить остаток долга. Ня!&lt;br /&gt;
&lt;br /&gt;
=== Организационная структура ===&lt;br /&gt;
Фонд OpenVK не имеет чёткой организационной структуры, как и юридического лица в какой-либо стране. Все решения принимаются максимально децентрализовано лицами, входящими в совет разработчиков. Зачастую это играет положительную роль и позволяет одним администратором «компенсировать» поведение других. Например, в чатах Скок и Вова часто банят людей, а Целестора разбанивает. Весело.&lt;br /&gt;
&lt;br /&gt;
=== Альтернативные инстанции ===&lt;br /&gt;
Так как OpenVK имеет открытый исходный код, каждый может создать свою инстанцию.&lt;br /&gt;
&lt;br /&gt;
===== [[VepurOVK]] =====&lt;br /&gt;
Был открыт 12 апреля 2022 года. Второй по популярности инстанс OpenVK. Является личным проектом Вячеслава Петрова (saursvepur). Для перелива актива с OpenVK Вепур добавляет фичи из незавершённых веток и пулл-реквестов, но это не особо помогает. В основном там сидят те, кого не устраивает основная инстанция. &lt;br /&gt;
&lt;br /&gt;
===== Astorium =====&lt;br /&gt;
Было и было. См. отдельную статью&lt;br /&gt;
&lt;br /&gt;
===== [[OVKisser]] =====&lt;br /&gt;
&lt;br /&gt;
===== test.openvk.su =====&lt;br /&gt;
Тестовая инстанция. Была открыта 27 декабря 2021 для теста федивёрса, но потом на него забили как собственно и на инстанс. О нём вспомнили в июне 2023, когда нужно было потестить фичу с много картинок, но сейчас опять забили. 11 августа 2023 был открыт https://venti.openvk.uk, который использует ту же базу данных, что и официальная инстанция, но зачем, неизвестно.&lt;br /&gt;
&lt;br /&gt;
После смена домена на ovk.to оба сайта стали недоступны.&lt;br /&gt;
&lt;br /&gt;
===== [[Fetbuk|Fetbuk Social]] =====&lt;br /&gt;
Был создан [[WerySkok]] в сентябре 2021 года. Работает с переменным успехом, обновляется редко.&lt;br /&gt;
&lt;br /&gt;
=== Мобильные приложения ===&lt;br /&gt;
Существует два мобильных приложения: OpenVK Legacy и OpenVK Refresh.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[OpenVK Legacy]]&#039;&#039;&#039; имеет 1 в 1 такой же интерфейс, как и приложение ВКонтакте 3.0, потому что сам создатель этого приложения (Grishka) предоставил макеты [[Tinelix]]. В нём нет тёмной темы, так как, по словам разработчика, там всё завязано на растровых изображениях, и потому будет трудно перекрасить их всех, чтобы это выглядело адекватно.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;OpenVK Refresh&#039;&#039;&#039; имеет современный интерфейс.&lt;br /&gt;
&lt;br /&gt;
На Windows Phone есть OpenVK Star, который представляет собой WebView версию полной версии.&lt;br /&gt;
&lt;br /&gt;
=== Инциденты ===&lt;br /&gt;
[[Файл:Долбаёбы.png|мини|188x188пкс]]&lt;br /&gt;
Время от времени всякие анонимы забивают глобальную ленту грубыми и плохими словами по типу «MAT EBAL PIDORAS» «[рандомный номер] PIDORAS», «[IP] [плохая надпись]», создают группы с непристойными названиями, но их быстро удаляют. Но есть и более уникальные инциденты.&lt;br /&gt;
&lt;br /&gt;
==== 31.01.2023 incident ====&lt;br /&gt;
31 января 2023 всем в личку пришло письмо счастья «Какао прокакалось» от пользователя с таким же именем, но его быстро забанили. На данный момент ведётся расследование, кто стоял за этим аккаунтом. Бан вызвал постиронический протест в глобальной ленте с хэштегом «#РазбанКакаоПрокакалось». После блокировки оказалось, что в API есть дырка, позволяющая сидеть в OpenVK даже после бана, но её поправили.&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Какаосообщалось.png&lt;br /&gt;
Файл:Какао.png&lt;br /&gt;
Файл:Какао разбанилос.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 10.02.2023 incident ====&lt;br /&gt;
[[Файл:Xss thing.png|мини|252x252пкс]]&lt;br /&gt;
28 января в OpenVK появился плеер, стилизованный под старый ВК, у него был «постер»: название видео и под ним имя автора, а так же большая кнопка проигрывания. Название видео не экранированировалось, этим и воспользовались в данном инциденте. В название видео ставился тег audio, который вызывал ошибку и подгружал скрипт, который репостил на страницу пользователя видео с подписью «Какао прокакалось». Все, кто тогда сидел в OpenVK (это было ночью) репостили это видео к себе и глобальная лента &amp;lt;s&amp;gt;засиралась&amp;lt;/s&amp;gt; прокакивалась. К счастью или к сожалению, уязвимость была быстро пропатчена. На данный момент неизвестно, кто стоял за инцидентом. То самое видео до сих пор можно посмотреть&amp;lt;ref&amp;gt;https://openvk.su/video10289_9&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== 16.09.2023 incident ====&lt;br /&gt;
После добавления функции редактирования поста, автор пулл-реквеста выпустил патч, который запрещал редактировать посты старше одной недели. Однако он пропустил одно условие в проверке, из-за чего чужие посты стали редактируемыми для всех. Этим воспользовался [[SaursVepur|saursvepur]] и, пока это было возможно, прибавил к содержанию последних постов в глобальной ленте «vepurovk.xyz». Уязвимость быстро исправили, а оригинальное содержание постов вернули.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{Navbox OpenVK|title=Ещё про OpenVK}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сайты]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=PKAkatora/en&amp;diff=9295</id>
		<title>PKAkatora/en</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=PKAkatora/en&amp;diff=9295"/>
		<updated>2026-07-29T14:17:01Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Shadowmaster69 переименовала страницу PKAkatora/en в TORA V4/en&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[TORA V4/en]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=TORA_V4/en&amp;diff=9294</id>
		<title>TORA V4/en</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=TORA_V4/en&amp;diff=9294"/>
		<updated>2026-07-29T14:17:01Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Shadowmaster69 переименовала страницу PKAkatora/en в TORA V4/en&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Изложение/en}}&lt;br /&gt;
{{Челик/en&lt;br /&gt;
|name=PKAkatora&lt;br /&gt;
|image=[[Image:TORA_V4.jpeg|92px]]&lt;br /&gt;
|caption=Tora&#039;s YouTube pfp (2025)&lt;br /&gt;
|nicknames=TORA_V4, Noramato&lt;br /&gt;
|activity_years=2013 - today&lt;br /&gt;
|activity=VOCALOID-producer&lt;br /&gt;
|language=english&lt;br /&gt;
|interests=music, suspicious porn&lt;br /&gt;
|yt=[https://www.youtube.com/@uzmk_mato Noramato]&lt;br /&gt;
|links_other=[https://soundcloud.com/uzmk_mato Soundcloud]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKAkatora&#039;&#039;&#039; (&#039;&#039;also known as PKBowsy, TORA_V4, Noramato, and 野良まと&#039;&#039;) is a dutch VOCALOID cover artist of moderate popularity. He has his own YouTube channel, which he has been running since 2013 and, as of November 26, 2024, has 160,000 subscribers&amp;lt;ref&amp;gt;[https://web.archive.org/web/20241126022427/https://www.youtube.com/@uzmk_mato Archived. 野良まと / Noramato. Channel. YouTube. Date of archival 26 november 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Tora is primarily focused on creating VOCALOID covers of various songs, including originally non-Vocaloid ones; occasionally publishes various jokes and post-ironic content&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=rxiSecU4EZg 野良まと / Noramato. hatsune miku loses her job. YouTube. Published online 18 april 2021.]&amp;lt;/ref&amp;gt;. Voiced at least one UTAUloid twice&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RVy0lmyoBS8 野良まと / Noramato. utauloid comparison (2013 vs 2021). YouTube. Published online 18 february 2021.]&amp;lt;/ref&amp;gt;. Collaborated with SilvaGunner&amp;lt;ref&amp;gt;[https://siivagunner.fandom.com/wiki/PKBowsy SiIvaGunner Wiki. PKBowsy. Fandom.com. Published online 25 november 2017.]&amp;lt;/ref&amp;gt; and TimmyTurnersGrandDad&amp;lt;ref&amp;gt;[https://ttgd.fandom.com/wiki/PKAkatora TimmyTurnersGrandDad Wiki. PKAkatora. Fandom.com. Published online 3 june 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
He is known for constantly getting into all sorts of trouble, which led to him changing his nickname several times and being removed from the VOCALOID wiki for not meeting community standards. He made some people so butthurt that they wrote a dossier on him on that groyper-incel shithole called Kiwifarms&amp;lt;ref&amp;gt;[https://kiwifarms.st/threads/pkakatora-believes-hes-above-end-user-lisence-agreements-copyright-crediting-creators-and-he-rarely-tells-the-full-story.73886/ Gumesis. PKAkatora believes he&#039;s above End User Lisence Agreements, copyright, crediting creators, and he rarely tells the full story. KiwiFarms. Published online 27 june 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Discography ==&lt;br /&gt;
&lt;br /&gt;
Tora produced [https://www.youtube.com/@uzmk_mato/videos a large amount of covers] and RIP remixes for [https://siivagunner.fandom.com/wiki/Category:PKBowsy SilvaGunner] (26) and [https://ttgd.fandom.com/wiki/Category:PKAkatora TTGD] (54). For the sake of brevity, the only compositions listed in this section are the ones to which PKAkatora has made significant contributions&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list Amandelen. TORA V4 songs list. Vocaloid Lyrics Wiki. Published online 22 august 2020.]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list/Tuning Neiranei. TORA V4 songs list. Vocaloid Lyrics Wiki. Published online 23 august 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JQ1Dqj0FG_Y Corona feat. Hatsune Miku (YouTube, 2020, 1M+)] &amp;amp;mdash; original song, inspired by a TikTok video made by Netta Brazilai;&lt;br /&gt;
* [https://yonkagor.bandcamp.com/track/fallacy-miku-ver YonKaGor - Fallacy (MIKU ver) (Bandcamp, 2022)] &amp;amp;mdash; YonKaGor&#039;s single, official cover, PKAkatora was invited as VOCALOID tuning expert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;JQ1Dqj0FG_Y&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;Rab4-FILXSI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criticism ==&lt;br /&gt;
&lt;br /&gt;
=== Conflict with Raki Saionji ===&lt;br /&gt;
&lt;br /&gt;
In 2019, Tora (known as PKBowsy at the time) used Project DIVA Future Tone Arcade hacked ROM for his content, which was produced by pro-trump&amp;lt;sup&amp;gt;[&#039;&#039;source?&#039;&#039;]&amp;lt;/sup&amp;gt; modder Raki Saionji. Tora allegedly didn&#039;t credit Raki, which made him very upset and led him to hiding the GitHub repo with the mod. PKBowsy changed his nickname after this incident.&lt;br /&gt;
&lt;br /&gt;
To this day it is not known if Tora has actually credited Raki. Various claims that he did so in YouTube comments once&amp;lt;ref&amp;gt;[https://github.com/rakisaionji/FrankenToneArcade/issues/1#issuecomment-488371448 Nastys. GitHub Comment. Published online 1 may 2019.]&amp;lt;/ref&amp;gt; exist, however there is no way to verify if that comment ever existed as it is not available today. Moreover, Tora himself told that he doesn&#039;t &amp;quot;credit waste&amp;quot; when asked about the situation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Rakisaionjimoment.png|Raki Saionji having a normal one&lt;br /&gt;
Файл:57110300-01595400-6d30-11e9-857c-a4b76d8376f7.png|PKBowsy doesn&#039;t credit waste it seems&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Piracy and UTAU porting ===&lt;br /&gt;
&lt;br /&gt;
PKAkatora used pirated VOCALOID voicebanks and even made UTAU ports of them. In western vocaloid community this behaviour represents cringe of the highest order&amp;lt;ref&amp;gt;[https://www.reddit.com/r/Vocaloid/comments/zfs60u/why_is_the_vocaloid_community_against_piracy/ Dr_Zwi. Why is the Vocaloid community against piracy? Reddit. Published online 8 december 2022.]&amp;lt;/ref&amp;gt;. Tora has never actually shared the ported voicebanks with anyone, however VOCALOID Wiki moderators found him uploading a cover made with UTAU-ported Kaito to be a sufficient reason for issuing a permanent ban.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:AngelEmfrblResponse.png|Angel&#039;s ban reason and PKAkatora&#039;s &amp;quot;appeal&amp;quot;&lt;br /&gt;
Файл:BV1yJ411Y7uS_p1.ia.mp4|That Hameln cover made with UTAU Kaito&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KAFU voicebank incident ===&lt;br /&gt;
&lt;br /&gt;
[[File:1615280886666.jpg|мини|Tora got disqualified|200px]]&lt;br /&gt;
&lt;br /&gt;
Once upon a time PKAkatora managed to download KAFU voicebank from AHS website before the general release. He did so by guessing the URL address of the file, which was uploaded by AHS staff ahead of time without proper nginx access configuration. After successfully recovering the voicebank Tora allegedly leaked it and made a cover of some&amp;lt;sup&amp;gt;[&#039;&#039;which?&#039;&#039;]&amp;lt;/sup&amp;gt; song with it. According to Twitter, AHS expressed interest in taking legal action against Tora&amp;lt;ref&amp;gt;[https://x.com/mikumikufigures/status/1356181298696564739 mikumikufigures! ✿. Kafu&#039;s cevio ai voicebank was leaked by a popular cover artist. Twitter. Published online 1 february 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Despite this brief conflict with AHS, Tora has taken part in Koharu Rikka giveaway organized by them. They even called him a winner&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140756 Anonymous. Western Vocaloid Community. lolcow.farm. Published online 3 september 2021.]&amp;lt;/ref&amp;gt;, but later disqualified him after getting reminded that he was the one who leaked KAFU half a year ago&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140762 Anonymous. Western Vocaloid Community. lolcow.farm. Published online 3 september 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;220&amp;quot;&amp;gt;&lt;br /&gt;
File:KAFU.mp4|That KAFU cover&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Minors on Discord ===&lt;br /&gt;
&lt;br /&gt;
Tora had an NSFW channel on his Discord server. On a server with minors, yeah, just like [[Ермаков|DE]] did, except that instead of boots a guy named vito has posted shota-porn there. At that moment Tora was AFK, so moderator named Violin was the one to take the action against vito&#039;s tomfoolery. In the end, vito was banned by Violin&amp;lt;ref&amp;gt;[https://connection19.tumblr.com/post/674590646982541312/tora-v4-pkakatora-pkbowsy Connection19. About the Vocaloid cover artist TORA_V4 / PKAkatora / PKBowsy. Tumblr. Published online 27 january 2022]&amp;lt;/ref&amp;gt;, however Tora unbanned vito as soon as he became aware of his &amp;quot;exquisite taste&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Tora has denied that this situation ever happened on his Discord until the transcripts became available to the general public on Tumblr.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:61a5d58ac5f74f1196976f3c056759dd2a93b63d.png&lt;br /&gt;
Файл:36182dc37db99a30aa6f79aab0e67ecd74011c57.png&lt;br /&gt;
Файл:bbba8075192c02a586acbad09c55b076762148b6.png|Tora denies accusations on Twitter&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Suspicious preferences ===&lt;br /&gt;
&lt;br /&gt;
Tora is a big fan of shota content and has even thirsted over a 16 year old character on Twitter which is, frankly, not that surprising given the whole vito situation that took place on his Discord server. Nontheless, on September 6th 2022 his nsfwtwt alt-account got exposed, which gave the general public an opportunity to learn about his &amp;quot;preferences&amp;quot;. They, apparently, include incest, noncon, furry stuff and pokemons. Like, non-humanized pokemons. Tora has also reposted NSFW content with chipmunks from Chip and Dale and with Big Man, a stingray from Splatoon&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1ozjU3QKPAs-CwNRde840PTKR-MKQKx9yzuxtF91CcGc/edit Galatea. Tora. Google Docs. Published online 6 september 2022.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;200&amp;quot; heights=&amp;quot;200&amp;quot; caption=&amp;quot;Example of reposts/subscriptions of @toraafterdark&amp;quot;&amp;gt;&lt;br /&gt;
noncredibleopenvk5.png&lt;br /&gt;
noncredibleopenvk1.png&lt;br /&gt;
noncredibleopenvk3.png&lt;br /&gt;
noncredibleopenvk2.png&lt;br /&gt;
noncredibleopenvk4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=PKAkatora&amp;diff=9293</id>
		<title>PKAkatora</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=PKAkatora&amp;diff=9293"/>
		<updated>2026-07-29T14:15:59Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Shadowmaster69 переименовала страницу PKAkatora в TORA V4: никто его пкакаторой уже не называет + он сдох и его последни никнейм это торав4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[TORA V4]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=TORA_V4&amp;diff=9292</id>
		<title>TORA V4</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=TORA_V4&amp;diff=9292"/>
		<updated>2026-07-29T14:15:58Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Shadowmaster69 переименовала страницу PKAkatora в TORA V4: никто его пкакаторой уже не называет + он сдох и его последни никнейм это торав4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Изложение}}&lt;br /&gt;
{{Челик&lt;br /&gt;
|image=[[Image:TORA_V4.jpeg|92px]]&lt;br /&gt;
|caption=Аватарка Торы на YouTube (2025)&lt;br /&gt;
|nicknames=TORA_V4, Noramato&lt;br /&gt;
|activity_years=2013 - 2026&lt;br /&gt;
|activity=VOCALOID-продюсер&lt;br /&gt;
|language=английский&lt;br /&gt;
|interests=музыка, странное порно&lt;br /&gt;
|yt=[https://www.youtube.com/@uzmk_mato Noramato]&lt;br /&gt;
|links_other=[https://soundcloud.com/uzmk_mato Soundcloud]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{EnVer}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKAkatora&#039;&#039;&#039; (&#039;&#039;также известный как PKBowsy, TORA_V4, Noramato и 野良まと&#039;&#039;) &amp;amp;mdash; европейский (предположительно, нидерландский) VOCALOID кавер-артист средней популярности. Имеет свой YouTube-канал, который ведёт с 2013 года и, по состоянию на 26 ноября 2024 года, имел 160 тысяч подписчиков&amp;lt;ref&amp;gt;[https://web.archive.org/web/20241126022427/https://www.youtube.com/@uzmk_mato Архивировано. 野良まと / Noramato. Канал. YouTube. Дата обращения 26 ноября 2024 года.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В основном занимался созданием VOCALOID-каверов на различные, в том числе изначально не-вокалоидные, песенки; изредка публиковал различные смехуёчки и постиронию&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=rxiSecU4EZg 野良まと / Noramato. hatsune miku loses her job. YouTube. Опубликовано онлайн 18 апреля 2021.]&amp;lt;/ref&amp;gt;. Озвучил по меньшей мере одного UTAU&#039;лоида два раза&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RVy0lmyoBS8 野良まと / Noramato. utauloid comparison (2013 vs 2021). YouTube. Опубликовано онлайн 18 февраля 2021.]&amp;lt;/ref&amp;gt;. Делал коллабы с SilvaGunner&amp;lt;ref&amp;gt;[https://siivagunner.fandom.com/wiki/PKBowsy SiIvaGunner Wiki. PKBowsy. Fandom.com. Опубликовано онлайн 25 ноября 2017.]&amp;lt;/ref&amp;gt; и TimmyTurnersGrandDad&amp;lt;ref&amp;gt;[https://ttgd.fandom.com/wiki/PKAkatora TimmyTurnersGrandDad Wiki. PKAkatora. Fandom.com. Опубликовано онлайн 3 июня 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Известен тем, что постоянно вляпывается в разного рода неприятности, из-за которых менял свой никнейм несколько раз и был удалён из VOCALOID вики из-за несоответствия стандартам сообщества. Поджёг некоторым жопу настолько сильно, что кто-то накатал на него досье на гройперско-инцельской залупе Kiwifarms&amp;lt;ref&amp;gt;[https://kiwifarms.st/threads/pkakatora-believes-hes-above-end-user-lisence-agreements-copyright-crediting-creators-and-he-rarely-tells-the-full-story.73886/ Gumesis. PKAkatora believes he&#039;s above End User Lisence Agreements, copyright, crediting creators, and he rarely tells the full story. KiwiFarms. Опубликовано онлайн 27 июля 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PKAkatora несколько раз пытался закончить свою деятельность по различным причинам, однако потом передумывал. В 2026 году окончательно ушёл в подполье, скрыв все свои видеозаписи на YouTube.&lt;br /&gt;
&lt;br /&gt;
== Дискография ==&lt;br /&gt;
&lt;br /&gt;
Сабж сделал [https://www.youtube.com/@uzmk_mato/videos очень много каверов], ремиксов для [https://siivagunner.fandom.com/wiki/Category:PKBowsy SiIvaGunner] (26 штук) и [https://ttgd.fandom.com/wiki/Category:PKAkatora TTGD] (54 штуки). В этом разделе представлены только те композиции, в работу над которыми PKAkatora внёс существенный вклад&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list Amandelen. TORA V4 songs list. Vocaloid Lyrics Wiki. Опубликовано онлайн 22 августа 2020.]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list/Tuning Neiranei. TORA V4 songs list. Vocaloid Lyrics Wiki. Опубликовано онлайн 23 августа 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JQ1Dqj0FG_Y Corona feat. Hatsune Miku (YouTube, 2020, 1M+)] &amp;amp;mdash; оригинальная композиция, вдохновлённая TikTok-шортом Нетты Бразилай;&lt;br /&gt;
* [https://yonkagor.bandcamp.com/track/fallacy-miku-ver YonKaGor - Fallacy (MIKU ver) (Bandcamp, 2022)] &amp;amp;mdash; сингл YonKaGor, официальный кавер, PKAkatora был приглашён как эксперт по тюнингу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;JQ1Dqj0FG_Y&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;Rab4-FILXSI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Критика ==&lt;br /&gt;
&lt;br /&gt;
=== Конфликт с Raki Saionji ===&lt;br /&gt;
&lt;br /&gt;
В 2019 году Tora, когда ещё называл себя PKBowsy, использовал для своего контента взломанную версию Project DIVA Future Tone Arcade, которую сделал трампист&amp;lt;sup&amp;gt;[&#039;&#039;источник?&#039;&#039;]&amp;lt;/sup&amp;gt; Raki Saionji и залил на MEGA. Tora &amp;quot;нигде&amp;quot; не оставил ссылок на моддера, за что тот на него жестоко обиделся и разнылся на весь GitHub, удалив репозиторий, объясняя это тем, что PKBowsy пидарас&amp;lt;ref&amp;gt;[https://ibb.co/5c9Hyjv Изображение из треда на KiwiFarms.]&amp;lt;/ref&amp;gt;. По заверениям анонимуса, свой юзернейм он поменял первый раз из-за этого случая.&lt;br /&gt;
&lt;br /&gt;
Имеется информация, что ссылка на репозиторий Raki Saionji всё-таки была оставлена в комментариях под одним из видео&amp;lt;ref&amp;gt;[https://github.com/rakisaionji/FrankenToneArcade/issues/1#issuecomment-488371448 Nastys. Комментарий на GitHub. Опубликовано онлайн 1 мая 2019.]&amp;lt;/ref&amp;gt;, однако на данный момент возможность подтвердить был ли комментарий отсутствует. Сам Tora не утверждает, что комментарий оставил и когда его спросили почему он не ссылается на моддеров, ответил, что на мусор он ссылки не оставляет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Rakisaionjimoment.png|Raki Saionji having a normal one&lt;br /&gt;
Файл:57110300-01595400-6d30-11e9-857c-a4b76d8376f7.png|PKBowsy не оставляет ссылок на мусор хд&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пиратство ===&lt;br /&gt;
&lt;br /&gt;
PKAkatora использовал пиратские войсбанки для VOCALOID и даже переделывал их под UTAU. Подобное поведение считается максимально зашкварным в западном VOCALOID-коммьюнити&amp;lt;ref&amp;gt;[https://www.reddit.com/r/Vocaloid/comments/zfs60u/why_is_the_vocaloid_community_against_piracy/ Dr_Zwi. Why is the Vocaloid community against piracy? Reddit. Опубликовано онлайн 8 декабря 2022.]&amp;lt;/ref&amp;gt;. Не смотря на то, что Tora войсбанки-переделки не публиковал, его стёрли из VOCALOID Wiki и забанили за грубое нарушение лицензионного соглашения VOCALOID и за &amp;quot;неадекватность&amp;quot; его фанбоев&amp;lt;ref&amp;gt;[https://ibb.co/MGJpg0m Скриншот обращения PKAkatora к модераторам VOCALOID Wiki.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:AngelEmfrblResponse.png|Причина бана на вики&lt;br /&gt;
Файл:BV1yJ411Y7uS_p1.ia.mp4|Тот самый кавер с портированым войсбанком&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сгрыз войсбанка KAFU ===&lt;br /&gt;
&lt;br /&gt;
[[File:1615280886666.jpg|мини|Ой|200px]]&lt;br /&gt;
&lt;br /&gt;
Одним утром PKAkatora зашёл на сайт компании AHS и попробовал скачать оттуда войсбанк KAFU, подставив ID в URL. Не смотря на то, что войсбанк тогда ещё не был выпущен, он был размещён на сервере, на котором кто-то забыл настроить nginx, из-за чего авантюра Торы удалась и он успешно спиздил войсбанк, после чего не придумал ничего лучше чем сделать кавер с KAFU и начать выёбываться в интернетах. Ходили слухи, что AHS собрались подать на Тору в суд&amp;lt;ref&amp;gt;[https://x.com/mikumikufigures/status/1356181298696564739 mikumikufigures! ✿. Kafu&#039;s cevio ai voicebank was leaked by a popular cover artist. Twitter. Опубликовано онлайн 1 февраля 2021.]&amp;lt;/ref&amp;gt;, однако что из этого вышло неизвестно.&lt;br /&gt;
&lt;br /&gt;
Сложившаяся ситуация не помешала Торе принять участие в конкурсе от AHS в сентябре того же года. Более того, он даже выиграл&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140756 Anonymous. Western Vocaloid Community. lolcow.farm. Опубликовано онлайн 3 сентября 2021.]&amp;lt;/ref&amp;gt;, однако был дисквалифицирован после того, как небезразличные пользователи напомнили AHS о том, что Тора [https://youtu.be/tMGCUR7yu5o?t=1004 вообще-то у них KAFU спиздил может они до него доебутся лучше]&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140762 Anonymous. Western Vocaloid Community. lolcow.farm. Опубликовано онлайн 3 сентября 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;220&amp;quot;&amp;gt;&lt;br /&gt;
File:KAFU.mp4|Тот самый кавер на затрофееном войсбанке&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дети на Discord-сервере ===&lt;br /&gt;
&lt;br /&gt;
У Торы на Discord-сервере был NSFW-канал. На сервере с детьми. Ну, в общем, всё как у [[Ермаков]]а, только вместо сапогов там однажды оказалась shota-порнография, которую запостил несовершеннолетний челик с никнеймом vito. В тот момент Тора спал, поэтому люди побежали тегать местного верискока, который и вынес vito перманентный бан&amp;lt;ref&amp;gt;[https://connection19.tumblr.com/post/674590646982541312/tora-v4-pkakatora-pkbowsy Connection19. About the Vocaloid cover artist TORA_V4 / PKAkatora / PKBowsy. Tumblr. Опубликовано онлайн 27 января 2022]&amp;lt;/ref&amp;gt;. Проснувшись, Тора первым делом разбанил vito, сославшись на &amp;quot;изысканный вкус&amp;quot;. В своём твиттере Тора нередко отрицал то, что данное событие произошло, пока переписки не слили на Тамблер.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:61a5d58ac5f74f1196976f3c056759dd2a93b63d.png&lt;br /&gt;
Файл:36182dc37db99a30aa6f79aab0e67ecd74011c57.png&lt;br /&gt;
Файл:bbba8075192c02a586acbad09c55b076762148b6.png|Фрагмент отрицания в Твиттере&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сомнительные предпочтения ===&lt;br /&gt;
&lt;br /&gt;
Сабж является большим любителем shota-порнографии и даже хорнился об 16-летнего персонажа, что, впрочем, не удивительно, учитывая ситуацию с vito и NSFW-каналами в его Discord&#039;е. Тем не менее, 6 сентября 2022 года общественность узнала о существовании у Торы альт-аккаунта в Twitter с которого он смотрит NSFW-контент. В перечень его вкусов входит инцест, изнасилования (в том числе и несовершеннолетних персонажей), фурри, а так же покемоны. Ну, то есть, покемоны в их обычном виде, не гуманоидные. Также были случаи репостов порно с бурундуками из Чип-и-Дейла и скатом из Splatoon&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1ozjU3QKPAs-CwNRde840PTKR-MKQKx9yzuxtF91CcGc/edit Galatea. Tora. Google Docs. Опубликовано онлайн 6 сентября 2022.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;200&amp;quot; heights=&amp;quot;200&amp;quot; caption=&amp;quot;Примеры репостов/подписок @toraafterdark&amp;quot;&amp;gt;&lt;br /&gt;
noncredibleopenvk5.png&lt;br /&gt;
noncredibleopenvk1.png&lt;br /&gt;
noncredibleopenvk3.png&lt;br /&gt;
noncredibleopenvk2.png&lt;br /&gt;
noncredibleopenvk4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9255</id>
		<title>Шаблон:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9255"/>
		<updated>2026-07-26T13:53:15Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{ref|}}}|&amp;lt;span id=&amp;quot;{{{ref}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;}}{{#if:{{{last|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}]]|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}}}|{{#if:{{{author|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{author}}}]]|{{{author}}}}}}}}}{{#if:{{{coauthors|}}}|, {{{coauthors}}}}}{{#if:{{{author|}}}{{{last|}}}|. }}&amp;amp;nbsp;{{#if:{{{url|}}}|[{{{url}}} &#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;]|&#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;}}{{#if:{{{subtitle|}}}|. {{{subtitle}}}}}{{#if:{{{format|}}}|&amp;amp;nbsp;&amp;lt;sup&amp;gt;[{{{format}}}]&amp;lt;/sup&amp;gt;}}{{#if:{{{lang|}}}|{{#ifeq:{{{lang}}}|ru||&amp;amp;nbsp;&amp;lt;sup&amp;gt;[{{{lang}}}]&amp;lt;/sup&amp;gt;}}}}.&amp;amp;nbsp;{{#if:{{{website|}}}{{{publisher|}}}{{{date|}}}| {{#if:{{{website|}}}|{{{website}}}}}{{#if:{{{publisher|}}}|{{#if:{{{website|}}}|, }}{{{publisher}}}}}&amp;amp;nbsp;{{#if:{{{date|}}}| ({{{date}}})}}.}}{{#if:{{{pages|}}}| {{{pages}}}.}}{{#if:{{{location|}}}| {{{location}}}.}}{{#if:{{{description|}}}| — {{{description}}}.}}{{#if:{{{quote|}}}|: «{{{quote}}}».}}{{#if:{{{doi|}}}|&amp;amp;nbsp;doi:[https://doi.org/{{{doi}}} {{{doi}}}].}}{{#if:{{{accessdate|}}}| Дата обращения: {{{accessdate}}}.}}{{#if:{{{archiveurl|}}}|&amp;amp;nbsp;Архивировано {{#if:{{{archivedate|}}}|{{{archivedate}}} }} из [{{{archiveurl}}} оригинала].}}{{#if:{{{deadlink|}}}|{{#ifeq:{{{deadlink}}}|yes|&amp;amp;nbsp;{{color|red|(недоступная ссылка)}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9254</id>
		<title>Шаблон:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9254"/>
		<updated>2026-07-26T13:52:01Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{ref|}}}|&amp;lt;span id=&amp;quot;{{{ref}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;}}{{#if:{{{last|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}]]|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}}}|{{#if:{{{author|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{author}}}]]|{{{author}}}}}}}}}{{#if:{{{coauthors|}}}|, {{{coauthors}}}}}{{#if:{{{author|}}}{{{last|}}}|. }}&amp;amp;nbsp;{{#if:{{{url|}}}|[{{{url}}} &#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;]|&#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;}}{{#if:{{{subtitle|}}}|. {{{subtitle}}}}}{{#if:{{{format|}}}|&amp;amp;nbsp;&amp;lt;sup&amp;gt;[{{{format}}}]&amp;lt;/sup&amp;gt;}}{{#if:{{{lang|}}}|{{#ifeq:{{{lang}}}|ru||&amp;amp;nbsp;&amp;lt;sup&amp;gt;[{{{lang}}}]&amp;lt;/sup&amp;gt;}}}}.&amp;amp;nbsp;{{#if:{{{website|}}}{{{publisher|}}}{{{date|}}}| {{#if:{{{website|}}}|{{{website}}}}}{{#if:{{{publisher|}}}|{{#if:{{{website|}}}|, }}{{{publisher}}}}}&amp;amp;nbsp;{{#if:{{{date|}}}| {{{date}}}}}.}}{{#if:{{{pages|}}}| {{{pages}}}.}}{{#if:{{{location|}}}| {{{location}}}.}}{{#if:{{{description|}}}| — {{{description}}}.}}{{#if:{{{quote|}}}|&amp;amp;nbsp;&amp;amp;mdash; «{{{quote}}}».}}{{#if:{{{doi|}}}|&amp;amp;nbsp;doi:[https://doi.org/{{{doi}}} {{{doi}}}].}}{{#if:{{{accessdate|}}}| Дата обращения: {{{accessdate}}}.}}{{#if:{{{archiveurl|}}}|&amp;amp;nbsp;Архивировано {{#if:{{{archivedate|}}}|{{{archivedate}}} }} из [{{{archiveurl}}} оригинала].}}{{#if:{{{deadlink|}}}|{{#ifeq:{{{deadlink}}}|yes|&amp;amp;nbsp;{{color|red|(недоступная ссылка)}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9253</id>
		<title>Шаблон:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9253"/>
		<updated>2026-07-26T13:49:39Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{ref|}}}|&amp;lt;span id=&amp;quot;{{{ref}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;}}{{#if:{{{last|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}]]|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}}}|{{#if:{{{author|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{author}}}]]|{{{author}}}}}}}}}{{#if:{{{coauthors|}}}|, {{{coauthors}}}}}{{#if:{{{author|}}}{{{last|}}}|. }}&amp;amp;nbsp;{{#if:{{{url|}}}|[{{{url}}} &#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;]|&#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;}}{{#if:{{{subtitle|}}}|. {{{subtitle}}}}}{{#if:{{{format|}}}|&amp;amp;nbsp;[{{{format}}}]}}{{#if:{{{lang|}}}|{{#ifeq:{{{lang}}}|ru||&amp;amp;nbsp;({{{lang}}})}}}}.{{#if:{{{website|}}}{{{publisher|}}}{{{date|}}}| {{#if:{{{website|}}}|{{{website}}}}}{{#if:{{{publisher|}}}|{{#if:{{{website|}}}|, }}{{{publisher}}}}}&amp;amp;nbsp;{{#if:{{{date|}}}| {{{date}}}}}.}}{{#if:{{{pages|}}}| {{{pages}}}.}}{{#if:{{{location|}}}| {{{location}}}.}}{{#if:{{{description|}}}| — {{{description}}}.}}{{#if:{{{quote|}}}|&amp;amp;nbsp;&amp;amp;mdash; «{{{quote}}}».}}{{#if:{{{doi|}}}|&amp;amp;nbsp;doi:[https://doi.org/{{{doi}}} {{{doi}}}].}}{{#if:{{{accessdate|}}}| Дата обращения: {{{accessdate}}}.}}{{#if:{{{archiveurl|}}}|&amp;amp;nbsp;Архивировано {{#if:{{{archivedate|}}}|{{{archivedate}}} }} из [{{{archiveurl}}} оригинала].}}{{#if:{{{deadlink|}}}|{{#ifeq:{{{deadlink}}}|yes|&amp;amp;nbsp;{{color|red|(недоступная ссылка)}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9252</id>
		<title>Шаблон:CiteWeb</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:CiteWeb&amp;diff=9252"/>
		<updated>2026-07-26T13:42:24Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Add CiteWeb template.Assisted-by: Claude:claude-5-mythos-preview-uagov&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{ref|}}}|&amp;lt;span id=&amp;quot;{{{ref}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;}}{{#if:{{{last|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}]]|{{{last}}}{{#if:{{{first|}}}|, {{{first}}}}}}}|{{#if:{{{author|}}}|{{#if:{{{authorlink|}}}|[[{{{authorlink}}}|{{{author}}}]]|{{{author}}}}}}}}}{{#if:{{{coauthors|}}}|, {{{coauthors}}}}}{{#if:{{{author|}}}{{{last|}}}|. }}{{#if:{{{url|}}}|[{{{url}}} &#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;]|&#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;}}{{#if:{{{subtitle|}}}|. &amp;lt;small&amp;gt;{{{subtitle}}}&amp;lt;/small&amp;gt;}}{{#if:{{{format|}}}| ({{{format}}})}}{{#if:{{{lang|}}}|{{#ifeq:{{{lang}}}|ru||&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;({{{lang}}})&amp;lt;/span&amp;gt;}}}}.{{#if:{{{website|}}}{{{publisher|}}}{{{date|}}}| {{#if:{{{website|}}}|{{{website}}}}}{{#if:{{{publisher|}}}|{{#if:{{{website|}}}|, }}{{{publisher}}}}}{{#if:{{{date|}}}| ({{{date}}})}}.}}{{#if:{{{pages|}}}| {{{pages}}}.}}{{#if:{{{location|}}}| {{{location}}}.}}{{#if:{{{description|}}}| — {{{description}}}.}}{{#if:{{{quote|}}}| — «{{{quote}}}».}}{{#if:{{{doi|}}}| doi:[https://doi.org/{{{doi}}} {{{doi}}}].}}{{#if:{{{accessdate|}}}| Дата обращения: {{{accessdate}}}.}}{{#if:{{{archiveurl|}}}| Архивировано {{#if:{{{archivedate|}}}|{{{archivedate}}} }}из [{{{archiveurl}}} оригинала].}}{{#if:{{{deadlink|}}}|{{#ifeq:{{{deadlink}}}|yes| {{color|red|(недоступная ссылка)}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=P52&amp;diff=9229</id>
		<title>P52</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=P52&amp;diff=9229"/>
		<updated>2026-07-26T12:16:08Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
&lt;br /&gt;
{{Челик&lt;br /&gt;
| name = Михаил Соков&lt;br /&gt;
| image = [[Image:Fortunaslop.jpeg|220px|center]]&lt;br /&gt;
| caption = Маскот его канала на YouTube - Фортуна Тян&lt;br /&gt;
| nicknames = P52, MixaP52&lt;br /&gt;
| language = русский&lt;br /&gt;
| interests = Linux&lt;br /&gt;
| activity = Twitch-стример, YouTub&#039;ер&lt;br /&gt;
| activity_years = 2024 — н.в&lt;br /&gt;
| status = жив&lt;br /&gt;
| yt = [https://www.youtube.com/@p52x P52]&lt;br /&gt;
| telegram = [https://t.me/p52sx P52]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P52&#039;&#039;&#039; &amp;amp;mdash; известный в узких кругах блогер про &amp;lt;s&amp;gt;Windows&amp;lt;/s&amp;gt; Linux.&lt;br /&gt;
&lt;br /&gt;
Популярность настигла его после выхода [https://www.youtube.com/watch?v=YgoTpwTJIOQ видеоролика про опыт с дистрибутивами Linux], который обрёл популярность из-за коллаборации с [[Daniel Myslivets]], [[Veselcraft]] и ещё нескольких людей.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=P52&amp;diff=9220</id>
		<title>P52</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=P52&amp;diff=9220"/>
		<updated>2026-07-26T10:47:05Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Новая страница: «{{Заготовок}}  {{Челик | image = center | caption = Маскот P52, Фортуна | language = русский | interests = гунинг, линукслопие | activity = блогер про Linux | status = жив | orientation = гетеросексуальная | yt = [https://www.youtube.com/@p52x @p52x] }}  &amp;#039;&amp;#039;&amp;#039;P52&amp;#039;&amp;#039;&amp;#039; &amp;amp;mdash; известный в узких кругах блогер про &amp;lt;s&amp;gt;Windows...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
&lt;br /&gt;
{{Челик&lt;br /&gt;
| image = [[Image:Fortunaslop.jpeg|220px|center]]&lt;br /&gt;
| caption = Маскот P52, Фортуна&lt;br /&gt;
| language = русский&lt;br /&gt;
| interests = гунинг, линукслопие&lt;br /&gt;
| activity = блогер про Linux&lt;br /&gt;
| status = жив&lt;br /&gt;
| orientation = гетеросексуальная&lt;br /&gt;
| yt = [https://www.youtube.com/@p52x @p52x]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P52&#039;&#039;&#039; &amp;amp;mdash; известный в узких кругах блогер про &amp;lt;s&amp;gt;Windows&amp;lt;/s&amp;gt; Linux.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Fortunaslop.jpeg&amp;diff=9219</id>
		<title>Файл:Fortunaslop.jpeg</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Fortunaslop.jpeg&amp;diff=9219"/>
		<updated>2026-07-26T10:46:30Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A0%D1%8D%D0%B9%D1%87%D0%B5%D0%BB_%D0%9F%D0%BE%D0%B4%D1%8F&amp;diff=9049</id>
		<title>Рэйчел Подя</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A0%D1%8D%D0%B9%D1%87%D0%B5%D0%BB_%D0%9F%D0%BE%D0%B4%D1%8F&amp;diff=9049"/>
		<updated>2026-06-02T18:42:04Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: ноги&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цитата|quote=У меня есть канал, где публикуют гуро лоли и некрофилию. Создатель делал опрос «Какого контента вы хотите видеть больше?» и больше всего голосов за софткор, но создателю вообще похрен и он продолжил жесть постить|author=Подя}}{{Челик&lt;br /&gt;
| name = Рэйчел Подя&lt;br /&gt;
| birthday = 22 января 2009 года&lt;br /&gt;
| nicknames = Stellessia, westpain, deadrachel, incycledream&lt;br /&gt;
| activity_years = 2016 - н.в&lt;br /&gt;
| language = русский, українська, English&lt;br /&gt;
| nationality = украинка&lt;br /&gt;
| location = г. Бровары, Киевская область, Украина&lt;br /&gt;
| alignment = Нейтральный злой&lt;br /&gt;
| politviews = леволиберальные&lt;br /&gt;
| image = [[File:rachelpfp.jpg|220px]]&lt;br /&gt;
| caption = Аватарка Рейчел в телеграме&lt;br /&gt;
| telegram = [https://t.me/deadrachel Rachel], [https://t.me/Stellessia Личный блог]&lt;br /&gt;
| links_other = [https://stll.gay Личный сайт]&lt;br /&gt;
| ovk = [https://ovk.to/stl Rachel (Stellessia) Podya]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рэйчел Подя&#039;&#039;&#039; — бывшая участница около-[[OpenVK]]&#039;шных сообществ, известная тем, что спровоцировала [[Смутное время в Сейберпедии|Смутное время]]. Трижды обвинялась в гунинге первого порядка, была осуждена дважды&amp;lt;ref&amp;gt;[https://t.me/sbrpdk/33345 Решение] о блокировке Рейчел&amp;lt;/ref&amp;gt;, один раз помилована опросом в чате Сейберпедии&amp;lt;ref&amp;gt;[https://t.me/sbrpdk/35085 Решение] о преодолении вето на разблокировку Рейчел&amp;lt;/ref&amp;gt;. На данный момент находится под пожизненными санкциями Ржаксфедерации и не допускается в ржаксчаты&amp;lt;ref&amp;gt;На текущий момент, с 31 мая забанена в Ржаксфедерации по причине «неоднократные нарушения ПЧР № 2 и № 3, лолипостинг и гунинг, попытки манипуляций админсоставом, полное отсутствие понимания социальных норм и барьеров в дополнении к общей неадекватности»&amp;lt;/ref&amp;gt;, однако после развала Ржаки эти санкции более не приводятся в исполнение и Рейчел находится в чате Сейберпедии на птичьих правах.&lt;br /&gt;
&lt;br /&gt;
== Личная жизнь ==&lt;br /&gt;
О личной жизни Рейчел известно, что её семья была неблагополучной: отец ушёл «за хлебом» и больше в жизни не присутствовал. Ранее проживала только с мамой и её сожителем. По собственным словам, обладает чертами инфантилизма. Планирует в будущем работать в девопс. Как и присуще «[[Komputersem|умным и грамотным людям]]» планировала после девятого класса никуда не идти&amp;lt;ref&amp;gt;https://t.me/sbrpdk/78115&amp;lt;/ref&amp;gt;, однако в итоге продолжила обучение в школе в десятом классе.&lt;br /&gt;
&lt;br /&gt;
21 мая 2025 года неожиданно для всех Рейчел сообщила в чате Сейберпедии о том, что «Мамы больше нет». Как выяснилось позже, смерть произошла из-за проломленного черепа&amp;lt;ref&amp;gt;[https://t.me/bro_revisor/92915 Пост в местном канале города Рейчел]&amp;lt;/ref&amp;gt;. Всему виной оказался сожитель&amp;lt;ref&amp;gt;[https://t.me/Stellessia/2201 Пост в личном блоге Рейчел]&amp;lt;/ref&amp;gt;, который устроил драку с матерью Рейчел. Как отмечали знакомые Рейчел, сожитель и ранее проявлял [https://t.me/Stellessia/910 неадекватное поведение] — в начале 2024 года из-за него мать чуть ли не лишилась прав опекунcтва. На похоронах Рейчел (зачем то) каминг-аутнулась как трансгендер&amp;lt;ref&amp;gt;[https://t.me/Stellessia/2203 Пост в личном блоге Рейчел]&amp;lt;/ref&amp;gt;, отчего, ожидаемо, получила ахуй от родственников. После похорон начала жить у крёстной совместно с двоюродным братом Никитой и сестрой.&lt;br /&gt;
&lt;br /&gt;
== Деятельность ==&lt;br /&gt;
&lt;br /&gt;
=== Westpain ===&lt;br /&gt;
До «мягкого перехода» была известна под никнеймом westpain и преимущественно сидела в чатах прошивальной тематики.&lt;br /&gt;
&lt;br /&gt;
=== В [[Сейберпедия|Сейберпедии]] ===&lt;br /&gt;
В Сейберпедии Рейчел была активным и одновременно крайне спорным участником. Рейчел смогла получить 2 (!!!) бана в чате за 1 месяц и получить дважды блокировку в федерации [[Ржака|Ржаки]] из-за неоднократных нарушений правил одноименной феды.&lt;br /&gt;
&lt;br /&gt;
Первый случай произошёл 26 апреля: Рэйчел получила блокировку в чате Сейберпедии и в федерации Ржаки за постинг NSFW-контента (в том числе лоликон-прона) и демонстрацию девиантного поведения. В тот день также прозвучала&amp;lt;ref&amp;gt;https://t.me/sbrpdk/24934&amp;lt;/ref&amp;gt; фраза от Рейчел, ставшая впоследствии локальным мемом:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;У меня есть канал, где публикуют гуро лоли и некрофилию. Создатель делал опрос «Какого контента вы хотите видеть больше?» и больше всего голосов за софткор, но создателю вообще похрен и он продолжил жесть постить.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По словам самой Рэйчел, это было пост-мета-иронией, а подобные фетиши ей якобы не свойственны. Однако, учитывая личность Рэйчел, очевидно, что сказанное прозвучало от чистого сердца, а её последующие оправдания выглядели лишь как жалкая попытка самоконтроля.&lt;br /&gt;
&lt;br /&gt;
Данный инцидент стал поводом для начала [[Смутное время в Сейберпедии|Смутного времени]] в чате Сейберпедии.&lt;br /&gt;
&lt;br /&gt;
29 апреля наказание было смягчено и заместо блокировки в чате Рейчел было выдано предупреждение.&lt;br /&gt;
&lt;br /&gt;
Второй случай произошёл 24 мая. До этого Рэйчел успела получить ещё два предупреждения за короткий срок, после чего последовал новый бан в чате. 31 мая она была окончательно заблокирована и в федерации Ржаки — на этот раз пожизненно.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=TORA_V4&amp;diff=9025</id>
		<title>TORA V4</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=TORA_V4&amp;diff=9025"/>
		<updated>2026-05-28T09:58:10Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: умер&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Изложение}}&lt;br /&gt;
{{Челик&lt;br /&gt;
|image=[[Image:TORA_V4.jpeg|92px]]&lt;br /&gt;
|caption=Аватарка Торы на YouTube (2025)&lt;br /&gt;
|nicknames=TORA_V4, Noramato&lt;br /&gt;
|activity_years=2013 - 2026&lt;br /&gt;
|activity=VOCALOID-продюсер&lt;br /&gt;
|language=английский&lt;br /&gt;
|interests=музыка, странное порно&lt;br /&gt;
|yt=[https://www.youtube.com/@uzmk_mato Noramato]&lt;br /&gt;
|links_other=[https://soundcloud.com/uzmk_mato Soundcloud]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{EnVer}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PKAkatora&#039;&#039;&#039; (&#039;&#039;также известный как PKBowsy, TORA_V4, Noramato и 野良まと&#039;&#039;) &amp;amp;mdash; европейский (предположительно, нидерландский) VOCALOID кавер-артист средней популярности. Имеет свой YouTube-канал, который ведёт с 2013 года и, по состоянию на 26 ноября 2024 года, имел 160 тысяч подписчиков&amp;lt;ref&amp;gt;[https://web.archive.org/web/20241126022427/https://www.youtube.com/@uzmk_mato Архивировано. 野良まと / Noramato. Канал. YouTube. Дата обращения 26 ноября 2024 года.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В основном занимался созданием VOCALOID-каверов на различные, в том числе изначально не-вокалоидные, песенки; изредка публиковал различные смехуёчки и постиронию&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=rxiSecU4EZg 野良まと / Noramato. hatsune miku loses her job. YouTube. Опубликовано онлайн 18 апреля 2021.]&amp;lt;/ref&amp;gt;. Озвучил по меньшей мере одного UTAU&#039;лоида два раза&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RVy0lmyoBS8 野良まと / Noramato. utauloid comparison (2013 vs 2021). YouTube. Опубликовано онлайн 18 февраля 2021.]&amp;lt;/ref&amp;gt;. Делал коллабы с SilvaGunner&amp;lt;ref&amp;gt;[https://siivagunner.fandom.com/wiki/PKBowsy SiIvaGunner Wiki. PKBowsy. Fandom.com. Опубликовано онлайн 25 ноября 2017.]&amp;lt;/ref&amp;gt; и TimmyTurnersGrandDad&amp;lt;ref&amp;gt;[https://ttgd.fandom.com/wiki/PKAkatora TimmyTurnersGrandDad Wiki. PKAkatora. Fandom.com. Опубликовано онлайн 3 июня 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Известен тем, что постоянно вляпывается в разного рода неприятности, из-за которых менял свой никнейм несколько раз и был удалён из VOCALOID вики из-за несоответствия стандартам сообщества. Поджёг некоторым жопу настолько сильно, что кто-то накатал на него досье на гройперско-инцельской залупе Kiwifarms&amp;lt;ref&amp;gt;[https://kiwifarms.st/threads/pkakatora-believes-hes-above-end-user-lisence-agreements-copyright-crediting-creators-and-he-rarely-tells-the-full-story.73886/ Gumesis. PKAkatora believes he&#039;s above End User Lisence Agreements, copyright, crediting creators, and he rarely tells the full story. KiwiFarms. Опубликовано онлайн 27 июля 2020.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
PKAkatora несколько раз пытался закончить свою деятельность по различным причинам, однако потом передумывал. В 2026 году окончательно ушёл в подполье, скрыв все свои видеозаписи на YouTube.&lt;br /&gt;
&lt;br /&gt;
== Дискография ==&lt;br /&gt;
&lt;br /&gt;
Сабж сделал [https://www.youtube.com/@uzmk_mato/videos очень много каверов], ремиксов для [https://siivagunner.fandom.com/wiki/Category:PKBowsy SilvaGunner] (26 штук) и [https://ttgd.fandom.com/wiki/Category:PKAkatora TTGD] (54 штуки). В этом разделе представлены только те композиции, в работу над которыми PKAkatora внёс существенный вклад&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list Amandelen. TORA V4 songs list. Vocaloid Lyrics Wiki. Опубликовано онлайн 22 августа 2020.]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://vocaloidlyrics.fandom.com/wiki/Category:TORA_V4_songs_list/Tuning Neiranei. TORA V4 songs list. Vocaloid Lyrics Wiki. Опубликовано онлайн 23 августа 2024.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JQ1Dqj0FG_Y Corona feat. Hatsune Miku (YouTube, 2020, 1M+)] &amp;amp;mdash; оригинальная композиция, вдохновлённая TikTok-шортом Нетты Бразилай;&lt;br /&gt;
* [https://yonkagor.bandcamp.com/track/fallacy-miku-ver YonKaGor - Fallacy (MIKU ver) (Bandcamp, 2022)] &amp;amp;mdash; сингл YonKaGor, официальный кавер, PKAkatora был приглашён как эксперт по тюнингу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;JQ1Dqj0FG_Y&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;300&amp;quot; height=&amp;quot;170&amp;quot;&amp;gt;Rab4-FILXSI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Критика ==&lt;br /&gt;
&lt;br /&gt;
=== Конфликт с Raki Saionji ===&lt;br /&gt;
&lt;br /&gt;
В 2019 году Tora, когда ещё называл себя PKBowsy, использовал для своего контента взломанную версию Project DIVA Future Tone Arcade, которую сделал трампист&amp;lt;sup&amp;gt;[&#039;&#039;источник?&#039;&#039;]&amp;lt;/sup&amp;gt; Raki Saionji и залил на MEGA. Tora &amp;quot;нигде&amp;quot; не оставил ссылок на моддера, за что тот на него жестоко обиделся и разнылся на весь GitHub, удалив репозиторий, объясняя это тем, что PKBowsy пидарас&amp;lt;ref&amp;gt;[https://ibb.co/5c9Hyjv Изображение из треда на KiwiFarms.]&amp;lt;/ref&amp;gt;. По заверениям анонимуса, свой юзернейм он поменял первый раз из-за этого случая.&lt;br /&gt;
&lt;br /&gt;
Имеется информация, что ссылка на репозиторий Raki Saionji всё-таки была оставлена в комментариях под одним из видео&amp;lt;ref&amp;gt;[https://github.com/rakisaionji/FrankenToneArcade/issues/1#issuecomment-488371448 Nastys. Комментарий на GitHub. Опубликовано онлайн 1 мая 2019.]&amp;lt;/ref&amp;gt;, однако на данный момент возможность подтвердить был ли комментарий отсутствует. Сам Tora не утверждает, что комментарий оставил и когда его спросили почему он не ссылается на моддеров, ответил, что на мусор он ссылки не оставляет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Rakisaionjimoment.png|Raki Saionji having a normal one&lt;br /&gt;
Файл:57110300-01595400-6d30-11e9-857c-a4b76d8376f7.png|PKBowsy не оставляет ссылок на мусор хд&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пиратство ===&lt;br /&gt;
&lt;br /&gt;
PKAkatora использовал пиратские войсбанки для VOCALOID и даже переделывал их под UTAU. Подобное поведение считается максимально зашкварным в западном VOCALOID-коммьюнити&amp;lt;ref&amp;gt;[https://www.reddit.com/r/Vocaloid/comments/zfs60u/why_is_the_vocaloid_community_against_piracy/ Dr_Zwi. Why is the Vocaloid community against piracy? Reddit. Опубликовано онлайн 8 декабря 2022.]&amp;lt;/ref&amp;gt;. Не смотря на то, что Tora войсбанки-переделки не публиковал, его стёрли из VOCALOID Wiki и забанили за грубое нарушение лицензионного соглашения VOCALOID и за &amp;quot;неадекватность&amp;quot; его фанбоев&amp;lt;ref&amp;gt;[https://ibb.co/MGJpg0m Скриншот обращения PKAkatora к модераторам VOCALOID Wiki.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:AngelEmfrblResponse.png|Причина бана на вики&lt;br /&gt;
Файл:BV1yJ411Y7uS_p1.ia.mp4|Тот самый кавер с портированым войсбанком&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сгрыз войсбанка KAFU ===&lt;br /&gt;
&lt;br /&gt;
[[File:1615280886666.jpg|мини|Ой|200px]]&lt;br /&gt;
&lt;br /&gt;
Одним утром PKAkatora зашёл на сайт компании AHS и попробовал скачать оттуда войсбанк KAFU, подставив ID в URL. Не смотря на то, что войсбанк тогда ещё не был выпущен, он был размещён на сервере, на котором кто-то забыл настроить nginx, из-за чего авантюра Торы удалась и он успешно спиздил войсбанк, после чего не придумал ничего лучше чем сделать кавер с KAFU и начать выёбываться в интернетах. Ходили слухи, что AHS собрались подать на Тору в суд&amp;lt;ref&amp;gt;[https://x.com/mikumikufigures/status/1356181298696564739 mikumikufigures! ✿. Kafu&#039;s cevio ai voicebank was leaked by a popular cover artist. Twitter. Опубликовано онлайн 1 февраля 2021.]&amp;lt;/ref&amp;gt;, однако что из этого вышло неизвестно.&lt;br /&gt;
&lt;br /&gt;
Сложившаяся ситуация не помешала Торе принять участие в конкурсе от AHS в сентябре того же года. Более того, он даже выиграл&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140756 Anonymous. Western Vocaloid Community. lolcow.farm. Опубликовано онлайн 3 сентября 2021.]&amp;lt;/ref&amp;gt;, однако был дисквалифицирован после того, как небезразличные пользователи напомнили AHS о том, что Тора [https://youtu.be/tMGCUR7yu5o?t=1004 вообще-то у них KAFU спиздил может они до него доебутся лучше]&amp;lt;ref&amp;gt;[https://lolcow.farm/w/res/102290.html#q140762 Anonymous. Western Vocaloid Community. lolcow.farm. Опубликовано онлайн 3 сентября 2021.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;220&amp;quot;&amp;gt;&lt;br /&gt;
File:KAFU.mp4|Тот самый кавер на затрофееном войсбанке&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дети на Discord-сервере ===&lt;br /&gt;
&lt;br /&gt;
У Торы на Discord-сервере был NSFW-канал. На сервере с детьми. Ну, в общем, всё как у [[Ермаков]]а, только вместо сапогов там однажды оказалась shota-порнография, которую запостил несовершеннолетний челик с никнеймом vito. В тот момент Тора спал, поэтому люди побежали тегать местного верискока, который и вынес vito перманентный бан&amp;lt;ref&amp;gt;[https://connection19.tumblr.com/post/674590646982541312/tora-v4-pkakatora-pkbowsy Connection19. About the Vocaloid cover artist TORA_V4 / PKAkatora / PKBowsy. Tumblr. Опубликовано онлайн 27 января 2022]&amp;lt;/ref&amp;gt;. Проснувшись, Тора первым делом разбанил vito, сославшись на &amp;quot;изысканный вкус&amp;quot;. В своём твиттере Тора нередко отрицал то, что данное событие произошло, пока переписки не слили на Тамблер.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;
Файл:61a5d58ac5f74f1196976f3c056759dd2a93b63d.png&lt;br /&gt;
Файл:36182dc37db99a30aa6f79aab0e67ecd74011c57.png&lt;br /&gt;
Файл:bbba8075192c02a586acbad09c55b076762148b6.png|Фрагмент отрицания в Твиттере&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сомнительные предпочтения ===&lt;br /&gt;
&lt;br /&gt;
Сабж является большим любителем shota-порнографии и даже хорнился об 16-летнего персонажа, что, впрочем, не удивительно, учитывая ситуацию с vito и NSFW-каналами в его Discord&#039;е. Тем не менее, 6 сентября 2022 года общественность узнала о существовании у Торы альт-аккаунта в Twitter с которого он смотрит NSFW-контент. В перечень его вкусов входит инцест, изнасилования (в том числе и несовершеннолетних персонажей), фурри, а так же покемоны. Ну, то есть, покемоны в их обычном виде, не гуманоидные. Также были случаи репостов порно с бурундуками из Чип-и-Дейла и скатом из Splatoon&amp;lt;ref&amp;gt;[https://docs.google.com/document/d/1ozjU3QKPAs-CwNRde840PTKR-MKQKx9yzuxtF91CcGc/edit Galatea. Tora. Google Docs. Опубликовано онлайн 6 сентября 2022.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;200&amp;quot; heights=&amp;quot;200&amp;quot; caption=&amp;quot;Примеры репостов/подписок @toraafterdark&amp;quot;&amp;gt;&lt;br /&gt;
noncredibleopenvk5.png&lt;br /&gt;
noncredibleopenvk1.png&lt;br /&gt;
noncredibleopenvk3.png&lt;br /&gt;
noncredibleopenvk2.png&lt;br /&gt;
noncredibleopenvk4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8484</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8484"/>
		<updated>2025-12-12T23:36:39Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
!function(){var e,t,n,i={};function o(e,t,n){window.fetch&amp;amp;&amp;amp;fetch(e,{method:&amp;quot;POST&amp;quot;,headers:{&amp;quot;Content-Type&amp;quot;:&amp;quot;text/plain&amp;quot;},keepalive:!0,body:JSON.stringify(t)}).then(function(e){n&amp;amp;&amp;amp;n.callback&amp;amp;&amp;amp;n.callback({status:e.status})}).catch(function(e){n&amp;amp;&amp;amp;n.callback&amp;amp;&amp;amp;n.callback({error:e})})}var a=!1,r=location.href,s={},u=-1,l=0,c=0;function d(){var a=f();if(!e&amp;amp;&amp;amp;(u&amp;lt;n||a&amp;gt;=3e3)){u=n;var d={n:&amp;quot;engagement&amp;quot;,sd:Math.round(n/t*100),d:i.domain,u:r,p:s,e:a,v:33};l=0,c=0,i.hashBasedRouting&amp;amp;&amp;amp;(d.h=1),o(i.endpoint,d)}}function p(){&amp;quot;visible&amp;quot;===document.visibilityState&amp;amp;&amp;amp;document.hasFocus()&amp;amp;&amp;amp;0===l?l=Date.now():&amp;quot;hidden&amp;quot;!==document.visibilityState&amp;amp;&amp;amp;document.hasFocus()||(c=f(),l=0,d())}function f(){return l?c+(Date.now()-l):c}function v(){var e=document.body||{},t=document.documentElement||{};return Math.max(e.scrollHeight||0,e.offsetHeight||0,e.clientHeight||0,t.scrollHeight||0,t.offsetHeight||0,t.clientHeight||0)}function w(){var e=document.body||{},n=document.documentElement||{},i=window.innerHeight||n.clientHeight||0,o=window.scrollY||n.scrollTop||e.scrollTop||0;return t&amp;lt;=i?t:o+i}function m(f,m){var h,b,y=&amp;quot;pageview&amp;quot;===f;if(y&amp;amp;&amp;amp;a&amp;amp;&amp;amp;(d(),t=v(),n=w()),!i.captureOnLocalhost){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname)||&amp;quot;file:&amp;quot;===location.protocol)return g(f,m,&amp;quot;localhost&amp;quot;);if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&amp;amp;&amp;amp;!window.__plausible)return g(f,m)}try{if(&amp;quot;true&amp;quot;===window.localStorage.plausible_ignore)return g(f,m,&amp;quot;localStorage flag&amp;quot;)}catch(e){}var L={};L.n=f,L.v=33;var k=m&amp;amp;&amp;amp;(m.u||m.url);if(L.u=k||location.href,L.d=i.domain,L.r=document.referrer||null,m&amp;amp;&amp;amp;m.props&amp;amp;&amp;amp;(L.p=m.props),m&amp;amp;&amp;amp;!1===m.interactive&amp;amp;&amp;amp;(L.i=!1),m&amp;amp;&amp;amp;m.revenue&amp;amp;&amp;amp;(L.$=m.revenue),i.customProperties){var b=i.customProperties;&amp;quot;function&amp;quot;==typeof b&amp;amp;&amp;amp;(b=i.customProperties(f)),&amp;quot;object&amp;quot;==typeof b&amp;amp;&amp;amp;(L.p=Object.assign({},b,L.p))}if(i.hashBasedRouting&amp;amp;&amp;amp;(L.h=1),&amp;quot;function&amp;quot;==typeof i.transformRequest&amp;amp;&amp;amp;!(L=i.transformRequest(L)))return g(f,m,&amp;quot;transformRequest&amp;quot;);y&amp;amp;&amp;amp;(e=!1,r=(h=L).u,s=h.p,u=-1,c=0,l=Date.now(),a||(document.addEventListener(&amp;quot;visibilitychange&amp;quot;,p),window.addEventListener(&amp;quot;blur&amp;quot;,p),window.addEventListener(&amp;quot;focus&amp;quot;,p),a=!0)),o(i.endpoint,L,m)}function g(t,n,o){o&amp;amp;&amp;amp;i.logging&amp;amp;&amp;amp;console.warn(&amp;quot;Ignoring Event: &amp;quot;+o),n&amp;amp;&amp;amp;n.callback&amp;amp;&amp;amp;n.callback(),&amp;quot;pageview&amp;quot;===t&amp;amp;&amp;amp;(e=!0)}var h=[&amp;quot;pdf&amp;quot;,&amp;quot;xlsx&amp;quot;,&amp;quot;docx&amp;quot;,&amp;quot;txt&amp;quot;,&amp;quot;rtf&amp;quot;,&amp;quot;csv&amp;quot;,&amp;quot;exe&amp;quot;,&amp;quot;key&amp;quot;,&amp;quot;pps&amp;quot;,&amp;quot;ppt&amp;quot;,&amp;quot;pptx&amp;quot;,&amp;quot;7z&amp;quot;,&amp;quot;pkg&amp;quot;,&amp;quot;rar&amp;quot;,&amp;quot;gz&amp;quot;,&amp;quot;zip&amp;quot;,&amp;quot;avi&amp;quot;,&amp;quot;mov&amp;quot;,&amp;quot;mp4&amp;quot;,&amp;quot;mpeg&amp;quot;,&amp;quot;wmv&amp;quot;,&amp;quot;midi&amp;quot;,&amp;quot;mp3&amp;quot;,&amp;quot;wav&amp;quot;,&amp;quot;wma&amp;quot;,&amp;quot;dmg&amp;quot;];function b(e){return e&amp;amp;&amp;amp;e.tagName&amp;amp;&amp;amp;&amp;quot;a&amp;quot;===e.tagName.toLowerCase()}function y(e){if(&amp;quot;auxclick&amp;quot;!==e.type||1===e.button){var t,n=function(e){for(;e&amp;amp;&amp;amp;(void 0===e.tagName||!b(e)||!e.href);)e=e.parentNode;return e}(e.target),o=n&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof n.href&amp;amp;&amp;amp;n.href.split(&amp;quot;?&amp;quot;)[0];if(!E(n,0)){if(i.outboundLinks&amp;amp;&amp;amp;(t=n)&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof t.href&amp;amp;&amp;amp;t.host&amp;amp;&amp;amp;t.host!==location.host)return L(e,n,{name:&amp;quot;Outbound Link: Click&amp;quot;,props:{url:n.href}});if(i.fileDownloads&amp;amp;&amp;amp;function(e){if(!e)return!1;var t=e.split(&amp;quot;.&amp;quot;).pop();return h.some(function(e){return e===t})}(o))return L(e,n,{name:&amp;quot;File Download&amp;quot;,props:{url:o}})}}}function L(e,t,n){var i;(i={props:n.props}).revenue=n.revenue,m(n.name,i)}function k(e){var t=e&amp;amp;&amp;amp;e.classList;if(t){for(var n=0;n&amp;lt;t.length;n++)if(t.item(n).match(/plausible-event-name(=|--)(.+)/))return!0}return!1}function E(e,t){return!!e&amp;amp;&amp;amp;!(t&amp;gt;3)&amp;amp;&amp;amp;(!!k(e)||E(e.parentNode,t+1))}function x(e){var t=k(e)?e:e&amp;amp;&amp;amp;e.parentNode,n={name:null,props:{}};n.revenue={};var i=t&amp;amp;&amp;amp;t.classList;if(!i)return n;for(var o=0;o&amp;lt;i.length;o++){var a,r,s=i.item(o),u=s.match(/plausible-event-(.+)(=|--)(.+)/);u&amp;amp;&amp;amp;(a=u[1],r=u[3].replace(/\+/g,&amp;quot; &amp;quot;),&amp;quot;name&amp;quot;==a.toLowerCase()?n.name=r:n.props[a]=r);var l=s.match(/plausible-revenue-(.+)(=|--)(.+)/);l&amp;amp;&amp;amp;(a=l[1],r=l[3],n.revenue[a]=r)}return n}function S(e){let o=Object.assign(a=e||{},{autoCapturePageviews:!1!==a.autoCapturePageviews,logging:!1!==a.logging,lib:a.lib||&amp;quot;web&amp;quot;});if(window.plausible&amp;amp;&amp;amp;window.plausible.l){o.logging&amp;amp;&amp;amp;console.warn(&amp;quot;Plausible analytics script was already initialized, skipping init&amp;quot;);return}Object.assign(i={endpoint:&amp;quot;https://plausible.saberpedia.no/api/event&amp;quot;,domain:&amp;quot;saberpedia.no&amp;quot;,formSubmissions:!0,fileDownloads:!0,outboundLinks:!0},o,{domain:i.domain}),t=v(),n=w(),window.addEventListener(&amp;quot;load&amp;quot;,function(){t=v();var e=0,n=setInterval(function(){t=v(),15==++e&amp;amp;&amp;amp;clearInterval(n)},200)}),document.addEventListener(&amp;quot;scroll&amp;quot;,function(){t=v();var e=w();e&amp;gt;n&amp;amp;&amp;amp;(n=e)}),i.autoCapturePageviews&amp;amp;&amp;amp;function(e){function t(t){(i.hashBasedRouting||!t||n!==location.pathname)&amp;amp;&amp;amp;(n=location.pathname,e(&amp;quot;pageview&amp;quot;))}var n,o=function(){t(!0)};if(i.hashBasedRouting)window.addEventListener(&amp;quot;hashchange&amp;quot;,o);else{var a=window.history;if(a.pushState){var r=a.pushState;a.pushState=function(){r.apply(this,arguments),o()},window.addEventListener(&amp;quot;popstate&amp;quot;,o)}}&amp;quot;hidden&amp;quot;===document.visibilityState||&amp;quot;prerender&amp;quot;===document.visibilityState?document.addEventListener(&amp;quot;visibilitychange&amp;quot;,function(){n||&amp;quot;visible&amp;quot;!==document.visibilityState||t()}):t(),window.addEventListener(&amp;quot;pageshow&amp;quot;,function(e){e.persisted&amp;amp;&amp;amp;t()})}(m),function(){function e(e){if(&amp;quot;auxclick&amp;quot;!==e.type||1===e.button){for(var t,n,i,o=e.target,a=0;a&amp;lt;=3&amp;amp;&amp;amp;o;a++){if((t=o)&amp;amp;&amp;amp;t.tagName&amp;amp;&amp;amp;&amp;quot;form&amp;quot;===t.tagName.toLowerCase())return;b(o)&amp;amp;&amp;amp;(n=o),k(o)&amp;amp;&amp;amp;(i=o),o=o.parentNode}if(i){var r=x(i);if(n)r.props.url=n.href,L(e,n,r);else{var s={};s.props=r.props,s.revenue=r.revenue,m(r.name,s)}}}}document.addEventListener(&amp;quot;click&amp;quot;,y),document.addEventListener(&amp;quot;auxclick&amp;quot;,y),i.fileDownloads&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof i.fileDownloads&amp;amp;&amp;amp;Array.isArray(i.fileDownloads.fileExtensions)&amp;amp;&amp;amp;(h=i.fileDownloads.fileExtensions),i.formSubmissions&amp;amp;&amp;amp;document.addEventListener(&amp;quot;submit&amp;quot;,function(e){(e.target.hasAttribute(&amp;quot;novalidate&amp;quot;)||e.target.checkValidity())&amp;amp;&amp;amp;(E(e.target,0)||m(&amp;quot;Form: Submission&amp;quot;))},!0),document.addEventListener(&amp;quot;submit&amp;quot;,function(e){var t,n=x(e.target);n.name&amp;amp;&amp;amp;((t={props:n.props}).revenue=n.revenue,m(n.name,t))}),document.addEventListener(&amp;quot;click&amp;quot;,e),document.addEventListener(&amp;quot;auxclick&amp;quot;,e)}();for(var a,r=window.plausible&amp;amp;&amp;amp;window.plausible.q||[],s=0;s&amp;lt;r.length;s++)m.apply(this,r[s]);window.plausible=m,window.plausible.init=S,window.plausible.v=33,window.plausible.s=i.lib,window.plausible.l=!0}window.plausible=window.plausible||{},plausible.o&amp;amp;&amp;amp;S(plausible.o),plausible.init=S}();&lt;br /&gt;
&lt;br /&gt;
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};&lt;br /&gt;
plausible.init();&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8483</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8483"/>
		<updated>2025-12-12T23:34:00Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
body.innerHTML += `&amp;lt;script src=&amp;quot;https://plausible.saberpedia.no/js/pa-MLTcoS2o2ouFf6JzBU-jP.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};;&lt;br /&gt;
plausible.init();&amp;lt;/script&amp;gt;`;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8482</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.js&amp;diff=8482"/>
		<updated>2025-12-12T23:30:21Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Новая страница: «/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */  mw.loader.load`https://plausible.saberpedia.no/js/pa-MLTcoS2o2ouFf6JzBU-jP.js`; window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};; plausible.init();»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
mw.loader.load`https://plausible.saberpedia.no/js/pa-MLTcoS2o2ouFf6JzBU-jP.js`;&lt;br /&gt;
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};;&lt;br /&gt;
plausible.init();&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8007</id>
		<title>Михаил Шигорин</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8007"/>
		<updated>2025-10-31T15:17:15Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: исправила фио&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
&lt;br /&gt;
{{Челик&lt;br /&gt;
| name = Михаил Шигорин&lt;br /&gt;
| irl_name = Шигорін Михайло Олександрович&lt;br /&gt;
| nicknames = МШ, shigorin, mike&lt;br /&gt;
| image = [[File:shigorin.jpeg|120px|center]]&lt;br /&gt;
| caption = МШ смотрит на тебя как на riscv64&lt;br /&gt;
| status = Жив&lt;br /&gt;
&lt;br /&gt;
| activity = программист губами&lt;br /&gt;
| location = г. Москва, [[Российская Федерация]]&lt;br /&gt;
| politviews = [https://en.wikipedia.org/wiki/Ruscism Рашизм]&lt;br /&gt;
| interests = [https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81_2000 Эльбрус]&lt;br /&gt;
| activity_years = 2011 - настоящее время&lt;br /&gt;
&lt;br /&gt;
| birthday = 30 апреля 1979&lt;br /&gt;
| birthplace = Санкт-Петербург, Российская Федерация&lt;br /&gt;
| nationality = Русский&lt;br /&gt;
| education = КНУ ім. Т. Шевченко (Киев, Украина)&lt;br /&gt;
&lt;br /&gt;
| vk = [https://vk.com/mshigorin Михаил Шигорин]&lt;br /&gt;
| tg = [https://mshigorin.t.me/ @mshigorin]&lt;br /&gt;
| links_other = [https://myrotvorets.center/criminal/shigorin-mikhail-aleksandrovich/ Выписка из Миротворца]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Михаил Шигорин&#039;&#039;&#039; &amp;amp;mdash; российский инженер программного обпеспечения украинского происхождения, известный своим гиперфиксом на микропроцессорной архитектуре Эльбрус-2000.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8006</id>
		<title>Михаил Шигорин</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8006"/>
		<updated>2025-10-31T15:10:29Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Отмена версии 8005, сделанной Ekoza gay (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
&lt;br /&gt;
{{Челик&lt;br /&gt;
| nicknames = МШ, shigorin, mike&lt;br /&gt;
| image = [[File:shigorin.jpeg|120px|center]]&lt;br /&gt;
| caption = МШ смотрит на тебя как на riscv64&lt;br /&gt;
| activity = программист губами&lt;br /&gt;
| location = г. Москва, [[Российская Федерация]]&lt;br /&gt;
| irl_name = Шигорин Михаил Сергеевич&lt;br /&gt;
| politviews = [https://en.wikipedia.org/wiki/Ruscism Рашизм]&lt;br /&gt;
| interests = [https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81_2000 Эльбрус]&lt;br /&gt;
| vk = [https://vk.com/mshigorin Михаил Шигорин]&lt;br /&gt;
| activity_years = 2011 - настоящее время&lt;br /&gt;
| status = Жив&lt;br /&gt;
| name = Михаил Шигорин&lt;br /&gt;
| birthday = 30 апреля 1979 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Михаил Сергеевич Шигорин&#039;&#039;&#039; &amp;amp;mdash; российский инженер программного обпеспечения украинского происхождения, известный своим гиперфиксом на микропроцессорной архитектуре Эльбрус-2000.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8004</id>
		<title>Михаил Шигорин</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%A8%D0%B8%D0%B3%D0%BE%D1%80%D0%B8%D0%BD&amp;diff=8004"/>
		<updated>2025-10-31T15:06:32Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: очень зачесалось инфобокс написать, потом допишу ибо пока не ебу где инфы насосать&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Заготовок}}&lt;br /&gt;
&lt;br /&gt;
{{Челик&lt;br /&gt;
| nicknames = МШ, shigorin, mike&lt;br /&gt;
| image = [[File:shigorin.jpeg|120px|center]]&lt;br /&gt;
| caption = МШ смотрит на тебя как на riscv64&lt;br /&gt;
| activity = программист губами&lt;br /&gt;
| location = г. Москва, [[Российская Федерация]]&lt;br /&gt;
| irl_name = Шигорин Михаил Сергеевич&lt;br /&gt;
| politviews = [https://en.wikipedia.org/wiki/Ruscism Рашизм]&lt;br /&gt;
| interests = [https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81_2000 Эльбрус]&lt;br /&gt;
| vk = [https://vk.com/mshigorin Михаил Шигорин]&lt;br /&gt;
| activity_years = 2011 - настоящее время&lt;br /&gt;
| status = Жив&lt;br /&gt;
| name = Михаил Шигорин&lt;br /&gt;
| birthday = 30 апреля 1979 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Михаил Сергеевич Шигорин&#039;&#039;&#039; &amp;amp;mdash; российский инженер программного обпеспечения украинского происхождения, известный своим гиперфиксом на микропроцессорной архитектуре Эльбрус-2000.&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Shigorin.jpeg&amp;diff=8003</id>
		<title>Файл:Shigorin.jpeg</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Shigorin.jpeg&amp;diff=8003"/>
		<updated>2025-10-31T15:04:19Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: Михаил Диалоги Шигорин&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Краткое описание ==&lt;br /&gt;
Михаил Диалоги Шигорин&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=OpenNT&amp;diff=7998</id>
		<title>OpenNT</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=OpenNT&amp;diff=7998"/>
		<updated>2025-10-30T15:46:50Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: мяука&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Программа|name=OpenNT|developer=Microsoft Corp., 1996; Модифицирована и пересобрана из слитых исходников|operating_system=Windows NT Workstation&lt;br /&gt;
4.0|website=[https://web.archive.org/web/20151203004051/https://www.opennt.net/ Архив сайта]|license=проприетарная; исходники доступны по неразглашению|repo=[https://github.com/Paolo-Maffei/OpenNT Read-only зеркало на Github]|released=28 июля, 2015 (Неофициально)|author=stephanos|status=работа над проектом прекращена|latest_rc_version=NT 4.50 (Build 1400-r687)|screenshot=[[Файл:NT45Test-2015-04-27-18-20-37.png|thumb]]|platform=i386, MIPS, DEC Alpha, PowerPC|caption=скриншот отладочной версии на момент декабря 2015}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OpenNT&#039;&#039;&#039; &amp;amp;mdash; форк ОС Microsoft Windows NT, полученной из утекших исходников NT 4.0, модифицированная и пересобранная [[stephanos]]. Изначальной задумкой проекта являлась поддержка полнофункциональных сборок для ряда архитектур (i386, MIPS, Alpha, PowerPC), а так же поддержки исторических систем для нужд энтузиастов.&lt;br /&gt;
&lt;br /&gt;
== Утечка исходного кода NT 4.0 ==&lt;br /&gt;
На момент 1994 года, Microsoft была заинтересована в проекте по переносу приложений с ОС Windows на рабочие станции Unix. Проект получил название &#039;&#039;&#039;[[wikipedia:Windows_Interface_Source_Environment|Windows Interface Source Environment]]&#039;&#039;&#039;, а ответственность за проект была возложена на фирму &#039;&#039;&#039;[[wikipedia:Mainsoft|Mainsoft]]&#039;&#039;&#039;, получившую для работы над WISE SDK доступ ко внутренним репозиториям исходного кода Microsoft.&lt;br /&gt;
&lt;br /&gt;
В 2004 году произошла массовая утечка исходного кода, включавшая код Windows 2000 и Windows NT 4.0. Дальнейшее расследование привело к выводам, что утечка возникла благодаря Mainsoft, предположительно из-за сотрудника, вынесшего исходный код на CD-дисках.&lt;br /&gt;
&lt;br /&gt;
== Работа над OpenNT ==&lt;br /&gt;
В середине 2015, stephanos начал работу над модернизацией исходной кодовой базой NT 4.0, добавив поддержку более современного сборочного инструментария (MSVC 2003) а так же подняв версию ядра до 4.50.&lt;br /&gt;
&lt;br /&gt;
Помимо всех остальных упомянутых идей, задокументированые задачи включали в себя:&amp;lt;ref&amp;gt;https://web.archive.org/web/20151203004554/http://www.opennt.net/projects/opennt/documents&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Поддержка SDK NT 5 (Windows 2000)&lt;br /&gt;
# Перенос пользовательского пространства NT 4 на ядро NT 5&lt;br /&gt;
# Инфраструктура для поддержки Win64, поддерка 64-битности в системных компонентах&lt;br /&gt;
&lt;br /&gt;
Были исправлены некоторые недоработки по поддержке современного оборудования (CPUID &amp;gt;Pentium I, определение больших обьемов ОЗУ).&lt;br /&gt;
[[Файл:OpenNT45 WOW VDM.png|мини|Проблемы со стабильностью с Win16 WoW NTVDM]]&lt;br /&gt;
Начата работа по модернизации WOW VDM (Win16) и DPMI подсистем, находящихся в более плачевном состоянии в утекшей кодбазе (NT 4.0 SP2) нежели в последнем Service Pack 6, выпущеном Microsoft.&amp;lt;ref&amp;gt;https://virtuallyfun.com/2018/09/13/opennt-4-5-revisited/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Кончина проекта ==&lt;br /&gt;
Между декабрем 2015 и серединой 2016 года проект перестал получать какие-либо обновления. [https://web.archive.org/web/20160507171627/https://www.opennt.net/ Архивная запись] сайта с мая 2016 года указывает на официальное окончание разработки и отсылает на личный сайт stephanos.&lt;br /&gt;
&lt;br /&gt;
== Наследие ==&lt;br /&gt;
Проект получил еще одну [https://github.com/broimluna/opennt-src-2 попытку перерождения] от пользователя broimluna в 2019 году, так же заброшенную. Последними наработками проекта являлась поддержка более новых версий PDB и WinDBG а так же добавление функционала из NT4 SP6 (GetWindowModuleName).&lt;br /&gt;
&lt;br /&gt;
== Тривия ==&lt;br /&gt;
&lt;br /&gt;
# Все еще присутствуют проблемы со стабильностью при использовании более современных процессоров (2010+), что вынуждает использовать програмную эмуляцию вместо аппаратной виртуализации для изучения сабжа&lt;br /&gt;
# Из-за применения более современного компилятора MSVC 2003, насущной проблемой являются более агрессивные оптимизации компилятора, обнаруживающие undefined behavior в устаревшей кодбазе. Печально известной проблемой последней ISO сборки являются мисоптимизации в NTFS, приводящие к потере данных и постепенном саморазрушении системного диска при длительном использовании ОС.&lt;br /&gt;
# Использована для начальных этапов переноса [[RVVM]] на исторические версии Windows и системы без SSE, а так же для изучения деталей реализации сетевого стека и поведения WinSock функции select()&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%9C%D0%B0%D1%80%D0%BA_%D0%90%D0%B4%D0%B4%D0%B5%D1%80%D0%BB%D0%B8&amp;diff=7013</id>
		<title>Марк Аддерли</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%9C%D0%B0%D1%80%D0%BA_%D0%90%D0%B4%D0%B4%D0%B5%D1%80%D0%BB%D0%B8&amp;diff=7013"/>
		<updated>2025-08-29T09:37:26Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=WerySkok&amp;diff=6845</id>
		<title>WerySkok</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=WerySkok&amp;diff=6845"/>
		<updated>2025-08-18T08:52:08Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Челик&lt;br /&gt;
|image=[[File:WerySkok.jpeg|140px]]&lt;br /&gt;
|caption=&#039;&#039;аватарка верискока, которая не меняется уже очень долго&#039;&#039;&lt;br /&gt;
|nicknames=WerySkok&lt;br /&gt;
|activity=администратор чатов в Telegram&lt;br /&gt;
|language=русский&lt;br /&gt;
|birthplace=Москва, Россия&lt;br /&gt;
|location=Москва, Россия&lt;br /&gt;
|irl_name=Александр Минкин&lt;br /&gt;
|alignment=[https://rpg.fandom.com/ru/wiki/Lawful_Neutral упорядоченный]&lt;br /&gt;
|politviews=либеральные&lt;br /&gt;
|orientation=гетеросексуальная&lt;br /&gt;
|telegram=[https://t.me/weryskok WerySkok]&lt;br /&gt;
}}{{Цитата|quote=/ban говнофорс|author=Скок}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WerySkok&#039;&#039;&#039; — российский студент, известный своим участием в жизни нескольких проектов с открытым исходным кодом, в которых зачастую играет роль комьюнити-менеджера или модератора. На данный момент учится в Москве на программиста. Является урбанистом и Кацеботом, однако никак не повлиял на популяризацию [[OpenVK#Максим Кац|мема про каца]] в сообществе OpenVK.&lt;br /&gt;
&lt;br /&gt;
== Участие в проектах ==&lt;br /&gt;
* [[OpenVK]] (2018 — н.в.) — модератор чата OpenVK // General&lt;br /&gt;
* Ursula (2020 год) — модератор чата&lt;br /&gt;
* [[Plashiki]] — модератор площадки&lt;br /&gt;
&lt;br /&gt;
=== Деятельность в чате Ursula ===&lt;br /&gt;
Был модератором чата украинского проекта UrsulaEBot, чат-бота, написанного [[Целестора|Целесторой]] для решения тестов с платформы naurok. Отвечал на вопросы людей и чистил спам. Уже никто об этом не помнит, так как особых инцидентов в чате не происходило.&lt;br /&gt;
&lt;br /&gt;
=== Деятельность в OpenVK ===&lt;br /&gt;
Является модератором и комьюнити-менеджером OpenVK. Был автором идеи о расщеплении чатов OpenVK, является сторонником идеи о серьёзности проекта, из-за чего имеет в сообществе весьма неоднозначную репутацию. После появления подарков в OpenVK (осень 2021) выступал за то, чтобы их отключили, ведь соцсеть некоммерческая. Некоторые благодарят его за попытки привести чат в норму, однако некоторые не очень любят когда их уютненький OkBuddyOpenVK-чат зачищают от «говнофорсов».&lt;br /&gt;
&lt;br /&gt;
{{Navbox OpenVK|title=WerySkok &amp;amp;mdash; наш любимый модератор чата OpenVK &amp;amp;lt;3}}&lt;br /&gt;
[[Категория:Челики]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A7%D0%B5%D0%BB%D0%B8%D0%BA&amp;diff=6842</id>
		<title>Шаблон:Челик</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A7%D0%B5%D0%BB%D0%B8%D0%BA&amp;diff=6842"/>
		<updated>2025-08-17T19:25:53Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: добавила гендер и лусус&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
| above = {{{name|{{PAGENAME}}}}}&lt;br /&gt;
| image = {{{image|}}}&lt;br /&gt;
| caption1 = {{{caption|}}}&lt;br /&gt;
&lt;br /&gt;
| header1 = Основное&lt;br /&gt;
| label2 = Дата рождения&lt;br /&gt;
|  data2 = {{{birthday|}}}&lt;br /&gt;
| label3 = Псевдонимы&lt;br /&gt;
|  data3 = {{{nicknames|}}}&lt;br /&gt;
| label4 = Годы активности&lt;br /&gt;
|  data4 = {{{activity_years|}}}&lt;br /&gt;
| label5 = Род деятельности&lt;br /&gt;
|  data5 = {{{activity|}}}&lt;br /&gt;
| label6 = Язык&lt;br /&gt;
|  data6 = {{{language|}}}&lt;br /&gt;
| label7 = Национальность&lt;br /&gt;
|  data7 = {{{nationality|}}}&lt;br /&gt;
&lt;br /&gt;
| header8 = Досье СБУ&lt;br /&gt;
| label9 = Место рождения&lt;br /&gt;
|  data9 = {{{birthplace|}}}&lt;br /&gt;
| label10 = Место жительства&lt;br /&gt;
|  data10 = {{{location|}}}&lt;br /&gt;
| label11 = Настоящее имя&lt;br /&gt;
|  data11 = {{{irl_name|}}}&lt;br /&gt;
| label12 = Статус&lt;br /&gt;
|  data12 = {{{status|}}}&lt;br /&gt;
| label13 = Дата смерти&lt;br /&gt;
|  data13 = {{{deathday|}}}&lt;br /&gt;
| label14 = Место смерти&lt;br /&gt;
|  data14 = {{{deathplace|}}}&lt;br /&gt;
| label15 = Интересы&lt;br /&gt;
|  data15 = {{{interests|}}}&lt;br /&gt;
| label16 = Элайнмент&lt;br /&gt;
|  data16 = {{{alignment|}}}&lt;br /&gt;
| label17 = Политические взгляды&lt;br /&gt;
|  data17 = {{{politviews|}}}&lt;br /&gt;
| label18 = Отношение к религии&lt;br /&gt;
|  data18 = {{{religion|}}}&lt;br /&gt;
| label19 = Ориентация&lt;br /&gt;
|  data19 = {{{orientation|}}}&lt;br /&gt;
| label20 = Образование&lt;br /&gt;
|  data20 = {{{education|}}}&lt;br /&gt;
| label21 = Семейное положение&lt;br /&gt;
|  data21 = {{{marital_status|}}}&lt;br /&gt;
| label22 = Гендер&lt;br /&gt;
|  data22 = {{{gender|}}}&lt;br /&gt;
| label23 = [https://mspaintadventures.fandom.com/wiki/Lusus Лусус]&lt;br /&gt;
|  data23 = {{{lusus|}}}&lt;br /&gt;
&lt;br /&gt;
| header24 = Ссылки&lt;br /&gt;
| label25 = YouTube&lt;br /&gt;
|  data25 = {{{yt|}}}&lt;br /&gt;
| label26 = RuTube&lt;br /&gt;
|  data26 = {{{rt|}}}&lt;br /&gt;
| label27 = Другие видеохостинги&lt;br /&gt;
|  data27 = {{{video_other|}}}&lt;br /&gt;
| label28 = Telegram&lt;br /&gt;
|  data28 = {{{telegram|}}}&lt;br /&gt;
| label29 = VK&lt;br /&gt;
|  data29 = {{{vk|}}}&lt;br /&gt;
| label30 = Matrix&lt;br /&gt;
|  data30 = {{{matrix|}}}&lt;br /&gt;
| label31 = Discord&lt;br /&gt;
|  data31 = {{{discord|}}}&lt;br /&gt;
| label32 = Другие ссылки&lt;br /&gt;
|  data32 = {{{links_other|}}}&lt;br /&gt;
| label33 = OpenVK&lt;br /&gt;
|  data33 = {{{ovk|}}}&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;[[Категория:Челики]]&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%92%D0%B8%D0%BA%D0%B8_%D0%B8%D0%BC._%D0%95%D1%80%D0%BC%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0&amp;diff=6659</id>
		<title>Вики им. Ермакова</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%92%D0%B8%D0%BA%D0%B8_%D0%B8%D0%BC._%D0%95%D1%80%D0%BC%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0&amp;diff=6659"/>
		<updated>2025-08-08T08:44:12Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: перенаправление на актуальную статью&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Сейберпедия]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=6657</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=MediaWiki:Common.css&amp;diff=6657"/>
		<updated>2025-08-08T08:40:15Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:root.skin-theme-clientpref-day {&lt;br /&gt;
	--color-base: #54595d;&lt;br /&gt;
	--color-subtle: #54595d;&lt;br /&gt;
	--color-base-fixed: #54595d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub, #contentSub, #contentSub2 {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-footer, .page-info__label, .mw-page-title-parenthesis,&lt;br /&gt;
.skin-citizen .mw-editform #editpage-copywarn {&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.catlinks li &amp;gt; a:hover, .catlinks li &amp;gt; a:hover:visited {&lt;br /&gt;
    border-radius: var(--border-radius-pill);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
    border: 1px solid #0000000d;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    border-spacing: 3px;&lt;br /&gt;
    background-color: var(--color-surface-1);&lt;br /&gt;
    color: var(--color-base);&lt;br /&gt;
    margin: 0 auto var(--space-md) var(--space-lg);&lt;br /&gt;
    padding: 0.2em;&lt;br /&gt;
    float: right;&lt;br /&gt;
    clear: right;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
    width: 22em;&lt;br /&gt;
    text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,.infobox-label,.infobox-above,.infobox-full-data,.infobox-data,.infobox-below,.infobox-subheader,.infobox-image,.infobox-navbar,.infobox th,.infobox td {&lt;br /&gt;
    vertical-align: top&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,.infobox-data,.infobox th,.infobox td {&lt;br /&gt;
    text-align: left&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-above,.infobox .infobox-title,.infobox caption {&lt;br /&gt;
    font-size: 125%;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,.infobox caption {&lt;br /&gt;
    padding: 0.2em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header,.infobox .infobox-subheader,.infobox .infobox-image,.infobox .infobox-full-data,.infobox .infobox-below {&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox tbody {&lt;br /&gt;
    display: table;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox .infobox-header {&lt;br /&gt;
    background-color: hsl(0deg 71.43% 53.33% / 10%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
td.infobox-data {&lt;br /&gt;
    word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
    table.infobox {&lt;br /&gt;
    	margin-left: auto;&lt;br /&gt;
        float: unset;&lt;br /&gt;
        display: block;&lt;br /&gt;
        margin: auto;&lt;br /&gt;
        max-width: 90vw;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox {&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    border: 1px solid var(--border-color-base);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin: 1em auto 0;&lt;br /&gt;
    clear: both;&lt;br /&gt;
    font-size: 90%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,.navbox-subgroup {&lt;br /&gt;
    width: 100%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,.navbox-title,.navbox-abovebelow {&lt;br /&gt;
    padding: 0.25em 1em;&lt;br /&gt;
    text-align: center&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
    line-height: 1.6em&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,tr + tr &amp;gt; .navbox-group,tr + tr &amp;gt; .navbox-image,tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
    border-top: 2px solid var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
th.navbox-group {&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    text-align: right&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,.navbox-subgroup {&lt;br /&gt;
    background: var(--color-surface-1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
    border-color: var(--border-color-base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox th,.navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,th.navbox-group,.navbox-subgroup .navbox-title {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
    background: rgb(214 224 245);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
    background: var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .hlist td dl,.navbox .hlist td ol,.navbox .hlist td ul,.navbox td.hlist dl,.navbox td.hlist ol,.navbox td.hlist ul {&lt;br /&gt;
    padding: 1px 0 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
    margin-top: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox {&lt;br /&gt;
    margin-top: -1px&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header {&lt;br /&gt;
    padding: 2px;&lt;br /&gt;
    background: linear-gradient(to right, #b9b9b9, white, #b9b9b9);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header &amp;gt; * {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ew-header .logo img {&lt;br /&gt;
    -webkit-mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    mask-image: radial-gradient(#000000e8 5%, transparent);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
Pure v3.0.0&lt;br /&gt;
Copyright 2013 Yahoo!&lt;br /&gt;
Licensed under the BSD License.&lt;br /&gt;
https://github.com/pure-css/pure/blob/master/LICENSE&lt;br /&gt;
*/&lt;br /&gt;
.pure-g{display:flex;flex-flow:row wrap;align-content:flex-start}.pure-u{display:inline-block;vertical-align:top}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%} @media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-12,.pure-u-sm-1-2,.pure-u-sm-1-24,.pure-u-sm-1-3,.pure-u-sm-1-4,.pure-u-sm-1-5,.pure-u-sm-1-6,.pure-u-sm-1-8,.pure-u-sm-10-24,.pure-u-sm-11-12,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-2-24,.pure-u-sm-2-3,.pure-u-sm-2-5,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24,.pure-u-sm-3-24,.pure-u-sm-3-4,.pure-u-sm-3-5,.pure-u-sm-3-8,.pure-u-sm-4-24,.pure-u-sm-4-5,.pure-u-sm-5-12,.pure-u-sm-5-24,.pure-u-sm-5-5,.pure-u-sm-5-6,.pure-u-sm-5-8,.pure-u-sm-6-24,.pure-u-sm-7-12,.pure-u-sm-7-24,.pure-u-sm-7-8,.pure-u-sm-8-24,.pure-u-sm-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%}.pure-u-sm-1-5{width:20%}.pure-u-sm-5-24{width:20.8333%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%}.pure-u-sm-7-24{width:29.1667%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%}.pure-u-sm-2-5{width:40%}.pure-u-sm-10-24,.pure-u-sm-5-12{width:41.6667%}.pure-u-sm-11-24{width:45.8333%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%}.pure-u-sm-13-24{width:54.1667%}.pure-u-sm-14-24,.pure-u-sm-7-12{width:58.3333%}.pure-u-sm-3-5{width:60%}.pure-u-sm-15-24,.pure-u-sm-5-8{width:62.5%}.pure-u-sm-16-24,.pure-u-sm-2-3{width:66.6667%}.pure-u-sm-17-24{width:70.8333%}.pure-u-sm-18-24,.pure-u-sm-3-4{width:75%}.pure-u-sm-19-24{width:79.1667%}.pure-u-sm-4-5{width:80%}.pure-u-sm-20-24,.pure-u-sm-5-6{width:83.3333%}.pure-u-sm-21-24,.pure-u-sm-7-8{width:87.5%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%}.pure-u-sm-23-24{width:95.8333%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-24-24,.pure-u-sm-5-5{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-12,.pure-u-md-1-2,.pure-u-md-1-24,.pure-u-md-1-3,.pure-u-md-1-4,.pure-u-md-1-5,.pure-u-md-1-6,.pure-u-md-1-8,.pure-u-md-10-24,.pure-u-md-11-12,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-2-24,.pure-u-md-2-3,.pure-u-md-2-5,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24,.pure-u-md-3-24,.pure-u-md-3-4,.pure-u-md-3-5,.pure-u-md-3-8,.pure-u-md-4-24,.pure-u-md-4-5,.pure-u-md-5-12,.pure-u-md-5-24,.pure-u-md-5-5,.pure-u-md-5-6,.pure-u-md-5-8,.pure-u-md-6-24,.pure-u-md-7-12,.pure-u-md-7-24,.pure-u-md-7-8,.pure-u-md-8-24,.pure-u-md-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%}.pure-u-md-1-5{width:20%}.pure-u-md-5-24{width:20.8333%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%}.pure-u-md-7-24{width:29.1667%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%}.pure-u-md-2-5{width:40%}.pure-u-md-10-24,.pure-u-md-5-12{width:41.6667%}.pure-u-md-11-24{width:45.8333%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%}.pure-u-md-13-24{width:54.1667%}.pure-u-md-14-24,.pure-u-md-7-12{width:58.3333%}.pure-u-md-3-5{width:60%}.pure-u-md-15-24,.pure-u-md-5-8{width:62.5%}.pure-u-md-16-24,.pure-u-md-2-3{width:66.6667%}.pure-u-md-17-24{width:70.8333%}.pure-u-md-18-24,.pure-u-md-3-4{width:75%}.pure-u-md-19-24{width:79.1667%}.pure-u-md-4-5{width:80%}.pure-u-md-20-24,.pure-u-md-5-6{width:83.3333%}.pure-u-md-21-24,.pure-u-md-7-8{width:87.5%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%}.pure-u-md-23-24{width:95.8333%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-24-24,.pure-u-md-5-5{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-12,.pure-u-lg-1-2,.pure-u-lg-1-24,.pure-u-lg-1-3,.pure-u-lg-1-4,.pure-u-lg-1-5,.pure-u-lg-1-6,.pure-u-lg-1-8,.pure-u-lg-10-24,.pure-u-lg-11-12,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-2-24,.pure-u-lg-2-3,.pure-u-lg-2-5,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24,.pure-u-lg-3-24,.pure-u-lg-3-4,.pure-u-lg-3-5,.pure-u-lg-3-8,.pure-u-lg-4-24,.pure-u-lg-4-5,.pure-u-lg-5-12,.pure-u-lg-5-24,.pure-u-lg-5-5,.pure-u-lg-5-6,.pure-u-lg-5-8,.pure-u-lg-6-24,.pure-u-lg-7-12,.pure-u-lg-7-24,.pure-u-lg-7-8,.pure-u-lg-8-24,.pure-u-lg-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%}.pure-u-lg-1-5{width:20%}.pure-u-lg-5-24{width:20.8333%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%}.pure-u-lg-7-24{width:29.1667%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%}.pure-u-lg-2-5{width:40%}.pure-u-lg-10-24,.pure-u-lg-5-12{width:41.6667%}.pure-u-lg-11-24{width:45.8333%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%}.pure-u-lg-13-24{width:54.1667%}.pure-u-lg-14-24,.pure-u-lg-7-12{width:58.3333%}.pure-u-lg-3-5{width:60%}.pure-u-lg-15-24,.pure-u-lg-5-8{width:62.5%}.pure-u-lg-16-24,.pure-u-lg-2-3{width:66.6667%}.pure-u-lg-17-24{width:70.8333%}.pure-u-lg-18-24,.pure-u-lg-3-4{width:75%}.pure-u-lg-19-24{width:79.1667%}.pure-u-lg-4-5{width:80%}.pure-u-lg-20-24,.pure-u-lg-5-6{width:83.3333%}.pure-u-lg-21-24,.pure-u-lg-7-8{width:87.5%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%}.pure-u-lg-23-24{width:95.8333%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-24-24,.pure-u-lg-5-5{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-12,.pure-u-xl-1-2,.pure-u-xl-1-24,.pure-u-xl-1-3,.pure-u-xl-1-4,.pure-u-xl-1-5,.pure-u-xl-1-6,.pure-u-xl-1-8,.pure-u-xl-10-24,.pure-u-xl-11-12,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-2-24,.pure-u-xl-2-3,.pure-u-xl-2-5,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24,.pure-u-xl-3-24,.pure-u-xl-3-4,.pure-u-xl-3-5,.pure-u-xl-3-8,.pure-u-xl-4-24,.pure-u-xl-4-5,.pure-u-xl-5-12,.pure-u-xl-5-24,.pure-u-xl-5-5,.pure-u-xl-5-6,.pure-u-xl-5-8,.pure-u-xl-6-24,.pure-u-xl-7-12,.pure-u-xl-7-24,.pure-u-xl-7-8,.pure-u-xl-8-24,.pure-u-xl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%}.pure-u-xl-1-5{width:20%}.pure-u-xl-5-24{width:20.8333%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%}.pure-u-xl-7-24{width:29.1667%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%}.pure-u-xl-2-5{width:40%}.pure-u-xl-10-24,.pure-u-xl-5-12{width:41.6667%}.pure-u-xl-11-24{width:45.8333%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%}.pure-u-xl-13-24{width:54.1667%}.pure-u-xl-14-24,.pure-u-xl-7-12{width:58.3333%}.pure-u-xl-3-5{width:60%}.pure-u-xl-15-24,.pure-u-xl-5-8{width:62.5%}.pure-u-xl-16-24,.pure-u-xl-2-3{width:66.6667%}.pure-u-xl-17-24{width:70.8333%}.pure-u-xl-18-24,.pure-u-xl-3-4{width:75%}.pure-u-xl-19-24{width:79.1667%}.pure-u-xl-4-5{width:80%}.pure-u-xl-20-24,.pure-u-xl-5-6{width:83.3333%}.pure-u-xl-21-24,.pure-u-xl-7-8{width:87.5%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%}.pure-u-xl-23-24{width:95.8333%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-24-24,.pure-u-xl-5-5{width:100%}}@media screen and (min-width:120em){.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-1-12,.pure-u-xxl-1-2,.pure-u-xxl-1-24,.pure-u-xxl-1-3,.pure-u-xxl-1-4,.pure-u-xxl-1-5,.pure-u-xxl-1-6,.pure-u-xxl-1-8,.pure-u-xxl-10-24,.pure-u-xxl-11-12,.pure-u-xxl-11-24,.pure-u-xxl-12-24,.pure-u-xxl-13-24,.pure-u-xxl-14-24,.pure-u-xxl-15-24,.pure-u-xxl-16-24,.pure-u-xxl-17-24,.pure-u-xxl-18-24,.pure-u-xxl-19-24,.pure-u-xxl-2-24,.pure-u-xxl-2-3,.pure-u-xxl-2-5,.pure-u-xxl-20-24,.pure-u-xxl-21-24,.pure-u-xxl-22-24,.pure-u-xxl-23-24,.pure-u-xxl-24-24,.pure-u-xxl-3-24,.pure-u-xxl-3-4,.pure-u-xxl-3-5,.pure-u-xxl-3-8,.pure-u-xxl-4-24,.pure-u-xxl-4-5,.pure-u-xxl-5-12,.pure-u-xxl-5-24,.pure-u-xxl-5-5,.pure-u-xxl-5-6,.pure-u-xxl-5-8,.pure-u-xxl-6-24,.pure-u-xxl-7-12,.pure-u-xxl-7-24,.pure-u-xxl-7-8,.pure-u-xxl-8-24,.pure-u-xxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxl-1-24{width:4.1667%}.pure-u-xxl-1-12,.pure-u-xxl-2-24{width:8.3333%}.pure-u-xxl-1-8,.pure-u-xxl-3-24{width:12.5%}.pure-u-xxl-1-6,.pure-u-xxl-4-24{width:16.6667%}.pure-u-xxl-1-5{width:20%}.pure-u-xxl-5-24{width:20.8333%}.pure-u-xxl-1-4,.pure-u-xxl-6-24{width:25%}.pure-u-xxl-7-24{width:29.1667%}.pure-u-xxl-1-3,.pure-u-xxl-8-24{width:33.3333%}.pure-u-xxl-3-8,.pure-u-xxl-9-24{width:37.5%}.pure-u-xxl-2-5{width:40%}.pure-u-xxl-10-24,.pure-u-xxl-5-12{width:41.6667%}.pure-u-xxl-11-24{width:45.8333%}.pure-u-xxl-1-2,.pure-u-xxl-12-24{width:50%}.pure-u-xxl-13-24{width:54.1667%}.pure-u-xxl-14-24,.pure-u-xxl-7-12{width:58.3333%}.pure-u-xxl-3-5{width:60%}.pure-u-xxl-15-24,.pure-u-xxl-5-8{width:62.5%}.pure-u-xxl-16-24,.pure-u-xxl-2-3{width:66.6667%}.pure-u-xxl-17-24{width:70.8333%}.pure-u-xxl-18-24,.pure-u-xxl-3-4{width:75%}.pure-u-xxl-19-24{width:79.1667%}.pure-u-xxl-4-5{width:80%}.pure-u-xxl-20-24,.pure-u-xxl-5-6{width:83.3333%}.pure-u-xxl-21-24,.pure-u-xxl-7-8{width:87.5%}.pure-u-xxl-11-12,.pure-u-xxl-22-24{width:91.6667%}.pure-u-xxl-23-24{width:95.8333%}.pure-u-xxl-1,.pure-u-xxl-1-1,.pure-u-xxl-24-24,.pure-u-xxl-5-5{width:100%}}@media screen and (min-width:160em){.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-1-12,.pure-u-xxxl-1-2,.pure-u-xxxl-1-24,.pure-u-xxxl-1-3,.pure-u-xxxl-1-4,.pure-u-xxxl-1-5,.pure-u-xxxl-1-6,.pure-u-xxxl-1-8,.pure-u-xxxl-10-24,.pure-u-xxxl-11-12,.pure-u-xxxl-11-24,.pure-u-xxxl-12-24,.pure-u-xxxl-13-24,.pure-u-xxxl-14-24,.pure-u-xxxl-15-24,.pure-u-xxxl-16-24,.pure-u-xxxl-17-24,.pure-u-xxxl-18-24,.pure-u-xxxl-19-24,.pure-u-xxxl-2-24,.pure-u-xxxl-2-3,.pure-u-xxxl-2-5,.pure-u-xxxl-20-24,.pure-u-xxxl-21-24,.pure-u-xxxl-22-24,.pure-u-xxxl-23-24,.pure-u-xxxl-24-24,.pure-u-xxxl-3-24,.pure-u-xxxl-3-4,.pure-u-xxxl-3-5,.pure-u-xxxl-3-8,.pure-u-xxxl-4-24,.pure-u-xxxl-4-5,.pure-u-xxxl-5-12,.pure-u-xxxl-5-24,.pure-u-xxxl-5-5,.pure-u-xxxl-5-6,.pure-u-xxxl-5-8,.pure-u-xxxl-6-24,.pure-u-xxxl-7-12,.pure-u-xxxl-7-24,.pure-u-xxxl-7-8,.pure-u-xxxl-8-24,.pure-u-xxxl-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xxxl-1-24{width:4.1667%}.pure-u-xxxl-1-12,.pure-u-xxxl-2-24{width:8.3333%}.pure-u-xxxl-1-8,.pure-u-xxxl-3-24{width:12.5%}.pure-u-xxxl-1-6,.pure-u-xxxl-4-24{width:16.6667%}.pure-u-xxxl-1-5{width:20%}.pure-u-xxxl-5-24{width:20.8333%}.pure-u-xxxl-1-4,.pure-u-xxxl-6-24{width:25%}.pure-u-xxxl-7-24{width:29.1667%}.pure-u-xxxl-1-3,.pure-u-xxxl-8-24{width:33.3333%}.pure-u-xxxl-3-8,.pure-u-xxxl-9-24{width:37.5%}.pure-u-xxxl-2-5{width:40%}.pure-u-xxxl-10-24,.pure-u-xxxl-5-12{width:41.6667%}.pure-u-xxxl-11-24{width:45.8333%}.pure-u-xxxl-1-2,.pure-u-xxxl-12-24{width:50%}.pure-u-xxxl-13-24{width:54.1667%}.pure-u-xxxl-14-24,.pure-u-xxxl-7-12{width:58.3333%}.pure-u-xxxl-3-5{width:60%}.pure-u-xxxl-15-24,.pure-u-xxxl-5-8{width:62.5%}.pure-u-xxxl-16-24,.pure-u-xxxl-2-3{width:66.6667%}.pure-u-xxxl-17-24{width:70.8333%}.pure-u-xxxl-18-24,.pure-u-xxxl-3-4{width:75%}.pure-u-xxxl-19-24{width:79.1667%}.pure-u-xxxl-4-5{width:80%}.pure-u-xxxl-20-24,.pure-u-xxxl-5-6{width:83.3333%}.pure-u-xxxl-21-24,.pure-u-xxxl-7-8{width:87.5%}.pure-u-xxxl-11-12,.pure-u-xxxl-22-24{width:91.6667%}.pure-u-xxxl-23-24{width:95.8333%}.pure-u-xxxl-1,.pure-u-xxxl-1-1,.pure-u-xxxl-24-24,.pure-u-xxxl-5-5{width:100%}}@media screen and (min-width:240em){.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-1-12,.pure-u-x4k-1-2,.pure-u-x4k-1-24,.pure-u-x4k-1-3,.pure-u-x4k-1-4,.pure-u-x4k-1-5,.pure-u-x4k-1-6,.pure-u-x4k-1-8,.pure-u-x4k-10-24,.pure-u-x4k-11-12,.pure-u-x4k-11-24,.pure-u-x4k-12-24,.pure-u-x4k-13-24,.pure-u-x4k-14-24,.pure-u-x4k-15-24,.pure-u-x4k-16-24,.pure-u-x4k-17-24,.pure-u-x4k-18-24,.pure-u-x4k-19-24,.pure-u-x4k-2-24,.pure-u-x4k-2-3,.pure-u-x4k-2-5,.pure-u-x4k-20-24,.pure-u-x4k-21-24,.pure-u-x4k-22-24,.pure-u-x4k-23-24,.pure-u-x4k-24-24,.pure-u-x4k-3-24,.pure-u-x4k-3-4,.pure-u-x4k-3-5,.pure-u-x4k-3-8,.pure-u-x4k-4-24,.pure-u-x4k-4-5,.pure-u-x4k-5-12,.pure-u-x4k-5-24,.pure-u-x4k-5-5,.pure-u-x4k-5-6,.pure-u-x4k-5-8,.pure-u-x4k-6-24,.pure-u-x4k-7-12,.pure-u-x4k-7-24,.pure-u-x4k-7-8,.pure-u-x4k-8-24,.pure-u-x4k-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-x4k-1-24{width:4.1667%}.pure-u-x4k-1-12,.pure-u-x4k-2-24{width:8.3333%}.pure-u-x4k-1-8,.pure-u-x4k-3-24{width:12.5%}.pure-u-x4k-1-6,.pure-u-x4k-4-24{width:16.6667%}.pure-u-x4k-1-5{width:20%}.pure-u-x4k-5-24{width:20.8333%}.pure-u-x4k-1-4,.pure-u-x4k-6-24{width:25%}.pure-u-x4k-7-24{width:29.1667%}.pure-u-x4k-1-3,.pure-u-x4k-8-24{width:33.3333%}.pure-u-x4k-3-8,.pure-u-x4k-9-24{width:37.5%}.pure-u-x4k-2-5{width:40%}.pure-u-x4k-10-24,.pure-u-x4k-5-12{width:41.6667%}.pure-u-x4k-11-24{width:45.8333%}.pure-u-x4k-1-2,.pure-u-x4k-12-24{width:50%}.pure-u-x4k-13-24{width:54.1667%}.pure-u-x4k-14-24,.pure-u-x4k-7-12{width:58.3333%}.pure-u-x4k-3-5{width:60%}.pure-u-x4k-15-24,.pure-u-x4k-5-8{width:62.5%}.pure-u-x4k-16-24,.pure-u-x4k-2-3{width:66.6667%}.pure-u-x4k-17-24{width:70.8333%}.pure-u-x4k-18-24,.pure-u-x4k-3-4{width:75%}.pure-u-x4k-19-24{width:79.1667%}.pure-u-x4k-4-5{width:80%}.pure-u-x4k-20-24,.pure-u-x4k-5-6{width:83.3333%}.pure-u-x4k-21-24,.pure-u-x4k-7-8{width:87.5%}.pure-u-x4k-11-12,.pure-u-x4k-22-24{width:91.6667%}.pure-u-x4k-23-24{width:95.8333%}.pure-u-x4k-1,.pure-u-x4k-1-1,.pure-u-x4k-24-24,.pure-u-x4k-5-5{width:100%}}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav {&lt;br /&gt;
    background-color: #3E4556;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
    box-shadow: 0 0 5px #656565;&lt;br /&gt;
    font-size: 70%;&lt;br /&gt;
    height: 85px;&lt;br /&gt;
    line-height: 200%;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: 85px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav span, .welcome-nav a {&lt;br /&gt;
    color: #fff !important;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    transition: all 0.2s ease-in;&lt;br /&gt;
    width: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:first-child {&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav a:last-child {&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    height: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav br {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav img {&lt;br /&gt;
    filter: brightness(1);&lt;br /&gt;
    transition: .3s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover {&lt;br /&gt;
    background-color: #D3BC8E;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover a {&lt;br /&gt;
    color: #3E4556 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.welcome-nav:hover img {&lt;br /&gt;
    filter: brightness(.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.generalframe {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
    border: 2em solid transparent;&lt;br /&gt;
    border-image-slice: calc(100%/6);&lt;br /&gt;
    border-image-repeat: stretch;&lt;br /&gt;
    border-image-width: 1.5;&lt;br /&gt;
    border-image-source: url(/resources/assets/teyvatborder.svg?1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-citizen-dark .tool-button {&lt;br /&gt;
	filter: invert(67%) sepia(7%) saturate(86%) hue-rotate(169deg) brightness(97%) contrast(89%);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
	<entry>
		<id>https://saberpedia.no/index.php?title=%D0%A1%D0%B5%D0%B9%D0%B1%D0%B5%D1%80%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F_(%D1%87%D0%B0%D1%82)&amp;diff=6589</id>
		<title>Сейберпедия (чат)</title>
		<link rel="alternate" type="text/html" href="https://saberpedia.no/index.php?title=%D0%A1%D0%B5%D0%B9%D0%B1%D0%B5%D1%80%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F_(%D1%87%D0%B0%D1%82)&amp;diff=6589"/>
		<updated>2025-08-07T13:08:02Z</updated>

		<summary type="html">&lt;p&gt;Shadowmaster69: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ЧатКанал|slogan=ПрАТ &amp;quot;Ржакстелеком&amp;quot;, 2025. 18+ ми з друзями у Житомирі|type=Группа в Telegram|topic=Обсуждение Сейберпедии/оффтоп|access=Свободный|link=https://t.me/sbrpdk|members_count=больше 100 (август 2025 года)|governance=[[Ржака|Ржаксфедерация]]|admin=[[Целестора]]|admins=* [[Целестора]]&lt;br /&gt;
* [[Микита (rudzik8) Вишневский]]&lt;br /&gt;
* [[Worthymelight]]&lt;br /&gt;
* [[matvon]]&lt;br /&gt;
* [[Никита Сергеев]]|influenced_by=[[Ржака]]|birthday=1 августа 2023 - первый чат&lt;br /&gt;
7 марта 2025 года - второй и текущий|founders=[[Целестора]]|deathdate=7 марта 2025 года - первый чат|avatar=[[File:Sbrpdk.jpg|220px|center]]}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Чат Сейберпедии&#039;&#039;&#039; ― чат в Telegram, где ведётся обсуждение [[Сейберпедия|Сейберпедии]] и не только. По традиции, на аватарках чата стоит Херта из HSR, однако в некоторых случаях админы начинают менять аватарки и названия с целью достижения комического эффекта.&lt;br /&gt;
&lt;br /&gt;
== История ==&lt;br /&gt;
Чат был создан летом 2023 года (а конкретнее 1 августа), и его активность изначально основывалась на оповещении в нём о правках в Сейберпедии (тогда Вики имени Ермакова).&lt;br /&gt;
&lt;br /&gt;
После того как стало известно о регистрации [[Марк Аддерли|Марка Аддерли]] в РКН, произошёл большой прирост активности, но так-же имелись и негативные последствия (см. ниже).&lt;br /&gt;
&lt;br /&gt;
7 марта 2025 года основной чат Сейберпедии в Telegram был удалён из-за чрезмерного обсуждения [[Марк Аддерли|Марка Аддерли]] и нарушения условий пользования Telegram (участником чата [[Роман!?|рома?!]] были опубликованы личные данные [[Кирилл Молчанов|Кирилла Молчанова]]).&lt;br /&gt;
&lt;br /&gt;
Чат был создан заново, но на некоторое время обсуждение Аддерли в чате было запрещено и все сообщения из прошлого чата были утеряны.&lt;br /&gt;
&lt;br /&gt;
== Статистика ==&lt;br /&gt;
С весны 2025 года (весь период начиная с создания второго чата) приходится один из самых активных периодов развития, каждый день участниками пишется тысячи сообщений на абсолютно разные темы.&lt;br /&gt;
&lt;br /&gt;
На 7 августа 2025 года в чате насчитывается 186284 сообщения и 117 участников.&lt;br /&gt;
&lt;br /&gt;
== Конфликты ==&lt;br /&gt;
&lt;br /&gt;
* [[Смутное время в Сейберпедии|Смутное время в чате Сейберпедии (2025)]]&lt;br /&gt;
[[Категория:Кланы]]&lt;/div&gt;</summary>
		<author><name>Shadowmaster69</name></author>
	</entry>
</feed>