<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>ATV Saxo Silesia Breslau zu Aachen</title>
		<link>/</link>
		<description>Recent content on ATV Saxo Silesia Breslau zu Aachen</description>
		<generator>Hugo</generator>
		<language>de</language>
		
		
		
		
			<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Aktivenbereich</title>
				<link>/aktivenbereich/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/aktivenbereich/</guid>
				<description>&lt;div class=&#34;secure-downloads&#34; id=&#34;secure-downloads-0&#34;&gt;&#xA;  &lt;div class=&#34;secure-downloads__header&#34;&gt;&#xA;    &lt;p class=&#34;secure-downloads__eyebrow&#34;&gt;Aktivenbereich&lt;/p&gt;&#xA;    &lt;h2&gt;Downloads&lt;/h2&gt;&#xA;    &lt;p&gt;Dateien und Ordner für den Aktivenbereich.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;secure-downloads__toolbar&#34;&gt;&#xA;    &lt;div&gt;&#xA;      &lt;p class=&#34;secure-downloads__path-label&#34;&gt;Ordner&lt;/p&gt;&#xA;      &lt;nav class=&#34;secure-downloads__breadcrumbs&#34; aria-label=&#34;Aktueller Ordner&#34;&gt;&lt;/nav&gt;&#xA;    &lt;/div&gt;&lt;a class=&#34;secure-downloads__button secure-downloads__archive-button&#34; href=&#34;../aktivenbereich/downloads/aktivenbereich.zip&#34; download&gt;Alles herunterladen&lt;/a&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;secure-downloads__status&#34; role=&#34;status&#34; aria-live=&#34;polite&#34;&gt;Downloads werden geladen ...&lt;/div&gt;&#xA;  &lt;ul class=&#34;secure-downloads__list&#34;&gt;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(() =&gt; {&#xA;  const root = document.getElementById(&#34;secure-downloads-0&#34;);&#xA;  const downloadBase = &#34;..\/aktivenbereich\/downloads\/&#34;;&#xA;  const manifestUrl = new URL(`${downloadBase}index.json`, window.location.href).href;&#xA;  const list = root.querySelector(&#34;.secure-downloads__list&#34;);&#xA;  const status = root.querySelector(&#34;.secure-downloads__status&#34;);&#xA;  const breadcrumbs = root.querySelector(&#34;.secure-downloads__breadcrumbs&#34;);&#xA;  let currentFolder = &#34;&#34;;&#xA;  let manifest = { files: [] };&#xA;&#xA;  function setStatus(text) {&#xA;    status.textContent = text;&#xA;  }&#xA;&#xA;  async function fetchManifest() {&#xA;    const res = await fetch(manifestUrl, { cache: &#34;no-store&#34; });&#xA;    if (!res.ok) {&#xA;      throw new Error(&#34;Downloads konnten nicht geladen werden.&#34;);&#xA;    }&#xA;    return res.json();&#xA;  }&#xA;&#xA;  function formatSize(bytes) {&#xA;    if (!bytes) return &#34;&#34;;&#xA;    const units = [&#34;B&#34;, &#34;KB&#34;, &#34;MB&#34;, &#34;GB&#34;];&#xA;    let idx = 0;&#xA;    let size = bytes;&#xA;    while (size &gt;= 1024 &amp;&amp; idx &lt; units.length - 1) {&#xA;      size /= 1024;&#xA;      idx += 1;&#xA;    }&#xA;    return `${size.toFixed(size &gt;= 10 || idx === 0 ? 0 : 1)} ${units[idx]}`;&#xA;  }&#xA;&#xA;  function normalizeFolder(folder) {&#xA;    return (folder || &#34;&#34;).replace(/^\/+|\/+$/g, &#34;&#34;);&#xA;  }&#xA;&#xA;  function parentFolder(folder) {&#xA;    const parts = normalizeFolder(folder).split(&#34;/&#34;).filter(Boolean);&#xA;    parts.pop();&#xA;    return parts.join(&#34;/&#34;);&#xA;  }&#xA;&#xA;  function createDownloadUrl(fileName) {&#xA;    const encodedPath = fileName.split(&#34;/&#34;).map(encodeURIComponent).join(&#34;/&#34;);&#xA;    return new URL(`${downloadBase}${encodedPath}`, window.location.href).href;&#xA;  }&#xA;&#xA;  function renderBreadcrumbs() {&#xA;    breadcrumbs.textContent = &#34;&#34;;&#xA;    const rootButton = document.createElement(&#34;button&#34;);&#xA;    rootButton.type = &#34;button&#34;;&#xA;    rootButton.textContent = &#34;Downloads&#34;;&#xA;    rootButton.addEventListener(&#34;click&#34;, () =&gt; openFolder(&#34;&#34;));&#xA;    breadcrumbs.append(rootButton);&#xA;&#xA;    const parts = currentFolder.split(&#34;/&#34;).filter(Boolean);&#xA;    let path = &#34;&#34;;&#xA;    parts.forEach((part) =&gt; {&#xA;      path = path ? `${path}/${part}` : part;&#xA;      const crumbPath = path;&#xA;      const separator = document.createElement(&#34;span&#34;);&#xA;      separator.textContent = &#34;/&#34;;&#xA;      const button = document.createElement(&#34;button&#34;);&#xA;      button.type = &#34;button&#34;;&#xA;      button.textContent = part;&#xA;      button.addEventListener(&#34;click&#34;, () =&gt; openFolder(crumbPath));&#xA;      breadcrumbs.append(separator, button);&#xA;    });&#xA;  }&#xA;&#xA;  function getFolderContents(folder) {&#xA;    const normalized = normalizeFolder(folder);&#xA;    const childFolders = new Set();&#xA;    const files = [];&#xA;&#xA;    manifest.files.forEach((entry) =&gt; {&#xA;      const filePath = entry.file || entry.path || entry.name;&#xA;      const entryFolder = normalizeFolder(entry.folder || parentFolder(filePath));&#xA;&#xA;      if (entryFolder === normalized) {&#xA;        files.push(entry);&#xA;        return;&#xA;      }&#xA;&#xA;      const prefix = normalized ? `${normalized}/` : &#34;&#34;;&#xA;      if (entryFolder.startsWith(prefix)) {&#xA;        const child = entryFolder.slice(prefix.length).split(&#34;/&#34;)[0];&#xA;        if (child) childFolders.add(child);&#xA;      }&#xA;    });&#xA;&#xA;    return {&#xA;      folders: Array.from(childFolders).sort((a, b) =&gt; a.localeCompare(b, &#34;de&#34;)),&#xA;      files: files.sort((a, b) =&gt; (a.name || &#34;&#34;).localeCompare(b.name || &#34;&#34;, &#34;de&#34;)),&#xA;    };&#xA;  }&#xA;&#xA;  function createFolderItem(folderName) {&#xA;    const li = document.createElement(&#34;li&#34;);&#xA;    li.className = &#34;secure-downloads__item secure-downloads__item--folder&#34;;&#xA;&#xA;    const button = document.createElement(&#34;button&#34;);&#xA;    button.className = &#34;secure-downloads__folder-button&#34;;&#xA;    button.type = &#34;button&#34;;&#xA;    button.addEventListener(&#34;click&#34;, () =&gt; openFolder(currentFolder ? `${currentFolder}/${folderName}` : folderName));&#xA;&#xA;    const icon = document.createElement(&#34;span&#34;);&#xA;    icon.className = &#34;secure-downloads__folder-icon&#34;;&#xA;    icon.setAttribute(&#34;aria-hidden&#34;, &#34;true&#34;);&#xA;    icon.textContent = &#34;Ordner&#34;;&#xA;&#xA;    const name = document.createElement(&#34;span&#34;);&#xA;    name.className = &#34;secure-downloads__file-name&#34;;&#xA;    name.textContent = folderName;&#xA;&#xA;    button.append(icon, name);&#xA;    li.append(button);&#xA;    return li;&#xA;  }&#xA;&#xA;  function createDownloadItem(entry) {&#xA;    const fileName = entry.file || entry.path || entry.name;&#xA;    const li = document.createElement(&#34;li&#34;);&#xA;    li.className = &#34;secure-downloads__item&#34;;&#xA;&#xA;    const details = document.createElement(&#34;div&#34;);&#xA;    details.className = &#34;secure-downloads__file&#34;;&#xA;&#xA;    const name = document.createElement(&#34;span&#34;);&#xA;    name.className = &#34;secure-downloads__file-name&#34;;&#xA;    name.textContent = entry.name;&#xA;&#xA;    const meta = document.createElement(&#34;span&#34;);&#xA;    meta.className = &#34;secure-downloads__file-meta&#34;;&#xA;    meta.textContent = [formatSize(entry.size), entry.mime].filter(Boolean).join(&#34; · &#34;);&#xA;&#xA;    const link = document.createElement(&#34;a&#34;);&#xA;    link.className = &#34;secure-downloads__button&#34;;&#xA;    link.href = createDownloadUrl(fileName);&#xA;    link.download = entry.name || fileName;&#xA;    link.textContent = &#34;Herunterladen&#34;;&#xA;&#xA;    details.append(name, meta);&#xA;    li.append(details, link);&#xA;    return li;&#xA;  }&#xA;&#xA;  function openFolder(folder) {&#xA;    currentFolder = normalizeFolder(folder);&#xA;    render();&#xA;  }&#xA;&#xA;  function render() {&#xA;    list.textContent = &#34;&#34;;&#xA;    renderBreadcrumbs();&#xA;    const contents = getFolderContents(currentFolder);&#xA;&#xA;    if (currentFolder) {&#xA;      const li = document.createElement(&#34;li&#34;);&#xA;      li.className = &#34;secure-downloads__item secure-downloads__item--folder&#34;;&#xA;      const button = document.createElement(&#34;button&#34;);&#xA;      button.className = &#34;secure-downloads__folder-button&#34;;&#xA;      button.type = &#34;button&#34;;&#xA;      button.textContent = &#34;Eine Ebene hoeher&#34;;&#xA;      button.addEventListener(&#34;click&#34;, () =&gt; openFolder(parentFolder(currentFolder)));&#xA;      li.append(button);&#xA;      list.appendChild(li);&#xA;    }&#xA;&#xA;    contents.folders.forEach((folder) =&gt; list.appendChild(createFolderItem(folder)));&#xA;    contents.files.forEach((entry) =&gt; list.appendChild(createDownloadItem(entry)));&#xA;&#xA;    if (!contents.folders.length &amp;&amp; !contents.files.length) {&#xA;      setStatus(&#34;Dieser Ordner ist leer.&#34;);&#xA;      return;&#xA;    }&#xA;&#xA;    setStatus(&#34;&#34;);&#xA;  }&#xA;&#xA;  async function init() {&#xA;    try {&#xA;      manifest = await fetchManifest();&#xA;      if (!manifest.files || manifest.files.length === 0) {&#xA;        setStatus(&#34;Keine Downloads vorhanden.&#34;);&#xA;        renderBreadcrumbs();&#xA;        return;&#xA;      }&#xA;&#xA;      render();&#xA;    } catch (err) {&#xA;      setStatus(err.message || &#34;Fehler beim Laden der Downloads.&#34;);&#xA;    }&#xA;  }&#xA;&#xA;  init();&#xA;})();&#xA;&lt;/script&gt;</description>
			</item>
			<item>
				<title>Dachverband</title>
				<link>/dachverband/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/dachverband/</guid>
				<description>&lt;h2 id=&#34;der-akademische-turnbund-atb&#34;&gt;Der Akademische Turnbund (ATB)&lt;/h2&gt;&#xA;&lt;p&gt;Der Akademische Turnbund (ATB) ist der Dachverband der Turn- und Sportverbindungen in Deutschland. Er wurde am 27. Juni 1883 in Jena auf der Schweizer Höhe von fünf Turnverbindungen aus Aachen, Freiburg, Jena, Berlin und München gegründet. Mit der Zeit schlossen sich weitere Sport- und Turnverbindungen aus ganz Deutschland und Österreich dem ATB an.&lt;/p&gt;&#xA;&lt;p&gt;Am 27. Oktober 1935 beschloss der Aktive Bund (AB) des ATB angesichts des zunehmenden Drucks zur Gleichschaltung durch das Dritte Reich seine Auflösung. Am 5. Februar 1950 wurde der ATB in Marburg neu gegründet und besteht bis heute. Aktuell zählt der ATB 34 aktive Verbindungen in verschiedenen Städten Deutschlands.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Downloads</title>
				<link>/intern/downloads/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/intern/downloads/</guid>
				<description>&lt;div class=&#34;secure-downloads&#34; id=&#34;secure-downloads-0&#34;&gt;&#xA;  &lt;div class=&#34;secure-downloads__header&#34;&gt;&#xA;    &lt;p class=&#34;secure-downloads__eyebrow&#34;&gt;Interner Bereich&lt;/p&gt;&#xA;    &lt;h2&gt;Downloads&lt;/h2&gt;&#xA;    &lt;p&gt;Dateien und Ordner im geschützten internen Bereich.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;secure-downloads__toolbar&#34;&gt;&#xA;    &lt;div&gt;&#xA;      &lt;p class=&#34;secure-downloads__path-label&#34;&gt;Ordner&lt;/p&gt;&#xA;      &lt;nav class=&#34;secure-downloads__breadcrumbs&#34; aria-label=&#34;Aktueller Ordner&#34;&gt;&lt;/nav&gt;&#xA;    &lt;/div&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;secure-downloads__status&#34; role=&#34;status&#34; aria-live=&#34;polite&#34;&gt;Downloads werden geladen ...&lt;/div&gt;&#xA;  &lt;ul class=&#34;secure-downloads__list&#34;&gt;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(() =&gt; {&#xA;  const root = document.getElementById(&#34;secure-downloads-0&#34;);&#xA;  const downloadBase = &#34;..\/..\/intern\/downloads\/&#34;;&#xA;  const manifestUrl = new URL(`${downloadBase}index.json`, window.location.href).href;&#xA;  const list = root.querySelector(&#34;.secure-downloads__list&#34;);&#xA;  const status = root.querySelector(&#34;.secure-downloads__status&#34;);&#xA;  const breadcrumbs = root.querySelector(&#34;.secure-downloads__breadcrumbs&#34;);&#xA;  let currentFolder = &#34;&#34;;&#xA;  let manifest = { files: [] };&#xA;&#xA;  function setStatus(text) {&#xA;    status.textContent = text;&#xA;  }&#xA;&#xA;  async function fetchManifest() {&#xA;    const res = await fetch(manifestUrl, { cache: &#34;no-store&#34; });&#xA;    if (!res.ok) {&#xA;      throw new Error(&#34;Downloads konnten nicht geladen werden.&#34;);&#xA;    }&#xA;    return res.json();&#xA;  }&#xA;&#xA;  function formatSize(bytes) {&#xA;    if (!bytes) return &#34;&#34;;&#xA;    const units = [&#34;B&#34;, &#34;KB&#34;, &#34;MB&#34;, &#34;GB&#34;];&#xA;    let idx = 0;&#xA;    let size = bytes;&#xA;    while (size &gt;= 1024 &amp;&amp; idx &lt; units.length - 1) {&#xA;      size /= 1024;&#xA;      idx += 1;&#xA;    }&#xA;    return `${size.toFixed(size &gt;= 10 || idx === 0 ? 0 : 1)} ${units[idx]}`;&#xA;  }&#xA;&#xA;  function normalizeFolder(folder) {&#xA;    return (folder || &#34;&#34;).replace(/^\/+|\/+$/g, &#34;&#34;);&#xA;  }&#xA;&#xA;  function parentFolder(folder) {&#xA;    const parts = normalizeFolder(folder).split(&#34;/&#34;).filter(Boolean);&#xA;    parts.pop();&#xA;    return parts.join(&#34;/&#34;);&#xA;  }&#xA;&#xA;  function createDownloadUrl(fileName) {&#xA;    const encodedPath = fileName.split(&#34;/&#34;).map(encodeURIComponent).join(&#34;/&#34;);&#xA;    return new URL(`${downloadBase}${encodedPath}`, window.location.href).href;&#xA;  }&#xA;&#xA;  function renderBreadcrumbs() {&#xA;    breadcrumbs.textContent = &#34;&#34;;&#xA;    const rootButton = document.createElement(&#34;button&#34;);&#xA;    rootButton.type = &#34;button&#34;;&#xA;    rootButton.textContent = &#34;Downloads&#34;;&#xA;    rootButton.addEventListener(&#34;click&#34;, () =&gt; openFolder(&#34;&#34;));&#xA;    breadcrumbs.append(rootButton);&#xA;&#xA;    const parts = currentFolder.split(&#34;/&#34;).filter(Boolean);&#xA;    let path = &#34;&#34;;&#xA;    parts.forEach((part) =&gt; {&#xA;      path = path ? `${path}/${part}` : part;&#xA;      const crumbPath = path;&#xA;      const separator = document.createElement(&#34;span&#34;);&#xA;      separator.textContent = &#34;/&#34;;&#xA;      const button = document.createElement(&#34;button&#34;);&#xA;      button.type = &#34;button&#34;;&#xA;      button.textContent = part;&#xA;      button.addEventListener(&#34;click&#34;, () =&gt; openFolder(crumbPath));&#xA;      breadcrumbs.append(separator, button);&#xA;    });&#xA;  }&#xA;&#xA;  function getFolderContents(folder) {&#xA;    const normalized = normalizeFolder(folder);&#xA;    const childFolders = new Set();&#xA;    const files = [];&#xA;&#xA;    manifest.files.forEach((entry) =&gt; {&#xA;      const filePath = entry.file || entry.path || entry.name;&#xA;      const entryFolder = normalizeFolder(entry.folder || parentFolder(filePath));&#xA;&#xA;      if (entryFolder === normalized) {&#xA;        files.push(entry);&#xA;        return;&#xA;      }&#xA;&#xA;      const prefix = normalized ? `${normalized}/` : &#34;&#34;;&#xA;      if (entryFolder.startsWith(prefix)) {&#xA;        const child = entryFolder.slice(prefix.length).split(&#34;/&#34;)[0];&#xA;        if (child) childFolders.add(child);&#xA;      }&#xA;    });&#xA;&#xA;    return {&#xA;      folders: Array.from(childFolders).sort((a, b) =&gt; a.localeCompare(b, &#34;de&#34;)),&#xA;      files: files.sort((a, b) =&gt; (a.name || &#34;&#34;).localeCompare(b.name || &#34;&#34;, &#34;de&#34;)),&#xA;    };&#xA;  }&#xA;&#xA;  function createFolderItem(folderName) {&#xA;    const li = document.createElement(&#34;li&#34;);&#xA;    li.className = &#34;secure-downloads__item secure-downloads__item--folder&#34;;&#xA;&#xA;    const button = document.createElement(&#34;button&#34;);&#xA;    button.className = &#34;secure-downloads__folder-button&#34;;&#xA;    button.type = &#34;button&#34;;&#xA;    button.addEventListener(&#34;click&#34;, () =&gt; openFolder(currentFolder ? `${currentFolder}/${folderName}` : folderName));&#xA;&#xA;    const icon = document.createElement(&#34;span&#34;);&#xA;    icon.className = &#34;secure-downloads__folder-icon&#34;;&#xA;    icon.setAttribute(&#34;aria-hidden&#34;, &#34;true&#34;);&#xA;    icon.textContent = &#34;Ordner&#34;;&#xA;&#xA;    const name = document.createElement(&#34;span&#34;);&#xA;    name.className = &#34;secure-downloads__file-name&#34;;&#xA;    name.textContent = folderName;&#xA;&#xA;    button.append(icon, name);&#xA;    li.append(button);&#xA;    return li;&#xA;  }&#xA;&#xA;  function createDownloadItem(entry) {&#xA;    const fileName = entry.file || entry.path || entry.name;&#xA;    const li = document.createElement(&#34;li&#34;);&#xA;    li.className = &#34;secure-downloads__item&#34;;&#xA;&#xA;    const details = document.createElement(&#34;div&#34;);&#xA;    details.className = &#34;secure-downloads__file&#34;;&#xA;&#xA;    const name = document.createElement(&#34;span&#34;);&#xA;    name.className = &#34;secure-downloads__file-name&#34;;&#xA;    name.textContent = entry.name;&#xA;&#xA;    const meta = document.createElement(&#34;span&#34;);&#xA;    meta.className = &#34;secure-downloads__file-meta&#34;;&#xA;    meta.textContent = [formatSize(entry.size), entry.mime].filter(Boolean).join(&#34; · &#34;);&#xA;&#xA;    const link = document.createElement(&#34;a&#34;);&#xA;    link.className = &#34;secure-downloads__button&#34;;&#xA;    link.href = createDownloadUrl(fileName);&#xA;    link.download = entry.name || fileName;&#xA;    link.textContent = &#34;Herunterladen&#34;;&#xA;&#xA;    details.append(name, meta);&#xA;    li.append(details, link);&#xA;    return li;&#xA;  }&#xA;&#xA;  function openFolder(folder) {&#xA;    currentFolder = normalizeFolder(folder);&#xA;    render();&#xA;  }&#xA;&#xA;  function render() {&#xA;    list.textContent = &#34;&#34;;&#xA;    renderBreadcrumbs();&#xA;    const contents = getFolderContents(currentFolder);&#xA;&#xA;    if (currentFolder) {&#xA;      const li = document.createElement(&#34;li&#34;);&#xA;      li.className = &#34;secure-downloads__item secure-downloads__item--folder&#34;;&#xA;      const button = document.createElement(&#34;button&#34;);&#xA;      button.className = &#34;secure-downloads__folder-button&#34;;&#xA;      button.type = &#34;button&#34;;&#xA;      button.textContent = &#34;Eine Ebene hoeher&#34;;&#xA;      button.addEventListener(&#34;click&#34;, () =&gt; openFolder(parentFolder(currentFolder)));&#xA;      li.append(button);&#xA;      list.appendChild(li);&#xA;    }&#xA;&#xA;    contents.folders.forEach((folder) =&gt; list.appendChild(createFolderItem(folder)));&#xA;    contents.files.forEach((entry) =&gt; list.appendChild(createDownloadItem(entry)));&#xA;&#xA;    if (!contents.folders.length &amp;&amp; !contents.files.length) {&#xA;      setStatus(&#34;Dieser Ordner ist leer.&#34;);&#xA;      return;&#xA;    }&#xA;&#xA;    setStatus(&#34;&#34;);&#xA;  }&#xA;&#xA;  async function init() {&#xA;    try {&#xA;      manifest = await fetchManifest();&#xA;      if (!manifest.files || manifest.files.length === 0) {&#xA;        setStatus(&#34;Keine Downloads vorhanden.&#34;);&#xA;        renderBreadcrumbs();&#xA;        return;&#xA;      }&#xA;&#xA;      render();&#xA;    } catch (err) {&#xA;      setStatus(err.message || &#34;Fehler beim Laden der Downloads.&#34;);&#xA;    }&#xA;  }&#xA;&#xA;  init();&#xA;})();&#xA;&lt;/script&gt;</description>
			</item>
			<item>
				<title>Geschichte</title>
				<link>/geschichte/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/geschichte/</guid>
				<description>&lt;h2 id=&#34;die-ursprünge-in-breslau&#34;&gt;Die Ursprünge in Breslau&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gründung-in-breslau&#34;&gt;Gründung in Breslau&lt;/h3&gt;&#xA;&lt;p&gt;Am 22.06.1897 gründeten die drei Naturwissenschaftler Hahn-Gockel (Silese), Hausding-Bock (Silese) und Herzog (Sachse) im Hinterzimmer der Kretschmerei &amp;ldquo;Zum Gelben Löwen&amp;rdquo; den Akademischen Turnverein (ATV) Saxo-Silesia. Sie bestimmten die Farben Orange – Weiß – Moosgrün und den Wahlspruch: &amp;ldquo;Dem Lande zum Schutz. Dem Feinde zum Trutz. Dem Freunde zu Nutz.&amp;rdquo;&lt;/p&gt;&#xA;&lt;h3 id=&#34;aufnahme-in-den-akademischen-turnbund-atb&#34;&gt;Aufnahme in den Akademischen Turnbund (ATB)&lt;/h3&gt;&#xA;&lt;p&gt;Am 20. Dezember 1897 wurde die ATV Saxo-Silesia in den ATB aufgenommen.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Haus</title>
				<link>/haus/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/haus/</guid>
				<description>&lt;p&gt;Unser Haus&lt;/p&gt;&#xA;&lt;p&gt;Unser Verbindungshaus befindet sich in der Welkenrather Straße im Westen Aachens, direkt neben dem Westpark gelegen. Es bildet den Mittelpunkt unseres Verbindungslebens, hier finden viele unserer Veranstaltungen statt und unsere Aktivitas kann hier zentral gelegen Wohnraum finden. Die RWTH, sowie die FH sind in wenigen Minuten zu erreichen und der Campus Melaten und das Uniklinikum sind nur ein paar Minuten mit dem Bus entfernt. Seit 1967 ist das Haus der Treffpunkt für unsere Aktivitas, ADAH-Schaft, aber auch ein Ort zum Austausch zwischen Kommilitonen und Freunden.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kontakt</title>
				<link>/kontakt/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/kontakt/</guid>
				<description>&lt;p&gt;ATV Saxo-Silesia Breslau zu Aachen&#xA;Welkenrather Straße 76&#xA;52074 Aachen&lt;/p&gt;&#xA;&lt;p&gt;Telefon:  +49 (0) 241-82053&lt;/p&gt;&#xA;&lt;p&gt;E-Mail: &lt;a href=&#34;mailto:info@atv-aachen.de&#34;&gt;info@atv-aachen.de&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ortsverband</title>
				<link>/ortsverband/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ortsverband/</guid>
				<description>&lt;h2 id=&#34;der-ortsverband--lebensbund-nach-dem-studium&#34;&gt;Der Ortsverband – Lebensbund nach dem Studium&lt;/h2&gt;&#xA;&lt;p&gt;Der Ortsverband (OV) stellt einen Zusammenschluss von Alten Herren und Alten Damen dar, die in verschiedenen Städten oder Regionen Deutschlands leben. Viele ältere Herren und Damen verbleiben entweder in der Nähe ihres Studienorts oder ziehen nach Abschluss ihres Studiums weg. Um nach Abschluss des Studiums den Lebensbund im ATB weiterhin zu pflegen, melden sich die Alten Herren und Alten Damen beim Ortsverband in der Nähe ihres Wohnortes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Semesterprogramm</title>
				<link>/semesterprogramm/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/semesterprogramm/</guid>
				<description>&lt;p&gt;Hier findet ihr die anstehenden Termine unseres Semesterprogramms.&lt;/p&gt;&#xA;&lt;section class=&#34;semester-calendar&#34; aria-label=&#34;Semesterprogramm Kalender&#34;&gt;&#xA;  &lt;div class=&#34;semester-calendar__toolbar&#34;&gt;&#xA;    &lt;div class=&#34;semester-calendar__nav&#34; aria-label=&#34;Monatsnavigation&#34;&gt;&#xA;      &lt;button class=&#34;semester-calendar__icon-button&#34; type=&#34;button&#34; data-calendar-prev aria-label=&#34;Vorheriger Monat&#34;&gt;‹&lt;/button&gt;&#xA;      &lt;h2 class=&#34;semester-calendar__month&#34; data-calendar-month&gt;&lt;/h2&gt;&#xA;      &lt;button class=&#34;semester-calendar__icon-button&#34; type=&#34;button&#34; data-calendar-next aria-label=&#34;Nächster Monat&#34;&gt;›&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;semester-calendar__status&#34; data-calendar-status role=&#34;status&#34; aria-live=&#34;polite&#34;&gt;Termine werden geladen ...&lt;/div&gt;&#xA;  &lt;div class=&#34;semester-calendar__weekdays&#34; aria-hidden=&#34;true&#34;&gt;&#xA;    &lt;span&gt;Mo&lt;/span&gt;&#xA;    &lt;span&gt;Di&lt;/span&gt;&#xA;    &lt;span&gt;Mi&lt;/span&gt;&#xA;    &lt;span&gt;Do&lt;/span&gt;&#xA;    &lt;span&gt;Fr&lt;/span&gt;&#xA;    &lt;span&gt;Sa&lt;/span&gt;&#xA;    &lt;span&gt;So&lt;/span&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;semester-calendar__grid&#34; data-calendar-grid&gt;&lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&lt;script&gt;&#xA;(() =&gt; {&#xA;  const calendarUrl = new URL(&#34;..\/semesterprogramm\/termine.ics&#34;, window.location.href).href;&#xA;  const root = document.currentScript.previousElementSibling;&#xA;  const grid = root.querySelector(&#34;[data-calendar-grid]&#34;);&#xA;  const monthLabel = root.querySelector(&#34;[data-calendar-month]&#34;);&#xA;  const status = root.querySelector(&#34;[data-calendar-status]&#34;);&#xA;  const prev = root.querySelector(&#34;[data-calendar-prev]&#34;);&#xA;  const next = root.querySelector(&#34;[data-calendar-next]&#34;);&#xA;  const monthFormatter = new Intl.DateTimeFormat(&#34;de-DE&#34;, { month: &#34;long&#34;, year: &#34;numeric&#34; });&#xA;  const dateFormatter = new Intl.DateTimeFormat(&#34;de-DE&#34;, { day: &#34;2-digit&#34;, month: &#34;2-digit&#34;, year: &#34;numeric&#34; });&#xA;  let visibleMonth = new Date();&#xA;  visibleMonth = new Date(visibleMonth.getFullYear(), visibleMonth.getMonth(), 1);&#xA;  let events = [];&#xA;&#xA;  function setStatus(text) {&#xA;    status.textContent = text;&#xA;  }&#xA;&#xA;  function unfoldIcs(text) {&#xA;    return text.replace(/\r\n/g, &#34;\n&#34;).replace(/\r/g, &#34;\n&#34;).split(&#34;\n&#34;).reduce((lines, line) =&gt; {&#xA;      if ((line.startsWith(&#34; &#34;) || line.startsWith(&#34;\t&#34;)) &amp;&amp; lines.length &gt; 0) {&#xA;        lines[lines.length - 1] += line.slice(1);&#xA;      } else {&#xA;        lines.push(line);&#xA;      }&#xA;      return lines;&#xA;    }, []);&#xA;  }&#xA;&#xA;  function unescapeIcs(value) {&#xA;    return value&#xA;      .replace(/\\n/gi, &#34;\n&#34;)&#xA;      .replace(/\\,/g, &#34;,&#34;)&#xA;      .replace(/\\;/g, &#34;;&#34;)&#xA;      .replace(/\\\\/g, &#34;\\&#34;)&#xA;      .trim();&#xA;  }&#xA;&#xA;  function parseIcsProperty(line) {&#xA;    const separator = line.indexOf(&#34;:&#34;);&#xA;    if (separator &lt; 0) return null;&#xA;    const nameAndParams = line.slice(0, separator);&#xA;    const value = line.slice(separator + 1);&#xA;    const [rawName, ...rawParams] = nameAndParams.split(&#34;;&#34;);&#xA;    const params = {};&#xA;    rawParams.forEach((param) =&gt; {&#xA;      const [key, ...rest] = param.split(&#34;=&#34;);&#xA;      params[key.toUpperCase()] = rest.join(&#34;=&#34;);&#xA;    });&#xA;    return {&#xA;      name: rawName.toUpperCase(),&#xA;      params,&#xA;      value: unescapeIcs(value),&#xA;    };&#xA;  }&#xA;&#xA;  function parseIcsDate(value, params = {}) {&#xA;    const dateOnly = params.VALUE === &#34;DATE&#34; || /^\d{8}$/.test(value);&#xA;    const year = Number(value.slice(0, 4));&#xA;    const month = Number(value.slice(4, 6)) - 1;&#xA;    const day = Number(value.slice(6, 8));&#xA;&#xA;    if (dateOnly) {&#xA;      return { date: new Date(year, month, day), dateOnly: true };&#xA;    }&#xA;&#xA;    const hour = Number(value.slice(9, 11) || 0);&#xA;    const minute = Number(value.slice(11, 13) || 0);&#xA;    const second = Number(value.slice(13, 15) || 0);&#xA;    const date = value.endsWith(&#34;Z&#34;)&#xA;      ? new Date(Date.UTC(year, month, day, hour, minute, second))&#xA;      : new Date(year, month, day, hour, minute, second);&#xA;&#xA;    return { date, dateOnly: false };&#xA;  }&#xA;&#xA;  function formatTime(date, dateOnly) {&#xA;    if (dateOnly) return &#34;&#34;;&#xA;    return date.toLocaleTimeString(&#34;de-DE&#34;, { hour: &#34;2-digit&#34;, minute: &#34;2-digit&#34; });&#xA;  }&#xA;&#xA;  function parseRrule(value) {&#xA;    return value.split(&#34;;&#34;).reduce((rule, part) =&gt; {&#xA;      const [key, val] = part.split(&#34;=&#34;);&#xA;      rule[key] = val;&#xA;      return rule;&#xA;    }, {});&#xA;  }&#xA;&#xA;  function addRecurrenceDate(date, freq, interval) {&#xA;    const nextDate = new Date(date);&#xA;    if (freq === &#34;DAILY&#34;) nextDate.setDate(nextDate.getDate() + interval);&#xA;    if (freq === &#34;WEEKLY&#34;) nextDate.setDate(nextDate.getDate() + 7 * interval);&#xA;    if (freq === &#34;MONTHLY&#34;) nextDate.setMonth(nextDate.getMonth() + interval);&#xA;    return nextDate;&#xA;  }&#xA;&#xA;  function expandRecurringEvent(event, rule) {&#xA;    if (!rule || ![&#34;DAILY&#34;, &#34;WEEKLY&#34;, &#34;MONTHLY&#34;].includes(rule.FREQ)) return [event];&#xA;&#xA;    const interval = Math.max(Number(rule.INTERVAL || 1), 1);&#xA;    const maxCount = Math.min(Number(rule.COUNT || 60), 240);&#xA;    const until = rule.UNTIL ? parseIcsDate(rule.UNTIL).date : null;&#xA;    const expanded = [];&#xA;    let currentDate = new Date(event.date);&#xA;&#xA;    for (let i = 0; i &lt; maxCount; i += 1) {&#xA;      if (until &amp;&amp; currentDate &gt; until) break;&#xA;      expanded.push({ ...event, date: new Date(currentDate) });&#xA;      currentDate = addRecurrenceDate(currentDate, rule.FREQ, interval);&#xA;    }&#xA;&#xA;    return expanded;&#xA;  }&#xA;&#xA;  function normalizeIcsEvents(text) {&#xA;    const lines = unfoldIcs(text);&#xA;    const eventsFromCalendar = [];&#xA;    let current = null;&#xA;&#xA;    lines.forEach((line) =&gt; {&#xA;      if (line === &#34;BEGIN:VEVENT&#34;) {&#xA;        current = {};&#xA;        return;&#xA;      }&#xA;      if (line === &#34;END:VEVENT&#34;) {&#xA;        if (current &amp;&amp; current.DTSTART) eventsFromCalendar.push(current);&#xA;        current = null;&#xA;        return;&#xA;      }&#xA;      if (!current) return;&#xA;&#xA;      const prop = parseIcsProperty(line);&#xA;      if (!prop) return;&#xA;      if (!current[prop.name]) current[prop.name] = prop;&#xA;    });&#xA;&#xA;    return eventsFromCalendar.flatMap((event) =&gt; {&#xA;      const start = parseIcsDate(event.DTSTART.value, event.DTSTART.params);&#xA;      if (Number.isNaN(start.date.getTime())) return [];&#xA;      const normalized = {&#xA;        date: start.date,&#xA;        key: event.DTSTART.value,&#xA;        time: formatTime(start.date, start.dateOnly),&#xA;        title: event.SUMMARY?.value || &#34;Termin&#34;,&#xA;        location: event.LOCATION?.value || &#34;&#34;,&#xA;        description: event.DESCRIPTION?.value || &#34;&#34;,&#xA;      };&#xA;      return expandRecurringEvent(normalized, event.RRULE ? parseRrule(event.RRULE.value) : null);&#xA;    }).sort((a, b) =&gt; a.date - b.date || a.time.localeCompare(b.time, &#34;de&#34;));&#xA;  }&#xA;&#xA;  function normalizeEvents(text) {&#xA;    if (!/BEGIN:VCALENDAR/i.test(text)) {&#xA;      throw new Error(&#34;Bitte eine Kalenderdatei im iCalendar-Format (.ics) laden.&#34;);&#xA;    }&#xA;    return normalizeIcsEvents(text);&#xA;  }&#xA;&#xA;  function sameDay(a, b) {&#xA;    return a.getFullYear() === b.getFullYear() &amp;&amp; a.getMonth() === b.getMonth() &amp;&amp; a.getDate() === b.getDate();&#xA;  }&#xA;&#xA;  function renderEvent(event) {&#xA;    const item = document.createElement(&#34;article&#34;);&#xA;    item.className = &#34;semester-calendar__event&#34;;&#xA;&#xA;    const title = document.createElement(&#34;strong&#34;);&#xA;    title.textContent = event.title;&#xA;&#xA;    const meta = document.createElement(&#34;span&#34;);&#xA;    meta.textContent = [event.time, event.location].filter(Boolean).join(&#34; · &#34;);&#xA;&#xA;    item.append(title);&#xA;    if (meta.textContent) item.append(meta);&#xA;    if (event.description) {&#xA;      const description = document.createElement(&#34;p&#34;);&#xA;      description.textContent = event.description;&#xA;      item.append(description);&#xA;    }&#xA;    return item;&#xA;  }&#xA;&#xA;  function render() {&#xA;    grid.textContent = &#34;&#34;;&#xA;    monthLabel.textContent = monthFormatter.format(visibleMonth);&#xA;&#xA;    const year = visibleMonth.getFullYear();&#xA;    const month = visibleMonth.getMonth();&#xA;    const firstDay = new Date(year, month, 1);&#xA;    const startOffset = (firstDay.getDay() + 6) % 7;&#xA;    const startDate = new Date(year, month, 1 - startOffset);&#xA;    const today = new Date();&#xA;&#xA;    for (let i = 0; i &lt; 42; i += 1) {&#xA;      const cellDate = new Date(startDate);&#xA;      cellDate.setDate(startDate.getDate() + i);&#xA;      const dayEvents = events.filter((event) =&gt; sameDay(event.date, cellDate));&#xA;      const cell = document.createElement(&#34;section&#34;);&#xA;      cell.className = &#34;semester-calendar__day&#34;;&#xA;      if (cellDate.getMonth() !== month) cell.classList.add(&#34;is-muted&#34;);&#xA;      if (sameDay(cellDate, today)) cell.classList.add(&#34;is-today&#34;);&#xA;&#xA;      const number = document.createElement(&#34;div&#34;);&#xA;      number.className = &#34;semester-calendar__date&#34;;&#xA;      number.textContent = cellDate.getDate();&#xA;      number.setAttribute(&#34;aria-label&#34;, dateFormatter.format(cellDate));&#xA;      cell.append(number);&#xA;&#xA;      dayEvents.forEach((event) =&gt; cell.append(renderEvent(event)));&#xA;      grid.append(cell);&#xA;    }&#xA;&#xA;    setStatus(events.length === 1 ? &#34;1 Termin geladen.&#34; : `${events.length} Termine geladen.`);&#xA;  }&#xA;&#xA;  async function loadDefaultCalendar() {&#xA;    const res = await fetch(calendarUrl, { cache: &#34;no-store&#34; });&#xA;    if (!res.ok) throw new Error(&#34;Termine konnten nicht geladen werden.&#34;);&#xA;    events = normalizeEvents(await res.text());&#xA;    render();&#xA;  }&#xA;&#xA;  prev.addEventListener(&#34;click&#34;, () =&gt; {&#xA;    visibleMonth = new Date(visibleMonth.getFullYear(), visibleMonth.getMonth() - 1, 1);&#xA;    render();&#xA;  });&#xA;&#xA;  next.addEventListener(&#34;click&#34;, () =&gt; {&#xA;    visibleMonth = new Date(visibleMonth.getFullYear(), visibleMonth.getMonth() + 1, 1);&#xA;    render();&#xA;  });&#xA;&#xA;  loadDefaultCalendar().catch((err) =&gt; {&#xA;    setStatus(err.message || &#34;Fehler beim Laden der Termine.&#34;);&#xA;    render();&#xA;  });&#xA;})();&#xA;&lt;/script&gt;</description>
			</item>
			<item>
				<title>Sport</title>
				<link>/sport/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/sport/</guid>
				<description>&lt;p&gt;Sport verbindet uns und ist ein Herzstück unserer Gemeinschaft. Diesen üben wir nicht nur im Rahmen der zwei wöchentlichen Sportterminen während des Semesters aus, wo häufig Mannschaftssportarten im Mittelpunkt stehen, sondern kommen auch in unserer Freizeit zu unterschiedlichen Sportarten zusammen. Dabei ist für nahezu jede Sportart eine begeisterte Person vorhanden, wodurch man beim Ausüben oder Anschauen des Sports nie alleine ist.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Über uns</title>
				<link>/ueber-uns/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>/ueber-uns/</guid>
				<description>&lt;h2 id=&#34;wer-wir-sind&#34;&gt;Wer wir sind&lt;/h2&gt;&#xA;&lt;p&gt;Die Akademische Turnverbindung Saxo-Silesia Breslau zu Aachen ist eine gemischte, nicht-schlagende Verbindung. Wir sind farbenführend, aber weder farbendtragend, politisch oder konfessionell gebunden. Die ATV ist eine der ca. 35 Verbindungen in Aachen und gehört seit 1992 zu sechs Bünden, die sowohl Frauen als auch Männer aufnehmen.&lt;/p&gt;&#xA;&lt;p&gt;Unser Dachverband, unter dem wir uns mit unseren Geschwisterbünden organisieren, ist der ATB.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
