<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://narofootball.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0</id>
	<title>Модуль:Турнирная сетка - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://narofootball.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;action=history"/>
	<updated>2026-11-14T12:40:56Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=241&amp;oldid=prev</id>
		<title>Andrew: Добавлена возможность скрывать матч за третье место</title>
		<link rel="alternate" type="text/html" href="https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=241&amp;oldid=prev"/>
		<updated>2026-09-18T11:51:03Z</updated>

		<summary type="html">&lt;p&gt;Добавлена возможность скрывать матч за третье место&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 11:51, 18 сентября 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l76&quot;&gt;Строка 76:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 76:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local finalName = args[&amp;quot;Final-name&amp;quot;] or &amp;quot;Финал&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local finalName = args[&amp;quot;Final-name&amp;quot;] or &amp;quot;Финал&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local thirdName = args[&amp;quot;3rd-name&amp;quot;] or &amp;quot;Матч за 3-е место&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local thirdName = args[&amp;quot;3rd-name&amp;quot;] or &amp;quot;Матч за 3-е место&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local isThird = args[&quot;3rd&quot;]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local container = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-container&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local container = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-container&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l116&quot;&gt;Строка 116:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 117:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- Матч за 3-е место&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- Матч за 3-е место&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local thirdRound = mw.html.create(&#039;div&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;if isThird then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;local thirdHeader = mw.html.create(&#039;div&#039;):cssText(&#039;text-align: center; font-weight: bold; margin-bottom: 15px; font-size: 15px; border-bottom: 2px solid #aaa; padding-bottom: 5px; margin-top: 20px;&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/ins&gt;local thirdRound = mw.html.create(&#039;div&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;thirdHeader:wikitext(thirdName)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/ins&gt;local thirdHeader = mw.html.create(&#039;div&#039;):cssText(&#039;text-align: center; font-weight: bold; margin-bottom: 15px; font-size: 15px; border-bottom: 2px solid #aaa; padding-bottom: 5px; margin-top: 20px;&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;thirdRound:node(thirdHeader)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/ins&gt;thirdHeader:wikitext(thirdName)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;thirdRound:node(buildMatch(args, &quot;3rd&quot;, 1))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/ins&gt;thirdRound:node(thirdHeader)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/ins&gt;thirdRound:node(buildMatch(args, &quot;3rd&quot;, 1))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     center:node(finalRound)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     center:node(finalRound)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Andrew</name></author>
	</entry>
	<entry>
		<id>https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=236&amp;oldid=prev</id>
		<title>Andrew: Исправлена ошибка с рисованием правой части сетки</title>
		<link rel="alternate" type="text/html" href="https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=236&amp;oldid=prev"/>
		<updated>2026-09-17T19:18:39Z</updated>

		<summary type="html">&lt;p&gt;Исправлена ошибка с рисованием правой части сетки&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 19:18, 17 сентября 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l76&quot;&gt;Строка 76:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 76:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local finalName = args[&amp;quot;Final-name&amp;quot;] or &amp;quot;Финал&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local finalName = args[&amp;quot;Final-name&amp;quot;] or &amp;quot;Финал&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local thirdName = args[&amp;quot;3rd-name&amp;quot;] or &amp;quot;Матч за 3-е место&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local thirdName = args[&amp;quot;3rd-name&amp;quot;] or &amp;quot;Матч за 3-е место&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local maxMatches = 2^(rounds - 1) &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local halfMatches = maxMatches / 2&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local container = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-container&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local container = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-container&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l97&quot;&gt;Строка 97:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 94:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesContainer = mw.html.create(&amp;#039;div&amp;#039;):cssText(&amp;#039;display: flex; flex-direction: column; justify-content: space-around; flex-grow: 1;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesContainer = mw.html.create(&amp;#039;div&amp;#039;):cssText(&amp;#039;display: flex; flex-direction: column; justify-content: space-around; flex-grow: 1;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        -- Количество матчей на одной стороне в данном раунде&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesInRound = 2^(rounds - r - 1)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesInRound = 2^(rounds - r - 1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for m = 1, matchesInRound do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for m = 1, matchesInRound do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Строка 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 106:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- ЦЕНТР (Финал и игра за 3-е место)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- ЦЕНТР (Финал и игра за 3-е место)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local center = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-center&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local center = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-center&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     center:cssText(&#039;display: flex; flex-direction: column; justify-content: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;space-between&lt;/del&gt;; width: 190px; min-width: 170px; margin: 0 10px;&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     center:cssText(&#039;display: flex; flex-direction: column; justify-content: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;center&lt;/ins&gt;; width: 190px; min-width: 170px; margin: 0 10px;&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- Финал&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     -- Финал&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l143&quot;&gt;Строка 143:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 141:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesInRound = 2^(rounds - r - 1)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local matchesInRound = 2^(rounds - r - 1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for m = 1, matchesInRound do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for m = 1, matchesInRound do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local matchNum = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;halfMatches &lt;/del&gt;+ m&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            -- ИСПРАВЛЕНИЕ: Правая сторона нумеруется подряд после левой&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local matchNum = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;matchesInRound &lt;/ins&gt;+ m&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             matchesContainer:node(buildMatch(args, &amp;quot;RD&amp;quot; .. r, matchNum))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             matchesContainer:node(buildMatch(args, &amp;quot;RD&amp;quot; .. r, matchNum))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Andrew</name></author>
	</entry>
	<entry>
		<id>https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=233&amp;oldid=prev</id>
		<title>Andrew: Переписан модуль</title>
		<link rel="alternate" type="text/html" href="https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=233&amp;oldid=prev"/>
		<updated>2026-09-17T18:53:50Z</updated>

		<summary type="html">&lt;p&gt;Переписан модуль&lt;/p&gt;
&lt;a href=&quot;https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;amp;diff=233&amp;amp;oldid=229&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Andrew</name></author>
	</entry>
	<entry>
		<id>https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=229&amp;oldid=prev</id>
		<title>Andrew: Создан модуль</title>
		<link rel="alternate" type="text/html" href="https://narofootball.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D0%BA%D0%B0&amp;diff=229&amp;oldid=prev"/>
		<updated>2026-09-17T18:17:27Z</updated>

		<summary type="html">&lt;p&gt;Создан модуль&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:Bracket&lt;br /&gt;
-- Вывод турнирной сетки на выбывание (single elimination) с матчем за 3-е место.&lt;br /&gt;
-- Поддерживает &amp;quot;баи&amp;quot; (проход без игры) и 1 или 2 матча на стадию, с датами.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Утилиты&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	if s == nil then return nil end&lt;br /&gt;
	s = mw.text.trim(tostring(s))&lt;br /&gt;
	if s == &amp;#039;&amp;#039; then return nil end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function toNum(s)&lt;br /&gt;
	if s == nil then return nil end&lt;br /&gt;
	return tonumber(s)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArg(args, ...)&lt;br /&gt;
	for _, key in ipairs({ ... }) do&lt;br /&gt;
		local v = args[key]&lt;br /&gt;
		if v ~= nil and mw.text.trim(tostring(v)) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function yesno(s, default)&lt;br /&gt;
	if s == nil then return default end&lt;br /&gt;
	s = mw.text.trim(tostring(s)):lower()&lt;br /&gt;
	if s == &amp;#039;&amp;#039; then return default end&lt;br /&gt;
	if s == &amp;#039;да&amp;#039; or s == &amp;#039;yes&amp;#039; or s == &amp;#039;true&amp;#039; or s == &amp;#039;1&amp;#039; then return true end&lt;br /&gt;
	if s == &amp;#039;нет&amp;#039; or s == &amp;#039;no&amp;#039; or s == &amp;#039;false&amp;#039; or s == &amp;#039;0&amp;#039; then return false end&lt;br /&gt;
	return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Названия раундов&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function buildAutoRoundNames(n)&lt;br /&gt;
	local names = {}&lt;br /&gt;
	for i = 1, n - 1 do&lt;br /&gt;
		local denom = 2 ^ (n - i)&lt;br /&gt;
		if denom == 2 then&lt;br /&gt;
			names[i] = &amp;#039;1/2 финала&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			names[i] = &amp;#039;1/&amp;#039; .. tostring(denom) .. &amp;#039; финала&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	names[n] = &amp;#039;Финал&amp;#039;&lt;br /&gt;
	return names&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseRoundNames(args)&lt;br /&gt;
	local raw = getArg(args, &amp;#039;раунды&amp;#039;, &amp;#039;rounds&amp;#039;)&lt;br /&gt;
	if raw then&lt;br /&gt;
		local names = {}&lt;br /&gt;
		for part in mw.text.gsplit(raw, &amp;#039;,&amp;#039;) do&lt;br /&gt;
			local t = trim(part)&lt;br /&gt;
			if t then table.insert(names, t) end&lt;br /&gt;
		end&lt;br /&gt;
		if #names &amp;gt; 0 then return names end&lt;br /&gt;
	end&lt;br /&gt;
	local cnt = toNum(getArg(args, &amp;#039;раундов&amp;#039;, &amp;#039;rounds_count&amp;#039;))&lt;br /&gt;
	if cnt and cnt &amp;gt;= 1 then&lt;br /&gt;
		return buildAutoRoundNames(math.floor(cnt))&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Чтение данных одной пары/матча&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function readMatch(args, prefix, defaultLegs)&lt;br /&gt;
	local m = {}&lt;br /&gt;
	m.team1 = trim(args[prefix .. &amp;#039;к1&amp;#039;])&lt;br /&gt;
	m.team2 = trim(args[prefix .. &amp;#039;к2&amp;#039;])&lt;br /&gt;
	m.score1 = trim(args[prefix .. &amp;#039;сч1&amp;#039;])&lt;br /&gt;
	m.score2 = trim(args[prefix .. &amp;#039;сч2&amp;#039;])&lt;br /&gt;
	m.score1_2 = trim(args[prefix .. &amp;#039;сч1_2&amp;#039;])&lt;br /&gt;
	m.score2_2 = trim(args[prefix .. &amp;#039;сч2_2&amp;#039;])&lt;br /&gt;
	m.date1 = trim(args[prefix .. &amp;#039;дата&amp;#039;])&lt;br /&gt;
	m.date2 = trim(args[prefix .. &amp;#039;дата_2&amp;#039;])&lt;br /&gt;
	m.legs = toNum(args[prefix .. &amp;#039;игр&amp;#039;]) or defaultLegs&lt;br /&gt;
	m.winnerOverride = trim(args[prefix .. &amp;#039;победитель&amp;#039;])&lt;br /&gt;
	m.note = trim(args[prefix .. &amp;#039;примечание&amp;#039;])&lt;br /&gt;
	return m&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Определение победителя по ГОТОВЫМ (разрешённым) именам команд&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function simpleWinner(m)&lt;br /&gt;
	if m.winnerOverride == &amp;#039;1&amp;#039; or m.winnerOverride == &amp;#039;2&amp;#039; then&lt;br /&gt;
		return tonumber(m.winnerOverride)&lt;br /&gt;
	end&lt;br /&gt;
	if m.team1 and not m.team2 then return 1 end&lt;br /&gt;
	if m.team2 and not m.team1 then return 2 end&lt;br /&gt;
	if not (m.team1 and m.team2) then return nil end&lt;br /&gt;
&lt;br /&gt;
	if m.legs and m.legs &amp;gt;= 2 then&lt;br /&gt;
		local a1, b1 = toNum(m.score1), toNum(m.score1_2)&lt;br /&gt;
		local a2, b2 = toNum(m.score2), toNum(m.score2_2)&lt;br /&gt;
		if a1 and b1 and a2 and b2 then&lt;br /&gt;
			local agg1, agg2 = a1 + b1, a2 + b2&lt;br /&gt;
			if agg1 &amp;gt; agg2 then return 1&lt;br /&gt;
			elseif agg2 &amp;gt; agg1 then return 2&lt;br /&gt;
			else return nil end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local s1, s2 = toNum(m.score1), toNum(m.score2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if s1 &amp;gt; s2 then return 1&lt;br /&gt;
			elseif s2 &amp;gt; s1 then return 2&lt;br /&gt;
			else return nil end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Взаимно-рекурсивные функции: какая команда стоит в слоте&lt;br /&gt;
-- и кто побеждает в слоте (с учётом &amp;quot;проросших&amp;quot; из предыдущего&lt;br /&gt;
-- раунда имён, а не только явно указанных).&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local resolveTeam&lt;br /&gt;
local matchWinner&lt;br /&gt;
&lt;br /&gt;
resolveTeam = function(matches, r, s, i)&lt;br /&gt;
	if r == 1 then&lt;br /&gt;
		return matches[1][s][&amp;#039;team&amp;#039; .. i]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local prevSlot = (i == 1) and (2 * s - 1) or (2 * s)&lt;br /&gt;
	local prevName1 = resolveTeam(matches, r - 1, prevSlot, 1)&lt;br /&gt;
	local prevName2 = resolveTeam(matches, r - 1, prevSlot, 2)&lt;br /&gt;
&lt;br /&gt;
	if not (prevName1 or prevName2) then&lt;br /&gt;
		-- В предыдущем раунде в этой позиции матча вообще не было —&lt;br /&gt;
		-- значит это &amp;quot;бай&amp;quot;: команда указывается явно на текущем раунде.&lt;br /&gt;
		return matches[r][s][&amp;#039;team&amp;#039; .. i]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local w = matchWinner(matches, r - 1, prevSlot)&lt;br /&gt;
	if w == 1 then&lt;br /&gt;
		return prevName1&lt;br /&gt;
	elseif w == 2 then&lt;br /&gt;
		return prevName2&lt;br /&gt;
	else&lt;br /&gt;
		-- Матч ещё не сыгран/не завершён — но, возможно, тут явно&lt;br /&gt;
		-- заранее указано имя (например, известная заявка) — как fallback.&lt;br /&gt;
		return matches[r][s][&amp;#039;team&amp;#039; .. i]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
matchWinner = function(matches, r, s)&lt;br /&gt;
	local raw = matches[r][s]&lt;br /&gt;
	local eff = {&lt;br /&gt;
		team1 = resolveTeam(matches, r, s, 1),&lt;br /&gt;
		team2 = resolveTeam(matches, r, s, 2),&lt;br /&gt;
		score1 = raw.score1,&lt;br /&gt;
		score2 = raw.score2,&lt;br /&gt;
		score1_2 = raw.score1_2,&lt;br /&gt;
		score2_2 = raw.score2_2,&lt;br /&gt;
		legs = raw.legs,&lt;br /&gt;
		winnerOverride = raw.winnerOverride,&lt;br /&gt;
	}&lt;br /&gt;
	return simpleWinner(eff)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveLoser(matches, n, i)&lt;br /&gt;
	-- Раунд n-1 всегда состоит ровно из 2 слотов (полуфинал) —&lt;br /&gt;
	-- отсюда автоматически берутся участники матча за 3-е место.&lt;br /&gt;
	local w = matchWinner(matches, n - 1, i)&lt;br /&gt;
	if not w then return nil end&lt;br /&gt;
	local loserIdx = (w == 1) and 2 or 1&lt;br /&gt;
	return resolveTeam(matches, n - 1, i, loserIdx)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function displayName(matches, r, s, i)&lt;br /&gt;
	local name = resolveTeam(matches, r, s, i)&lt;br /&gt;
	if name then return name end&lt;br /&gt;
	if r == 1 then&lt;br /&gt;
		return &amp;#039;&amp;#039; -- пустой слот первого раунда - там просто нет игры&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;bracket-tbd&amp;quot;&amp;gt;—&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Форматирование счёта/даты&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function formatDate(d)&lt;br /&gt;
	if not d then return &amp;#039;&amp;#039; end&lt;br /&gt;
	return &amp;#039; &amp;lt;small class=&amp;quot;bracket-date&amp;quot;&amp;gt;(&amp;#039; .. d .. &amp;#039;)&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatScore(m, teamIndex)&lt;br /&gt;
	local mainKey = &amp;#039;score&amp;#039; .. teamIndex&lt;br /&gt;
	local legKey = &amp;#039;score&amp;#039; .. teamIndex .. &amp;#039;_2&amp;#039;&lt;br /&gt;
	local parts = {}&lt;br /&gt;
&lt;br /&gt;
	if m.legs and m.legs &amp;gt;= 2 then&lt;br /&gt;
		if m[mainKey] or m.date1 then&lt;br /&gt;
			table.insert(parts, (m[mainKey] or &amp;#039;?&amp;#039;) .. formatDate(m.date1))&lt;br /&gt;
		end&lt;br /&gt;
		if m[legKey] or m.date2 then&lt;br /&gt;
			table.insert(parts, (m[legKey] or &amp;#039;?&amp;#039;) .. formatDate(m.date2))&lt;br /&gt;
		end&lt;br /&gt;
		local a1, b1 = toNum(m.score1), toNum(m.score1_2)&lt;br /&gt;
		local a2, b2 = toNum(m.score2), toNum(m.score2_2)&lt;br /&gt;
		if a1 and b1 and a2 and b2 then&lt;br /&gt;
			local agg = (teamIndex == 1) and (a1 + b1) or (a2 + b2)&lt;br /&gt;
			table.insert(parts, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. agg .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if m[mainKey] then&lt;br /&gt;
			table.insert(parts, m[mainKey] .. formatDate(m.date1))&lt;br /&gt;
		elseif m.date1 then&lt;br /&gt;
			table.insert(parts, formatDate(m.date1))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if m.note then&lt;br /&gt;
		table.insert(parts, &amp;#039;&amp;lt;small&amp;gt;&amp;#039; .. m.note .. &amp;#039;&amp;lt;/small&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(parts, &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Геометрия таблицы: сколько строк (rowspan) занимает&lt;br /&gt;
-- ячейка команды раунда r, и с какой строки начинается.&lt;br /&gt;
-- Классическая схема &amp;quot;таблица с объединением ячеек&amp;quot;,&lt;br /&gt;
-- как в спортивных сетках Википедии.&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function blockInfo(row, r)&lt;br /&gt;
	local blockSize = 2 ^ r&lt;br /&gt;
	local half = 2 ^ (r - 1)&lt;br /&gt;
	local idx0 = row - 1&lt;br /&gt;
	local slot = math.floor(idx0 / blockSize) + 1&lt;br /&gt;
	local posInBlock = idx0 % blockSize&lt;br /&gt;
	local teamIndex, offset&lt;br /&gt;
	if posInBlock &amp;lt; half then&lt;br /&gt;
		teamIndex, offset = 1, posInBlock&lt;br /&gt;
	else&lt;br /&gt;
		teamIndex, offset = 2, posInBlock - half&lt;br /&gt;
	end&lt;br /&gt;
	local isStart = (offset == 0)&lt;br /&gt;
	return slot, teamIndex, isStart, half&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Основная функция&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local roundNames = parseRoundNames(args)&lt;br /&gt;
	if not roundNames then&lt;br /&gt;
		return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Module:Bracket — не заданы раунды (параметр «раунды» или «раундов»).&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local n = #roundNames&lt;br /&gt;
&lt;br /&gt;
	local defaultLegs = toNum(getArg(args, &amp;#039;игр_на_стадии&amp;#039;, &amp;#039;legs&amp;#039;)) or 1&lt;br /&gt;
	local title = trim(getArg(args, &amp;#039;название&amp;#039;, &amp;#039;title&amp;#039;))&lt;br /&gt;
	local showChampion = yesno(getArg(args, &amp;#039;чемпион&amp;#039;, &amp;#039;champion&amp;#039;), true)&lt;br /&gt;
&lt;br /&gt;
	-- Строим структуру пар для всех раундов и слотов&lt;br /&gt;
	local matches = {}&lt;br /&gt;
	for r = 1, n do&lt;br /&gt;
		matches[r] = {}&lt;br /&gt;
		local slots = 2 ^ (n - r)&lt;br /&gt;
		for s = 1, slots do&lt;br /&gt;
			matches[r][s] = readMatch(args, &amp;#039;р&amp;#039; .. r .. &amp;#039;_&amp;#039; .. s .. &amp;#039;_&amp;#039;, defaultLegs)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Матч за 3-е место&lt;br /&gt;
	local tpTeam1Given = trim(args[&amp;#039;трм_к1&amp;#039;])&lt;br /&gt;
	local tpTeam2Given = trim(args[&amp;#039;трм_к2&amp;#039;])&lt;br /&gt;
	local showThird = yesno(&lt;br /&gt;
		getArg(args, &amp;#039;третье_место&amp;#039;, &amp;#039;third_place&amp;#039;),&lt;br /&gt;
		(tpTeam1Given ~= nil or tpTeam2Given ~= nil)&lt;br /&gt;
	)&lt;br /&gt;
	local thirdName = trim(getArg(args, &amp;#039;третье_место_название&amp;#039;, &amp;#039;third_place_name&amp;#039;))&lt;br /&gt;
		or &amp;#039;Матч за 3-е место&amp;#039;&lt;br /&gt;
	local tp&lt;br /&gt;
	if showThird then&lt;br /&gt;
		tp = readMatch(args, &amp;#039;трм_&amp;#039;, defaultLegs)&lt;br /&gt;
		if n &amp;gt;= 2 then&lt;br /&gt;
			tp.team1 = tp.team1 or resolveLoser(matches, n, 1)&lt;br /&gt;
			tp.team2 = tp.team2 or resolveLoser(matches, n, 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Рендер&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-wrapper&amp;#039;)&lt;br /&gt;
	if title then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-title&amp;#039;):wikitext(title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tbl = root:tag(&amp;#039;table&amp;#039;):addClass(&amp;#039;bracket-table&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local headerRow = tbl:tag(&amp;#039;tr&amp;#039;):addClass(&amp;#039;bracket-header&amp;#039;)&lt;br /&gt;
	for r = 1, n do&lt;br /&gt;
		headerRow:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, 2):wikitext(roundNames[r])&lt;br /&gt;
	end&lt;br /&gt;
	if showChampion then&lt;br /&gt;
		headerRow:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Чемпион&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local baseRows = 2 ^ n&lt;br /&gt;
	local finalWinner = matchWinner(matches, n, 1)&lt;br /&gt;
	local championName&lt;br /&gt;
	if finalWinner then&lt;br /&gt;
		championName = resolveTeam(matches, n, 1, finalWinner)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for row = 1, baseRows do&lt;br /&gt;
		local tr = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		for r = 1, n do&lt;br /&gt;
			local slot, teamIndex, isStart, rowspan = blockInfo(row, r)&lt;br /&gt;
			if isStart then&lt;br /&gt;
				local m = matches[r][slot]&lt;br /&gt;
				local name = displayName(matches, r, slot, teamIndex)&lt;br /&gt;
				local w = matchWinner(matches, r, slot)&lt;br /&gt;
&lt;br /&gt;
				local nameCell = tr:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;bracket-team&amp;#039;)&lt;br /&gt;
				if w == teamIndex then&lt;br /&gt;
					nameCell:addClass(&amp;#039;bracket-winner&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				nameCell:wikitext(name)&lt;br /&gt;
				if rowspan &amp;gt; 1 then nameCell:attr(&amp;#039;rowspan&amp;#039;, rowspan) end&lt;br /&gt;
&lt;br /&gt;
				local scoreCell = tr:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;bracket-score&amp;#039;)&lt;br /&gt;
				scoreCell:wikitext(formatScore(m, teamIndex))&lt;br /&gt;
				if rowspan &amp;gt; 1 then scoreCell:attr(&amp;#039;rowspan&amp;#039;, rowspan) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if showChampion and row == 1 then&lt;br /&gt;
			tr:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;bracket-champion&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, baseRows)&lt;br /&gt;
				:wikitext(championName or &amp;#039;—&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if showThird then&lt;br /&gt;
		local wrap = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-third&amp;#039;)&lt;br /&gt;
		wrap:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;bracket-third-title&amp;#039;):wikitext(thirdName)&lt;br /&gt;
		local ttbl = wrap:tag(&amp;#039;table&amp;#039;):addClass(&amp;#039;bracket-third-table&amp;#039;)&lt;br /&gt;
		local w3 = simpleWinner(tp)&lt;br /&gt;
		for i = 1, 2 do&lt;br /&gt;
			local trr = ttbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			local nameCell = trr:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;bracket-team&amp;#039;)&lt;br /&gt;
			if w3 == i then nameCell:addClass(&amp;#039;bracket-winner&amp;#039;) end&lt;br /&gt;
			nameCell:wikitext(tp[&amp;#039;team&amp;#039; .. i] or &amp;#039;—&amp;#039;)&lt;br /&gt;
			trr:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;bracket-score&amp;#039;):wikitext(formatScore(tp, i))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local args = (parent and parent.args) or frame.args&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>
	</entry>
</feed>