4b6a090b7bc76b3bce0c394d7724a9529b20a3bb — Case 9 months ago 1e1a514
Add unk
6 files changed, 403 insertions(+), 0 deletions(-)

A unk/S/not-this-day.gif
A unk/carpe-diem.htm
A unk/index.htm
A unk/rosa-rosa-rosam.htm
A unk/spqr.htm
A unk/tu-quoque.htm
A unk/S/not-this-day.gif => unk/S/not-this-day.gif +0 -0

A unk/carpe-diem.htm => unk/carpe-diem.htm +52 -0
@@ 0,0 1,52 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Carpe diem</title>
<h1>Carpe diem</h1>
<p>Fusce tortor quam, egestas in posuere quis, porttitor vel turpis. Donec
vulputate porttitor augue at rhoncus. Proin iaculis consectetur sagittis.
Curabitur venenatis turpis sit amet purus tristique nec posuere risus laoreet.
Nullam nisi sem, dapibus id semper id, egestas vel arcu. Morbi porttitor ipsum
placerat erat consequat sed consequat purus feugiat. Donec auctor elit ut
risus mattis facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing
<p>Proin vulputate sapien facilisis leo ornare pulvinar. Fusce tempus massa a
risus semper iaculis. Suspendisse sollicitudin posuere nunc, sit amet rutrum
leo facilisis mattis. Sed ornare auctor dui, vitae rutrum neque auctor sit
amet. Proin ac dui magna. Mauris vehicula interdum augue, nec ultrices libero
egestas quis. Nunc convallis euismod ipsum, id sollicitudin orci consequat ac.
Fusce bibendum congue libero, in rutrum nulla congue non. Cras sit amet risus
tortor, eu pellentesque dui. Phasellus euismod enim non nibh sodales quis
consectetur lorem laoreet. Vivamus a egestas quam. Curabitur in tortor augue,
vitae varius tellus. Integer varius, elit ac gravida suscipit, eros erat
pellentesque nisi, et tristique augue odio id nulla. Aliquam sit amet nunc vel
tellus hendrerit tempus ac vel sem.</p>
<p>Aenean tincidunt sollicitudin sapien ut porttitor. Curabitur molestie
adipiscing lorem vel scelerisque. Donec vitae interdum est. Proin rutrum
vulputate faucibus. Suspendisse sit amet felis odio, non volutpat ante. Sed eu
lectus quam. Curabitur tristique rhoncus est, vel commodo tortor suscipit
semper. Maecenas feugiat vestibulum nisi id facilisis. Nulla non tincidunt
libero. Praesent ultrices interdum commodo. Sed euismod nisl auctor leo
ultrices rutrum. Aliquam nibh felis, congue molestie blandit at, bibendum at
eros. Aenean tincidunt, tortor iaculis placerat sollicitudin, lorem justo
tempor diam, et posuere sapien leo et magna. Quisque vel aliquam mauris.</p>
<p>Proin varius tempus fermentum. Cum sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Sed tincidunt nunc id magna
adipiscing non sollicitudin turpis tempor. Etiam vel elit ipsum, quis euismod
velit. Quisque elementum magna vitae quam venenatis lacinia. Sed at arcu
ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
inceptos himenaeos. Donec ut lorem ac sapien cursus lacinia sit amet mollis
dolor. Vivamus tempus odio nec magna faucibus sed hendrerit lorem tempor.</p>
<p>Vestibulum eu nisi arcu. Curabitur nisi risus, fermentum ut lacinia ut,
interdum nec magna. Nunc aliquet gravida massa, eu aliquam lorem faucibus at.
Sed sollicitudin volutpat velit id tempor. In nibh justo, pharetra et pretium
dignissim, tempus in turpis. Phasellus eget lobortis nisl. Phasellus sed
fermentum diam. Nam tempus pharetra odio, quis congue eros imperdiet eu.
Aliquam dui eros, hendrerit et vulputate vel, porta eu eros. Nullam nisi dui,
commodo eget pharetra ut, ornare sit amet nunc. Fusce vel neque urna. Maecenas
nulla ante, egestas at consequat quis, fermentum a enim. Aliquam id tristique
urna. Integer augue justo, scelerisque et consectetur id, rhoncus eget enim.</p>
<a id=toc href=index.htm>return</a>
<p id=ft>&copy; 2019</p>

A unk/index.htm => unk/index.htm +185 -0
@@ 0,0 1,185 @@
<!DOCTYPE html>
<meta charset=utf-8>
<h2>a very small static site generator</h2>
<p><strong>UNK</strong> is an experiment in minimalism.
It is a templating static site generator
with an included markup language
that all fits within 1000 bytes.
There are three main scripts:</p>
    <li><strong>UNK</strong> (253 bytes), a POSIX-sh script that applies
        the template to each page and publishes them to the output dir,</li>
    <li><strong>LHT</strong> (241 bytes), an awk script that serves as
        a (very) basic markup language, and</li>
    <li><strong>TM</strong> (502 bytes),
        the default template script for <strong>UNK</strong>.</li>
<p>You are, of course, free to make the template file as large
and involved as you like, but it's pretty good already:</p>
    <li>it has a plain default CSS
        (based on <a href="https://jrl.ninja/etc/1/">this article</a>),
        or will use <code>S/s.css</code> if it exists</li>
    <li>it automatically adds a list of posts to the index page,
        or a <em.return</em> link to other pages</li>
    <li>it cleans up the first line of the input file and makes it a
        <code>&lt;title&gt;</code>, and a <code>&lt;h1&gt;</code>
        in the generated HTML</li>
<a href="https://git.sr.ht/~acdw/unk"><strong>OFFICIAL REPO</strong></a> //
<a href="https://github.com/duckwork/unk"><strong>GITHUB MIRROR</strong></a>
<p>To install <strong>UNK</strong>, simply clone this repo and put it where you want it.
The default <strong>TM</strong> needs <strong>LHT</strong> to be in the same directory as it,
so keep that in mind.</p>
<p>To run <strong>UNK</strong>, just <code>cd</code> into your cloned repo and run <code>./unk</code>.
It's just a POSIX shell script.</p>
<p><strong>UNK</strong> takes a set of files in a directory, applies a template to them,
and output them into another directory as HTML files ready for a server.
To keep a very small size, <strong>UNK</strong> delegates most file processing to <strong>TM</strong>,
the main template.  It delegates by using an idea found in
<a href="https://github.com/zimbatm/shab">shab</a>:
each input file is read as a <code>heredoc</code>, which enables
shell interpolation.
So the template, as opposed to the engine,
can do all the heavy-lifting of index generation and navigation and such.</p>
<p>Content goes into the following (hard-coded) directories:</p>
        for written (<em><strong>I</strong>nput</em>) content
        (the pages of the site),</li>
    <li><strong>S/</strong>, for <em><strong>S</strong>tatic</em> content
        (css, images, etc.), &amp;</li>
    <li><strong>O/</strong>, for the (<em><strong>O</strong>utput</em>)
        website, ready for <code>rsync</code>ing to a server.</li>
<p>If there is no <strong>TM</strong> in the directory where <strong>UNK</strong> is run,
one will be created that will simply <code>cat</code> the file being processed.</p>
<p>The following variable is made available to <strong>TM</strong>:</p>
    <li><strong>F</strong>: the <em>File</em> name passed to
    <li><strong>N</strong>: the <em>fileName</em>
        (with directories removed) of the file being processed</li>
<p>as well as these functions:</p>
    <li><strong>X</strong>, for <em>eXpand</em>:
        the <code>shab</code> stand-in.
        It is much simpler than <code>shab</code>,
        and will fail if the template
        (or if it nests templates, one of the nested ones)
        has a <code>ZZ</code> on a line by itself,
        due to its <code>heredoc</code> nature.</li>
    <li><strong>T</strong>, for <em>Title</em>:
        it'll return the first line of the current file.</li>
    <li><strong>B</strong>, for <em>Body</em>:
        it'll return all lines <em>but</em> the first of the current file.</li>
<p>and these aliases (though they're more an artefact of saving space
in the script, but they can be used in templates):</p>
    <li><strong>c</strong>: <code>cat</code></li>
    <li><strong>q</strong>: <code>test</code></li>
    <li><strong>e</strong>: <code>echo</code></li>
<p>As mentioned above, templates can be nested.
Simply call another template from <strong>TM</strong> with the <strong>X</strong> function.</p>
<p><strong>LHT</strong> stands for <em>Less HyperText</em>,
because that's what you're writing when you're writing it
(though not much less than HTML).
blank lines are interpreted as <code>&lt;p&gt;</code> tag breaks,
unless the previous source paragraph started with
<code>&lt;</code> and ended with <code>&gt;</code>.
It also has support for three inline spans:</p>
        as <em>em</em></li>
        as <strong>strong</strong></li>
    <li><code>&#96;code&#96;</code> as <code>code</code></li>
<p>Everything else is just HTML.
This means that a valid <code>.lh</code> file is <em>almost</em> a valid <code>.md</code> file,
except where it nests HTML and Markdown
(so it's not really, but you can run it through Markdown in a pinch
and get the basic idea across.
This file, for example, is both <code>index.lh</code> and <code>README.md</code>
(they're just symlinked to each other),
so it's got some weirdness to keep things compatible between Markdown and LHT.
But if you're just writing for LHT, it can be much simpler.).</p>
<p><strong>LHT</strong> was inspired, in part, by
<a href="http://john.ankarstrom.se/html">Writing HTML in HTML</a>
by John Ankarstrom,
as well as some other articles I can't think of right now.
I liked the idea, but some tags in HTML are just annoying to write
over and over, and take me out of the flow of writing prose.
So I fixed those few tags.
<strong>The inline tags are definitely subject to change.</strong></p>
<p>I was bored and decided I'd try to write a static site generator
that could fit in a
<a href="https://writing.exchange/web/statuses/102333562361891512">toot</a>
(500 characters).
<a href="https://writing.exchange/web/statuses/102334522981990897">wrote</a>
<a href="https://writing.exchange/web/statuses/102334522981990897">a few</a>
<a href="https://writing.exchange/web/statuses/102339851501562648">of them</a>,
making them smaller and smaller each time.
By the end, I was left with a <em>tiny</em> script
that delegated almost <em>all</em> the work to the template file.
That script became <strong>UNK</strong> in this repo.</p>
<p>I was feeling pretty high on my horse after writing the tiny SSG,
so I thought,
<em><a href="https://writing.exchange/@acdw/102339290120562386">maybe
I could try for a tootable Markdown converter next</a></em> &mdash;
boy, was I wrong about that.
Markdown is <em>way</em> too complicated to fit in 500 bytes.
So I just wrote the Really Important Parts: <code>&lt;p&gt;</code>
and some inlines.</p>
<p>Copyright &copy; 2019 Case Duckworth
&lt;<a href="mailto:acdw@acdw.net">acdw@acdw.net</a>&gt;.</p>
<p>This work is free.
You can redistribute it and/or modify it under the terms of
the Do What The Fuck You Want To Public License, Version 2,
as published by Sam Hocevar.
See the <a href="https://git.sr.ht/~acdw/unk/tree/master/LICENSE">LICENSE</a>
file for more details.</p>
<h2>Why this license?</h2>
<p>I was going to go with a stricter license like the GPL,
but realized that</p>
    <li>this software isn't so important or time-consuming that I need
        others to credit me or redistribute the project under the same terms,
    <li>the GPL is <em>way</em> too long for a project like this.
        It's over 35 times <em>bigger</em> than the entirety of this project,
        not counting the content or this README.
        It would weigh down the entire undertaking.
        The WTFPL, by contrast, is a trim 443 characters,
        which is right in keeping with the smallness of this project.</li>
<p>To contribute to this project,
head over to <a href="https://github.com/duckwork/unk">its GitHub mirror</a>
and send me a pull request or issue.
One of these days, I'm sure I'll figure out sr.ht's mailing lists,
<img src="S/not-this-day.gif" style="display:block;margin:1em auto;"
     alt="Meme of Aragorn saying, 'But it is not this day'" /></p>
<ul id=toc>Pages
<li><a href='carpe-diem.htm'>Carpe diem</a></li>
<li><a href='rosa-rosa-rosam.htm'>Rosa Rosa Rosam</a></li>
<li><a href='spqr.htm'>S.P.Q.R.</a></li>
<li><a href='tu-quoque.htm'>Tu quoque</a></li>
<p id=ft>&copy; 2019</p>

A unk/rosa-rosa-rosam.htm => unk/rosa-rosa-rosam.htm +47 -0
@@ 0,0 1,47 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Rosa Rosa Rosam</title>
<h1>Rosa Rosa Rosam</h1>
<p>Suspendisse pharetra ullamcorper sem et auctor. Suspendisse vitae tellus eu
turpis dignissim gravida ut ut tortor. Cum sociis natoque penatibus et magnis
dis parturient montes, nascetur ridiculus mus. Morbi aliquam sapien quis nisl
sodales non aliquet nisl iaculis. Curabitur fermentum orci vel sapien
pellentesque id condimentum metus vehicula. Curabitur turpis purus,
scelerisque at interdum quis, placerat sit amet tortor. Aliquam erat volutpat.</p>
<p>Integer posuere felis non arcu suscipit ullamcorper. Nam tempus risus
venenatis orci sagittis eu aliquam ante tincidunt. Aenean vehicula ipsum id
sapien tincidunt commodo. Aliquam erat volutpat. Curabitur vehicula libero ac
turpis cursus consectetur. Praesent posuere egestas purus et dapibus. Mauris
egestas, lectus vitae scelerisque ultricies, metus lorem tempor nisi, sed
vehicula tortor mauris nec urna. Quisque urna tellus, facilisis at mollis
eget, adipiscing in nisl. Proin quam arcu, euismod et imperdiet sed, ultricies
sed orci.</p>
<p>Nulla malesuada sem eget lectus scelerisque nec rhoncus metus interdum. In dui
felis, rhoncus id scelerisque eget, vulputate id sem. Nulla facilisi.
Vestibulum eleifend, metus dignissim lacinia ornare, magna nulla vehicula
nisi, sed molestie mauris ipsum vel turpis. Class aptent taciti sociosqu ad
litora torquent per conubia nostra, per inceptos himenaeos. Nulla urna leo,
vehicula eget dignissim a, hendrerit ut risus. Fusce ultricies elementum
placerat. Nam at dolor sed nisi mollis sollicitudin vitae at urna. Vestibulum
iaculis adipiscing eros et mollis.</p>
<p>Phasellus ultricies elit eu risus sagittis eu dictum ante ultrices. Nulla
congue, augue ac placerat tempor, orci mi luctus nisi, at varius ipsum sem sed
eros. Vivamus eget velit eget felis posuere ornare. In sed metus non est
iaculis facilisis dapibus sit amet enim. Aliquam viverra tortor eget neque
volutpat in auctor urna rutrum. Aliquam ligula augue, congue sit amet rutrum
in, semper vel nulla. Sed tempus porttitor faucibus. Donec cursus sodales
nulla, quis lacinia mi vehicula vel. Sed nec purus orci. Nam leo sapien,
rutrum a ultrices quis, placerat vel ligula. Donec massa quam, pellentesque et
molestie nec, hendrerit id mauris. In hac habitasse platea dictumst. Cras quis
quam sem. Curabitur in arcu diam, in interdum mauris.</p>
<p>Proin lorem sapien, iaculis et faucibus nec, dictum sed nunc. Pellentesque in
purus justo. Vestibulum facilisis rutrum nisi, a egestas nunc suscipit sed. Ut
quis tortor a arcu bibendum placerat non sed ante. Praesent orci sem, posuere
sit amet cursus molestie, volutpat ut purus. Curabitur aliquam, purus in
pharetra viverra, lorem leo aliquam tellus, vel consequat felis neque et
mauris. Aliquam erat volutpat.</p>
<a id=toc href=index.htm>return</a>
<p id=ft>&copy; 2019</p>

A unk/spqr.htm => unk/spqr.htm +60 -0
@@ 0,0 1,60 @@
<!DOCTYPE html>
<meta charset=utf-8>
<p>Mauris in lorem nisl. Maecenas tempus facilisis ante, eget viverra nisl
tincidunt et. Donec turpis lectus, mattis ac malesuada a, accumsan eu libero.
Morbi condimentum, tortor et tincidunt ullamcorper, sem quam pretium nulla, id
convallis lectus libero nec turpis. Proin dapibus nisi id est sodales nec
ultrices tortor pellentesque. Vivamus vel nisi ac lacus sollicitudin vulputate
ac ut ligula. Nullam feugiat risus eget eros gravida in molestie sapien
euismod. Nunc sed hendrerit orci. Nulla mollis consequat lorem ac blandit. Ut
et turpis mauris. Nulla est odio, posuere id ullamcorper sit amet, tincidunt
vel justo. Curabitur placerat tincidunt varius. Nulla vulputate, ipsum eu
consectetur mollis, dui nibh aliquam neque, at ultricies leo ligula et arcu.
Proin et mi eget tellus sodales lobortis. Sed tempor, urna vel pulvinar
faucibus, lectus urna vehicula ante, at facilisis dolor odio at lorem. Morbi
vehicula euismod urna, et imperdiet urna ornare vitae.</p>
<p>Sed tincidunt sollicitudin ultrices. In hac habitasse platea dictumst. Morbi
ligula lectus, egestas at ultricies nec, fringilla et tellus. Duis urna lorem,
bibendum a ornare sed, euismod sed nunc. Aliquam tempor massa at velit
fringilla fringilla. Praesent sit amet tempor felis. Maecenas id felis ac
velit aliquam tempor a sit amet orci. Nunc placerat nulla pellentesque sem
commodo cursus. Praesent quis sapien orci, quis ultricies augue. Nam
vestibulum sem non augue semper tincidunt pellentesque ipsum volutpat. Duis
congue, nunc a aliquam luctus, quam ante convallis nisi, ac pellentesque lacus
orci vel turpis. Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus. Suspendisse hendrerit nisl eu felis sagittis faucibus.
Nunc eu congue lorem. Quisque non nibh nisi, et ultrices massa. Sed vitae erat
vitae nulla pellentesque fermentum.</p>
<p>Ut diam nunc, consectetur ut ultrices eu, iaculis sed felis. Sed lacinia, odio
et accumsan luctus, arcu ipsum accumsan erat, sit amet malesuada libero lacus
et velit. Donec accumsan tristique tristique. Proin a metus magna, vitae
mattis nisl. Integer a libero ipsum. Mauris faucibus eleifend metus id
sodales. Morbi ornare, nibh nec facilisis imperdiet, turpis sem commodo lorem,
id commodo mauris metus vitae justo. Etiam at pellentesque tortor. Proin
mollis accumsan ligula, nec tempus augue auctor quis. Nulla lacinia, mi quis
lobortis auctor, nisi diam posuere dui, pulvinar feugiat dui libero eget quam.
Fusce eu risus nunc, a consectetur orci. Class aptent taciti sociosqu ad
litora torquent per conubia nostra, per inceptos himenaeos. Maecenas venenatis
aliquet orci, a ultricies sem facilisis eu. Donec dolor purus, porta
condimentum convallis nec, dignissim nec libero.</p>
<p>Etiam rutrum ultricies dui, et interdum metus elementum et. Nulla sapien nunc,
interdum tristique porttitor in, laoreet vitae mi. Ut vehicula auctor mauris
sit amet bibendum. Phasellus adipiscing mattis libero, eget adipiscing erat
dignissim at. Vivamus convallis malesuada metus nec cursus. Ut cursus, lorem
eleifend sollicitudin condimentum, felis tortor sodales augue, ac tempus lacus
ipsum vitae quam. Vestibulum vitae lacus non tortor vehicula iaculis faucibus
quis massa.</p>
<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Duis malesuada neque nec ante porttitor accumsan. Suspendisse
potenti. Aliquam in lacus magna, imperdiet laoreet lectus. Praesent id diam
nec ante commodo rhoncus nec vel augue. Pellentesque tortor massa, dignissim
ut sagittis sed, hendrerit vitae nunc. Nam gravida, urna vitae hendrerit
rutrum, felis augue vulputate tortor, ut varius velit libero nec lectus. In
adipiscing massa in est scelerisque ullamcorper. Vivamus in nisi metus.</p>
<a id=toc href=index.htm>return</a>
<p id=ft>&copy; 2019</p>

A unk/tu-quoque.htm => unk/tu-quoque.htm +59 -0
@@ 0,0 1,59 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Tu quoque</title>
<h1>Tu quoque</h1>
<p>Vestibulum leo turpis, dignissim quis ultrices sit amet, iaculis ac ligula.
Pellentesque tristique, velit eget scelerisque scelerisque, est dolor ultrices
arcu, quis ullamcorper justo arcu luctus mauris. Integer congue molestie nisi
id posuere. Fusce pellentesque gravida tempus. Integer viverra tortor nec eros
mollis quis convallis sem laoreet. Nulla id libero ac erat varius laoreet.
Proin sed est est. Curabitur lacinia fermentum lorem, elementum malesuada
ipsum malesuada ut. Donec suscipit elit id leo vehicula mattis non sed leo.
Morbi varius eleifend varius. Nulla vestibulum, neque vitae aliquam eleifend,
nisi tellus placerat nunc, quis suscipit elit turpis eu tortor. Etiam euismod
convallis lectus quis venenatis. Phasellus laoreet magna in nibh cursus eu
egestas nulla convallis. Aliquam vel ullamcorper risus. Fusce dictum, massa id
consequat viverra, nulla ante tristique est, a faucibus nisi enim nec dui.
Donec metus ligula, condimentum at porttitor eget, lobortis at quam.</p>
<p>Aenean vel libero in magna ultricies congue in a odio. Donec faucibus rutrum
ornare. Fusce dictum eleifend fermentum. Vestibulum vel nibh a metus porttitor
rhoncus. Pellentesque id quam neque, eget molestie arcu. Integer in elit vel
neque viverra ultricies in eget massa. Nam ut convallis est. Pellentesque eros
eros, sodales non vehicula et, tincidunt ut odio. Cras suscipit ultrices metus
sit amet molestie. Fusce enim leo, vehicula sed sodales quis, adipiscing at
<p>Nunc tempor dignissim enim, sed tincidunt eros bibendum quis. Curabitur et
dolor augue, id laoreet mi. Nulla cursus felis id dui vehicula vitae ornare
lorem blandit. Cras eget dui nec odio volutpat pharetra. Fusce hendrerit justo
justo, vel imperdiet enim. Vivamus elit risus, interdum ultrices accumsan
eleifend, vestibulum vitae sapien. Integer bibendum ullamcorper tristique.
Nulla quis odio lectus, quis eleifend augue. Integer a ligula mauris. Aenean
et tempus tortor. Quisque at tortor mi. Vivamus accumsan feugiat est a
blandit. Sed vitae enim ut dolor semper sodales. Duis tristique, ante et
placerat elementum, nulla tellus pellentesque sapien, quis posuere velit mi
eget nulla. Sed vestibulum nunc non est porttitor ut rutrum nibh semper.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas.</p>
<p>Nulla adipiscing ultricies lobortis. Vivamus iaculis nisl vitae tellus laoreet
vitae aliquet lacus mollis. Phasellus ut lacus urna, sed sagittis ante. Etiam
consectetur pretium nisl sed dignissim. Pellentesque convallis, nisl eget
commodo mollis, sem magna consequat arcu, sed pretium ipsum arcu sit amet
neque. Aliquam erat volutpat. Morbi sed mi sed urna vestibulum placerat vitae
vel metus. Fusce ac ante at justo pharetra vehicula. Vivamus vel tortor eget
augue aliquet aliquet at vel odio. Nunc venenatis, magna quis facilisis
fringilla, augue tellus varius neque, in vulputate est eros ut tortor. Duis
lorem neque, aliquam congue posuere id, condimentum non dui. Phasellus ut dui
massa, porttitor suscipit augue. Praesent quis tellus quam, vel volutpat
metus. Vivamus enim est, aliquam in imperdiet et, sagittis eu ligula.
Vestibulum hendrerit placerat orci et aliquet. Cras pharetra, dolor placerat
lobortis tempor, metus odio cursus ligula, et posuere lacus ligula quis dui.</p>
<p>Donec a lectus eu nibh malesuada aliquam. Proin at metus quam, et tincidunt
leo. Quisque lacus justo, scelerisque sodales pulvinar sed, dignissim ut
sapien. Vivamus diam felis, adipiscing sollicitudin ultricies id, accumsan ac
felis. In eu posuere ligula. Suspendisse potenti. Donec porttitor dictum dui
id vehicula. Integer ante velit, congue id dictum et, adipiscing a tortor.</p>
<a id=toc href=index.htm>return</a>
<p id=ft>&copy; 2019</p>