|
@ -1,4 +1,4 @@
|
|||
FROM alpine AS builder
|
||||
FROM alpine:3.8 AS builder
|
||||
RUN apk --no-cache add go libc-dev
|
||||
COPY src /src
|
||||
RUN go build -o /mothd /src/*.go
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
FROM alpine:3.7
|
||||
FROM alpine:3.8
|
||||
|
||||
RUN apk --no-cache add \
|
||||
gcc \
|
||||
|
@ -6,11 +6,12 @@ RUN apk --no-cache add \
|
|||
python3 \
|
||||
python3-dev \
|
||||
py3-pillow \
|
||||
&& \
|
||||
pip3 install aiohttp
|
||||
&& pip3 install aiohttp
|
||||
|
||||
COPY . /moth/
|
||||
COPY devel /app/
|
||||
COPY example-puzzles /puzzles/
|
||||
COPY theme /theme/
|
||||
|
||||
WORKDIR /moth/
|
||||
ENTRYPOINT ["python3", "/moth/devel/devel-server.py", "--bind", ":8080", "--puzzles", "/puzzles"]
|
||||
ENTRYPOINT [ "python3", "/app/devel-server.py" ]
|
||||
CMD [ "--bind", "0.0.0.0:8080", "--puzzles", "/puzzles", "--theme", "/theme" ]
|
||||
|
|
|
@ -36,14 +36,14 @@ Click the `[mb]` link by a puzzle category to compile and download a mothball th
|
|||
Running a Production Server
|
||||
===========================
|
||||
|
||||
docker run --rm -it -p 8080:8080 -v /path/to/moth:/moth dirtbags/moth
|
||||
docker run --rm -it -p 8080:8080 -v /path/to/moth/state:/state -v /path/to/moth/balls:/mothballs:ro dirtbags/moth
|
||||
|
||||
You can be more fine-grained about directories, if you like.
|
||||
Inside the container, you need the following paths:
|
||||
|
||||
* `/moth/state` (rw) Where state is stored. Read [the overview](docs/overview.md) to learn what's what in here.
|
||||
* `/moth/mothballs` (ro) Mothballs (puzzle bundles) as provided by the development server.
|
||||
* `/moth/resources` (ro) Overrides for built-in HTML/CSS resources.
|
||||
* `/state` (rw) Where state is stored. Read [the overview](docs/overview.md) to learn what's what in here.
|
||||
* `/mothballs` (ro) Mothballs (puzzle bundles) as provided by the development server.
|
||||
* `/resources` (ro) Overrides for built-in HTML/CSS resources.
|
||||
|
||||
|
||||
|
||||
|
|
6
build.sh
|
@ -2,11 +2,13 @@
|
|||
|
||||
set -e
|
||||
|
||||
version=$(date +%Y%m%d%H%M)
|
||||
read version < VERSION
|
||||
|
||||
cd $(dirname $0)
|
||||
for img in moth moth-devel; do
|
||||
echo "==== $img"
|
||||
sudo docker build --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy --tag dirtbags/$img --tag dirtbags/$img:$version -f Dockerfile.$img .
|
||||
[ "$1" = "-push" ] && docker push dirtbags/$img:$version && docker push dirtbags/$img
|
||||
[ "$1" = "-push" ] && docker push dirtbags/$img:$version && docker push dirtbags/$img:latest
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
import asyncio
|
||||
import cgitb
|
||||
import glob
|
||||
import html
|
||||
from aiohttp import web
|
||||
import io
|
||||
import json
|
||||
import mimetypes
|
||||
import moth
|
||||
import logging
|
||||
|
@ -20,136 +20,60 @@ import mothballer
|
|||
|
||||
sys.dont_write_bytecode = True # Don't write .pyc files
|
||||
|
||||
def mkseed():
|
||||
return bytes(random.choice(b'abcdef0123456789') for i in range(40)).decode('ascii')
|
||||
|
||||
class Page:
|
||||
def __init__(self, title, depth=0):
|
||||
self.title = title
|
||||
if depth:
|
||||
self.base = "/".join([".."] * depth)
|
||||
else:
|
||||
self.base = "."
|
||||
self.body = io.StringIO()
|
||||
self.scripts = []
|
||||
def get_seed(request):
|
||||
seedstr = request.match_info.get("seed")
|
||||
if seedstr == "random":
|
||||
return random.getrandbits(32)
|
||||
else:
|
||||
return int(seedstr)
|
||||
|
||||
def add_script(self, path):
|
||||
self.scripts.append(path)
|
||||
|
||||
def write(self, s):
|
||||
self.body.write(s)
|
||||
|
||||
def text(self):
|
||||
ret = io.StringIO()
|
||||
ret.write("<!DOCTYPE html>\n")
|
||||
ret.write("<html>\n")
|
||||
ret.write(" <head>\n")
|
||||
ret.write(" <title>{}</title>\n".format(self.title))
|
||||
ret.write(" <link rel=\"stylesheet\" href=\"{}/files/www/res/style.css\">\n".format(self.base))
|
||||
for s in self.scripts:
|
||||
ret.write(" {}\n".format(s))
|
||||
ret.write(" </head>\n")
|
||||
ret.write(" <body>\n")
|
||||
ret.write(" <h1>{}</h1>\n".format(self.title))
|
||||
ret.write(" <div id=\"preview\" class=\"terminal\">\n")
|
||||
ret.write(self.body.getvalue())
|
||||
ret.write(" </div>\n")
|
||||
ret.write(" </body>\n")
|
||||
ret.write("</html>\n")
|
||||
return ret.getvalue()
|
||||
|
||||
def response(self, request):
|
||||
return web.Response(text=self.text(), content_type="text/html")
|
||||
|
||||
async def handle_front(request):
|
||||
p = Page("Devel Server", 0)
|
||||
p.write("<p>Yo, it's the front page!</p>")
|
||||
p.write("<ul>")
|
||||
p.write("<li><a href=\"puzzles/\">Available puzzles</a></li>")
|
||||
p.write("<li><a href=\"files/\">Raw filesystem view</a></li>")
|
||||
p.write("<li><a href=\"https://github.com/dirtbags/moth/tree/master/docs\">Documentation</a></li>")
|
||||
p.write("<li><a href=\"https://github.com/dirtbags/moth/blob/master/docs/devel-server.md\"Instructions</a> for using this server")
|
||||
p.write("</ul>")
|
||||
p.write("<p>If you use this development server to run a contest, you are a fool.</p>")
|
||||
return p.response(request)
|
||||
|
||||
async def handle_puzzlelist(request):
|
||||
seed = request.query.get("seed", mkseed())
|
||||
p = Page("Puzzle Categories", 1)
|
||||
p.write("<p>seed = {}</p>".format(seed))
|
||||
p.write("<ul>")
|
||||
for i in sorted(glob.glob(os.path.join(request.app["puzzles_dir"], "*", ""))):
|
||||
bn = os.path.basename(i.strip('/\\'))
|
||||
p.write("<li>")
|
||||
p.write("<a href=\"../mothballer/{cat}?seed={seed}\" class=\"download\" title=\"download mothball\">[mb]</a>".format(cat=bn, seed=seed))
|
||||
p.write(" ")
|
||||
p.write("<a href=\"{cat}/?seed={seed}\">{cat}</a>".format(cat=bn, seed=seed))
|
||||
p.write("</li>")
|
||||
p.write("</ul>")
|
||||
return p.response(request)
|
||||
seed = get_seed(request)
|
||||
puzzles = {
|
||||
"__devel__": [[0, ""]],
|
||||
}
|
||||
for p in request.app["puzzles_dir"].glob("*"):
|
||||
if not p.is_dir() or p.match(".*"):
|
||||
continue
|
||||
catName = p.parts[-1]
|
||||
cat = moth.Category(p, seed)
|
||||
puzzles[catName] = [[i, str(i)] for i in cat.pointvals()]
|
||||
puzzles[catName].append([0, ""])
|
||||
if len(puzzles) <= 1:
|
||||
logging.warning("No directories found matching {}/*".format(request.app["puzzles_dir"]))
|
||||
return web.Response(
|
||||
content_type="application/json",
|
||||
body=json.dumps(puzzles),
|
||||
)
|
||||
|
||||
async def handle_category(request):
|
||||
seed = request.query.get("seed", mkseed())
|
||||
category = request.match_info.get("category")
|
||||
cat = moth.Category(os.path.join(request.app["puzzles_dir"], category), seed)
|
||||
p = Page("Puzzles in category {}".format(category), 2)
|
||||
p.write("<ul>")
|
||||
for points in cat.pointvals():
|
||||
p.write('<li><a href="{points}/">puzzles/{category}/{points}/</a></li>'.format(category=category, points=points))
|
||||
p.write("</ul>")
|
||||
return p.response(request)
|
||||
|
||||
async def handle_puzzle(request):
|
||||
seed = request.query.get("seed", mkseed())
|
||||
seed = get_seed(request)
|
||||
category = request.match_info.get("category")
|
||||
points = int(request.match_info.get("points"))
|
||||
cat = moth.Category(os.path.join(request.app["puzzles_dir"], category), seed)
|
||||
cat = moth.Category(request.app["puzzles_dir"].joinpath(category), seed)
|
||||
puzzle = cat.puzzle(points)
|
||||
|
||||
p = Page("{} puzzle {}".format(category, points), 3)
|
||||
for s in puzzle.scripts:
|
||||
p.add_script(s)
|
||||
p.write("<h2>Body</h2>")
|
||||
p.write("<div id='body' style='border: solid 1px silver;'>")
|
||||
p.write(puzzle.html_body())
|
||||
p.write("</div>")
|
||||
p.write("<h2>Files</h2>")
|
||||
p.write("<ul>")
|
||||
for name,puzzlefile in sorted(puzzle.files.items()):
|
||||
if puzzlefile.visible:
|
||||
visibility = ''
|
||||
else:
|
||||
visibility = '(unlisted)'
|
||||
p.write('<li><a href="{filename}">{filename}</a> {visibility}</li>'
|
||||
.format(cat=category,
|
||||
points=puzzle.points,
|
||||
filename=name,
|
||||
visibility=visibility))
|
||||
p.write("</ul>")
|
||||
p.write("<h2>Answers</h2>")
|
||||
p.write("<p>Input box (for scripts): <input id='answer' name='a'>")
|
||||
p.write("<ul>")
|
||||
assert puzzle.answers, 'No answers defined'
|
||||
for a in puzzle.answers:
|
||||
p.write("<li><code>{}</code></li>".format(html.escape(a)))
|
||||
p.write("</ul>")
|
||||
p.write("<h2>Authors</h2><p>{}</p>".format(', '.join(puzzle.get_authors())))
|
||||
p.write("<h2>Summary</h2><p>{}</p>".format(puzzle.summary))
|
||||
if puzzle.logs:
|
||||
p.write("<h2>Debug Log</h2>")
|
||||
p.write('<ul class="log">')
|
||||
for l in puzzle.logs:
|
||||
p.write("<li>{}</li>".format(html.escape(l)))
|
||||
p.write("</ul>")
|
||||
obj = puzzle.package()
|
||||
obj["answers"] = puzzle.answers
|
||||
obj["hint"] = puzzle.hint
|
||||
obj["summary"] = puzzle.summary
|
||||
obj["logs"] = puzzle.logs
|
||||
|
||||
return web.Response(
|
||||
content_type="application/json",
|
||||
body=json.dumps(obj),
|
||||
)
|
||||
|
||||
return p.response(request)
|
||||
|
||||
async def handle_puzzlefile(request):
|
||||
seed = request.query.get("seed", mkseed()).encode('ascii')
|
||||
seed = get_seed(request)
|
||||
category = request.match_info.get("category")
|
||||
points = int(request.match_info.get("points"))
|
||||
filename = request.match_info.get("filename")
|
||||
cat = moth.Category(os.path.join(request.app["puzzles_dir"], category), seed)
|
||||
cat = moth.Category(request.app["puzzles_dir"].joinpath(category), seed)
|
||||
puzzle = cat.puzzle(points)
|
||||
|
||||
try:
|
||||
|
@ -157,21 +81,19 @@ async def handle_puzzlefile(request):
|
|||
except KeyError:
|
||||
return web.Response(status=404)
|
||||
|
||||
resp = web.Response()
|
||||
resp.content_type, _ = mimetypes.guess_type(file.name)
|
||||
# This is the line where I decided Go was better than Python at multiprocessing
|
||||
# You should be able to chain the puzzle file's output to the async output,
|
||||
# without having to block. But if there's a way to do that, it certainly
|
||||
# isn't documented anywhere.
|
||||
resp.body = file.stream.read()
|
||||
return resp
|
||||
content_type, _ = mimetypes.guess_type(file.name)
|
||||
return web.Response(
|
||||
body=file.stream.read(), # Is there no way to pipe this, must we slurp the whole thing into memory?
|
||||
content_type=content_type,
|
||||
)
|
||||
|
||||
|
||||
async def handle_mothballer(request):
|
||||
seed = request.query.get("seed", mkseed())
|
||||
seed = get_seed(request)
|
||||
category = request.match_info.get("category")
|
||||
|
||||
try:
|
||||
catdir = os.path.join(request.app["puzzles_dir"], category)
|
||||
catdir = request.app["puzzles_dir"].joinpath(category)
|
||||
mb = mothballer.package(category, catdir, seed)
|
||||
except:
|
||||
body = cgitb.html(sys.exc_info())
|
||||
|
@ -186,6 +108,47 @@ async def handle_mothballer(request):
|
|||
)
|
||||
return resp
|
||||
|
||||
|
||||
async def handle_index(request):
|
||||
seed = random.getrandbits(32)
|
||||
body = """<!DOCTYPE html>
|
||||
<html>
|
||||
<head><title>Dev Server</title></head>
|
||||
<body>
|
||||
<h1>Dev Server</h1>
|
||||
<p>
|
||||
You need to provide the contest seed in the URL.
|
||||
If you don't have a contest seed in mind,
|
||||
why not try <a href="{seed}/">{seed}</a>?
|
||||
</p>
|
||||
<p>
|
||||
If you are chaotic,
|
||||
you could even take your chances with a
|
||||
<a href="random/">random seed</a> for every HTTP request.
|
||||
This means generated files will get a different seed than the puzzle itself!
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
""".format(seed=seed)
|
||||
return web.Response(
|
||||
content_type="text/html",
|
||||
body=body,
|
||||
)
|
||||
|
||||
|
||||
async def handle_static(request):
|
||||
themes = request.app["theme_dir"]
|
||||
fn = request.match_info.get("filename")
|
||||
if not fn:
|
||||
for fn in ("puzzle-list.html", "index.html"):
|
||||
path = themes.joinpath(fn)
|
||||
if path.exists():
|
||||
break
|
||||
else:
|
||||
path = themes.joinpath(fn)
|
||||
return web.FileResponse(path)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
|
||||
|
@ -194,6 +157,9 @@ if __name__ == '__main__':
|
|||
'--puzzles', default='puzzles',
|
||||
help="Directory containing your puzzles"
|
||||
)
|
||||
parser.add_argument(
|
||||
'--theme', default='theme',
|
||||
help="Directory containing theme files")
|
||||
parser.add_argument(
|
||||
'--bind', default="127.0.0.1:8080",
|
||||
help="Bind to ip:port"
|
||||
|
@ -212,13 +178,13 @@ if __name__ == '__main__':
|
|||
mydir = os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0])))
|
||||
|
||||
app = web.Application()
|
||||
app["puzzles_dir"] = args.puzzles
|
||||
app["base_url"] = args.base
|
||||
app.router.add_route("GET", "/", handle_front)
|
||||
app.router.add_route("GET", "/puzzles/", handle_puzzlelist)
|
||||
app.router.add_route("GET", "/puzzles/{category}/", handle_category)
|
||||
app.router.add_route("GET", "/puzzles/{category}/{points}/", handle_puzzle)
|
||||
app.router.add_route("GET", "/puzzles/{category}/{points}/{filename}", handle_puzzlefile)
|
||||
app.router.add_route("GET", "/mothballer/{category}", handle_mothballer)
|
||||
app.router.add_static("/files/", mydir, show_index=True)
|
||||
app["puzzles_dir"] = pathlib.Path(args.puzzles)
|
||||
app["theme_dir"] = pathlib.Path(args.theme)
|
||||
app.router.add_route("GET", "/", handle_index)
|
||||
app.router.add_route("GET", "/{seed}/puzzles.json", handle_puzzlelist)
|
||||
app.router.add_route("GET", "/{seed}/content/{category}/{points}/puzzle.json", handle_puzzle)
|
||||
app.router.add_route("GET", "/{seed}/content/{category}/{points}/{filename}", handle_puzzlefile)
|
||||
app.router.add_route("GET", "/{seed}/mothballer/{category}", handle_mothballer)
|
||||
app.router.add_route("GET", "/{seed}/{filename:.*}", handle_static)
|
||||
web.run_app(app, host=addr, port=port)
|
||||
|
|
|
@ -75,6 +75,7 @@ class Puzzle:
|
|||
self.authors = []
|
||||
self.answers = []
|
||||
self.scripts = []
|
||||
self.hint = None
|
||||
self.files = {}
|
||||
self.body = io.StringIO()
|
||||
self.logs = []
|
||||
|
@ -104,7 +105,7 @@ class Puzzle:
|
|||
elif key == 'answer':
|
||||
self.answers.append(val)
|
||||
elif key == 'hint':
|
||||
pass
|
||||
self.hint = val
|
||||
elif key == 'name':
|
||||
pass
|
||||
elif key == 'file':
|
||||
|
@ -261,6 +262,18 @@ class Puzzle:
|
|||
"""Format and return the markdown for the puzzle body."""
|
||||
return mistune.markdown(self.get_body(), escape=False)
|
||||
|
||||
def package(self, answers=False):
|
||||
"""Return a dict packaging of the puzzle."""
|
||||
|
||||
files = [fn for fn,f in self.files.items() if f.visible]
|
||||
return {
|
||||
'authors': self.authors,
|
||||
'hashes': self.hashes(),
|
||||
'files': files,
|
||||
'scripts': self.scripts,
|
||||
'body': self.html_body(),
|
||||
}
|
||||
|
||||
def hashes(self):
|
||||
"Return a list of answer hashes"
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import os
|
|||
import shutil
|
||||
import tempfile
|
||||
import zipfile
|
||||
import random
|
||||
|
||||
SEEDFN = "SEED"
|
||||
|
||||
|
@ -37,62 +38,8 @@ def escape(s):
|
|||
return s.replace('&', '&').replace('<', '<').replace('>', '>')
|
||||
|
||||
|
||||
def generate_html(ziphandle, puzzle, puzzledir, category, points, authors, files):
|
||||
html_content = io.StringIO()
|
||||
file_content = io.StringIO()
|
||||
if files:
|
||||
file_content.write(
|
||||
''' <section id="files">
|
||||
<h2>Associated files:</h2>
|
||||
<ul>
|
||||
''')
|
||||
for fn in files:
|
||||
file_content.write(' <li><a href="{fn}">{efn}</a></li>\n'.format(fn=fn, efn=escape(fn)))
|
||||
file_content.write(
|
||||
''' </ul>
|
||||
</section>
|
||||
''')
|
||||
scripts = ['<script src="{}"></script>'.format(s) for s in puzzle.scripts]
|
||||
|
||||
html_content.write(
|
||||
'''<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>{category} {points}</title>
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
{scripts}
|
||||
</head>
|
||||
<body>
|
||||
<h1>{category} for {points} points</h1>
|
||||
<section id="readme">
|
||||
{body} </section>
|
||||
{file_content} <section id="form">
|
||||
<form id="puzzler" action="../../cgi-bin/puzzler.cgi" method="get" accept-charset="utf-8" autocomplete="off">
|
||||
<input type="hidden" name="c" value="{category}">
|
||||
<input type="hidden" name="p" value="{points}">
|
||||
<div>Team hash:<input name="t" size="8"></div>
|
||||
<div>Answer:<input name="a" id="answer" size="20"></div>
|
||||
<input type="submit" value="submit">
|
||||
</form>
|
||||
</section>
|
||||
<address>Puzzle by <span class="authors" data-handle="{authors}">{authors}</span></address>
|
||||
</body>
|
||||
</html>'''.format(
|
||||
category=category,
|
||||
points=points,
|
||||
body=puzzle.html_body(),
|
||||
file_content=file_content.getvalue(),
|
||||
authors=', '.join(authors),
|
||||
scripts='\n'.join(scripts),
|
||||
)
|
||||
)
|
||||
ziphandle.writestr(os.path.join(puzzledir, 'index.html'), html_content.getvalue())
|
||||
|
||||
|
||||
def build_category(categorydir, outdir):
|
||||
category_seed = binascii.b2a_hex(os.urandom(20))
|
||||
category_seed = random.getrandbits(32)
|
||||
|
||||
categoryname = os.path.basename(categorydir.strip(os.sep))
|
||||
zipfilename = os.path.join(outdir, "%s.mb" % categoryname)
|
||||
|
@ -102,7 +49,7 @@ def build_category(categorydir, outdir):
|
|||
# open and gather some state
|
||||
existing = zipfile.ZipFile(zipfilename, 'r')
|
||||
try:
|
||||
category_seed = existing.open(SEEDFN).read().strip()
|
||||
category_seed = int(existing.open(SEEDFN).read().strip())
|
||||
except Exception:
|
||||
pass
|
||||
existing.close()
|
||||
|
@ -119,7 +66,7 @@ def build_category(categorydir, outdir):
|
|||
def package(categoryname, categorydir, seed):
|
||||
zfraw = io.BytesIO()
|
||||
zf = zipfile.ZipFile(zfraw, 'x')
|
||||
zf.writestr("category_seed.txt", seed)
|
||||
zf.writestr("category_seed.txt", str(seed))
|
||||
|
||||
cat = moth.Category(categorydir, seed)
|
||||
mapping = {}
|
||||
|
@ -128,7 +75,7 @@ def package(categoryname, categorydir, seed):
|
|||
for puzzle in cat:
|
||||
logging.info("Processing point value {}".format(puzzle.points))
|
||||
|
||||
hashmap = hashlib.sha1(seed.encode('utf-8'))
|
||||
hashmap = hashlib.sha1(str(seed).encode('utf-8'))
|
||||
hashmap.update(str(puzzle.points).encode('utf-8'))
|
||||
puzzlehash = hashmap.hexdigest()
|
||||
|
||||
|
@ -136,23 +83,13 @@ def package(categoryname, categorydir, seed):
|
|||
answers[puzzle.points] = puzzle.answers
|
||||
summary[puzzle.points] = puzzle.summary
|
||||
|
||||
puzzledir = os.path.join('content', puzzlehash)
|
||||
files = []
|
||||
puzzledir = os.path.join("content", puzzlehash)
|
||||
for fn, f in puzzle.files.items():
|
||||
if f.visible:
|
||||
files.append(fn)
|
||||
payload = f.stream.read()
|
||||
zf.writestr(os.path.join(puzzledir, fn), payload)
|
||||
|
||||
puzzledict = {
|
||||
'authors': puzzle.authors,
|
||||
'hashes': puzzle.hashes(),
|
||||
'files': files,
|
||||
'body': puzzle.html_body(),
|
||||
}
|
||||
puzzlejson = json.dumps(puzzledict)
|
||||
zf.writestr(os.path.join(puzzledir, 'puzzle.json'), puzzlejson)
|
||||
generate_html(zf, puzzle, puzzledir, categoryname, puzzle.points, puzzle.get_authors(), files)
|
||||
obj = puzzle.package()
|
||||
zf.writestr(os.path.join(puzzledir, 'puzzle.json'), json.dumps(obj))
|
||||
|
||||
write_kv_pairs(zf, 'map.txt', mapping)
|
||||
write_kv_pairs(zf, 'answers.txt', answers)
|
||||
|
@ -172,5 +109,7 @@ if __name__ == '__main__':
|
|||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
outdir = os.path.abspath(args.outdir)
|
||||
for categorydir in args.categorydirs:
|
||||
build_category(categorydir, args.outdir)
|
||||
categorydir = os.path.abspath(categorydir)
|
||||
build_category(categorydir, outdir)
|
||||
|
|
|
@ -30,7 +30,7 @@ try this:
|
|||
apt install python3
|
||||
git clone https://github.com/dirtbags/moth/
|
||||
cd moth
|
||||
./devel-server.py --puzzles example-puzzles
|
||||
python3 devel/devel-server.py --puzzles example-puzzles
|
||||
|
||||
|
||||
Installing New Puzzles
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
Philosophy
|
||||
==========
|
||||
|
||||
This is just some scattered thoughts by the architect, Neale.
|
||||
|
||||
People are going to try to break this thing.
|
||||
It needs to be bulletproof.
|
||||
This pretty much set the entire design:
|
||||
|
||||
* As much as possible is done client-side
|
||||
* Participants can attack their own web browsers as much as they feel like
|
||||
* Also reduces server load
|
||||
* We will help you create brute-force attacks!
|
||||
* Your laptop is faster than our server
|
||||
* We give you the carrot of hashed answers and the hashing function
|
||||
* This removes one incentive to DoS the server
|
||||
* Generate static content whenever possible
|
||||
* Puzzles are statically compiled before the event even starts
|
||||
* `points.json` and `puzzles.json` are generated and cached by a maintenance loop
|
||||
* Minimize dynamic handling
|
||||
* There are only two (2) dynamic handlers
|
||||
* team registration
|
||||
* answer validation
|
||||
* You can disable team registration if you want, just remove `teamids.txt`
|
||||
* I even removed token handling once I realized we replicate the user experience with the `answer` handler and some client-side JavaScript
|
||||
* As much as possible is read-only
|
||||
* The only rw directory is `state`
|
||||
* Server code should be as tiny as possible
|
||||
* Server should provide highly limited functionality
|
||||
* It should be easy to remember in your head everything it does
|
||||
* Server is also compiled
|
||||
* Static type-checking helps assure no run-time errors
|
|
@ -75,6 +75,7 @@ func ShowHtml(w http.ResponseWriter, status Status, title string, body string) {
|
|||
}
|
||||
|
||||
fmt.Fprintf(w, "<!DOCTYPE html>")
|
||||
fmt.Fprintf(w, "<!-- If you put `application/json` in the `Accept` header of this request, you would have gotten a JSON object instead of HTML. -->\n")
|
||||
fmt.Fprintf(w, "<html><head>")
|
||||
fmt.Fprintf(w, "<title>%s</title>", title)
|
||||
fmt.Fprintf(w, "<link rel=\"stylesheet\" href=\"basic.css\">")
|
||||
|
@ -173,70 +174,6 @@ func (ctx *Instance) registerHandler(w http.ResponseWriter, req *http.Request) {
|
|||
)
|
||||
}
|
||||
|
||||
func (ctx *Instance) tokenHandler(w http.ResponseWriter, req *http.Request) {
|
||||
teamid := req.FormValue("id")
|
||||
token := req.FormValue("token")
|
||||
|
||||
var category string
|
||||
var points int
|
||||
var fluff string
|
||||
|
||||
stoken := strings.Replace(token, ":", " ", 2)
|
||||
n, err := fmt.Sscanf(stoken, "%s %d %s", &category, &points, &fluff)
|
||||
if err != nil || n != 3 {
|
||||
respond(
|
||||
w, req, Fail,
|
||||
"Malformed token",
|
||||
"That doesn't look like a token: %v.", err,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (category == "") || (points <= 0) {
|
||||
respond(
|
||||
w, req, Fail,
|
||||
"Weird token",
|
||||
"That token doesn't make any sense.",
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
f, err := ctx.OpenCategoryFile(category, "tokens.txt")
|
||||
if err != nil {
|
||||
respond(
|
||||
w, req, Fail,
|
||||
"Cannot list valid tokens",
|
||||
err.Error(),
|
||||
)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// Make sure the token is in the list
|
||||
if !hasLine(f, token) {
|
||||
respond(
|
||||
w, req, Fail,
|
||||
"Unrecognized token",
|
||||
"I don't recognize that token. Did you type in the whole thing?",
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if err := ctx.AwardPoints(teamid, category, points); err != nil {
|
||||
respond(
|
||||
w, req, Fail,
|
||||
"Error awarding points",
|
||||
err.Error(),
|
||||
)
|
||||
return
|
||||
}
|
||||
respond(
|
||||
w, req, Success,
|
||||
"Points awarded",
|
||||
"%d points for %s!", points, teamid,
|
||||
)
|
||||
}
|
||||
|
||||
func (ctx *Instance) answerHandler(w http.ResponseWriter, req *http.Request) {
|
||||
teamid := req.FormValue("id")
|
||||
category := req.FormValue("cat")
|
||||
|
@ -367,7 +304,6 @@ func (ctx *Instance) staticHandler(w http.ResponseWriter, req *http.Request) {
|
|||
func (ctx *Instance) BindHandlers(mux *http.ServeMux) {
|
||||
mux.HandleFunc(ctx.Base+"/", ctx.staticHandler)
|
||||
mux.HandleFunc(ctx.Base+"/register", ctx.registerHandler)
|
||||
mux.HandleFunc(ctx.Base+"/token", ctx.tokenHandler)
|
||||
mux.HandleFunc(ctx.Base+"/answer", ctx.answerHandler)
|
||||
mux.HandleFunc(ctx.Base+"/content/", ctx.contentHandler)
|
||||
mux.HandleFunc(ctx.Base+"/puzzles.json", ctx.puzzlesHandler)
|
||||
|
|
|
@ -31,7 +31,7 @@ func (pm *PuzzleMap) MarshalJSON() ([]byte, error) {
|
|||
return []byte(ret), nil
|
||||
}
|
||||
|
||||
func (ctx *Instance) generatePuzzleList() error {
|
||||
func (ctx *Instance) generatePuzzleList() {
|
||||
maxByCategory := map[string]int{}
|
||||
for _, a := range ctx.PointsLog() {
|
||||
if a.Points > maxByCategory[a.Category] {
|
||||
|
@ -43,7 +43,8 @@ func (ctx *Instance) generatePuzzleList() error {
|
|||
for catName, mb := range ctx.Categories {
|
||||
mf, err := mb.Open("map.txt")
|
||||
if err != nil {
|
||||
return err
|
||||
// File isn't in there
|
||||
continue
|
||||
}
|
||||
defer mf.Close()
|
||||
|
||||
|
@ -58,9 +59,11 @@ func (ctx *Instance) generatePuzzleList() error {
|
|||
|
||||
n, err := fmt.Sscanf(line, "%d %s", &pointval, &dir)
|
||||
if err != nil {
|
||||
return err
|
||||
log.Printf("Parsing map for %s: %v", catName, err)
|
||||
continue
|
||||
} else if n != 2 {
|
||||
return fmt.Errorf("Parsing map for %s: short read", catName)
|
||||
log.Printf("Parsing map for %s: short read", catName)
|
||||
continue
|
||||
}
|
||||
|
||||
pm = append(pm, PuzzleMap{pointval, dir})
|
||||
|
@ -78,13 +81,14 @@ func (ctx *Instance) generatePuzzleList() error {
|
|||
}
|
||||
|
||||
jpl, err := json.Marshal(ret)
|
||||
if err == nil {
|
||||
ctx.jPuzzleList = jpl
|
||||
if err != nil {
|
||||
log.Printf("Marshalling puzzles.js: %v", err)
|
||||
return
|
||||
}
|
||||
return err
|
||||
ctx.jPuzzleList = jpl
|
||||
}
|
||||
|
||||
func (ctx *Instance) generatePointsLog() error {
|
||||
func (ctx *Instance) generatePointsLog() {
|
||||
var ret struct {
|
||||
Teams map[string]string `json:"teams"`
|
||||
Points []*Award `json:"points"`
|
||||
|
@ -98,7 +102,7 @@ func (ctx *Instance) generatePointsLog() error {
|
|||
if !ok {
|
||||
teamName, err := ctx.TeamName(a.TeamId)
|
||||
if err != nil {
|
||||
teamName = "[unregistered]"
|
||||
teamName = "Rodney" // https://en.wikipedia.org/wiki/Rogue_(video_game)#Gameplay
|
||||
}
|
||||
teamNumber = nr
|
||||
teamNumbersById[a.TeamId] = teamNumber
|
||||
|
@ -108,10 +112,11 @@ func (ctx *Instance) generatePointsLog() error {
|
|||
}
|
||||
|
||||
jpl, err := json.Marshal(ret)
|
||||
if err == nil {
|
||||
ctx.jPointsLog = jpl
|
||||
if err != nil {
|
||||
log.Printf("Marshalling points.js: %v", err)
|
||||
return
|
||||
}
|
||||
return err
|
||||
ctx.jPointsLog = jpl
|
||||
}
|
||||
|
||||
// maintenance runs
|
||||
|
|
|
@ -28,9 +28,10 @@ p {
|
|||
form, pre {
|
||||
margin: 1em;
|
||||
}
|
||||
input {
|
||||
input, select {
|
||||
padding: 0.6em;
|
||||
margin: 0.2em;
|
||||
max-width: 30em;
|
||||
}
|
||||
nav {
|
||||
border: solid black 2px;
|
||||
|
@ -77,3 +78,12 @@ img {
|
|||
.cat5, .cat13, .cat21 {background-color: #e31a1c; color: white;}
|
||||
.cat6, .cat14, .cat22 {background-color: #fdbf6f; color: black;}
|
||||
.cat7, .cat15, .cat23 {background-color: #ff7f00; color: black;}
|
||||
|
||||
|
||||
#devel {
|
||||
background-color: #c88;
|
||||
color: black;
|
||||
}
|
||||
.kvpair {
|
||||
border: solid black 2px;
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
// Devel server addons
|
||||
|
||||
// devel_addin drops a bunch of development extensions into element e.
|
||||
// It will only modify stuff inside e.
|
||||
function devel_addin(obj, e) {
|
||||
let h = document.createElement("h2");
|
||||
e.appendChild(h);
|
||||
h.textContent = "Development Options";
|
||||
|
||||
let g = document.createElement("p");
|
||||
e.appendChild(g);
|
||||
g.innerText = "This section will not appear for participants."
|
||||
|
||||
let keys = Object.keys(obj);
|
||||
keys.sort();
|
||||
for (let key of keys) {
|
||||
switch (key) {
|
||||
case "body":
|
||||
continue;
|
||||
}
|
||||
|
||||
let d = document.createElement("div");
|
||||
e.appendChild(d);
|
||||
d.classList.add("kvpair");
|
||||
|
||||
let ktxt = document.createElement("span");
|
||||
d.appendChild(ktxt);
|
||||
ktxt.textContent = key;
|
||||
|
||||
let val = obj[key];
|
||||
if (Array.isArray(val)) {
|
||||
let vi = document.createElement("select");
|
||||
d.appendChild(vi);
|
||||
vi.multiple = true;
|
||||
for (let a of val) {
|
||||
let opt = document.createElement("option");
|
||||
vi.appendChild(opt);
|
||||
opt.innerText = a;
|
||||
}
|
||||
} else {
|
||||
let vi = document.createElement("input");
|
||||
d.appendChild(vi);
|
||||
vi.value = val;
|
||||
vi.disabled = true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,8 +4,6 @@
|
|||
<title>Welcome</title>
|
||||
<link rel="stylesheet" href="basic.css">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="icon" href="res/icon.svg" type="image/svg+xml"
|
||||
><link rel="icon" href="res/icon.png" type="image/png">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Welcome</h1>
|
||||
|
|
|
@ -4,20 +4,21 @@
|
|||
<title>Open Puzzles</title>
|
||||
<link rel="stylesheet" href="basic.css">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="icon" href="res/icon.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/icon.png" type="image/png">
|
||||
<meta charset="utf-8">
|
||||
<script>
|
||||
|
||||
function render(obj) {
|
||||
puzzlesElement = document.createElement('div');
|
||||
let cats = [];
|
||||
for (let cat in obj) {
|
||||
cats.push(cat);
|
||||
console.log(cat);
|
||||
}
|
||||
|
||||
// Create a sorted list of category names
|
||||
let cats = Object.keys(obj);
|
||||
cats.sort();
|
||||
|
||||
for (let cat of cats) {
|
||||
if (cat.startsWith("__")) {
|
||||
// Metadata or something
|
||||
continue;
|
||||
}
|
||||
let puzzles = obj[cat];
|
||||
|
||||
let pdiv = document.createElement('div');
|
||||
|
@ -27,6 +28,16 @@ function render(obj) {
|
|||
pdiv.appendChild(h);
|
||||
h.textContent = cat;
|
||||
|
||||
// Extras if we're running a devel server
|
||||
if (obj.__devel__) {
|
||||
var a = document.createElement('a');
|
||||
h.insertBefore(a, h.firstChild);
|
||||
a.textContent = "⬇️";
|
||||
a.href = "mothballer/" + cat;
|
||||
a.classList.add("mothball");
|
||||
a.title = "Download a compiled puzzle for this category";
|
||||
}
|
||||
|
||||
let l = document.createElement('ul');
|
||||
pdiv.appendChild(l);
|
||||
|
||||
|
@ -35,10 +46,11 @@ function render(obj) {
|
|||
var id = puzzle[1];
|
||||
|
||||
var i = document.createElement('li');
|
||||
i.textContent = " ";
|
||||
l.appendChild(i);
|
||||
i.textContent = " ";
|
||||
|
||||
if (points === 0) {
|
||||
// Sentry: there are no more puzzles in this category
|
||||
i.textContent = "✿";
|
||||
} else {
|
||||
var a = document.createElement('a');
|
||||
|
@ -55,16 +67,22 @@ function render(obj) {
|
|||
|
||||
function init() {
|
||||
fetch("puzzles.json")
|
||||
.then(function(resp) {
|
||||
.then(resp => {
|
||||
return resp.json();
|
||||
}).then(function(obj) {
|
||||
})
|
||||
.then(obj => {
|
||||
render(obj);
|
||||
}).catch(function(err) {
|
||||
})
|
||||
.catch(err => {
|
||||
console.log("Error", err);
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
<title>Puzzle</title>
|
||||
<link rel="stylesheet" href="basic.css">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="icon" href="res/icon.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/icon.png" type="image/png">
|
||||
<meta charset="utf-8">
|
||||
<script src="devel.js"></script>
|
||||
<script>
|
||||
function init() {
|
||||
let params = new URLSearchParams(window.location.search);
|
||||
|
@ -13,14 +13,30 @@ function init() {
|
|||
let points = params.get("points");
|
||||
let puzzleId = params.get("pid");
|
||||
|
||||
let puzzle = document.getElementById("puzzle");
|
||||
let base = "content/" + categoryName + "/" + puzzleId + "/";
|
||||
let fn = base + "puzzle.json";
|
||||
|
||||
fetch(fn)
|
||||
.then(function(resp) {
|
||||
fetch(base + "puzzle.json")
|
||||
.then(resp => {
|
||||
return resp.json();
|
||||
}).then(function(obj) {
|
||||
})
|
||||
.then(obj => {
|
||||
// Populate authors
|
||||
document.getElementById("authors").textContent = obj.authors.join(", ");
|
||||
|
||||
// If answers are provided, this is the devel server
|
||||
if (obj.answers) {
|
||||
devel_addin(obj, document.getElementById("devel"));
|
||||
}
|
||||
|
||||
// Load scripts
|
||||
for (let script of obj.scripts) {
|
||||
let st = document.createElement("script");
|
||||
document.head.appendChild(st);
|
||||
st.src = base + script;
|
||||
}
|
||||
|
||||
// List associated files
|
||||
for (let fn of obj.files) {
|
||||
let li = document.createElement("li");
|
||||
let a = document.createElement("a");
|
||||
|
@ -29,44 +45,36 @@ function init() {
|
|||
li.appendChild(a);
|
||||
document.getElementById("files").appendChild(li);
|
||||
}
|
||||
document.getElementById("puzzle").innerHTML = obj.body;
|
||||
}).catch(function(err) {
|
||||
console.log("Error", err);
|
||||
|
||||
// Prefix `base` to relative URLs in the puzzle body
|
||||
let doc = new DOMParser().parseFromString(obj.body, "text/html");
|
||||
for (let se of doc.querySelectorAll("[src],[href]")) {
|
||||
se.outerHTML = se.outerHTML.replace(/(src|href)="([^/]+)"/i, "$1=\"" + base + "$2\"");
|
||||
}
|
||||
|
||||
// Replace puzzle children with what's in `doc`
|
||||
Array.from(puzzle.childNodes).map(e => e.remove());
|
||||
Array.from(doc.body.childNodes).map(e => puzzle.appendChild(e));
|
||||
})
|
||||
.catch(err => {
|
||||
// Show error to the user
|
||||
Array.from(puzzle.childNodes).map(e => e.remove());
|
||||
let p = document.createElement("p");
|
||||
puzzle.appendChild(p);
|
||||
p.classList.add("Error");
|
||||
p.textContent = err;
|
||||
});
|
||||
|
||||
document.querySelector("body > h1").innerText = categoryName + " " + points
|
||||
document.title = categoryName + " " + points;
|
||||
document.querySelector("body > h1").innerText = document.title;
|
||||
document.querySelector("input[name=cat]").value = categoryName;
|
||||
document.querySelector("input[name=points]").value = points;
|
||||
|
||||
function mutated(mutationsList, observer) {
|
||||
for (let mutation of mutationsList) {
|
||||
if (mutation.type == 'childList') {
|
||||
for (let e of mutation.addedNodes) {
|
||||
//console.log(e);
|
||||
if (! e.querySelectorAll) { continue; }
|
||||
for (let se of e.querySelectorAll("[src],[href]")) {
|
||||
se.outerHTML = se.outerHTML.replace(/(src|href)="([^/]+)"/i, "$1=\"" + base + "$2\"")
|
||||
//console.log(se.outerHTML);
|
||||
}
|
||||
//console.log(e.querySelectorAll("[src]"));
|
||||
}
|
||||
//console.log(mutation.addedNodes);
|
||||
} else {
|
||||
console.log(mutation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let puzzle = document.getElementById("puzzle");
|
||||
let observerOptions = {
|
||||
childList: true,
|
||||
attributes: true,
|
||||
subtree: true,
|
||||
};
|
||||
window.observer = new MutationObserver(mutated);
|
||||
observer.observe(puzzle, observerOptions);
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -80,14 +88,14 @@ document.addEventListener("DOMContentLoaded", init);
|
|||
<input type="hidden" name="cat">
|
||||
<input type="hidden" name="points">
|
||||
Team ID: <input type="text" name="id"> <br>
|
||||
Answer: <input type="text" name="answer"> <br>
|
||||
Answer: <input type="text" name="answer" id="answer"> <br>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
<div id="devel"></div>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="puzzle-list.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
<li><a href="scoring.html">Scoring</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</body>
|
||||
|
|
|
@ -4,133 +4,121 @@
|
|||
<title>Scoreboard</title>
|
||||
<link rel="stylesheet" href="basic.css">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="icon" href="res/icon.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/icon.png" type="image/png">
|
||||
<script>
|
||||
function loadJSON(url, callback) {
|
||||
function loaded(e) {
|
||||
callback(e.target.response);
|
||||
function update(state) {
|
||||
let element = document.getElementById("scoreboard");
|
||||
let teamnames = state["teams"];
|
||||
let pointslog = state["points"];
|
||||
let highscore = {};
|
||||
let teams = {};
|
||||
|
||||
// Every machine that's displaying the scoreboard helpfully stores the last 20 values of
|
||||
// points.json for us, in case of catastrophe. Thanks, y'all!
|
||||
//
|
||||
// We have been doing some letiation on this "everybody backs up the server state" trick since 2009.
|
||||
// We have needed it 0 times.
|
||||
let pointshistory = JSON.parse(localStorage.getItem("pointshistory")) || [];
|
||||
if (pointshistory.length >= 20){
|
||||
pointshistory.shift();
|
||||
}
|
||||
pointshistory.push(pointslog);
|
||||
localStorage.setItem("pointshistory", JSON.stringify(pointshistory));
|
||||
|
||||
// Dole out points
|
||||
for (let i in pointslog) {
|
||||
let entry = pointslog[i];
|
||||
let timestamp = entry[0];
|
||||
let teamhash = entry[1];
|
||||
let category = entry[2];
|
||||
let points = entry[3];
|
||||
|
||||
let team = teams[teamhash] || {__hash__: teamhash};
|
||||
|
||||
// Add points to team's points for that category
|
||||
team[category] = (team[category] || 0) + points;
|
||||
|
||||
// Record highest score in a category
|
||||
highscore[category] = Math.max(highscore[category] || 0, team[category]);
|
||||
|
||||
teams[teamhash] = team;
|
||||
}
|
||||
|
||||
// Sort by team score
|
||||
function teamScore(t) {
|
||||
let score = 0;
|
||||
for (let category in highscore) {
|
||||
score += (t[category] || 0) / highscore[category];
|
||||
}
|
||||
return score;
|
||||
}
|
||||
function teamCompare(a, b) {
|
||||
return teamScore(a) - teamScore(b);
|
||||
}
|
||||
|
||||
// Figure out how to order each team on the scoreboard
|
||||
let winners = [];
|
||||
for (let i in teams) {
|
||||
winners.push(teams[i]);
|
||||
}
|
||||
winners.sort(teamCompare);
|
||||
winners.reverse();
|
||||
|
||||
// Clear out the element we're about to populate
|
||||
Array.from(element.childNodes).map(e => e.remove());
|
||||
|
||||
let maxWidth = 100 / Object.keys(highscore).length;
|
||||
for (let i in winners) {
|
||||
let team = winners[i];
|
||||
let row = document.createElement("div");
|
||||
let ncat = 0;
|
||||
for (let category in highscore) {
|
||||
let catHigh = highscore[category];
|
||||
let catTeam = team[category] || 0;
|
||||
let catPct = catTeam / catHigh;
|
||||
let width = maxWidth * catPct;
|
||||
|
||||
let bar = document.createElement("span");
|
||||
bar.classList.add("category");
|
||||
bar.classList.add("cat" + ncat);
|
||||
bar.style.width = width + "%";
|
||||
bar.textContent = category + ": " + catTeam;
|
||||
bar.title = bar.textContent;
|
||||
|
||||
row.appendChild(bar);
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
let te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamnames[team.__hash__];
|
||||
row.appendChild(te);
|
||||
|
||||
element.appendChild(row);
|
||||
}
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onload = loaded;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "json";
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function scoreboard(element, continuous) {
|
||||
function update(state) {
|
||||
var teamnames = state["teams"];
|
||||
var pointslog = state["points"];
|
||||
var pointshistory = JSON.parse(localStorage.getItem("pointshistory")) || [];
|
||||
if (pointshistory.length >= 20){
|
||||
pointshistory.shift();
|
||||
}
|
||||
pointshistory.push(pointslog);
|
||||
localStorage.setItem("pointshistory", JSON.stringify(pointshistory));
|
||||
var highscore = {};
|
||||
var teams = {};
|
||||
|
||||
// Dole out points
|
||||
for (var i in pointslog) {
|
||||
var entry = pointslog[i];
|
||||
var timestamp = entry[0];
|
||||
var teamhash = entry[1];
|
||||
var category = entry[2];
|
||||
var points = entry[3];
|
||||
|
||||
var team = teams[teamhash] || {__hash__: teamhash};
|
||||
|
||||
// Add points to team's points for that category
|
||||
team[category] = (team[category] || 0) + points;
|
||||
|
||||
// Record highest score in a category
|
||||
highscore[category] = Math.max(highscore[category] || 0, team[category]);
|
||||
|
||||
teams[teamhash] = team;
|
||||
}
|
||||
|
||||
// Sort by team score
|
||||
function teamScore(t) {
|
||||
var score = 0;
|
||||
|
||||
for (var category in highscore) {
|
||||
score += (t[category] || 0) / highscore[category];
|
||||
}
|
||||
// XXX: This function really shouldn't have side effects.
|
||||
t.__score__ = score;
|
||||
return score;
|
||||
}
|
||||
function teamCompare(a, b) {
|
||||
return teamScore(a) - teamScore(b);
|
||||
}
|
||||
|
||||
var winners = [];
|
||||
for (var i in teams) {
|
||||
winners.push(teams[i]);
|
||||
}
|
||||
if (winners.length == 0) {
|
||||
// No teams!
|
||||
return;
|
||||
}
|
||||
winners.sort(teamCompare);
|
||||
winners.reverse();
|
||||
|
||||
// Clear out the element we're about to populate
|
||||
while (element.lastChild) {
|
||||
element.removeChild(element.lastChild);
|
||||
}
|
||||
|
||||
// Populate!
|
||||
var topActualScore = winners[0].__score__;
|
||||
|
||||
// (100 / ncats) * (ncats / topActualScore);
|
||||
var maxWidth = 100 / topActualScore;
|
||||
for (var i in winners) {
|
||||
var team = winners[i];
|
||||
var row = document.createElement("div");
|
||||
var ncat = 0;
|
||||
for (var category in highscore) {
|
||||
var catHigh = highscore[category];
|
||||
var catTeam = team[category] || 0;
|
||||
var catPct = catTeam / catHigh;
|
||||
var width = maxWidth * catPct;
|
||||
|
||||
var bar = document.createElement("span");
|
||||
bar.classList.add("category");
|
||||
bar.classList.add("cat" + ncat);
|
||||
bar.style.width = width + "%";
|
||||
bar.textContent = category + ": " + catTeam;
|
||||
bar.title = bar.textContent;
|
||||
|
||||
row.appendChild(bar);
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
var te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamnames[team.__hash__];
|
||||
row.appendChild(te);
|
||||
|
||||
element.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
||||
function once() {
|
||||
loadJSON("points.json", update);
|
||||
}
|
||||
if (continuous) {
|
||||
setInterval(once, 60000);
|
||||
}
|
||||
once();
|
||||
function once() {
|
||||
fetch("points.json")
|
||||
.then(resp => {
|
||||
return resp.json();
|
||||
})
|
||||
.then(obj => {
|
||||
update(obj);
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
function init() {
|
||||
var sb = document.getElementById("scoreboard");
|
||||
scoreboard(sb, true);
|
||||
setInterval(once, 60000);
|
||||
once();
|
||||
}
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Redeem Token</title>
|
||||
<link rel="stylesheet" href="basic.css">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<script>
|
||||
function erpdert() {
|
||||
let vals = document.querySelector("[name=token]").value.split(":");
|
||||
document.querySelector("[name=cat]").value = vals[0];
|
||||
document.querySelector("[name=points]").value = vals[1];
|
||||
document.querySelector("[name=answer]").value = vals[2];
|
||||
}
|
||||
|
||||
function init() {
|
||||
document.querySelector("[name=token]").addEventListener("input", erpdert);
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Redeem Token</h1>
|
||||
<form action="token" method="post">
|
||||
<input type="hidden" name="cat">
|
||||
<input type="hidden" name="points">
|
||||
<input type="hidden" name="answer">
|
||||
Team ID: <input type="text" name="id"> <br>
|
||||
Token: <input type="text" name="token"> <br>
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="puzzle-list.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</body>
|
||||
</html>
|
100
www/credits.html
|
@ -1,100 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>The Credits</title>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<script>
|
||||
function shuf (ul) {
|
||||
var lists = document.getElementsByClassName("shuf");
|
||||
for (var l = 0; l < lists.length; l += 1) {
|
||||
var ul = lists[l];
|
||||
|
||||
for (var i = ul.children.length; i >= 0; i--) {
|
||||
ul.appendChild(ul.children[Math.random() * i | 0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function init() {
|
||||
shuf();
|
||||
setInterval(shuf, 2000);
|
||||
}
|
||||
|
||||
window.addEventListener("load", init);
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Credits</h1>
|
||||
|
||||
<section>
|
||||
<h2>Created By</h2>
|
||||
|
||||
<ul class="shuf">
|
||||
<!-- Added in order of date -->
|
||||
<li>Neale Pickett</li>
|
||||
<li>Aaron McPhall</li>
|
||||
<li>Ken S</li>
|
||||
<li>Russel Nolen</li>
|
||||
<li>Patrick Avery</li>
|
||||
<li>Kate Vajda</li>
|
||||
<li>Alex Brugh</li>
|
||||
<li>Paul Ferrell</li>
|
||||
<li>Jeremy Scott</li>
|
||||
<li>Danny Quist</li>
|
||||
<li>Adam Glasgall</li>
|
||||
<li>Curtis Hash</li>
|
||||
<li>Erin Ochoa</li>
|
||||
<li>William Phillips</li>
|
||||
<li>Jeremy Hefner</li>
|
||||
<li>James Wernicke</li>
|
||||
<li>Clark Taylor</li>
|
||||
<li>John Donaldson</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Should your name be here? Please remind me!
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Inspiration</h2>
|
||||
<ul class="shuf">
|
||||
<li>DC949</li>
|
||||
<li>Tube Warriors</li>
|
||||
<li>Sandia National Laboratories</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Thanks</h2>
|
||||
<p>
|
||||
This contest would not exist were it not for hundreds of
|
||||
thousands of lines of code from free software authors around the
|
||||
world, including:
|
||||
</p>
|
||||
<ul class="shuf">
|
||||
<li>Busybox</li>
|
||||
<li>Linux</li>
|
||||
<li>dnsmasq</li>
|
||||
<li>ngircd</li>
|
||||
<li>lua</li>
|
||||
</ul>
|
||||
</section>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="register.html">Register</a></li>
|
||||
<li><a href="puzzles.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<section id="sponsors">
|
||||
<img src="images/logo0.png" alt="">
|
||||
<img src="images/logo1.png" alt="">
|
||||
<img src="images/logo2.png" alt="">
|
||||
<img src="images/logo3.png" alt="">
|
||||
<img src="images/logo4.png" alt="">
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
|
@ -1,34 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" href="res/style.css">
|
||||
<link rel="icon" href="res/luna-moth.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/luna-moth.png" type="image/png">
|
||||
|
||||
<script src="res/common.js"></script>
|
||||
<script src="res/terminal.js"></script>
|
||||
<script src="res/overview.js"></script>
|
||||
<script src="res/messages.js"></script>
|
||||
<script src="res/puzzles.js"></script>
|
||||
<script src="res/main.js"></script>
|
||||
<script src="res/md5.min.js" async></script>
|
||||
|
||||
<title>MOTH Dashboard</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="overview" class="terminal">
|
||||
<h1>Monarch Of The Hill</h1>
|
||||
<p>Brought to you by dirtbags.net</p>
|
||||
</div>
|
||||
<div id="messages" class="terminal">
|
||||
If you turn on JavaScript this will look a lot cooler.
|
||||
</div>
|
||||
<div id="puzzles" class="terminal">
|
||||
🌮 🌮 🌮 🌮 🌮 🌮 🌮 🌮
|
||||
</div>
|
||||
<div id="main" class="terminal">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,14 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'MicroFLF';
|
||||
src: url('MicroFLF.ttf');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'MicroFLF';
|
||||
src: url('MicroFLF-Bold.ttf');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'Maven Pro';
|
||||
src: url('maven_pro_black-webfont.eot');
|
||||
src: url('maven_pro_black-webfont.eot?#iefix') format('eot'),
|
||||
url('maven_pro_black-webfont.woff') format('woff'),
|
||||
url('maven_pro_black-webfont.ttf') format('truetype'),
|
||||
url('maven_pro_black-webfont.svg#webfontXhB2DgBK') format('svg');
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Maven Pro';
|
||||
src: url('maven_pro_medium-webfont.eot');
|
||||
src: url('maven_pro_medium-webfont.eot?#iefix') format('eot'),
|
||||
url('maven_pro_medium-webfont.woff') format('woff'),
|
||||
url('maven_pro_medium-webfont.ttf') format('truetype'),
|
||||
url('maven_pro_medium-webfont.svg#webfontNj5iy4Dl') format('svg');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Maven Pro';
|
||||
src: url('maven_pro_bold-webfont.eot');
|
||||
src: url('maven_pro_bold-webfont.eot?#iefix') format('eot'),
|
||||
url('maven_pro_bold-webfont.woff') format('woff'),
|
||||
url('maven_pro_bold-webfont.ttf') format('truetype'),
|
||||
url('maven_pro_bold-webfont.svg#webfontNOU7iUTL') format('svg');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Maven Pro';
|
||||
src: url('maven_pro_regular-webfont.eot');
|
||||
src: url('maven_pro_regular-webfont.eot?#iefix') format('eot'),
|
||||
url('maven_pro_regular-webfont.woff') format('woff'),
|
||||
url('maven_pro_regular-webfont.ttf') format('truetype'),
|
||||
url('maven_pro_regular-webfont.svg#webfontOM8fITNz') format('svg');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
|
@ -1,245 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
This is a custom SVG webfont generated by Font Squirrel.
|
||||
Copyright : Copyright c 2011 by Vissol Ltd All rights reserved
|
||||
Designer : Joe Prince
|
||||
Foundry : Joe Prince
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="webfontXhB2DgBK" horiz-adv-x="1159" >
|
||||
<font-face units-per-em="2048" ascent="1638" descent="-410" />
|
||||
<missing-glyph horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="	" horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="!" horiz-adv-x="882" d="M297 0v262h317v-262h-317zM588 391h-264l-45 975h354z" />
|
||||
<glyph unicode=""" horiz-adv-x="899" d="M166 1384h254l-35 -411h-182zM477 1384h254l-35 -411h-182z" />
|
||||
<glyph unicode="#" horiz-adv-x="1288" d="M1135 676h-154q-4 -27 -20.5 -111t-22.5 -131h143v-186h-174q-6 -37 -19.5 -111t-17.5 -98h-196l37 209h-219q-8 -43 -35 -209h-197l39 209h-147v186h176q4 27 19 110l24 132h-164v184h194l37 209h197l-37 -209h217q33 170 37 209h197l-39 -209h125v-184zM745 434l39 242 h-217q-6 -47 -22.5 -131t-20.5 -111h221z" />
|
||||
<glyph unicode="$" horiz-adv-x="1212" d="M1128 387q0 -164 -118.5 -272.5t-298.5 -128.5v-207h-125v203q-250 12 -422 133v329q190 -158 422 -157v243q-94 23 -154.5 45.5t-134.5 68.5t-112 123t-38 185q0 193 123 299.5t316 120.5v217h125v-215q168 -14 311 -92v-307q-162 96 -311 98v-244q88 -25 148.5 -50 t129 -73.5t104 -129t35.5 -189.5zM457 958q0 -57 129 -96v203q-129 -23 -129 -107zM711 299q121 27 120 102q0 59 -120 99v-201z" />
|
||||
<glyph unicode="%" horiz-adv-x="1890" d="M436 1360q291 0 291 -377t-291 -377q-289 0 -289 377t289 377zM436 838q84 0 84 145q0 88 -22.5 116.5t-61.5 28.5q-82 0 -82 -145t82 -145zM1430 760q291 0 290.5 -377t-290.5 -377q-289 0 -289 377t289 377zM1430 238q82 0 81.5 145t-81.5 145q-84 0 -84 -145t84 -145z M1245 1366h234l-858 -1366h-234z" />
|
||||
<glyph unicode="&" horiz-adv-x="1337" d="M1055 305l254 -305h-308l-92 117q-147 -133 -352 -133q-115 0 -204 41t-139 105.5t-75.5 133t-25.5 133.5q0 113 45 207t192 189q0 2 -9 13l-15.5 19.5t-17.5 24.5t-19 30.5t-17.5 36t-15.5 41t-10 43t-4 46.5q0 137 86 232t247 95q160 0 249 -91t89 -239 q0 -111 -47 -179t-161 -140l22 -28l59 -69l107 -126l31 131h235q-32 -195 -104 -328zM577.5 1161q-45.5 0 -77 -32.5t-31.5 -79.5q0 -41 82 -144q82 47 108.5 80t26.5 72q0 43 -31.5 73.5t-77 30.5zM561 205q119 0 207 84l-268 323q-57 -31 -92 -63.5t-48.5 -64t-15.5 -48 t-2 -45.5q0 -23 9 -51.5t32 -60t69 -53t109 -21.5z" />
|
||||
<glyph unicode="'" horiz-adv-x="583" d="M166 1384h254l-35 -411h-182z" />
|
||||
<glyph unicode="(" horiz-adv-x="796" d="M659 1483q-211 -416 -210 -856q0 -436 210 -858h-258q-211 422 -211 858q0 440 211 856h258z" />
|
||||
<glyph unicode=")" horiz-adv-x="796" d="M133 1483h258q211 -416 211 -856q0 -436 -211 -858h-258q211 422 211 858q0 440 -211 856z" />
|
||||
<glyph unicode="*" horiz-adv-x="845" d="M684 1247l-156 -57l156 -57l-78 -140l-108 80l10 -131h-160l12 131l-110 -80l-78 140l158 57l-158 57l78 139l110 -79l-12 131h160l-10 -131l108 79z" />
|
||||
<glyph unicode="+" horiz-adv-x="1128" d="M678 985v-258h256v-229h-256v-256h-229v256h-259v229h259v258h229z" />
|
||||
<glyph unicode="," horiz-adv-x="751" d="M303 172h285l-197 -401h-239z" />
|
||||
<glyph unicode="-" horiz-adv-x="950" d="M162 754h624v-240h-624v240z" />
|
||||
<glyph unicode="." horiz-adv-x="811" d="M555 283v-283h-295v283h295z" />
|
||||
<glyph unicode="/" horiz-adv-x="948" d="M723 1548h256l-754 -1749h-254z" />
|
||||
<glyph unicode="0" horiz-adv-x="1345" d="M672 1384q553 0 553 -700t-553 -700t-553 700t553 700zM672 289q90 0 146 83t56 312q0 399 -202 399q-199 0 -199 -399q0 -229 55.5 -312t143.5 -83z" />
|
||||
<glyph unicode="1" horiz-adv-x="1040" d="M211 1186l285 180h288v-1366h-352v975l-221 -135v346z" />
|
||||
<glyph unicode="2" horiz-adv-x="1269" d="M1085 948q0 -158 -116.5 -325.5t-272.5 -305.5h398v-317h-936v279q580 434 579 643q0 61 -45 99t-133 38q-180 0 -391 -168v356q223 137 424 137q254 0 373.5 -128t119.5 -308z" />
|
||||
<glyph unicode="3" horiz-adv-x="1228" d="M823 741q121 -35 195 -131t74 -227q0 -117 -49.5 -199t-133.5 -124t-170 -59t-184 -17q-190 0 -416 114v338q229 -137 402 -137q88 0 144 41t56 102.5t-47 105.5t-159 44h-224v254h228q72 0 107.5 32.5t35.5 79.5q0 49 -55.5 76t-126.5 27h-28h-30q-8 0 -28.5 -1 t-32.5 -3t-33.5 -5t-40 -8.5l-42 -12.5t-49.5 -17t-52 -23v297q182 96 375 96q88 0 170 -18t158.5 -58t122.5 -117t46 -181q0 -96 -65.5 -174.5t-147.5 -94.5z" />
|
||||
<glyph unicode="4" horiz-adv-x="1265" d="M985 1366v-719h164v-299h-164v-348h-350v348h-555v270l598 748h307zM635 647v240l-180 -240h180z" />
|
||||
<glyph unicode="5" horiz-adv-x="1280" d="M631 938q229 0 356 -125t127 -385q0 -127 -41 -218t-112.5 -138t-151.5 -67.5t-174 -20.5q-213 0 -442 114v334q213 -135 395 -135q88 0 132 49t44 113q0 82 -45 124t-117 42q-147 4 -246 -60l-194 142l74 661h806v-315h-499l-11 -119q31 4 99 4z" />
|
||||
<glyph unicode="6" horiz-adv-x="1234" d="M645 901q96 0 170 -15.5t148.5 -55t115.5 -129t41 -220.5q0 -90 -27.5 -175t-85 -158.5t-158.5 -118.5t-233 -45q-506 0 -505 649q0 193 49 338t117.5 221t163 122t165 58t142.5 12q176 0 278 -49v-297q-145 45 -250 45q-115 0 -211 -51t-110 -158q67 27 190 27zM616 287 q61 0 98.5 45t44.5 83t7 68q0 78 -38 137.5t-116 59.5q-98 0 -151 -23q-4 -180 42.5 -275t112.5 -95z" />
|
||||
<glyph unicode="7" horiz-adv-x="1226" d="M135 1016v350h1004v-258l-537 -1108h-407l495 1016h-555z" />
|
||||
<glyph unicode="8" horiz-adv-x="1261" d="M874 735q113 -31 193 -123t80 -215q0 -205 -135 -309t-379 -104t-379 104.5t-135 308.5q0 123 78.5 215.5t193.5 122.5q-88 25 -153.5 98.5t-65.5 174.5q0 377 461 376q459 0 459 -376q0 -100 -65 -175t-153 -98zM633 1096q-57 0 -88 -37t-31 -80q0 -53 37 -83t82 -30 q43 0 80 30t37 83q0 43 -31 80t-86 37zM633 272q78 0 118 48.5t40 121.5q0 51 -41 93.5t-117 42.5q-78 0 -119 -42t-41 -94q0 -74 40 -122t120 -48z" />
|
||||
<glyph unicode="9" horiz-adv-x="1259" d="M586 467q-96 0 -170 15.5t-148.5 55.5t-115.5 129t-41 220q0 90 27.5 175t85 158.5t158.5 118.5t232 45q506 0 506 -649q0 -193 -49 -338t-117.5 -221t-163 -122t-165 -58t-142.5 -12q-176 0 -278 49v297q145 -45 250 -45q115 0 211 51t110 158q-67 -27 -190 -27z M614 1081q-61 0 -98 -45t-44 -83t-7 -68q0 -78 38 -137.5t115 -59.5q98 0 152 23q4 180 -43 275t-113 95z" />
|
||||
<glyph unicode=":" horiz-adv-x="868" d="M575 952v-282h-294v282h294zM575 354v-282h-294v282h294z" />
|
||||
<glyph unicode=";" horiz-adv-x="913" d="M317 172h285l-196 -401h-240zM604 952v-282h-295v282h295z" />
|
||||
<glyph unicode="<" horiz-adv-x="1368" d="M1108 1024v-279l-504 -196l504 -199v-278l-862 383v186z" />
|
||||
<glyph unicode="=" horiz-adv-x="1306" d="M250 524h805v-239h-805v239zM250 938h805v-240h-805v240z" />
|
||||
<glyph unicode=">" horiz-adv-x="1351" d="M238 745v279l862 -383v-186l-862 -383v278l503 199z" />
|
||||
<glyph unicode="?" horiz-adv-x="1075" d="M940 985q0 -70 -22.5 -126t-56.5 -92l-73 -74l-72 -72q-34 -35 -56.5 -88.5t-22.5 -118.5v-21h-281v27q0 104 31 184t75 127t89 86t75.5 81t30.5 89q0 45 -15 76t-46 43t-58.5 16t-66.5 4q-180 0 -307 -102v262q59 41 155.5 68.5t196.5 27.5q115 0 200 -33.5t132 -92 t69.5 -126t22.5 -145.5zM338 0v262h317v-262h-317z" />
|
||||
<glyph unicode="@" horiz-adv-x="1869" d="M1038 1233q106 0 220 -38t220.5 -112.5t175 -211t68.5 -308.5q0 -207 -92 -362.5t-268 -155.5q-68 0 -114 41t-64 90q-31 -57 -103.5 -94t-175.5 -37q-156 0 -246 70.5t-90 193.5q0 53 17.5 100.5t63.5 95.5t143.5 76.5t238.5 28.5q35 0 105 -4q-2 66 -35 99.5t-129 33.5 q-162 0 -285 -45l29 178q168 53 274 54q340 0 340 -308q0 -49 -15.5 -151t-15.5 -160q0 -123 82 -123q70 0 139.5 99.5t69.5 279.5q0 162 -88 288t-213 186.5t-258 60.5q-287 0 -509 -218t-222 -513q0 -125 44 -226.5t107.5 -158t142.5 -94.5t138.5 -51t102.5 -13 q258 0 469 104l-23 -149q-184 -86 -444 -86q-106 0 -217 38t-216.5 113.5t-172 213t-66.5 315.5q0 182 79 346t203.5 274.5t280 175t309.5 64.5zM905 242q111 0 154 46t53 158q-27 2 -80 3q-266 0 -266 -136q0 -71 139 -71z" />
|
||||
<glyph unicode="A" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424z" />
|
||||
<glyph unicode="B" horiz-adv-x="1349" d="M975 719q274 -78 274 -342q0 -377 -567 -377h-504v1366h463q541 0 541 -383q0 -66 -21.5 -116t-59.5 -79.5t-64.5 -43t-61.5 -25.5zM530 1079v-248h181q49 0 89 31t40 84q0 70 -46 101.5t-104 31.5h-160zM731 289h8q69 0 117 36q51 38 51 113.5t-57 110.5t-125 35h-195 v-295h201z" />
|
||||
<glyph unicode="C" horiz-adv-x="1314" d="M786 1079q-141 0 -225 -86t-84 -309t84 -309t225 -86q213 0 418 98v-305q-242 -96 -438 -96q-123 0 -226.5 29.5t-201.5 101t-155.5 216t-57.5 351.5t57.5 351.5t155.5 216t201.5 101t226.5 29.5q197 0 438 -96v-305q-205 98 -418 98z" />
|
||||
<glyph unicode="D" horiz-adv-x="1443" d="M670 1366q317 0 483 -174t166 -510q0 -334 -166 -508t-483 -174h-492v1366h492zM670 289q297 0 297 393q0 397 -297 397h-140v-790h140z" />
|
||||
<glyph unicode="E" horiz-adv-x="1247" d="M1130 1079h-600v-252h521v-288h-521v-250h600v-289h-952v1366h952v-287z" />
|
||||
<glyph unicode="F" horiz-adv-x="1187" d="M1106 1079h-576v-276h498v-289h-498v-514h-352v1366h928v-287z" />
|
||||
<glyph unicode="G" horiz-adv-x="1427" d="M752 807h524v-690q-223 -131 -510 -131q-96 0 -180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293q0 207 57.5 351.5t155.5 216t201.5 101t226.5 29.5q244 0 471 -102v-283q-207 84 -418 84q-344 0 -344 -395q0 -223 90 -309t242 -86q119 0 188 30v226h-243v262z" />
|
||||
<glyph unicode="H" horiz-adv-x="1503" d="M971 1366h352v-1366h-352v539h-439v-539h-352v1366h352v-539h439v539z" />
|
||||
<glyph unicode="I" horiz-adv-x="708" d="M532 0h-352v1366h352v-1366z" />
|
||||
<glyph unicode="J" horiz-adv-x="1060" d="M514 1366h352v-889q0 -123 -32.5 -215t-79.5 -143t-114 -83t-122 -41t-115 -9q-176 0 -344 106v326q141 -129 293 -129q72 0 117 41t45 125v911z" />
|
||||
<glyph unicode="K" horiz-adv-x="1505" d="M1419 0h-444l-348 532l-97 -108v-424h-352v1366h352v-481l375 481h475l-536 -594z" />
|
||||
<glyph unicode="L" horiz-adv-x="1179" d="M530 317h607v-317h-959v1366h352v-1049z" />
|
||||
<glyph unicode="M" horiz-adv-x="1695" d="M1169 1366h347v-1366h-353v846l-315 -453l-316 453v-846h-352v1366h346l322 -465z" />
|
||||
<glyph unicode="N" horiz-adv-x="1619" d="M1085 1366h353v-1366h-348l-560 813v-813h-352v1366h352l555 -819v819z" />
|
||||
<glyph unicode="O" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86z" />
|
||||
<glyph unicode="P" horiz-adv-x="1337" d="M729 1366q248 0 385 -126t137 -353q0 -229 -137 -355t-385 -126h-201v-406h-352v1366h553zM696 696q106 0 155.5 56.5t49.5 134.5q0 76 -49 134t-156 58h-168v-383h168z" />
|
||||
<glyph unicode="Q" horiz-adv-x="1529" d="M1407 684q0 -604 -494 -684q8 -162 213 -162v-227q-500 0 -505 387q-496 80 -496 686q0 166 39 293t101.5 201.5t149.5 122t171 63.5t180 16t180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293zM766 289q131 0 210 86t79 309t-79 309t-210 86t-210 -86t-79 -309 t79 -309t210 -86z" />
|
||||
<glyph unicode="R" horiz-adv-x="1396" d="M993 510l330 -510h-393l-254 457h-146v-457h-352v1366h539q250 0 400.5 -116.5t150.5 -327.5q0 -162 -75 -266.5t-200 -145.5zM530 721h209q72 0 124 50t52 128q0 80 -52 130t-124 50h-209v-358z" />
|
||||
<glyph unicode="S" horiz-adv-x="1232" d="M633 1378q195 0 368 -94v-307q-166 98 -317 98q-80 0 -142.5 -26.5t-62.5 -87.5q0 -39 46 -65t117 -39t151.5 -43t151.5 -73t117 -133t46 -219q0 -180 -143.5 -292.5t-348.5 -112.5q-281 0 -473 133v329q190 -158 422 -157q78 0 134.5 29.5t56.5 84.5q0 37 -35 63 t-90.5 41l-122 31.5t-134 45t-122.5 70.5t-90 119t-35 181q0 211 145.5 317.5t360.5 106.5z" />
|
||||
<glyph unicode="T" horiz-adv-x="1191" d="M25 1366h1142v-319h-397v-1047h-352v1047h-393v319z" />
|
||||
<glyph unicode="U" horiz-adv-x="1533" d="M993 1366h353v-778q0 -287 -154 -444.5t-430.5 -157.5t-430 157.5t-153.5 444.5v778h352v-819q0 -131 56.5 -194.5t175.5 -63.5t175 63.5t56 194.5v819z" />
|
||||
<glyph unicode="V" horiz-adv-x="1413" d="M707 399l305 967h377l-521 -1366h-319l-524 1366h376z" />
|
||||
<glyph unicode="W" horiz-adv-x="2045" d="M1653 1366h368l-440 -1366h-321l-236 782l-236 -782h-321l-440 1366h368l234 -862l243 862h304l243 -862z" />
|
||||
<glyph unicode="X" horiz-adv-x="1443" d="M1427 0h-430l-288 410l-289 -410h-395l485 692l-475 674h430l258 -369l260 369h403l-462 -653z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1492" d="M1034 1366h428l-542 -791v-575h-353v575l-542 791h428l290 -520z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1337" d="M1186 1081l-598 -772h598v-309h-1053v291l617 762h-611v313h1047v-285z" />
|
||||
<glyph unicode="[" horiz-adv-x="849" d="M471 1178v-1168h209v-248h-436v1663h436v-247h-209z" />
|
||||
<glyph unicode="\" horiz-adv-x="880" d="M-76 1548h256l752 -1749h-254z" />
|
||||
<glyph unicode="]" horiz-adv-x="849" d="M381 10v1168h-209v247h436v-1663h-436v248h209z" />
|
||||
<glyph unicode="^" horiz-adv-x="1210" d="M676 1413l289 -455h-230l-131 244l-131 -244h-227l282 455h148z" />
|
||||
<glyph unicode="_" horiz-adv-x="1118" d="M0 -49h1118v-209h-1118v209z" />
|
||||
<glyph unicode="`" horiz-adv-x="571" d="M332 1393l127 -240h-176l-191 240h240z" />
|
||||
<glyph unicode="a" horiz-adv-x="1142" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82z" />
|
||||
<glyph unicode="b" horiz-adv-x="1230" d="M643 1034q223 0 344 -133t121 -383q0 -535 -504 -534q-137 0 -229 30.5t-136 87t-61.5 114.5t-17.5 132v1065h350v-383q29 4 133 4zM618 213q72 0 105 90t33 227q0 133 -45 209t-133 76q-18 0 -68 -4v-524q0 -29 26.5 -51.5t81.5 -22.5z" />
|
||||
<glyph unicode="c" horiz-adv-x="993" d="M670 768q-90 0 -144.5 -64.5t-54.5 -193.5t54.5 -193.5t144.5 -64.5q119 0 258 63v-262q-143 -70 -322 -69q-236 0 -361.5 136t-125.5 390t126 390t361 136q178 0 322 -69v-262q-139 63 -258 63z" />
|
||||
<glyph unicode="d" horiz-adv-x="1222" d="M594 1034q104 0 133 -4v383h350v-1065q0 -74 -17.5 -132t-61.5 -114.5t-136 -87t-229 -30.5q-504 0 -504 534q0 250 121 383t344 133zM618 213q55 0 82 22.5t27 51.5v524q-49 4 -68 4q-88 0 -133 -75.5t-45 -209.5q0 -137 32.5 -227t104.5 -90z" />
|
||||
<glyph unicode="e" horiz-adv-x="1169" d="M1065 541q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -402 -106q-68 0 -129 11t-128.5 46t-115.5 89t-80 149.5t-32 220.5q0 244 113.5 390t355.5 146q229 0 347 -144t118 -353zM485 641h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121 z" />
|
||||
<glyph unicode="f" horiz-adv-x="776" d="M631 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-207v-774h-352v774h-141v248h145q1 424 404 424z" />
|
||||
<glyph unicode="g" horiz-adv-x="1153" d="M618 1036q117 0 202 -30.5t128 -84t62.5 -112.5t19.5 -131v-637q0 -51 -10 -102.5t-42 -115t-82 -110.5t-139 -79.5t-204 -32.5q-156 0 -322 53v250q115 -66 252 -66q102 0 145.5 48t49.5 130q-53 -4 -98 -4q-211 0 -332 131t-121 371q-1 522 491 522zM680 225v490 q0 80 -80 80q-57 0 -89 -81t-32 -204q0 -127 40 -209t110 -82q24 0 51 6z" />
|
||||
<glyph unicode="h" horiz-adv-x="1316" d="M733 1036q213 0 333 -117.5t120 -316.5v-602h-352v657q0 113 -181 113q-55 0 -94 -14v-756h-352v1411h352v-387q74 12 174 12z" />
|
||||
<glyph unicode="i" horiz-adv-x="735" d="M549 0h-352v1022h352v-1022zM553 1139h-360v268h360v-268z" />
|
||||
<glyph unicode="j" horiz-adv-x="667" d="M174 1022h352v-1008q0 -119 -40 -201.5t-114.5 -126.5t-162.5 -62.5t-203 -18.5v254q168 0 168 125v1038zM530 1139h-360v268h360v-268z" />
|
||||
<glyph unicode="k" horiz-adv-x="1318" d="M530 293v-293h-352v1405h352v-631l215 248h451l-416 -451l461 -571h-426l-250 330z" />
|
||||
<glyph unicode="l" horiz-adv-x="761" d="M559 0h-352v1411h352v-1411z" />
|
||||
<glyph unicode="m" horiz-adv-x="1939" d="M1313 1036q215 0 337 -110.5t122 -323.5v-602h-353v616q0 158 -141 158q-80 0 -141 -20q27 -80 26 -152v-602h-352v621q0 150 -133 149q-55 0 -123 -18v-752h-352v930l14 6l42 15l60.5 20.5t78.5 23t92.5 20.5t105.5 15t113 6q147 0 249 -59q175 59 355 59z" />
|
||||
<glyph unicode="n" horiz-adv-x="1325" d="M686 1036q217 0 344 -115.5t127 -318.5v-602h-352v657q0 31 -8.5 51.5t-48 41t-115.5 20.5q-55 0 -103 -12v-758h-352v913q246 123 508 123z" />
|
||||
<glyph unicode="o" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270z" />
|
||||
<glyph unicode="p" horiz-adv-x="1232" d="M653 -14q-104 0 -133 4v-369h-350v1051q0 74 17.5 132t61.5 114.5t136 87t229 30.5q504 0 504 -534q0 -250 -121 -383t-344 -133zM629 807q-55 0 -82 -22.5t-27 -51.5v-524q49 -4 68 -4q88 0 133 75.5t45 208.5q0 137 -32.5 227.5t-104.5 90.5z" />
|
||||
<glyph unicode="q" horiz-adv-x="1228" d="M580 -14q-223 0 -344 133t-121 383q0 535 503 534q137 0 229.5 -30.5t136.5 -87t61.5 -115t17.5 -131.5v-1051h-350v369q-29 -4 -133 -4zM604 807q-72 0 -104.5 -90t-32.5 -228q0 -133 45 -208.5t133 -75.5q18 0 68 4v524q0 29 -27 51.5t-82 22.5z" />
|
||||
<glyph unicode="r" horiz-adv-x="813" d="M164 922q264 109 584 116v-295q-127 -2 -232 -18v-725h-352v922z" />
|
||||
<glyph unicode="s" horiz-adv-x="962" d="M498 1036q156 0 293 -84v-233q-133 74 -236 74q-111 0 -111 -70q0 -20 45.5 -40.5t110 -46.5t128 -61.5t108.5 -105.5t45 -164q0 -141 -113 -230t-293 -89q-190 0 -346 100v272q160 -125 309 -125q92 0 92 56q0 27 -45 48t-109.5 45t-130 57.5t-110.5 99t-45 155.5 q0 166 115 254t293 88z" />
|
||||
<glyph unicode="t" horiz-adv-x="839" d="M754 786h-213v-495q0 -23 18.5 -39t44.5 -16q63 0 150 51v-252q-88 -49 -205 -49q-178 0 -269.5 94t-91.5 264v442h-139v236h139v303h353v-303h213v-236z" />
|
||||
<glyph unicode="u" horiz-adv-x="1280" d="M770 1022h352v-561q0 -475 -475 -475t-475 475v561h352v-623q0 -150 123 -149.5t123 149.5v623z" />
|
||||
<glyph unicode="v" horiz-adv-x="1224" d="M782 1022h377l-391 -1022h-311l-391 1022h374l170 -629z" />
|
||||
<glyph unicode="w" horiz-adv-x="1763" d="M1307 1022h372l-362 -1022h-309l-127 459l-127 -459h-310l-362 1022h373l133 -616l162 616h262l162 -616z" />
|
||||
<glyph unicode="x" horiz-adv-x="1249" d="M1159 1022l-350 -479l387 -543h-416l-172 252l-166 -252h-389l363 518l-353 504h414l148 -207l145 207h389z" />
|
||||
<glyph unicode="y" horiz-adv-x="1169" d="M737 1022h363l-373 -1002q-90 -231 -177 -327t-212 -96q-133 0 -223 43v256q70 -25 135 -25q47 0 92 56.5t78 170.5l-357 924h365l156 -588z" />
|
||||
<glyph unicode="z" horiz-adv-x="1030" d="M909 737l-381 -444h381v-293h-815v289l424 461h-414v272h805v-285z" />
|
||||
<glyph unicode="{" horiz-adv-x="804" d="M530 823q0 -94 -56 -147t-138 -72q82 -18 138 -71.5t56 -147.5v-238q0 -45 3.5 -67.5t27 -45t68.5 -22.5h45v-235h-62q-162 0 -242.5 90t-80.5 235v271q0 41 -25.5 69.5t-50.5 36.5l-27 6v238q4 0 11.5 2t25 10t30.5 19.5t24.5 33t11.5 48.5v270q0 145 81 235.5t242 90.5 h62v-236h-45q-45 0 -68.5 -22.5t-27 -45t-3.5 -67.5v-238z" />
|
||||
<glyph unicode="|" horiz-adv-x="1005" d="M649 -203h-270v1569h270v-1569z" />
|
||||
<glyph unicode="}" horiz-adv-x="804" d="M299 823v238q0 45 -3 67.5t-26.5 45t-68.5 22.5h-45v236h61q162 0 243 -90.5t81 -235.5v-270q0 -41 25.5 -70t51.5 -37l25 -6v-238q-4 0 -11 -2t-24.5 -10t-31 -19.5t-24.5 -33t-11 -47.5v-271q0 -145 -81 -235t-243 -90h-61v235h45q45 0 68.5 22.5t26.5 45t3 67.5v238 q0 94 56.5 147.5t138.5 71.5q-82 18 -138.5 71.5t-56.5 147.5z" />
|
||||
<glyph unicode="~" horiz-adv-x="1071" d="M870 496q-57 -68 -127.5 -74t-138.5 23l-135 61q-68 31 -139.5 24.5t-128.5 -73.5v186q57 68 128.5 74t139.5 -25l135 -60q68 -30 138.5 -24t127.5 74v-186z" />
|
||||
<glyph unicode="¡" horiz-adv-x="882" d="M606 1022v-262h-317v262h317zM315 631h265l45 -975h-355z" />
|
||||
<glyph unicode="¢" horiz-adv-x="1007" d="M926 877q-90 43 -162 55v-500q70 14 162 55v-262q-74 -35 -162 -53v-172h-131v156h-29q-236 0 -361.5 136t-125.5 390t126 390t361 136h29v158h131v-174q90 -16 162 -53v-262zM469 682q0 -115 45 -178.5t119 -75.5v510q-164 -29 -164 -256z" />
|
||||
<glyph unicode="£" horiz-adv-x="1153" d="M739 1114q-90 0 -144 -35t-54 -104v-154h340v-268h-340v-211q266 -121 497 33v-297q-82 -76 -181 -90.5t-192 11.5l-188 51q-94 26 -194.5 11.5t-182.5 -92.5v307q80 55 158 74v203h-158v268h158v168q0 162 105.5 277.5t328.5 115.5q162 0 346 -106v-281 q-141 119 -299 119z" />
|
||||
<glyph unicode="¥" horiz-adv-x="1492" d="M1475 1366l-408 -594h137v-201h-272v-155h272v-201h-272v-215h-352v215h-273v201h273v155h-273v201h137l-407 594h428l291 -520l291 520h428z" />
|
||||
<glyph unicode="§" horiz-adv-x="1247" d="M1126 647q0 -61 -48 -100t-94 -50.5t-93 -13.5q49 -27 74.5 -87t25.5 -122q0 -137 -119.5 -213.5t-328.5 -76.5q-213 0 -410 131v276q172 -154 363 -153q66 0 120 17t54 58q0 27 -56.5 49.5t-136.5 46t-158.5 56.5t-135 95.5t-56.5 146.5q0 98 91 145t192 49 q-43 4 -95.5 60.5t-52.5 121.5q0 86 39 148.5t106.5 94.5t141.5 45t160 13q180 0 362 -104v-248q-160 92 -311 92q-170 0 -170 -80q0 -31 84 -63.5t184 -62t184 -100.5t84 -171zM721 596q78 14 78 45q0 18 -49.5 38.5t-123 43t-89.5 29.5q-84 -10 -84 -37q0 -18 58 -43 t210 -76z" />
|
||||
<glyph unicode="¨" horiz-adv-x="899" d="M141 1139v223h246v-223h-246zM489 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="©" horiz-adv-x="1593" d="M797 1382q291 0 495.5 -204.5t204.5 -495.5q0 -289 -205 -493.5t-495 -204.5q-289 0 -494 204.5t-205 493.5q0 291 205 495.5t494 204.5zM796.5 113q235.5 0 403.5 166.5t168 402.5q0 238 -167 404.5t-404 166.5q-236 0 -403 -166.5t-167 -404.5q0 -236 167 -402.5 t402.5 -166.5zM817 915q-180 0 -180 -231t180 -231q123 0 246 57v-178q-139 -57 -258 -58q-72 0 -132.5 17.5t-117.5 59.5t-91 127t-34 206t34 206t91 126t117.5 58.5t132.5 17.5q117 0 258 -56v-178q-123 57 -246 57z" />
|
||||
<glyph unicode="ª" horiz-adv-x="833" d="M397 1382q125 0 195 -64.5t70 -182.5v-136q0 -106 -57.5 -155t-205.5 -49q-246 0 -245 176q0 23 8 47t31.5 55t79 50.5t137.5 19.5h51q0 86 -78 86q-80 0 -174 -35v147q102 41 188 41zM465 1012v49q-8 0 -20.5 1t-18.5 1q-76 0 -76 -57q0 -61 58 -62q27 0 42 22.5 t15 45.5z" />
|
||||
<glyph unicode="«" horiz-adv-x="1347" d="M1249 911l-372 -389l372 -391h-338l-346 391l346 389h338zM754 911l-373 -389l373 -391h-338l-346 391l346 389h338z" />
|
||||
<glyph unicode="¬" horiz-adv-x="1300" d="M199 684h903v-389h-211v170h-692v219z" />
|
||||
<glyph unicode="­" horiz-adv-x="950" d="M162 754h624v-240h-624v240z" />
|
||||
<glyph unicode="®" horiz-adv-x="1593" d="M799 1382q291 0 495.5 -204.5t204.5 -495.5q0 -289 -204.5 -493.5t-495.5 -204.5q-289 0 -494 204.5t-205 493.5q0 291 205 495.5t494 204.5zM798.5 113q235.5 0 403.5 166.5t168 402.5q0 238 -167 404.5t-404 166.5q-236 0 -403 -166.5t-167 -404.5q0 -236 167 -402.5 t402.5 -166.5zM973 584l192 -299h-229l-148 266h-83v-266h-207v796h315q145 0 233.5 -67.5t88.5 -190.5q0 -94 -44 -155t-118 -84zM825 707q41 0 72 28.5t31 73.5q0 47 -31 76.5t-72 29.5h-120v-208h120z" />
|
||||
<glyph unicode="¯" horiz-adv-x="825" d="M655 1319v-180h-479v180h479z" />
|
||||
<glyph unicode="°" horiz-adv-x="792" d="M391.5 1370q108.5 0 165.5 -58.5t57 -168.5q0 -109 -57 -167t-165.5 -58t-166 58t-57.5 167q0 111 57.5 169t166 58zM391 1036q51 0 73.5 25.5t22.5 83t-22.5 82t-73.5 24.5q-98 0 -98 -106q0 -57 23.5 -83t74.5 -26z" />
|
||||
<glyph unicode="±" horiz-adv-x="1198" d="M723 838h256v-230h-256v-256h-229v256h-258v230h258v258h229v-258zM236 12v215h743v-215h-743z" />
|
||||
<glyph unicode="²" horiz-adv-x="696" d="M602 1458q0 -154 -211 -340h215v-170h-504v150q311 231 312 346q0 74 -97 74q-98 0 -211 -91v193q121 74 230 74q137 0 201.5 -69t64.5 -167z" />
|
||||
<glyph unicode="³" horiz-adv-x="686" d="M467 1346q66 -18 105.5 -70.5t39.5 -122.5q0 -119 -86 -167t-202 -48q-96 0 -224 61v183q121 -74 215 -74q49 0 79 21.5t30 54.5q0 82 -111 82h-120v135h122q76 0 76 61q0 27 -29.5 41.5t-66.5 14.5q-98 0 -180 -39v159q100 53 200 54q106 0 186.5 -47.5t80.5 -155.5 q0 -51 -36 -93t-79 -50z" />
|
||||
<glyph unicode="´" horiz-adv-x="559" d="M121 1139l127 239h239l-190 -239h-176z" />
|
||||
<glyph unicode="µ" horiz-adv-x="1325" d="M829 1022h353v-913q-246 -123 -508 -123q-57 0 -119 10v-426h-352v1452h352v-657q0 -31 8 -51.5t48 -41t116 -20.5q55 0 102 12v758z" />
|
||||
<glyph unicode="¶" horiz-adv-x="1083" d="M991 1366v-1366h-274v371h-80q-270 0 -413.5 129t-143.5 370q0 240 143.5 368t413.5 128h354z" />
|
||||
<glyph unicode="·" horiz-adv-x="741" d="M510 702v-282h-295v282h295z" />
|
||||
<glyph unicode="¸" horiz-adv-x="585" d="M473 -10l-127 -240h-240l191 240h176z" />
|
||||
<glyph unicode="¹" horiz-adv-x="512" d="M92 1587l154 96h155v-735h-190v525l-119 -72v186z" />
|
||||
<glyph unicode="º" horiz-adv-x="868" d="M428 1384q131 0 202.5 -75.5t71.5 -218.5q0 -141 -71.5 -217t-202.5 -76q-133 0 -204.5 75.5t-71.5 217.5q0 143 71.5 218.5t204.5 75.5zM428 940q78 0 78 150q0 152 -78 151q-80 0 -80 -151q0 -150 80 -150z" />
|
||||
<glyph unicode="»" horiz-adv-x="1374" d="M479 522l-373 389h338l347 -389l-347 -391h-338zM975 522l-373 389h338l346 -389l-346 -391h-338z" />
|
||||
<glyph unicode="¼" horiz-adv-x="1476" d="M1065 1403h192l-895 -1448h-192zM92 1284l154 96h155v-735h-190v524l-119 -71v186zM1327 735v-387h88v-162h-88v-186h-188v186h-299v146l321 403h166zM1139 348v129l-99 -129h99z" />
|
||||
<glyph unicode="½" horiz-adv-x="1550" d="M1065 1403h192l-895 -1448h-192zM92 1284l154 96h155v-735h-190v524l-119 -71v186zM1446 510q0 -154 -211 -340h215v-170h-504v150q311 231 311 346q0 74 -96 73q-98 0 -211 -90v193q121 74 230 73q137 0 201.5 -68.5t64.5 -166.5z" />
|
||||
<glyph unicode="¾" horiz-adv-x="1757" d="M504 1042q66 -18 105.5 -70t39.5 -122q0 -119 -86 -167t-203 -48q-96 0 -223 61v183q121 -74 215 -74q49 0 79 21.5t30 54.5q0 82 -111 82h-121v135h123q76 0 76 61q0 27 -29.5 41t-66.5 14q-98 0 -180 -38v159q100 53 200 54q106 0 186 -47.5t80 -155.5 q0 -51 -35.5 -93.5t-78.5 -50.5zM1282 1403h193l-895 -1448h-193zM1554 735v-387h88v-162h-88v-186h-188v186h-299v146l322 403h165zM1366 348v129l-98 -129h98z" />
|
||||
<glyph unicode="¿" horiz-adv-x="1075" d="M164 37q0 70 22.5 126t56.5 92l72 74l73 72q34 35 56.5 88.5t22.5 118.5v21h281v-27q0 -104 -31 -184t-75 -127t-89 -86t-76 -81t-31 -89q0 -45 15.5 -76t46.5 -43t58.5 -16t66.5 -4q180 0 307 102v-262q-59 -41 -155.5 -68.5t-196.5 -27.5q-115 0 -200 33.5t-132 92 t-69.5 126t-22.5 145.5zM766 1022v-262h-317v262h317z" />
|
||||
<glyph unicode="À" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM717 1722l127 -239h-176l-191 239h240z" />
|
||||
<glyph unicode="Á" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM659 1483l127 239h240l-190 -239h-177z" />
|
||||
<glyph unicode="Â" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM801 1733l246 -250h-209l-86 90l-86 -90h-209l245 250h99z" />
|
||||
<glyph unicode="Ã" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM1063 1536q-57 -68 -123 -74t-127 24l-122 60q-60 31 -126.5 25t-124.5 -74v174q57 68 124 74t127 -25l122 -60q61 -30 127 -24t123 74v-174z" />
|
||||
<glyph unicode="Ä" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM455 1483v223h245v-223h-245zM803 1483v223h246v-223h-246z" />
|
||||
<glyph unicode="Å" horiz-adv-x="1503" d="M918 1366l542 -1366h-379l-106 328h-447l-106 -328h-379l543 1366h332zM612 588h277l-137 424zM752 1794q86 0 132 -46t46 -130t-46 -130t-132 -46q-84 0 -131.5 46t-47.5 130t47.5 130t131.5 46zM751.5 1554q28.5 0 40 13.5t11.5 50.5q0 63 -51.5 63t-51.5 -63 q0 -37 11.5 -50.5t40 -13.5z" />
|
||||
<glyph unicode="Æ" horiz-adv-x="2217" d="M1012 1366h1065v-287h-600v-252h520v-288h-520v-250h600v-289h-953v246h-469l-168 -246h-436zM831 504h293v428z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="1314" d="M786 1079q-141 0 -225 -86t-84 -309t84 -309t225 -86q213 0 418 98v-305q-195 -78 -356 -92l-125 -240h-240l189 240q-109 10 -200 48t-173 112.5t-128 211t-46 322.5q0 207 57.5 351.5t155.5 216t201.5 101t226.5 29.5q197 0 438 -96v-305q-205 98 -418 98z" />
|
||||
<glyph unicode="È" horiz-adv-x="1247" d="M1130 1079h-600v-252h521v-288h-521v-250h600v-289h-952v1366h952v-287zM664 1722l127 -239h-177l-190 239h240z" />
|
||||
<glyph unicode="É" horiz-adv-x="1247" d="M1130 1079h-600v-252h521v-288h-521v-250h600v-289h-952v1366h952v-287zM561 1483l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1247" d="M1130 1079h-600v-252h521v-288h-521v-250h600v-289h-952v1366h952v-287zM719 1733l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="Ë" horiz-adv-x="1247" d="M1130 1079h-600v-252h521v-288h-521v-250h600v-289h-952v1366h952v-287zM383 1483v223h246v-223h-246zM731 1483v223h246v-223h-246z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="708" d="M180 0h352v1366h-352v-1366zM315 1722l127 -239h-176l-190 239h239z" />
|
||||
<glyph unicode="Í" horiz-adv-x="708" d="M180 0h352v1366h-352v-1366zM270 1483l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="Î" horiz-adv-x="708" d="M180 0h352v1366h-352v-1366zM406 1733l245 -250h-209l-86 90l-86 -90h-209l246 250h99z" />
|
||||
<glyph unicode="Ï" horiz-adv-x="708" d="M180 0h352v1366h-352v-1366zM59 1483v223h246v-223h-246zM408 1483v223h245v-223h-245z" />
|
||||
<glyph unicode="Ð" horiz-adv-x="1527" d="M764 1366q317 0 483 -174t166 -510q0 -334 -166 -508t-483 -174h-492v582h-166v200h166v584h492zM764 289q297 0 297 393q0 397 -297 397h-139v-297h217v-200h-217v-293h139z" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1619" d="M1085 1366h353v-1366h-348l-560 813v-813h-352v1366h352l555 -819v819zM1133 1536q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v174q57 68 123.5 74t127.5 -25l122 -60q61 -30 126.5 -24t123.5 74v-174z" />
|
||||
<glyph unicode="Ò" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86zM739 1722l127 -239h-176l-190 239h239z" />
|
||||
<glyph unicode="Ó" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86zM666 1483l127 239h239l-190 -239h-176z" />
|
||||
<glyph unicode="Ô" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86zM815 1733l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="Õ" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86zM1081 1536q-57 -68 -122.5 -74t-127.5 24l-121 60q-60 31 -127 25t-124 -74v174q57 68 123.5 74t127.5 -25l121 -60q61 -30 127 -24t123 74v-174z" />
|
||||
<glyph unicode="Ö" horiz-adv-x="1538" d="M766 1380q96 0 180 -16t171 -63.5t149.5 -122t101.5 -201.5t39 -293t-39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16t-180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16zM766 289q131 0 210 86t79 309t-79 309 t-210 86t-210 -86t-79 -309t79 -309t210 -86zM469 1483v223h246v-223h-246zM817 1483v223h246v-223h-246z" />
|
||||
<glyph unicode="×" horiz-adv-x="1093" d="M948 895l-284 -371l284 -370h-223l-176 223l-174 -223h-228l287 370l-284 371h225l174 -223l176 223h223z" />
|
||||
<glyph unicode="Ø" horiz-adv-x="1529" d="M1516 1366l-211 -246q102 -168 102 -438q0 -166 -39 -293t-101.5 -201.5t-149.5 -122t-171 -63.5t-180 -16q-217 0 -363 86l-61 -72h-328l211 246q-100 168 -100 436q0 166 39 293t101.5 201.5t149.5 122t171 63.5t180 16q215 0 360 -84l62 72h328zM477 682q0 -82 8 -133 l426 495q-57 33 -145 33q-131 0 -210 -86t-79 -309zM1055 682q0 70 -11 135l-426 -498q57 -33 148 -32q131 0 210 86t79 309z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="1533" d="M993 1366h353v-778q0 -287 -154 -444.5t-430.5 -157.5t-430 157.5t-153.5 444.5v778h352v-819q0 -131 56.5 -194.5t175.5 -63.5t175 63.5t56 194.5v819zM745 1722l127 -239h-176l-190 239h239z" />
|
||||
<glyph unicode="Ú" horiz-adv-x="1533" d="M993 1366h353v-778q0 -287 -154 -444.5t-430.5 -157.5t-430 157.5t-153.5 444.5v778h352v-819q0 -131 56.5 -194.5t175.5 -63.5t175 63.5t56 194.5v819zM651 1483l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="Û" horiz-adv-x="1533" d="M993 1366h353v-778q0 -287 -154 -444.5t-430.5 -157.5t-430 157.5t-153.5 444.5v778h352v-819q0 -131 56.5 -194.5t175.5 -63.5t175 63.5t56 194.5v819zM811 1733l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1533" d="M993 1366h353v-778q0 -287 -154 -444.5t-430.5 -157.5t-430 157.5t-153.5 444.5v778h352v-819q0 -131 56.5 -194.5t175.5 -63.5t175 63.5t56 194.5v819zM465 1483v223h246v-223h-246zM813 1483v223h246v-223h-246z" />
|
||||
<glyph unicode="Ý" horiz-adv-x="1492" d="M1034 1366h428l-542 -791v-575h-353v575l-542 791h428l290 -520zM635 1483l127 239h239l-190 -239h-176z" />
|
||||
<glyph unicode="Þ" horiz-adv-x="1337" d="M705 1163q248 0 385 -126t137 -353q0 -229 -137.5 -355t-384.5 -126h-177v-203h-352v1366h352v-203h177zM672 494q106 0 155.5 56t49.5 134q0 76 -49.5 134.5t-155.5 58.5h-144v-383h144z" />
|
||||
<glyph unicode="ß" horiz-adv-x="1282" d="M926 719q250 -74 250 -313q0 -221 -167 -318.5t-452 -85.5v256q131 -2 228.5 38t97.5 134q0 51 -32 84t-91.5 47t-100.5 19.5t-102 7.5v233q43 0 84 6.5t88 21.5t74.5 48t27.5 82q0 162 -167 162q-190 0 -191 -267v-874h-293v846q0 160 41 271.5t110.5 166.5t143.5 77.5 t162 22.5q236 0 357.5 -109.5t121.5 -266.5q0 -106 -60 -187.5t-130 -101.5z" />
|
||||
<glyph unicode="à" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM565 1378l127 -239h-176l-190 239h239z" />
|
||||
<glyph unicode="á" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM442 1139l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="â" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM612 1389l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="ã" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM874 1192q-57 -68 -122.5 -74t-126.5 24l-122 60q-60 31 -127 25t-124 -74v174q57 68 123.5 74t127.5 -25l122 -60q61 -30 126.5 -24t122.5 74v-174z" />
|
||||
<glyph unicode="ä" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM266 1139v223h246v-223h-246zM614 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="å" horiz-adv-x="1128" d="M543 1036q225 0 348 -114.5t123 -329.5v-242q0 -190 -102.5 -277t-366.5 -87q-438 0 -439 315q0 31 7.5 63.5t35 78.5t72.5 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -311 -64v267q178 71 336 71zM662 375v86q-49 4 -68 4q-135 0 -135 -103 q0 -109 100 -108q49 0 76 39t27 82zM563 1448q86 0 132 -46t46 -130t-46 -130t-132 -46q-84 0 -131 46t-47 130t47 130t131 46zM563.5 1208q28.5 0 39.5 13.5t11 50.5q0 63 -51 63t-51 -63q0 -37 11.5 -50.5t40 -13.5z" />
|
||||
<glyph unicode="æ" horiz-adv-x="1792" d="M1610 537q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -389 -106q-96 0 -175 48t-112 109q-90 -158 -322 -157q-438 0 -438 315q0 31 7 63.5t35 78.5t73 81t134 59.5t208 24.5q63 0 92 -2q0 84 -41 120t-96 36q-154 0 -312 -64v267 q178 72 336 71q92 0 175 -44t124 -91q35 51 113 94t170 43q229 0 347 -144t118 -353zM682 371v86q-49 4 -68 4q-135 0 -135 -103q0 -109 101 -108q49 0 75.5 39t26.5 82zM1030 637h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121z" />
|
||||
<glyph unicode="ç" horiz-adv-x="993" d="M670 768q-90 0 -144.5 -64.5t-54.5 -193.5t54.5 -193.5t144.5 -64.5q119 0 258 63v-262q-106 -51 -238 -63l-125 -240h-239l188 240q-193 25 -294 158t-101 362q0 254 126 390t361 136q178 0 322 -69v-262q-139 63 -258 63z" />
|
||||
<glyph unicode="è" d="M1065 541q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -402 -106q-68 0 -129 11t-128.5 46t-115.5 89t-80 149.5t-32 220.5q0 244 113.5 390t355.5 146q229 0 347 -144t118 -353zM485 641h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121 zM578 1393l127 -240h-177l-190 240h240z" />
|
||||
<glyph unicode="é" d="M1065 541q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -402 -106q-68 0 -129 11t-128.5 46t-115.5 89t-80 149.5t-32 220.5q0 244 113.5 390t355.5 146q229 0 347 -144t118 -353zM485 641h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121 zM475 1139l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="ê" d="M1065 541q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -402 -106q-68 0 -129 11t-128.5 46t-115.5 89t-80 149.5t-32 220.5q0 244 113.5 390t355.5 146q229 0 347 -144t118 -353zM485 641h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121 zM645 1389l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="ë" d="M1065 541q0 -61 -6 -111h-582q0 -72 67.5 -121t151.5 -49q188 0 322 80v-248q-166 -106 -402 -106q-68 0 -129 11t-128.5 46t-115.5 89t-80 149.5t-32 220.5q0 244 113.5 390t355.5 146q229 0 347 -144t118 -353zM485 641h230q-4 59 -35 116.5t-80 57.5t-80 -53t-35 -121 zM299 1139v223h246v-223h-246zM647 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="ì" horiz-adv-x="735" d="M197 0h352v1022h-352v-1022zM332 1393l127 -240h-176l-191 240h240z" />
|
||||
<glyph unicode="í" horiz-adv-x="735" d="M197 0h352v1022h-352v-1022zM287 1139l127 239h239l-190 -239h-176z" />
|
||||
<glyph unicode="î" horiz-adv-x="735" d="M197 0h352v1022h-352v-1022zM422 1389l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="ï" horiz-adv-x="735" d="M197 0h352v1022h-352v-1022zM76 1139v223h246v-223h-246zM424 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="ð" horiz-adv-x="1271" d="M911 1239q215 -193 215 -606q0 -649 -505 -649q-131 0 -232.5 45t-159 118.5t-85 158.5t-27.5 175q0 131 41 220.5t115.5 129t148.5 55t170 15.5q123 0 190 -27q-14 109 -123 164l-151 -118l-92 114l61 49h-16q-90 0 -199 -30v301q94 31 227 30q162 0 291 -59l107 84 l92 -117zM621 287q66 0 112.5 95t42.5 275q-53 23 -151 23q-78 0 -116 -59.5t-38 -137.5q0 -31 7 -68.5t44.5 -82.5t98.5 -45z" />
|
||||
<glyph unicode="ñ" horiz-adv-x="1308" d="M686 1036q217 0 344 -115.5t127 -318.5v-602h-352v657q0 31 -8.5 51.5t-48 41t-115.5 20.5q-55 0 -103 -12v-758h-352v913q246 123 508 123zM965 1192q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v174q57 68 123.5 74t127.5 -25l122 -60q61 -30 126.5 -24 t123.5 74v-174z" />
|
||||
<glyph unicode="ò" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270zM571 1378l127 -239h-176l-190 239h239z" />
|
||||
<glyph unicode="ó" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270zM469 1139l127 239h240l-191 -239h-176z" />
|
||||
<glyph unicode="ô" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270zM633 1389l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="õ" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270zM899 1192q-57 -68 -122.5 -74t-127.5 24l-122 60q-60 31 -126.5 25t-124.5 -74v174 q57 68 124 74t127 -25l122 -60q61 -30 127 -24t123 74v-174z" />
|
||||
<glyph unicode="ö" d="M583.5 1034q235.5 0 363.5 -135t128 -389t-128 -389t-363.5 -135t-363.5 135t-128 389t128 389t363.5 135zM583.5 240q139.5 0 139.5 270t-139.5 270t-139.5 -270t139.5 -270zM287 1139v223h245v-223h-245zM635 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="÷" horiz-adv-x="1286" d="M188 649h916v-231h-916v231zM520 47v240h252v-240h-252zM772 1022v-240h-252v240h252z" />
|
||||
<glyph unicode="ø" horiz-adv-x="1255" d="M1229 1022l-178 -207q66 -121 65 -303q0 -254 -128 -389t-363 -135q-139 0 -244 49l-31 -37h-327l178 209q-68 119 -68 303q0 254 128 389t364 135q141 0 243 -49l31 35h330zM625 782q-131 0 -138 -241l193 227q-28 14 -55 14zM625 242q131 0 139 239l-195 -225 q23 -14 56 -14z" />
|
||||
<glyph unicode="ù" horiz-adv-x="1269" d="M770 1022h352v-561q0 -475 -475 -475t-475 475v561h352v-623q0 -150 123 -149.5t123 149.5v623zM631 1378l127 -239h-176l-191 239h240z" />
|
||||
<glyph unicode="ú" horiz-adv-x="1269" d="M770 1022h352v-561q0 -475 -475 -475t-475 475v561h352v-623q0 -150 123 -149.5t123 149.5v623zM537 1139l127 239h239l-190 -239h-176z" />
|
||||
<glyph unicode="û" horiz-adv-x="1269" d="M770 1022h352v-561q0 -475 -475 -475t-475 475v561h352v-623q0 -150 123 -149.5t123 149.5v623zM696 1389l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="ü" horiz-adv-x="1269" d="M770 1022h352v-561q0 -475 -475 -475t-475 475v561h352v-623q0 -150 123 -149.5t123 149.5v623zM350 1139v223h246v-223h-246zM698 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="ý" horiz-adv-x="1169" d="M729 1022h371l-373 -1002q-90 -231 -177 -327t-212 -96q-133 0 -223 43v256q70 -25 135 -25q47 0 92 56.5t78 170.5l-357 924h373l148 -588zM485 1139l127 239h240l-190 -239h-177z" />
|
||||
<glyph unicode="þ" horiz-adv-x="1218" d="M655 1030q223 0 344 -133t121 -383t-120.5 -383t-344.5 -133q-90 0 -133 6v-379h-350v1778h350v-379q43 6 133 6zM590 217q178 12 178 297t-178 297q-18 0 -68 -4v-586q50 -4 68 -4z" />
|
||||
<glyph unicode="ÿ" horiz-adv-x="1169" d="M729 1022h371l-373 -1002q-90 -231 -177 -327t-212 -96q-133 0 -223 43v256q70 -25 135 -25q47 0 92 56.5t78 170.5l-357 924h373l148 -588zM287 1139v223h245v-223h-245zM635 1139v223h246v-223h-246z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="2160" d="M2009 1079h-600v-252h520v-288h-520v-250h600v-289h-952v39q-125 -51 -293 -51q-96 0 -180 16t-171 63.5t-149.5 122t-101.5 201.5t-39 293t39 293t101.5 201.5t149.5 122t171 63.5t180 16q168 0 293 -51v37h952v-287zM764 289q131 0 210 86t79 309t-79 309t-210 86 t-210 -86t-79 -309t79 -309t210 -86z" />
|
||||
<glyph unicode="œ" horiz-adv-x="1853" d="M1686 541q0 -61 -7 -111h-581q0 -72 67.5 -121t151.5 -49q188 0 321 80v-248q-166 -106 -401 -106q-193 0 -311 88q-119 -86 -310 -86q-236 0 -363.5 135t-127.5 389t128 389t363 135q190 0 308 -86q117 88 297 88q229 0 347 -144t118 -353zM616.5 242q139.5 0 139.5 270 t-139.5 270t-139.5 -270t139.5 -270zM1106 641h229q-4 59 -34.5 116.5t-80 57.5t-80 -53t-34.5 -121z" />
|
||||
<glyph unicode="Ÿ" horiz-adv-x="1492" d="M1034 1366h428l-542 -791v-575h-353v575l-542 791h428l290 -520zM449 1483v223h245v-223h-245zM797 1483v223h245v-223h-245z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="874" d="M481 1405l246 -250h-209l-86 90l-86 -90h-209l246 250h98z" />
|
||||
<glyph unicode="˜" horiz-adv-x="1058" d="M838 1192q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v174q57 68 124 74t127 -25l122 -60q61 -30 126.5 -24t123.5 74v-174z" />
|
||||
<glyph unicode=" " horiz-adv-x="897" />
|
||||
<glyph unicode=" " horiz-adv-x="1794" />
|
||||
<glyph unicode=" " horiz-adv-x="897" />
|
||||
<glyph unicode=" " horiz-adv-x="1794" />
|
||||
<glyph unicode=" " horiz-adv-x="598" />
|
||||
<glyph unicode=" " horiz-adv-x="448" />
|
||||
<glyph unicode=" " horiz-adv-x="299" />
|
||||
<glyph unicode=" " horiz-adv-x="299" />
|
||||
<glyph unicode=" " horiz-adv-x="223" />
|
||||
<glyph unicode=" " horiz-adv-x="358" />
|
||||
<glyph unicode=" " horiz-adv-x="98" />
|
||||
<glyph unicode="‐" horiz-adv-x="950" d="M162 754h624v-240h-624v240z" />
|
||||
<glyph unicode="‑" horiz-adv-x="950" d="M162 754h624v-240h-624v240z" />
|
||||
<glyph unicode="‒" horiz-adv-x="950" d="M162 754h624v-240h-624v240z" />
|
||||
<glyph unicode="–" horiz-adv-x="1146" d="M141 715h860v-240h-860v240z" />
|
||||
<glyph unicode="—" horiz-adv-x="1824" d="M162 715h1501v-240h-1501v240z" />
|
||||
<glyph unicode="‘" horiz-adv-x="616" d="M96 1384h285l151 -401h-239z" />
|
||||
<glyph unicode="’" horiz-adv-x="616" d="M248 1384h284l-196 -401h-240z" />
|
||||
<glyph unicode="‚" horiz-adv-x="698" d="M299 172h285l-197 -401h-240z" />
|
||||
<glyph unicode="“" horiz-adv-x="980" d="M98 1384h285l152 -401h-240zM455 1384h284l152 -401h-240z" />
|
||||
<glyph unicode="”" horiz-adv-x="980" d="M606 1384h285l-197 -401h-239zM250 1384h285l-197 -401h-240z" />
|
||||
<glyph unicode="„" horiz-adv-x="1056" d="M655 172h285l-197 -401h-239zM299 172h285l-197 -401h-240z" />
|
||||
<glyph unicode="•" horiz-adv-x="1085" d="M913 665.5q0 -155.5 -107.5 -263t-261 -107.5t-263 108.5t-109.5 262t109.5 262t263 108.5t261 -107.5t107.5 -263z" />
|
||||
<glyph unicode="…" horiz-adv-x="1849" d="M1343 283h295v-283h-295v283zM219 0v283h295v-283h-295zM780 0v283h295v-283h-295z" />
|
||||
<glyph unicode=" " horiz-adv-x="358" />
|
||||
<glyph unicode="‹" horiz-adv-x="819" d="M748 911l-373 -389l373 -391h-338l-347 391l347 389h338z" />
|
||||
<glyph unicode="›" horiz-adv-x="843" d="M453 522l-373 389h338l346 -389l-346 -391h-338z" />
|
||||
<glyph unicode=" " horiz-adv-x="448" />
|
||||
<glyph unicode="€" horiz-adv-x="1466" d="M924 1079q-174 0 -248 -116h397v-191h-455q-4 -53 -4 -88q0 -33 4 -86h455v-190h-397q74 -119 248 -119q213 0 417 98v-305q-240 -96 -438 -96q-492 0 -608 422h-197v190h166q-2 27 -2 86t2 88h-166v191h197q117 420 608 419q199 0 438 -96v-305q-204 98 -417 98z" />
|
||||
<glyph unicode="™" horiz-adv-x="1581" d="M100 1366h572v-160h-199v-522h-176v522h-197v160zM1266 1366h174v-682h-176v422l-158 -227l-158 227v-422h-176v682h174l160 -233z" />
|
||||
<glyph unicode="" horiz-adv-x="1020" d="M0 1020h1020v-1020h-1020v1020z" />
|
||||
<glyph unicode="fi" horiz-adv-x="1462" d="M633 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-206v-774h-353v774h-141v248h145q1 424 404 424zM985 0h352v1022h-352v-1022zM981 1139h360v268h-360v-268z" />
|
||||
<glyph unicode="fl" horiz-adv-x="1462" d="M631 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-207v-774h-352v774h-141v248h145q1 424 404 424zM983 0h352v1411h-352v-1411z" />
|
||||
<glyph unicode="ffi" horiz-adv-x="2287" d="M2101 0h-352v1022h352v-1022zM2105 1139h-360v268h360v-268zM1407 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-207v-774h-352v774h-141v248h145q1 424 404 424zM631 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5 t-37.5 -135.5h202v-248h-207v-774h-352v774h-141v248h145q1 424 404 424z" />
|
||||
<glyph unicode="ffl" horiz-adv-x="2314" d="M2111 0h-352v1411h352v-1411zM1407 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-207v-774h-352v774h-141v248h145q1 424 404 424zM631 1446q84 0 151 -23v-211q-29 8 -55 9q-72 0 -109.5 -63.5t-37.5 -135.5h202v-248h-207v-774h-352 v774h-141v248h145q1 424 404 424z" />
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 46 KiB |
|
@ -1,245 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
This is a custom SVG webfont generated by Font Squirrel.
|
||||
Copyright : Copyright c 2011 by Vissol Ltd All rights reserved
|
||||
Designer : Joe Prince
|
||||
Foundry : Joe Prince
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="webfontNOU7iUTL" horiz-adv-x="1441" >
|
||||
<font-face units-per-em="2048" ascent="1638" descent="-410" />
|
||||
<missing-glyph horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="	" horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="!" horiz-adv-x="825" d="M303 227h240v-227h-240v227zM283 1366h280l-45 -973h-190z" />
|
||||
<glyph unicode=""" horiz-adv-x="825" d="M166 1384h205l-35 -411h-133zM461 1384h205l-35 -411h-133z" />
|
||||
<glyph unicode="#" horiz-adv-x="1216" d="M1094 700h-158l-51 -292h153v-152h-178l-39 -217h-162l39 217h-231l-37 -217h-162l39 217h-155v152h180l51 292h-174v152h201l36 217h162l-39 -217h232l39 217h159l-38 -217h133v-152zM725 408l49 292h-229l-51 -292h231z" />
|
||||
<glyph unicode="$" horiz-adv-x="1181" d="M1090 362q0 -154 -121 -257t-299 -117v-209h-119v209q-219 14 -383 114v250q174 -129 383 -131v379q-76 23 -117 37t-104.5 47t-96 70t-58 97t-25.5 136q0 174 111.5 273.5t289.5 119.5v209h119v-207q168 -6 334 -92v-239q-160 102 -334 104v-340q74 -23 120 -39 t109.5 -53t100 -81t63.5 -116t27 -164zM395 993q0 -53 39 -84.5t117 -58.5v293q-156 -33 -156 -150zM670 229q174 27 174 150q0 121 -174 184v-334z" />
|
||||
<glyph unicode="%" horiz-adv-x="1777" d="M1239 1366h174l-858 -1366h-174zM434 1360q291 0 291 -377t-291 -377q-289 0 -289 377t289 377zM434.5 758q57.5 0 93 46t35.5 179q0 135 -35.5 180t-93 45t-93.5 -45t-36 -180q0 -133 36 -179t93.5 -46zM1354 760q291 0 291 -377t-291 -377q-289 0 -289 377t289 377z M1353.5 158q57.5 0 93.5 46t36 179q0 135 -36 180t-93.5 45t-93 -45t-35.5 -180q0 -133 35.5 -179t93 -46z" />
|
||||
<glyph unicode="&" horiz-adv-x="1310" d="M1036 291l244 -291h-262l-105 129q-152 -145 -364 -145q-113 0 -201 41t-137 103t-73.5 130t-24.5 131q0 53 7 94t31.5 96.5t79 108.5t138.5 103q-125 131 -125 249q0 137 85 235.5t240 98.5q139 0 232.5 -92t93.5 -227q0 -104 -50 -174t-173 -152l229 -274q29 72 43 155 h201q-29 -180 -109 -319zM571.5 1194q-55.5 0 -94.5 -39t-39 -96q0 -14 5.5 -31.5t10.5 -29t18 -32t20 -27.5l24 -30q18 -23 23 -26q96 57 129.5 97t33.5 87q0 53 -37.5 90t-93 37zM553 170q135 0 242 106l-301 361q-66 -35 -108 -72t-57.5 -72.5t-18.5 -56t-3 -53.5 q0 -39 17.5 -83t77 -87t151.5 -43z" />
|
||||
<glyph unicode="'" horiz-adv-x="534" d="M166 1384h205l-35 -411h-133z" />
|
||||
<glyph unicode="(" horiz-adv-x="751" d="M614 1483q-211 -416 -211 -856q0 -436 211 -858h-213q-211 422 -211 858q0 440 211 856h213z" />
|
||||
<glyph unicode=")" horiz-adv-x="751" d="M133 -231q211 412 211 858q0 449 -211 856h213q211 -416 211 -856q0 -436 -211 -858h-213z" />
|
||||
<glyph unicode="*" horiz-adv-x="845" d="M684 1247l-166 -57l166 -57l-78 -140l-123 105l25 -156h-160l25 156l-123 -105l-78 140l166 57l-166 57l78 139l123 -104l-25 156h160l-25 -156l123 104z" />
|
||||
<glyph unicode="+" horiz-adv-x="1128" d="M653 977v-275h273v-182h-273v-270h-182v270h-272v182h272v275h182z" />
|
||||
<glyph unicode="," horiz-adv-x="677" d="M303 172h215l-182 -401h-184z" />
|
||||
<glyph unicode="-" horiz-adv-x="950" d="M162 707h624v-193h-624v193z" />
|
||||
<glyph unicode="." horiz-adv-x="759" d="M500 227v-227h-240v227h240z" />
|
||||
<glyph unicode="/" horiz-adv-x="897" d="M723 1548h205l-754 -1749h-203z" />
|
||||
<glyph unicode="0" horiz-adv-x="1345" d="M671.5 1378q538.5 0 538.5 -700.5t-538.5 -700.5t-538.5 700.5t538.5 700.5zM671.5 184q59.5 0 104.5 16.5t92 64.5t72 152.5t25 260.5q0 125 -17.5 218t-45.5 144.5t-68.5 82t-77.5 39.5t-84 9t-84 -9t-78 -39.5t-68.5 -82t-45 -144.5t-17.5 -218q0 -156 24.5 -260.5 t71.5 -152.5t92 -64.5t104.5 -16.5z" />
|
||||
<glyph unicode="1" horiz-adv-x="993" d="M477 1366h223v-1366h-245v1085l-244 -149v262z" />
|
||||
<glyph unicode="2" horiz-adv-x="1226" d="M567 244h494v-244h-903v201q94 70 192.5 154.5t205 193t174 222.5t67.5 204q0 70 -56.5 117t-185.5 47q-100 0 -205.5 -34t-179.5 -85v244q197 121 395 120q242 0 358.5 -120.5t116.5 -288.5q0 -182 -137 -373.5t-336 -357.5z" />
|
||||
<glyph unicode="3" horiz-adv-x="1228" d="M842 737q104 -37 167.5 -121t63.5 -204q0 -96 -32.5 -172t-85 -123t-123 -78t-138 -43t-139.5 -12q-203 0 -389 100v250q180 -106 373 -107q291 0 290 189q0 90 -68.5 148.5t-230.5 58.5h-174v202h181q115 0 171 47.5t56 116.5q0 82 -73 116t-169 34q-178 0 -327 -90v251 q178 84 342 84q205 0 339 -92t134 -295q0 -168 -168 -260z" />
|
||||
<glyph unicode="4" horiz-adv-x="1234" d="M934 604h178v-219h-178v-385h-246v385h-610v203l622 778h234v-762zM365 604h323v420z" />
|
||||
<glyph unicode="5" horiz-adv-x="1245" d="M244 1366h751v-244h-542q-4 -51 -12.5 -126.5t-12.5 -123.5q96 18 184 18.5t162 -19t146.5 -66.5t113.5 -141.5t41 -227.5q0 -135 -41 -229t-110.5 -140.5t-143 -65.5t-162.5 -19q-227 0 -415 96v248q190 -121 401 -121q238 0 227 231q-10 219 -223 223q-180 2 -301 -73 l-137 123z" />
|
||||
<glyph unicode="6" horiz-adv-x="1222" d="M637 913q221 0 342 -120.5t121 -331.5q0 -86 -26.5 -167t-81 -152.5t-152 -114.5t-224.5 -43q-485 0 -485 645q0 195 49 340t117 222t162 123t162.5 58t140.5 12q100 0 235 -38v-218q-82 27 -221 27q-47 0 -98 -12.5t-113.5 -42t-112 -96t-65.5 -160.5q90 69 250 69z M616 201q76 0 128.5 31.5t73 80.5t27.5 84t7 66q0 104 -61.5 166.5t-174.5 62.5q-133 0 -237 -69q-4 -127 18.5 -217.5t64.5 -131.5t78.5 -57t75.5 -16z" />
|
||||
<glyph unicode="7" horiz-adv-x="1202" d="M141 1366h965v-195l-563 -1171h-291l545 1120h-656v246z" />
|
||||
<glyph unicode="8" horiz-adv-x="1236" d="M866 733q10 -2 26.5 -8t58.5 -30.5t75 -58.5t59.5 -94.5t26.5 -133.5q0 -199 -129 -311.5t-362.5 -112.5t-362.5 112.5t-129 311.5q0 74 25.5 134t61.5 94t73 57.5t63 31.5l25 8q-8 2 -21.5 7t-48.5 26.5t-61.5 49.5t-48 81t-21.5 119q0 172 119 270t325.5 98t325.5 -98 t119 -270q0 -188 -158 -266zM620.5 1184q-96.5 0 -147.5 -50.5t-51 -123.5q0 -98 59.5 -140.5t139 -42.5t139 42t59.5 141q0 74 -51 124t-147.5 50zM620.5 176q122.5 0 184 63.5t61.5 176.5q0 82 -63.5 141t-182 59t-182 -59t-63.5 -141q0 -111 61.5 -175.5t184 -64.5z" />
|
||||
<glyph unicode="9" horiz-adv-x="1234" d="M580 455q-221 0 -342 120.5t-121 331.5q0 86 26.5 167t81 152.5t151.5 114.5t224 43q485 0 485 -645q0 -195 -49 -340t-116.5 -222t-161.5 -123t-163 -58t-140 -12q-100 0 -236 39v217q82 -27 221 -27q47 0 98.5 12.5t114 42t111.5 96t65 160.5q-89 -69 -249 -69z M600 1167q-76 0 -128 -31.5t-72.5 -80.5t-27.5 -84t-7 -66q0 -104 61 -166.5t174 -62.5q133 0 238 69q4 127 -18.5 217.5t-64.5 131.5t-79 57t-76 16z" />
|
||||
<glyph unicode=":" horiz-adv-x="813" d="M528 946v-223h-235v223h235zM528 301v-223h-235v223h235z" />
|
||||
<glyph unicode=";" horiz-adv-x="858" d="M334 172h215l-182 -401h-185zM557 946v-223h-235v223h235z" />
|
||||
<glyph unicode="<" horiz-adv-x="1351" d="M1096 1004v-211l-617 -242l617 -242v-211l-850 379v148z" />
|
||||
<glyph unicode="=" horiz-adv-x="1306" d="M260 874h789v-176h-789v176zM260 524h789v-176h-789v176z" />
|
||||
<glyph unicode=">" horiz-adv-x="1329" d="M270 98v211l617 242l-617 242v211l850 -379v-148z" />
|
||||
<glyph unicode="?" horiz-adv-x="1042" d="M909 985q0 -70 -22.5 -126t-56.5 -92l-72 -74l-73 -72q-34 -35 -56.5 -88.5t-22.5 -118.5v-21h-217v27q0 104 31 184t76 127t89 86t74.5 81t30.5 89q0 182 -221 182q-180 0 -305 -110v227q150 96 321 96q115 0 200 -33.5t132 -92t69.5 -126t22.5 -145.5zM379 227h239 v-227h-239v227z" />
|
||||
<glyph unicode="@" horiz-adv-x="1869" d="M1047 1237q84 0 174 -22.5t183 -75t165.5 -127t119 -191t46.5 -258.5q0 -207 -92.5 -362.5t-266.5 -155.5q-82 0 -127 54.5t-51 97.5q-27 -66 -101.5 -109t-185.5 -43q-154 0 -242.5 69.5t-88.5 190.5q0 53 17 99.5t62.5 94.5t142.5 76.5t238 28.5q45 0 115 -4 q0 76 -34 114t-140 38q-166 0 -279 -43q4 29 13.5 82t13.5 81q158 51 270 52q166 0 252 -77t86 -226q0 -51 -16 -156t-16 -162q0 -133 92 -133q74 0 147.5 103.5t73.5 289.5q0 127 -53.5 234.5t-137.5 175t-185 105.5t-202 38q-295 0 -522 -224t-227 -527q0 -129 46 -233.5 t111.5 -163t145.5 -97.5t141.5 -52.5t106.5 -13.5q262 0 465 99l-21 -131q-188 -84 -442 -84q-106 0 -217 37.5t-216.5 113.5t-173 214.5t-67.5 316.5q0 184 79 349t205 276.5t282.5 176t310.5 64.5zM911 229q119 0 165 50.5t54 175.5q-27 2 -90 2q-279 0 -278 -148 q-1 -80 149 -80z" />
|
||||
<glyph unicode="A" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536z" />
|
||||
<glyph unicode="B" horiz-adv-x="1323" d="M981 717q238 -86 238 -316q0 -55 -9.5 -103t-42 -105.5t-85 -97.5t-145.5 -67.5t-218 -27.5h-541v1366h492q94 0 174 -19.5t149.5 -61.5t109.5 -120t40 -184q0 -180 -162 -264zM424 1153v-344h260q213 0 213 164q0 180 -231 180h-242zM707 215q266 0 266 199 q0 178 -275 178h-274v-377h283z" />
|
||||
<glyph unicode="C" horiz-adv-x="1286" d="M784 205q197 0 392 90v-229q-205 -82 -414 -82q-96 0 -179 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t179 16q209 0 414 -81v-230q-195 90 -392 90q-92 0 -157.5 -16.5t-128 -63.5t-95 -147t-32.5 -252t32.5 -252t95 -147 t128 -63.5t157.5 -16.5z" />
|
||||
<glyph unicode="D" horiz-adv-x="1419" d="M649 1366q317 0 481 -174t164 -510q0 -334 -163.5 -508t-481.5 -174h-471v1366h471zM649 223q213 0 306.5 107.5t93.5 351.5q0 246 -93.5 353.5t-306.5 107.5h-225v-920h225z" />
|
||||
<glyph unicode="E" horiz-adv-x="1204" d="M424 1145v-346h575v-232h-575v-346h663v-221h-909v1366h909v-221h-663z" />
|
||||
<glyph unicode="F" horiz-adv-x="1142" d="M178 1366h883v-221h-637v-346h551v-232h-551v-567h-246v1366z" />
|
||||
<glyph unicode="G" horiz-adv-x="1406" d="M707 782h548v-682q-240 -117 -493 -116q-96 0 -179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16q217 0 450 -92v-225q-221 98 -426 98q-72 0 -127 -9t-111 -39t-93 -81t-60.5 -140t-23.5 -210q0 -123 23.5 -212 t60.5 -140t93 -81t111.5 -39t126.5 -9q113 0 242 35v327h-321v217z" />
|
||||
<glyph unicode="H" horiz-adv-x="1429" d="M1004 1366h245v-1366h-245v567h-580v-567h-246v1366h246v-567h580v567z" />
|
||||
<glyph unicode="I" horiz-adv-x="600" d="M424 0h-246v1366h246v-1366z" />
|
||||
<glyph unicode="J" horiz-adv-x="1003" d="M563 1366h246v-909q0 -145 -44 -245.5t-117 -147t-139.5 -63.5t-139.5 -17q-168 0 -310 88v243q125 -102 281 -102q115 0 169 48t54 188v917z" />
|
||||
<glyph unicode="K" horiz-adv-x="1415" d="M1270 1366l-551 -600l608 -766h-307l-459 592l-137 -150v-442h-246v1366h246v-578l516 578h330z" />
|
||||
<glyph unicode="L" horiz-adv-x="1124" d="M424 233h657v-233h-903v1366h246v-1133z" />
|
||||
<glyph unicode="M" horiz-adv-x="1695" d="M1241 1366h272v-1366h-245v1010l-422 -604l-422 604v-1010h-246v1366h273l395 -571z" />
|
||||
<glyph unicode="N" horiz-adv-x="1587" d="M1159 1366h246v-1366h-275l-706 1020v-1020h-246v1366h279l702 -1012v1012z" />
|
||||
<glyph unicode="O" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17z" />
|
||||
<glyph unicode="P" horiz-adv-x="1277" d="M686 1366q242 0 374 -120t132 -339t-132 -338.5t-374 -119.5h-264v-449h-246v1366h510zM668 672q162 0 221 59.5t59 175.5q0 115 -59.5 173.5t-220.5 58.5h-246v-467h246z" />
|
||||
<glyph unicode="Q" horiz-adv-x="1529" d="M1403 682q0 -152 -32 -269.5t-84 -193.5t-126 -127t-148.5 -74.5t-160.5 -31.5q0 -94 69.5 -136.5t165.5 -42.5v-188q-438 0 -438 369q-106 14 -193 53t-165 115.5t-122 211t-44 314.5q0 168 39 295t100.5 202.5t148.5 123t171 63.5t180 16t179 -16t170 -63.5t149.5 -123 t101.5 -202.5t39 -295zM764 199q86 0 148.5 16t123 64.5t91 148.5t30.5 254t-30.5 254t-91 148.5t-123 64.5t-148.5 16q-88 0 -149.5 -16t-122 -64.5t-91 -148.5t-30.5 -254t30.5 -254t91 -148.5t122 -64.5t149.5 -16z" />
|
||||
<glyph unicode="R" horiz-adv-x="1337" d="M909 522l359 -522h-297l-326 481h-221v-481h-246v1366h524q240 0 373 -113.5t133 -324.5q0 -314 -299 -406zM424 707h272q125 0 196 45t71 170q0 127 -71 171t-196 44h-272v-430z" />
|
||||
<glyph unicode="S" horiz-adv-x="1189" d="M371 991q0 -68 71.5 -106.5t173 -65t204 -66.5t174 -138.5t71.5 -254.5q0 -166 -137 -271t-334 -105q-260 0 -451 116v250q176 -131 394 -131q283 0 282 158q0 70 -51 117t-129 69.5t-167 53t-167 66.5t-129 112.5t-51 189.5q0 197 139 297t348 100q184 0 367 -94v-239 q-158 104 -338 104q-113 0 -191.5 -39t-78.5 -123z" />
|
||||
<glyph unicode="T" horiz-adv-x="1169" d="M25 1366h1120v-246h-438v-1120h-246v1120h-436v246z" />
|
||||
<glyph unicode="U" horiz-adv-x="1511" d="M1077 1366h246v-788q0 -283 -150.5 -438.5t-423 -155.5t-422 155.5t-149.5 438.5v788h246v-809q0 -180 78 -264t248 -84t248.5 84t78.5 264v809z" />
|
||||
<glyph unicode="V" horiz-adv-x="1347" d="M674 305l387 1061h262l-522 -1366h-252l-524 1366h262z" />
|
||||
<glyph unicode="W" horiz-adv-x="2045" d="M1765 1366h256l-438 -1366h-254l-305 952l-307 -952h-254l-438 1366h258l307 -1010l325 1010h215l326 -1010z" />
|
||||
<glyph unicode="X" horiz-adv-x="1329" d="M1274 1366l-469 -666l491 -700h-299l-344 487l-344 -487h-284l485 690l-473 676h299l326 -461l323 461h289z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1368" d="M1341 1366l-534 -780v-586h-246v586l-536 780h297l362 -555l360 555h297z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1271" d="M1120 1147l-688 -901h688v-246h-989v225l684 895h-676v246h981v-219z" />
|
||||
<glyph unicode="[" horiz-adv-x="808" d="M432 1235v-1282h207v-191h-395v1663h395v-190h-207z" />
|
||||
<glyph unicode="\" horiz-adv-x="829" d="M129 1548l752 -1749h-203l-754 1749h205z" />
|
||||
<glyph unicode="]" horiz-adv-x="808" d="M379 -47v1282h-207v190h395v-1663h-395v191h207z" />
|
||||
<glyph unicode="^" horiz-adv-x="1146" d="M600 1413l225 -444h-170l-110 260l-111 -260h-170l223 444h113z" />
|
||||
<glyph unicode="_" horiz-adv-x="1118" d="M0 -49h1118v-141h-1118v141z" />
|
||||
<glyph unicode="`" horiz-adv-x="522" d="M293 1395l127 -240h-137l-191 240h201z" />
|
||||
<glyph unicode="a" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155z" />
|
||||
<glyph unicode="b" horiz-adv-x="1181" d="M584 1038q229 0 352 -133t123 -383q0 -137 -36 -241.5t-85 -158.5t-117.5 -88t-119 -42t-101.5 -8q-219 0 -324.5 101t-105.5 243v1085h246v-391q88 16 168 16zM600 195q117 0 164 79.5t47 260.5q0 172 -60.5 240.5t-175.5 68.5q-90 0 -159 -17v-522q0 -110 184 -110z " />
|
||||
<glyph unicode="c" horiz-adv-x="966" d="M365 510q0 -184 68.5 -249.5t209.5 -65.5q127 0 254 51v-205q-145 -57 -295 -57q-233 0 -358 136t-125 390q0 256 125 392t358 136q150 0 295 -57v-205q-121 49 -254 49q-141 0 -209.5 -64.5t-68.5 -250.5z" />
|
||||
<glyph unicode="d" horiz-adv-x="1167" d="M129 522q0 250 122 383t351 133q82 0 170 -16v391h246v-1085q0 -141 -106.5 -242.5t-325.5 -101.5q-51 0 -101.5 8t-118 42t-117.5 88t-85 158.5t-35 241.5zM375 535q0 -180 47 -260t164 -80q186 0 186 110v522q-72 16 -162 17q-115 0 -175 -68.5t-60 -240.5z" />
|
||||
<glyph unicode="e" horiz-adv-x="1144" d="M641 195q180 0 348 79v-198q-170 -92 -385 -92q-68 0 -128 11t-125.5 46t-113 89t-78 149.5t-30.5 220.5q0 246 109.5 393t347.5 147q225 0 340.5 -143t115.5 -352q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45zM586 840q-92 0 -143.5 -59.5t-61.5 -192.5h412 q-10 106 -62.5 179t-144.5 73z" />
|
||||
<glyph unicode="f" horiz-adv-x="731" d="M682 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4z" />
|
||||
<glyph unicode="g" horiz-adv-x="1122" d="M567 1038q215 0 316.5 -98t101.5 -238v-727q0 -49 -9 -93t-38 -98t-77 -92t-135 -64.5t-202 -26.5q-162 0 -295 41v219q123 -41 267 -41q86 0 140 13t73.5 41t24.5 47.5t5 53.5v56q-82 -16 -155 -17q-223 0 -342 129t-119 371q0 135 35 235.5t83 153.5t113.5 86t114.5 41 t98 8zM739 229v476q0 115 -172 114q-98 0 -148 -71.5t-50 -237.5q0 -172 55 -233.5t168 -61.5q75 0 147 14z" />
|
||||
<glyph unicode="h" horiz-adv-x="1228" d="M643 1038q213 0 333 -111.5t120 -312.5v-614h-244v635q0 41 -7 68.5t-30.5 57.5t-77 45t-135.5 15q-96 0 -164 -30v-791h-245v1411h245v-407q88 34 205 34z" />
|
||||
<glyph unicode="i" horiz-adv-x="638" d="M442 0h-245v1022h245v-1022zM444 1161h-251v225h251v-225z" />
|
||||
<glyph unicode="j" horiz-adv-x="593" d="M444 1161h-251v225h251v-225zM197 1022h245v-1036q0 -66 -7 -113t-33.5 -99.5t-72.5 -85t-128 -56t-195 -27.5v190q70 4 112 17.5t57 42t18.5 49t3.5 65.5v1053z" />
|
||||
<glyph unicode="k" horiz-adv-x="1226" d="M1151 0h-311l-338 403l-68 -69v-334h-246v1405h246v-758l344 375h326l-445 -455z" />
|
||||
<glyph unicode="l" horiz-adv-x="659" d="M453 0h-246v1411h246v-1411z" />
|
||||
<glyph unicode="m" horiz-adv-x="1908" d="M1288 1038q207 0 322.5 -112.5t115.5 -311.5v-614h-245v631q0 98 -49.5 148t-184.5 50q-106 0 -209 -24q43 -49 43 -191v-614h-243v637q0 94 -48.5 141t-181.5 47q-88 0 -170 -16v-809h-245v924q229 115 450 114q166 0 277 -75q190 75 368 75z" />
|
||||
<glyph unicode="n" horiz-adv-x="1273" d="M637 1038q213 0 333 -111.5t120 -312.5v-614h-244v635q0 41 -7.5 68.5t-30 57.5t-73.5 45t-131 15q-90 0 -190 -18v-803h-246v926q225 112 469 112z" />
|
||||
<glyph unicode="o" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5z" />
|
||||
<glyph unicode="p" horiz-adv-x="1175" d="M598 1036q51 0 101.5 -8t119 -42t117.5 -88t85 -158.5t36 -241.5q0 -250 -123 -384t-352 -134q-86 0 -168 18v-377h-246v1071q0 141 105.5 242.5t324.5 101.5zM565 170q119 0 181.5 69.5t62.5 245.5q0 180 -47 260t-164 80q-184 0 -184 -110v-533q85 -12 151 -12z" />
|
||||
<glyph unicode="q" horiz-adv-x="1171" d="M115 498q0 137 34.5 241.5t85 158.5t118 88t117.5 42t101 8q219 0 326 -101t107 -243v-1071h-246v377q-82 -18 -170 -18q-229 0 -351 134t-122 384zM360 485q0 -176 62.5 -245.5t181.5 -69.5q68 0 154 12v533q0 111 -187 110q-117 0 -164 -80t-47 -260z" />
|
||||
<glyph unicode="r" horiz-adv-x="741" d="M166 930q25 12 69 28.5t177 47t264 32.5v-213q-154 -2 -264 -34v-791h-246v930z" />
|
||||
<glyph unicode="s" horiz-adv-x="923" d="M346 741q0 -43 50 -67.5t122 -43t143.5 -50t122 -106.5t50.5 -191q0 -129 -104.5 -214t-276.5 -85q-176 0 -324 84v219q135 -90 289 -90q106 0 138 24.5t32 73.5q0 45 -50.5 72.5t-122 48t-143 48.5t-122 92.5t-50.5 162.5q0 154 108.5 236.5t270.5 82.5q152 0 279 -73 v-187q-104 49 -236 49q-176 0 -176 -86z" />
|
||||
<glyph unicode="t" horiz-adv-x="794" d="M709 811h-242v-504q0 -66 27.5 -89t97.5 -23q66 0 117 22v-203q-74 -31 -162 -30q-152 0 -239 90t-87 248v489h-172v211h172v303h246v-303h242v-211z" />
|
||||
<glyph unicode="u" horiz-adv-x="1259" d="M844 1022h248v-559q0 -225 -123 -352t-340 -127t-339 127t-122 352v559h248v-592q0 -123 50 -177t163 -54q115 0 165 54t50 177v592z" />
|
||||
<glyph unicode="v" horiz-adv-x="1169" d="M840 1022h264l-391 -1022h-256l-391 1022h262l256 -772z" />
|
||||
<glyph unicode="w" horiz-adv-x="1710" d="M1372 1022h260l-362 -1022h-246l-168 588l-170 -588h-246l-362 1022h260l217 -737l195 737h211l194 -737z" />
|
||||
<glyph unicode="x" horiz-adv-x="1142" d="M1085 0h-301l-229 326l-231 -326h-267l363 516l-354 506h301l204 -291l205 291h273l-342 -483z" />
|
||||
<glyph unicode="y" horiz-adv-x="1107" d="M778 1022h260l-389 -1047q-82 -223 -178 -300.5t-199 -77.5q-76 0 -155 28v205q59 -25 116 -25q106 0 197 248l-367 969h261l229 -713z" />
|
||||
<glyph unicode="z" horiz-adv-x="999" d="M879 795l-478 -572h478v-223h-787v229l471 570h-461v223h777v-227z" />
|
||||
<glyph unicode="{" horiz-adv-x="784" d="M506 823q0 -86 -52.5 -142t-117.5 -79q66 -20 118 -76.5t52 -142.5v-289q0 -31 3 -48t13 -40.5t37 -35t70 -11.5h24v-184h-41q-162 0 -242.5 90t-80.5 235v293q0 41 -25.5 70t-50.5 37l-27 6v194q12 2 28.5 7.5t45.5 34t29 71.5v293q0 145 81 235.5t242 90.5h41v-185h-24 q-43 0 -70 -11t-37 -34.5t-13 -41t-3 -48.5v-289z" />
|
||||
<glyph unicode="|" horiz-adv-x="954" d="M598 -203h-219v1569h219v-1569z" />
|
||||
<glyph unicode="}" horiz-adv-x="784" d="M301 383q0 86 52.5 142.5t117.5 76.5q-66 23 -118 79t-52 142v289q0 31 -3 48.5t-13.5 41t-37 34.5t-69.5 11h-22v185h39q164 0 244.5 -89.5t80.5 -236.5v-293q0 -43 25.5 -70.5t52.5 -33.5l25 -9v-194q-4 0 -11.5 -2t-25 -10.5t-30.5 -19.5t-24.5 -32.5t-11.5 -48.5 v-293q0 -147 -81 -236t-244 -89h-39v184h22q43 0 69.5 11.5t37 35t13.5 40.5t3 48v289z" />
|
||||
<glyph unicode="~" horiz-adv-x="1071" d="M870 496q-57 -68 -127.5 -74t-138.5 23l-135 61q-68 31 -139.5 24.5t-128.5 -73.5v168q57 68 128.5 74t139.5 -25l135 -61q68 -30 138.5 -23.5t127.5 74.5v-168z" />
|
||||
<glyph unicode="¡" horiz-adv-x="825" d="M543 795h-240v227h240v-227zM563 -344h-280l45 973h190z" />
|
||||
<glyph unicode="¢" horiz-adv-x="976" d="M895 948q-98 41 -209 47v-626q104 6 209 49v-205q-111 -43 -209 -53v-160h-119v156q-219 10 -334.5 145t-115.5 381t115.5 382t334.5 146v156h119v-160q98 -10 209 -53v-205zM362 682q0 -158 51.5 -228.5t153.5 -82.5v622q-102 -12 -153.5 -81.5t-51.5 -229.5z" />
|
||||
<glyph unicode="£" horiz-adv-x="1153" d="M725 1190q-117 0 -178.5 -56.5t-61.5 -152.5v-221h377v-195h-377v-325q6 -2 75 -20.5t85 -21.5l75 -15q58 -11 84.5 -9t74 4t85 15.5t74.5 35.5v-215q-88 -45 -186 -44t-186 25.5t-177.5 46t-190.5 7.5t-198 -80v209q51 39 174 68v319h-174v195h174v235 q0 160 105.5 273.5t327.5 113.5q168 0 331 -94v-211q-149 113 -313 113z" />
|
||||
<glyph unicode="¥" horiz-adv-x="1396" d="M1354 1366l-410 -598h162v-184h-287v-160h287v-184h-287v-240h-246v240h-288v184h288v160h-288v184h161l-409 598h297l362 -555l361 555h297z" />
|
||||
<glyph unicode="§" horiz-adv-x="1247" d="M1112 645q0 -86 -65.5 -137t-161.5 -62q84 -51 84 -167q0 -133 -117 -214t-315 -81q-211 0 -394 120v230q164 -133 369 -133q82 0 141.5 22.5t59.5 69.5q0 35 -59.5 60.5t-143.5 50t-169 56.5t-144.5 95t-59.5 154q0 98 79 152t175 59q-47 20 -78.5 69t-31.5 103 q0 106 67.5 174.5t158.5 93t204 24.5q184 0 344 -92v-211q-164 78 -314 78q-74 0 -135 -21.5t-61 -72.5q0 -27 42 -50.5t105.5 -41t136 -46t136 -61t105.5 -90t42 -131.5zM723 551q61 6 93 33.5t32 54.5q0 37 -55.5 66.5t-147.5 57.5t-106 34q-45 -4 -91.5 -24.5 t-46.5 -53.5q0 -43 68 -75t254 -93z" />
|
||||
<glyph unicode="¨" horiz-adv-x="856" d="M369 1350v-195h-207v195h207zM696 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="©" horiz-adv-x="1593" d="M797 1382q291 0 495.5 -204.5t204.5 -495.5q0 -289 -205 -493.5t-495 -204.5q-289 0 -494 204.5t-205 493.5q0 291 205 495.5t494 204.5zM797 88q248 0 422 174t174 420q0 248 -174.5 422t-421.5 174q-246 0 -420 -174t-174 -422q0 -246 174 -420t420 -174zM823 403 q119 0 230 54v-135q-119 -47 -242 -48q-72 0 -131 17.5t-116.5 58.5t-90.5 126t-33 206t33 206t90.5 127t116.5 59.5t131 17.5q123 0 242 -48v-135q-117 53 -229.5 53.5t-176 -56t-63.5 -224.5t63 -223.5t176 -55.5z" />
|
||||
<glyph unicode="ª" horiz-adv-x="808" d="M385 1382q121 0 186.5 -62.5t65.5 -178.5v-154q0 -80 -58.5 -136t-181.5 -56q-125 0 -184 57t-59 137q0 25 7 48.5t28.5 57t74.5 54t133 20.5q39 0 101 -8q0 106 -121 107q-98 0 -166 -29v111q78 32 174 32zM500 1004v71q-74 6 -82 6q-129 0 -129 -73q0 -92 106 -93 q105 1 105 89z" />
|
||||
<glyph unicode="«" horiz-adv-x="1247" d="M698 911l-372 -389l372 -391h-286l-346 391l346 389h286zM1155 911l-373 -389l373 -391h-287l-346 391l346 389h287z" />
|
||||
<glyph unicode="¬" horiz-adv-x="1273" d="M199 684h876v-389h-176v197h-700v192z" />
|
||||
<glyph unicode="­" horiz-adv-x="950" d="M162 707h624v-193h-624v193z" />
|
||||
<glyph unicode="®" horiz-adv-x="1593" d="M799 1382q291 0 495.5 -204.5t204.5 -495.5q0 -289 -204.5 -493.5t-495.5 -204.5q-289 0 -494 204.5t-205 493.5q0 291 205 495.5t494 204.5zM799 88q248 0 422 174t174 420q0 248 -174 422t-422 174q-246 0 -420 -174t-174 -422q0 -246 174 -420t420 -174zM954 590 l209 -305h-174l-188 280h-129v-280h-144v796h306q139 0 216.5 -66.5t77.5 -189.5q0 -184 -174 -235zM672 696h157q72 0 114 26t42 99.5t-42 100t-114 26.5h-157v-252z" />
|
||||
<glyph unicode="¯" horiz-adv-x="825" d="M655 1325v-145h-479v145h479z" />
|
||||
<glyph unicode="°" horiz-adv-x="792" d="M391.5 1370q108.5 0 165.5 -58.5t57 -168.5q0 -109 -57 -167t-165.5 -58t-166 58t-57.5 167q0 111 57.5 169t166 58zM391.5 1018q59.5 0 86 29.5t26.5 97.5q0 66 -26.5 95.5t-86 29.5t-87.5 -30t-28 -95q0 -68 28 -97.5t87.5 -29.5z" />
|
||||
<glyph unicode="±" horiz-adv-x="1198" d="M696 1061v-275h273v-182h-273v-270h-182v270h-272v182h272v275h182zM242 61v166h727v-166h-727z" />
|
||||
<glyph unicode="²" horiz-adv-x="696" d="M584 1475q0 -180 -254 -396h266v-131h-487v109q125 92 234.5 209.5t109.5 208.5q0 88 -129 88q-119 0 -209 -66v133q106 63 213 64q131 0 193.5 -64.5t62.5 -154.5z" />
|
||||
<glyph unicode="³" horiz-adv-x="686" d="M475 1346q125 -43 125 -177q0 -121 -85 -175t-196 -54q-109 0 -208 53v135q96 -57 200 -57q158 0 158 100q0 113 -162 113h-94v109h98q61 0 91 25.5t30 62.5q0 80 -129 80q-100 0 -176 -48v136q98 45 184 45q109 0 181.5 -49.5t72.5 -159.5q0 -90 -90 -139z" />
|
||||
<glyph unicode="´" horiz-adv-x="528" d="M121 1155l127 240h201l-191 -240h-137z" />
|
||||
<glyph unicode="µ" horiz-adv-x="1323" d="M879 1022h245v-926q-225 -113 -469 -112q-127 0 -209 51v-465h-243v1452h243v-635q0 -41 7.5 -68.5t30 -57.5t73.5 -45t131 -15q90 0 191 18v803z" />
|
||||
<glyph unicode="¶" horiz-adv-x="911" d="M549 1366h299v-1366h-232v524h-67q-229 0 -350 108.5t-121 313.5q0 203 121 311.5t350 108.5z" />
|
||||
<glyph unicode="·" horiz-adv-x="663" d="M451 672v-228h-240v228h240z" />
|
||||
<glyph unicode="¸" horiz-adv-x="563" d="M297 -10h160l-127 -246h-211z" />
|
||||
<glyph unicode="¹" horiz-adv-x="512" d="M109 1593l143 90h121v-735h-133v586l-131 -82v141z" />
|
||||
<glyph unicode="º" horiz-adv-x="854" d="M422 1384q131 0 200.5 -75.5t69.5 -216.5q0 -143 -69.5 -219t-200.5 -76t-200.5 75.5t-69.5 219.5q0 141 69.5 216.5t200.5 75.5zM422 909q66 0 99.5 38t33.5 145q0 104 -34 142t-99 38q-68 0 -100.5 -38t-32.5 -142q0 -106 32.5 -144.5t100.5 -38.5z" />
|
||||
<glyph unicode="»" horiz-adv-x="1277" d="M563 131l373 389l-373 391h287l346 -391l-346 -389h-287zM106 131l373 389l-373 391h287l346 -391l-346 -389h-287z" />
|
||||
<glyph unicode="¼" horiz-adv-x="1476" d="M109 1290l143 90h121v-735h-133v586l-131 -82v141zM1063 1403h164l-895 -1448h-164zM1286 735v-409h96v-117h-96v-209h-131v209h-330v108l336 418h125zM1155 326v227l-174 -227h174z" />
|
||||
<glyph unicode="½" horiz-adv-x="1527" d="M109 1290l143 90h121v-735h-133v586l-131 -82v141zM1063 1403h164l-895 -1448h-164zM1411 526q0 -180 -254 -395h266v-131h-487v109q125 92 234.5 209.5t109.5 207.5q0 88 -129 88q-119 0 -209 -65v133q106 63 213 63q131 0 193.5 -64.5t62.5 -154.5z" />
|
||||
<glyph unicode="¾" horiz-adv-x="1691" d="M1493 735v-409h96v-117h-96v-209h-131v209h-330v108l336 418h125zM1362 326v227l-174 -227h174zM500 1040q125 -43 125 -176q0 -121 -85 -175t-196 -54q-109 0 -209 53v135q96 -57 201 -57q158 0 158 100q0 113 -162 113h-94v108h98q61 0 91 26t30 63q0 80 -129 79 q-100 0 -176 -47v135q98 45 184 46q109 0 181.5 -49.5t72.5 -159.5q0 -91 -90 -140zM1264 1403h163l-895 -1448h-163z" />
|
||||
<glyph unicode="¿" horiz-adv-x="1042" d="M156 37q0 70 22.5 126t55.5 92l73 74l73 72q34 35 56.5 88.5t22.5 118.5v21h217v-27q0 -104 -31 -184t-76 -127t-89 -86t-74.5 -81t-30.5 -89q0 -182 221 -182q180 0 305 110v-227q-150 -96 -321 -96q-115 0 -200 33.5t-132 92t-69.5 126t-22.5 145.5zM686 795h-240v227 h240v-227z" />
|
||||
<glyph unicode="À" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM659 1722l127 -239h-137l-190 239h200z" />
|
||||
<glyph unicode="Á" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM655 1483l127 239h201l-190 -239h-138z" />
|
||||
<glyph unicode="Â" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM721 1597l-74 -114h-162l187 250h98l188 -250h-163z" />
|
||||
<glyph unicode="Ã" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM1032 1520q-57 -68 -122.5 -74t-127.5 23l-122 61q-60 31 -126.5 24.5t-123.5 -73.5v155q57 68 123.5 74t126.5 -24l122 -61q61 -30 127 -23.5t123 73.5v-155z" />
|
||||
<glyph unicode="Ä" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM662 1677v-194h-207v194h207zM989 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="Å" d="M1135 0l-125 328h-578l-125 -328h-264l543 1366h270l543 -1366h-264zM516 551h408l-203 536zM721 1776q86 0 132 -46.5t46 -130t-46 -130t-132 -46.5q-84 0 -131 46.5t-47 130t47 130t131 46.5zM721 1511q39 0 54.5 19.5t15.5 69t-15.5 69t-54.5 19.5t-54.5 -19.5 t-15.5 -69t15.5 -69t54.5 -19.5z" />
|
||||
<glyph unicode="Æ" horiz-adv-x="2039" d="M1917 1145h-664v-346h576v-232h-576v-346h664v-221h-909v307h-478l-188 -307h-291l864 1366h1002v-221zM1008 512v578l-353 -578h353z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="1286" d="M784 1163q-92 0 -157.5 -16.5t-128 -63.5t-95 -147t-32.5 -252t32.5 -252t95 -147t128 -63.5t157.5 -16.5q199 0 390 90v-229q-170 -72 -349 -80l-123 -242h-213l177 244q-109 12 -198 50t-171 113.5t-127 212t-45 320.5q0 168 39 295t100.5 202.5t148.5 123t170 63.5 t179 16q211 0 412 -81v-230q-191 90 -390 90z" />
|
||||
<glyph unicode="È" horiz-adv-x="1204" d="M424 1145v-346h575v-232h-575v-346h663v-221h-909v1366h909v-221h-663zM598 1722l127 -239h-137l-191 239h201z" />
|
||||
<glyph unicode="É" horiz-adv-x="1204" d="M424 1145v-346h575v-232h-575v-346h663v-221h-909v1366h909v-221h-663zM555 1483l127 239h201l-191 -239h-137z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1204" d="M424 1145v-346h575v-232h-575v-346h663v-221h-909v1366h909v-221h-663zM649 1597l-74 -114h-161l186 250h98l189 -250h-164z" />
|
||||
<glyph unicode="Ë" horiz-adv-x="1204" d="M424 1145v-346h575v-232h-575v-346h663v-221h-909v1366h909v-221h-663zM596 1677v-194h-207v194h207zM924 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="600" d="M424 0v1366h-246v-1366h246zM236 1722l126 -239h-137l-190 239h201z" />
|
||||
<glyph unicode="Í" horiz-adv-x="600" d="M424 0v1366h-246v-1366h246zM240 1483l127 239h200l-190 -239h-137z" />
|
||||
<glyph unicode="Î" horiz-adv-x="600" d="M424 0v1366h-246v-1366h246zM299 1597l-74 -114h-162l187 250h98l189 -250h-164z" />
|
||||
<glyph unicode="Ï" horiz-adv-x="600" d="M424 0v1366h-246v-1366h246zM240 1677v-194h-207v194h207zM567 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="Ð" horiz-adv-x="1509" d="M739 1366q317 0 481 -174t164 -510q0 -334 -163.5 -508t-481.5 -174h-471v598h-162v168h162v600h471zM739 223q213 0 306.5 107.5t93.5 351.5q0 246 -93.5 353.5t-306.5 107.5h-225v-377h242v-168h-242v-375h225z" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1587" d="M1159 1366h246v-1366h-275l-706 1020v-1020h-246v1366h279l702 -1012v1012zM1104 1520q-57 -68 -123 -74t-127 23l-122 61q-60 31 -126.5 24.5t-124.5 -73.5v155q57 68 124 74t127 -24l122 -61q61 -30 127 -23.5t123 73.5v-155z" />
|
||||
<glyph unicode="Ò" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17zM719 1722l127 -239h-137l-191 239h201z" />
|
||||
<glyph unicode="Ó" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17zM680 1483l127 239h201l-191 -239h-137z" />
|
||||
<glyph unicode="Ô" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17zM762 1597l-74 -114h-162l187 250h98l188 -250h-163z" />
|
||||
<glyph unicode="Õ" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17zM1073 1520q-57 -68 -122.5 -74t-127.5 23l-122 61q-60 31 -126.5 24.5 t-123.5 -73.5v155q57 68 123.5 74t126.5 -24l122 -61q61 -30 127 -23.5t123 73.5v-155z" />
|
||||
<glyph unicode="Ö" horiz-adv-x="1538" d="M762 1382q96 0 179 -16t170 -63.5t149.5 -123t101.5 -202.5t39 -295q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16t-179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16zM762 199q70 0 121 9 t105 38.5t88 82t56.5 142.5t22.5 213q0 152 -30.5 253t-91 148.5t-122 63.5t-149.5 16q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212q0 -154 30.5 -255t90 -148.5t122 -64.5t148.5 -17zM702 1677v-194h-206v194h206zM1030 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="×" horiz-adv-x="1062" d="M905 889l-280 -365l280 -364h-182l-193 243l-190 -243h-184l282 364l-282 365h184l190 -246l193 246h182z" />
|
||||
<glyph unicode="Ø" horiz-adv-x="1529" d="M1458 1366l-180 -213q123 -178 123 -471q0 -166 -39 -294t-101.5 -202.5t-149.5 -122t-170 -63.5t-179 -16q-233 0 -387 100l-70 -84h-237l178 211q-121 174 -121 471q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16q233 0 385 -102l74 86h237zM371 684 q0 -168 39 -278l594 702q-84 57 -242 57q-68 0 -119 -9t-105.5 -39t-88 -81t-56 -140t-22.5 -212zM1155 684q0 162 -41 274l-594 -702q84 -57 242 -57q70 0 121 9t105 38.5t88 82t56.5 142.5t22.5 213z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="1511" d="M1077 1366h246v-788q0 -283 -150.5 -438.5t-423 -155.5t-422 155.5t-149.5 438.5v788h246v-809q0 -180 78 -264t248 -84t248.5 84t78.5 264v809zM707 1722l127 -239h-138l-190 239h201z" />
|
||||
<glyph unicode="Ú" horiz-adv-x="1511" d="M1077 1366h246v-788q0 -283 -150.5 -438.5t-423 -155.5t-422 155.5t-149.5 438.5v788h246v-809q0 -180 78 -264t248 -84t248.5 84t78.5 264v809zM668 1483l127 239h200l-190 -239h-137z" />
|
||||
<glyph unicode="Û" horiz-adv-x="1511" d="M1077 1366h246v-788q0 -283 -150.5 -438.5t-423 -155.5t-422 155.5t-149.5 438.5v788h246v-809q0 -180 78 -264t248 -84t248.5 84t78.5 264v809zM750 1597l-74 -114h-162l186 250h99l188 -250h-164z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1511" d="M1077 1366h246v-788q0 -283 -150.5 -438.5t-423 -155.5t-422 155.5t-149.5 438.5v788h246v-809q0 -180 78 -264t248 -84t248.5 84t78.5 264v809zM690 1677v-194h-207v194h207zM1018 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="Ý" horiz-adv-x="1368" d="M731 1483h-137l127 239h201zM1044 1366h297l-534 -780v-586h-246v586l-536 780h297l362 -555z" />
|
||||
<glyph unicode="Þ" horiz-adv-x="1253" d="M631 1194q242 0 374 -120t132 -339t-132.5 -339t-373.5 -120h-209v-276h-246v1366h246v-172h209zM612 500q162 0 221.5 59t59.5 176q0 115 -59.5 173.5t-221.5 58.5h-190v-467h190z" />
|
||||
<glyph unicode="ß" horiz-adv-x="1255" d="M1090 1004q0 -109 -63.5 -187t-133.5 -104q37 -10 70.5 -27.5t82 -51.5t77 -93.5t28.5 -134.5q0 -201 -160 -309.5t-413 -96.5v199q346 -4 346 215q0 193 -346 204v181q66 0 124 11t113 58t55 127q0 213 -219 213q-51 0 -89 -13t-75.5 -48t-58 -109.5t-20.5 -187.5v-850 h-228v856q0 156 40 265.5t108.5 162.5t140.5 75.5t156 22.5q223 0 344 -113t121 -265z" />
|
||||
<glyph unicode="à" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM514 1395l127 -240h-137l-191 240h201z" />
|
||||
<glyph unicode="á" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM459 1155l127 240h200l-190 -240h-137z" />
|
||||
<glyph unicode="â" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM573 1270l-73 -115h-162l186 250h99l188 -250h-164z" />
|
||||
<glyph unicode="ã" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM881 1192q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v156q57 68 124 74t127 -25l122 -61q61 -30 126.5 -23.5t123.5 74.5v-156z" />
|
||||
<glyph unicode="ä" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM494 1350v-195h-207v195h207zM821 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="å" horiz-adv-x="1110" d="M532 1038q219 0 335 -111.5t116 -322.5v-276q0 -141 -105.5 -242.5t-324.5 -101.5q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193q-172 0 -299 -52v199q141 57 313 57zM737 356v129q-86 12 -147 13 q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM567 1448q86 0 132 -46t46 -130t-46 -130t-132 -46q-84 0 -131 46t-47 130t47 130t131 46zM567 1184q39 0 54.5 19.5t15.5 68.5t-15.5 68.5t-54.5 19.5t-54 -19.5t-15 -68.5t15 -68.5t54 -19.5z" />
|
||||
<glyph unicode="æ" horiz-adv-x="1792" d="M1640 545q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45q180 0 348 79v-198q-170 -92 -385 -92q-104 0 -193 43t-135 102q-106 -145 -327 -145q-225 0 -331.5 102t-106.5 248q0 31 6 63.5t31.5 81.5t69.5 86t130 63.5t203 26.5q84 0 180 -14q0 193 -217 193 q-172 0 -299 -52v199q141 57 313 57q236 0 338 -143q35 57 121 101t199 44q225 0 340.5 -143t115.5 -352zM731 356v129q-86 12 -147 13q-231 0 -232 -133q0 -164 193 -164q186 -1 186 155zM979 588h412q-10 106 -62.5 179t-144.5 73t-143.5 -59.5t-61.5 -192.5z" />
|
||||
<glyph unicode="ç" horiz-adv-x="966" d="M365 510q0 -184 68.5 -249.5t209.5 -65.5q127 0 254 51v-205q-106 -45 -227 -53l-123 -244h-213l176 246q-190 25 -290.5 158t-100.5 362q0 256 125 392t358 136q150 0 295 -57v-205q-121 49 -254 49q-141 0 -209.5 -64.5t-68.5 -250.5z" />
|
||||
<glyph unicode="è" horiz-adv-x="1144" d="M641 195q180 0 348 79v-198q-170 -92 -385 -92q-68 0 -128 11t-125.5 46t-113 89t-78 149.5t-30.5 220.5q0 246 109.5 393t347.5 147q225 0 340.5 -143t115.5 -352q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45zM586 840q-92 0 -143.5 -59.5t-61.5 -192.5h412 q-10 106 -62.5 179t-144.5 73zM535 1395l127 -240h-138l-190 240h201z" />
|
||||
<glyph unicode="é" horiz-adv-x="1144" d="M641 195q180 0 348 79v-198q-170 -92 -385 -92q-68 0 -128 11t-125.5 46t-113 89t-78 149.5t-30.5 220.5q0 246 109.5 393t347.5 147q225 0 340.5 -143t115.5 -352q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45zM586 840q-92 0 -143.5 -59.5t-61.5 -192.5h412 q-10 106 -62.5 179t-144.5 73zM496 1155l127 240h200l-190 -240h-137z" />
|
||||
<glyph unicode="ê" horiz-adv-x="1144" d="M641 195q180 0 348 79v-198q-170 -92 -385 -92q-68 0 -128 11t-125.5 46t-113 89t-78 149.5t-30.5 220.5q0 246 109.5 393t347.5 147q225 0 340.5 -143t115.5 -352q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45zM586 840q-92 0 -143.5 -59.5t-61.5 -192.5h412 q-10 106 -62.5 179t-144.5 73zM582 1270l-74 -115h-162l186 250h99l188 -250h-164z" />
|
||||
<glyph unicode="ë" horiz-adv-x="1144" d="M641 195q180 0 348 79v-198q-170 -92 -385 -92q-68 0 -128 11t-125.5 46t-113 89t-78 149.5t-30.5 220.5q0 246 109.5 393t347.5 147q225 0 340.5 -143t115.5 -352q0 -86 -4 -127h-657q10 -133 79.5 -178t180.5 -45zM586 840q-92 0 -143.5 -59.5t-61.5 -192.5h412 q-10 106 -62.5 179t-144.5 73zM516 1350v-195h-207v195h207zM844 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="ì" horiz-adv-x="638" d="M442 0v1022h-245v-1022h245zM264 1395l127 -240h-137l-191 240h201z" />
|
||||
<glyph unicode="í" horiz-adv-x="638" d="M442 0v1022h-245v-1022h245zM248 1155l127 240h200l-190 -240h-137z" />
|
||||
<glyph unicode="î" horiz-adv-x="638" d="M442 0v1022h-245v-1022h245zM319 1270l-73 -115h-162l186 250h99l188 -250h-164z" />
|
||||
<glyph unicode="ï" horiz-adv-x="638" d="M442 0v1022h-245v-1022h245zM260 1350v-195h-207v195h207zM588 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="ð" horiz-adv-x="1232" d="M887 1223q199 -195 198 -594q0 -645 -485 -645q-127 0 -224 43t-151.5 114.5t-81 152.5t-26.5 167q0 211 120.5 331.5t342.5 120.5q160 0 249 -69q-27 152 -145 237l-180 -123l-78 113l104 74q-41 10 -90 10q-82 0 -145 -10v219q92 20 160 20q178 0 315 -75l162 112 l78 -114zM600 201q39 0 76 16t79 57t64.5 131.5t18.5 217.5q-104 70 -238 69q-113 0 -174 -62.5t-61 -166.5q0 -31 7 -66t27.5 -84t72.5 -80.5t128 -31.5z" />
|
||||
<glyph unicode="ñ" horiz-adv-x="1273" d="M637 1038q213 0 333 -111.5t120 -312.5v-614h-244v635q0 41 -7.5 68.5t-30 57.5t-73.5 45t-131 15q-90 0 -190 -18v-803h-246v926q225 112 469 112zM948 1192q-57 -68 -122.5 -74t-127.5 24l-121 60q-60 31 -127 25t-124 -74v156q57 68 123.5 74t127.5 -25l121 -61 q61 -30 127 -23.5t123 74.5v-156z" />
|
||||
<glyph unicode="ò" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5zM526 1395l127 -240h-137l-190 240h200z" />
|
||||
<glyph unicode="ó" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5zM514 1155l127 240h201l-191 -240h-137z" />
|
||||
<glyph unicode="ô" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5zM584 1270l-74 -115h-162l187 250h98l188 -250h-164z" />
|
||||
<glyph unicode="õ" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5zM895 1192q-57 -68 -122.5 -74t-127.5 24l-122 60 q-60 31 -126.5 25t-124.5 -74v156q57 68 124 74t127 -25l122 -61q61 -30 127 -23.5t123 74.5v-156z" />
|
||||
<glyph unicode="ö" horiz-adv-x="1159" d="M583.5 1036q233.5 0 358.5 -136t125 -390t-125 -390t-358.5 -136t-358.5 136t-125 390t125 390t358.5 136zM584 186q121 0 179 66.5t58 257t-58 257.5t-179 67t-179.5 -67t-58.5 -257.5t58.5 -257t179.5 -66.5zM524 1350v-195h-207v195h207zM852 1350v-195h-207v195h207z " />
|
||||
<glyph unicode="÷" horiz-adv-x="1286" d="M211 610h866v-164h-866v164zM541 129v193h207v-193h-207zM541 737v193h207v-193h-207z" />
|
||||
<glyph unicode="ø" horiz-adv-x="1175" d="M1139 1022l-150 -176q82 -127 82 -336q0 -254 -125 -390t-358 -136q-158 0 -271 65l-41 -49h-237l147 176q-82 133 -82 334q0 254 125 390t359 136q164 0 270 -63l43 49h238zM350 510q0 -68 10 -129l361 426q-47 27 -133 27q-121 0 -179.5 -67t-58.5 -257zM825 510 q0 82 -8 131l-360 -426q51 -29 131 -29q121 0 179 67t58 257z" />
|
||||
<glyph unicode="ù" horiz-adv-x="1259" d="M844 1022h248v-559q0 -225 -123 -352t-340 -127t-339 127t-122 352v559h248v-592q0 -123 50 -177t163 -54q115 0 165 54t50 177v592zM582 1395l127 -240h-138l-190 240h201z" />
|
||||
<glyph unicode="ú" horiz-adv-x="1259" d="M844 1022h248v-559q0 -225 -123 -352t-340 -127t-339 127t-122 352v559h248v-592q0 -123 50 -177t163 -54q115 0 165 54t50 177v592zM551 1155l127 240h201l-191 -240h-137z" />
|
||||
<glyph unicode="û" horiz-adv-x="1259" d="M844 1022h248v-559q0 -225 -123 -352t-340 -127t-339 127t-122 352v559h248v-592q0 -123 50 -177t163 -54q115 0 165 54t50 177v592zM629 1270l-74 -115h-162l187 250h98l188 -250h-164z" />
|
||||
<glyph unicode="ü" horiz-adv-x="1259" d="M844 1022h248v-559q0 -225 -123 -352t-340 -127t-339 127t-122 352v559h248v-592q0 -123 50 -177t163 -54q115 0 165 54t50 177v592zM569 1350v-195h-207v195h207zM897 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="ý" horiz-adv-x="1107" d="M778 1022h260l-389 -1047q-82 -223 -178 -300.5t-199 -77.5q-76 0 -155 28v205q59 -25 116 -25q106 0 197 248l-367 969h261l229 -713zM610 1155h-137l127 240h201z" />
|
||||
<glyph unicode="þ" horiz-adv-x="1157" d="M584 1028q229 0 352 -133t123 -383t-123 -383t-352 -133q-80 0 -168 16v-389h-246v1778h246v-389q88 16 168 16zM575 190q115 0 175.5 71t60.5 251t-60.5 251t-175.5 71q-90 0 -159 -17v-610q69 -17 159 -17z" />
|
||||
<glyph unicode="ÿ" horiz-adv-x="1107" d="M778 1022h260l-389 -1047q-82 -223 -178 -300.5t-199 -77.5q-76 0 -155 28v205q59 -25 116 -25q106 0 197 248l-367 969h261l229 -713zM492 1350v-195h-207v195h207zM819 1350v-195h-207v195h207z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="2074" d="M1939 1145h-663v-346h575v-232h-575v-346h663v-221h-909v27q-115 -43 -270 -43q-96 0 -179 16t-170 63.5t-148.5 122t-100.5 202.5t-39 294q0 168 39 295t100.5 202.5t148.5 123t170 63.5t179 16q147 0 270 -43v27h909v-221zM793 199q145 0 237 37v884q-111 45 -237 45 q-94 0 -161 -16t-131.5 -63.5t-98 -148.5t-33.5 -253q0 -154 33.5 -255t98 -148.5t131.5 -64.5t161 -17z" />
|
||||
<glyph unicode="œ" horiz-adv-x="1853" d="M1733 545q0 -86 -4 -127h-658q10 -133 80 -178t180 -45q180 0 348 79v-198q-170 -92 -385 -92q-233 0 -356 135q-123 -133 -356.5 -133t-358.5 136t-125 390t125 390t359 136q229 0 356 -133q119 135 338 135q225 0 341 -143t116 -352zM581.5 188q120.5 0 179 67 t58.5 257t-58.5 257t-179 67t-179 -67t-58.5 -257t58.5 -257t179 -67zM1071 588h412q-10 106 -62.5 179t-144.5 73t-143.5 -59.5t-61.5 -192.5z" />
|
||||
<glyph unicode="Ÿ" horiz-adv-x="1368" d="M1341 1366l-534 -780v-586h-246v586l-536 780h297l362 -555l360 555h297zM625 1677v-194h-207v194h207zM952 1677v-194h-207v194h207z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="874" d="M436 1270l-74 -115h-161l186 250h98l189 -250h-164z" />
|
||||
<glyph unicode="˜" horiz-adv-x="1058" d="M838 1192q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v156q57 68 124 74t127 -25l122 -61q61 -30 126.5 -23.5t123.5 74.5v-156z" />
|
||||
<glyph unicode=" " horiz-adv-x="886" />
|
||||
<glyph unicode=" " horiz-adv-x="1775" />
|
||||
<glyph unicode=" " horiz-adv-x="886" />
|
||||
<glyph unicode=" " horiz-adv-x="1775" />
|
||||
<glyph unicode=" " horiz-adv-x="591" />
|
||||
<glyph unicode=" " horiz-adv-x="442" />
|
||||
<glyph unicode=" " horiz-adv-x="294" />
|
||||
<glyph unicode=" " horiz-adv-x="294" />
|
||||
<glyph unicode=" " horiz-adv-x="221" />
|
||||
<glyph unicode=" " horiz-adv-x="354" />
|
||||
<glyph unicode=" " horiz-adv-x="98" />
|
||||
<glyph unicode="‐" horiz-adv-x="950" d="M162 707h624v-193h-624v193z" />
|
||||
<glyph unicode="‑" horiz-adv-x="950" d="M162 707h624v-193h-624v193z" />
|
||||
<glyph unicode="‒" horiz-adv-x="950" d="M162 707h624v-193h-624v193z" />
|
||||
<glyph unicode="–" horiz-adv-x="1146" d="M141 692h860v-192h-860v192z" />
|
||||
<glyph unicode="—" horiz-adv-x="1824" d="M162 692h1501v-192h-1501v192z" />
|
||||
<glyph unicode="‘" horiz-adv-x="552" d="M96 1384h215l152 -401h-184z" />
|
||||
<glyph unicode="’" horiz-adv-x="552" d="M248 1384h215l-182 -401h-185z" />
|
||||
<glyph unicode="‚" horiz-adv-x="651" d="M299 172h215l-182 -401h-185z" />
|
||||
<glyph unicode="“" horiz-adv-x="858" d="M408 1384h215l151 -401h-184zM96 1384h215l152 -401h-184z" />
|
||||
<glyph unicode="”" horiz-adv-x="858" d="M248 1384h215l-182 -401h-185zM559 1384h215l-182 -401h-184z" />
|
||||
<glyph unicode="„" horiz-adv-x="948" d="M299 172h215l-182 -401h-185zM610 172h215l-182 -401h-184z" />
|
||||
<glyph unicode="•" horiz-adv-x="890" d="M717 661.5q0 -112.5 -79 -192.5t-192 -80q-115 0 -194.5 80t-79.5 192.5t80 192.5t194 80q113 0 192 -80t79 -192.5z" />
|
||||
<glyph unicode="…" horiz-adv-x="1726" d="M459 227v-227h-240v227h240zM1505 227v-227h-239v227h239zM983 227v-227h-240v227h240z" />
|
||||
<glyph unicode=" " horiz-adv-x="354" />
|
||||
<glyph unicode="‹" horiz-adv-x="770" d="M696 911l-372 -389l372 -391h-286l-347 391l347 389h286z" />
|
||||
<glyph unicode="›" horiz-adv-x="815" d="M111 131l372 389l-372 391h286l346 -391l-346 -389h-286z" />
|
||||
<glyph unicode=" " horiz-adv-x="442" />
|
||||
<glyph unicode="€" d="M920 1163q-137 0 -231.5 -43t-141.5 -164h530v-178h-567q-4 -57 -4 -94t4 -94h567v-178h-530q47 -121 141 -164t232 -43q197 0 391 90v-229q-205 -82 -414 -82q-492 0 -604 428h-191v178h162q-4 57 -4 94t4 94h-162v178h191q115 428 604 428q209 0 414 -81v-230 q-194 90 -391 90z" />
|
||||
<glyph unicode="™" horiz-adv-x="1572" d="M100 1245v121h559v-121h-219v-561h-121v561h-219zM1096 1081l196 285h138v-682h-123v506l-211 -303l-211 303v-506h-123v682h137z" />
|
||||
<glyph unicode="" horiz-adv-x="1020" d="M0 1020h1020v-1020h-1020v1020z" />
|
||||
<glyph unicode="fi" horiz-adv-x="1333" d="M682 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4zM1200 0v1022h-246v-1022h246zM1202 1161v225h-252v-225h252z" />
|
||||
<glyph unicode="fl" horiz-adv-x="1333" d="M682 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4zM1204 0v1411h-246v-1411h246z" />
|
||||
<glyph unicode="ffi" horiz-adv-x="2101" d="M1904 0h-245v1022h245v-1022zM1906 1161h-251v225h251v-225zM1413 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4zM682 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174 q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4z" />
|
||||
<glyph unicode="ffl" horiz-adv-x="2121" d="M1915 0h-246v1411h246v-1411zM1413 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10v-193q-37 4 -55 4zM682 1247q-96 0 -138 -46t-42 -179h235v-211h-235v-811h-246v811h-174v211h174q2 424 381 424q49 0 100 -10 v-193q-37 4 -55 4z" />
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 48 KiB |
|
@ -1,245 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
This is a custom SVG webfont generated by Font Squirrel.
|
||||
Copyright : Copyright c 2011 by Vissol Ltd All rights reserved
|
||||
Designer : Joe Prince
|
||||
Foundry : Joe Prince
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="webfontNj5iy4Dl" horiz-adv-x="1529" >
|
||||
<font-face units-per-em="2048" ascent="1638" descent="-410" />
|
||||
<missing-glyph horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="	" horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="!" horiz-adv-x="800" d="M489 174v-174h-186v174h186zM299 1366h195l-17 -1032h-162z" />
|
||||
<glyph unicode=""" horiz-adv-x="821" d="M651 1384l-37 -411h-118l-35 411h190zM166 1384h190l-34 -411h-119z" />
|
||||
<glyph unicode="#" horiz-adv-x="1210" d="M844 1069h143l-39 -221h137v-135h-159l-56 -318h158v-135h-180l-39 -221h-143l39 221h-259l-36 -221h-144l39 221h-160v135h183l55 318h-180v135h203l38 221h144l-39 -221h256zM727 395l55 318h-256l-55 -318h256z" />
|
||||
<glyph unicode="$" horiz-adv-x="1198" d="M1075 358q0 -156 -103.5 -252t-291.5 -116v-211h-127v207q-193 6 -377 98v197q180 -109 377 -115v467q-76 23 -118 38t-102.5 46t-93 64.5t-57 89t-24.5 122.5q0 145 96 256t299 131v209h127v-207q160 -10 307 -86v-188q-141 86 -307 90v-418q86 -31 145.5 -60.5 t122 -78.5t95 -120t32.5 -163zM348 993q0 -57 51.5 -94t153.5 -74v367q-205 -35 -205 -199zM680 174q205 35 205 184q0 86 -53.5 138.5t-151.5 91.5v-414z" />
|
||||
<glyph unicode="%" horiz-adv-x="1814" d="M442.5 1360q147.5 0 222 -100.5t74.5 -278.5t-74.5 -277.5t-222 -99.5t-222.5 99.5t-75 277.5t75 278.5t222.5 100.5zM442 719q90 0 128 64.5t38 197.5q0 135 -38 198.5t-128 63.5t-128 -63.5t-38 -198.5q0 -133 38 -197.5t128 -64.5zM1268 1366h151l-858 -1366h-151z M1384.5 6q-147.5 0 -222.5 100.5t-75 278.5q0 176 75 276.5t222.5 100.5t222 -100.5t74.5 -276.5q0 -178 -74.5 -278.5t-222 -100.5zM1384.5 647q-90.5 0 -128 -64.5t-37.5 -197.5q0 -135 37.5 -198.5t128 -63.5t128 63.5t37.5 198.5q0 133 -37.5 197.5t-128 64.5z" />
|
||||
<glyph unicode="&" horiz-adv-x="1325" d="M1028 285l238 -285h-228l-116 141q-158 -158 -377 -157q-113 0 -200 39.5t-136 103t-73.5 129.5t-24.5 129q0 115 54 216t210 192q-127 158 -127 272q0 131 93 225t226 94q135 0 227.5 -90t92.5 -221q0 -109 -56.5 -183.5t-183.5 -148.5l266 -319q37 84 54 176h176 q-27 -168 -115 -313zM569 1233q-63 0 -108 -45t-45 -110.5t114 -203.5q119 68 155 111t36 100q0 63 -43 105.5t-109 42.5zM549 143q156 0 270 123l-327 396q-74 -39 -121 -79t-64.5 -81t-21.5 -64.5t-4 -58.5q0 -31 11 -65.5t38.5 -75.5t84 -68t134.5 -27z" />
|
||||
<glyph unicode="'" horiz-adv-x="524" d="M166 1384h190l-34 -411h-119z" />
|
||||
<glyph unicode="(" horiz-adv-x="722" d="M586 1483q-211 -416 -211 -856q0 -436 211 -858h-185q-211 422 -211 858q0 440 211 856h185z" />
|
||||
<glyph unicode=")" horiz-adv-x="722" d="M133 -231q211 412 211 858q0 449 -211 856h184q211 -416 211 -856q0 -436 -211 -858h-184z" />
|
||||
<glyph unicode="*" horiz-adv-x="841" d="M670 1260l-160 -72l160 -70l-64 -112l-139 102l14 -166h-125l19 166l-139 -102l-64 112l162 70l-162 72l64 108l139 -100l-19 168h125l-14 -168l139 100z" />
|
||||
<glyph unicode="+" horiz-adv-x="1150" d="M637 686h295v-141h-295v-295h-141v295h-297v141h297v297h141v-297z" />
|
||||
<glyph unicode="," horiz-adv-x="667" d="M303 172h193l-172 -401h-172z" />
|
||||
<glyph unicode="-" horiz-adv-x="950" d="M162 690h624v-160h-624v160z" />
|
||||
<glyph unicode="." horiz-adv-x="712" d="M455 182v-182h-195v182h195z" />
|
||||
<glyph unicode="/" horiz-adv-x="870" d="M723 1548h178l-754 -1749h-176z" />
|
||||
<glyph unicode="0" horiz-adv-x="1351" d="M678 1382q104 0 191 -29.5t171 -101t132.5 -216t48.5 -351.5q0 -168 -34 -295t-86 -202.5t-126 -123t-144.5 -63.5t-152.5 -16t-153.5 16t-145.5 63.5t-126 123t-86 202.5t-34 295q0 166 34 294t86 202.5t126 122t145.5 63.5t153.5 16zM678 156q55 0 100 9t94.5 42t82 88 t54 154.5t21.5 234.5t-21.5 233.5t-54 153.5t-82 88t-94.5 42t-100 9q-57 0 -101.5 -9t-94.5 -42t-82.5 -88t-54 -153.5t-21.5 -233.5t21.5 -234.5t54 -154.5t82.5 -88t94.5 -42t101.5 -9z" />
|
||||
<glyph unicode="1" horiz-adv-x="925" d="M434 1366h207v-1366h-190v1180l-240 -140v199z" />
|
||||
<glyph unicode="2" horiz-adv-x="1189" d="M1006 989q0 -346 -519 -799h533v-190h-862v152q111 84 214 177t210.5 208.5t172 234.5t64.5 215q0 219 -303 219q-184 0 -336 -102v180q170 98 361 98q238 0 351.5 -115.5t113.5 -277.5z" />
|
||||
<glyph unicode="3" horiz-adv-x="1193" d="M799 731q229 -102 229 -332q0 -80 -27.5 -150.5t-86 -132t-161 -97t-237.5 -35.5q-178 0 -350 79v187q160 -92 334 -92q338 0 338 239.5t-359 239.5h-119v168h115q295 0 295 199q0 201 -295 200q-152 0 -278 -69v182q141 66 301 65q238 0 350.5 -110.5t112.5 -267.5 q0 -177 -162 -273z" />
|
||||
<glyph unicode="4" horiz-adv-x="1210" d="M891 600h194v-170h-194v-430h-191v430h-622v170l600 766h213v-766zM303 600h397v494z" />
|
||||
<glyph unicode="5" horiz-adv-x="1228" d="M248 1366h756v-176h-590l-33 -348q100 27 207 26q238 0 361.5 -112.5t123.5 -329.5t-124 -329.5t-361.5 -112.5t-401.5 102v205q133 -125 385 -125q180 0 246 65.5t66 194.5q0 131 -69 196.5t-263 65.5q-150 0 -277 -49l-96 100z" />
|
||||
<glyph unicode="6" horiz-adv-x="1202" d="M758 1382q106 0 211 -28v-172q-84 25 -183 24q-180 0 -295.5 -100t-154.5 -287q111 72 285 72q240 0 348 -128t108 -310q0 -193 -120.5 -331t-350.5 -138q-473 0 -473 643q0 141 25.5 256.5t65.5 191.5t96.5 134.5t111.5 90t119.5 51t112 25.5t94.5 6zM606 717 q-176 0 -282 -101q2 -131 24.5 -224t50 -138t72.5 -68.5t70.5 -26.5t64.5 -3q88 0 149.5 32.5t87 85t35 94.5t9.5 85q0 264 -281 264z" />
|
||||
<glyph unicode="7" horiz-adv-x="1189" d="M143 1366h951v-180l-572 -1186h-211l580 1178h-748v188z" />
|
||||
<glyph unicode="8" horiz-adv-x="1196" d="M606 639q-291 0 -291 -225q0 -37 9.5 -74t37 -82t90 -72.5t154.5 -27.5t154.5 27.5t90.5 72.5t37 82t9 74q0 225 -291 225zM365 1022q0 -31 8 -60.5t30.5 -67.5t74.5 -60.5t128 -22.5t128 22.5t73.5 60.5t30 67.5t8.5 60.5q0 186 -240 186q-241 0 -241 -186zM885 737 q201 -106 200 -321q0 -178 -122.5 -305t-356 -127t-357.5 128t-124 304q0 104 57.5 188t147.5 131q-154 98 -154 283q0 150 105.5 257t324.5 107t324.5 -107.5t105.5 -256.5q1 -187 -151 -281z" />
|
||||
<glyph unicode="9" horiz-adv-x="1212" d="M438 -16q-106 0 -211 28v172q88 -25 183 -24q180 0 295.5 100t154.5 287q-111 -72 -285 -72q-240 0 -348 128t-108 310q0 193 120.5 331t352.5 138q471 0 471 -643q0 -141 -25.5 -256.5t-65.5 -191.5t-96.5 -134.5t-111.5 -90t-119.5 -51t-112 -25.5t-94.5 -6zM592 649 q176 0 282 101q-2 131 -24.5 224t-50 138t-72.5 68.5t-70.5 26.5t-64.5 3q-90 0 -151.5 -32.5t-87 -85t-35 -94.5t-9.5 -85q0 -264 283 -264z" />
|
||||
<glyph unicode=":" horiz-adv-x="813" d="M506 274v-180h-193v180h193zM506 922v-181h-193v181h193z" />
|
||||
<glyph unicode=";" horiz-adv-x="858" d="M532 922v-181h-192v181h192zM336 172h192l-172 -401h-172z" />
|
||||
<glyph unicode="<" horiz-adv-x="1357" d="M1096 1004v-181l-643 -272l643 -272v-181l-850 379v148z" />
|
||||
<glyph unicode="=" horiz-adv-x="1306" d="M260 524h789v-159h-789v159zM260 858h789v-160h-789v160z" />
|
||||
<glyph unicode=">" horiz-adv-x="1337" d="M270 98v181l641 272l-641 272v181l848 -379v-148z" />
|
||||
<glyph unicode="?" horiz-adv-x="1042" d="M909 985q0 -82 -30.5 -146.5t-75.5 -106.5l-90 -83q-45 -41 -76 -100.5t-31 -134.5v-70h-180v76q0 104 30.5 184t76 127t89.5 86t74.5 81t30.5 89q0 219 -258 219q-166 0 -305 -123v203q150 96 321 96q115 0 200 -33.5t132 -92t69.5 -126t22.5 -145.5zM616 186v-186h-200 v186h200z" />
|
||||
<glyph unicode="@" horiz-adv-x="1869" d="M1044 1231q82 0 171.5 -21.5t180.5 -74t162.5 -126t117.5 -188t46 -254.5q0 -129 -33.5 -239.5t-113.5 -188.5t-193 -78q-137 0 -186 127q-90 -127 -293 -127q-143 0 -227 64.5t-84 175.5q0 51 16.5 96t59.5 95.5t138 80t232 29.5q84 0 142 -8q0 4 1 15.5t1 17.5 q0 35 -6.5 59.5t-26 50t-62.5 37.5t-110 12q-131 0 -252 -49l18 129q135 45 252 45q156 0 239 -72.5t83 -211.5q0 -53 -9 -129l-16 -125q-6 -49 -4 -98.5t26.5 -73t76.5 -23.5q88 0 151.5 97.5t63.5 287.5q0 143 -56.5 255t-145.5 173.5t-183.5 92t-184.5 30.5 q-184 0 -357 -98t-284.5 -273.5t-111.5 -377.5q0 -127 45 -229.5t109.5 -162t145.5 -99.5t144.5 -54.5t114.5 -14.5q250 0 442 103l-18 -133q-184 -82 -428 -82q-82 0 -169 22.5t-177.5 74.5t-161 128t-115.5 193.5t-45 259.5q0 184 79 348t204 273.5t280 174t311 64.5z M1153 401q4 49 8 74q-55 6 -123 6q-313 0 -313 -176q0 -109 178 -108q141 0 188.5 51t61.5 153z" />
|
||||
<glyph unicode="A" horiz-adv-x="1359" d="M1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="B" horiz-adv-x="1280" d="M938 715l27 -10q16 -6 57 -33t72.5 -59.5t58.5 -92t27 -129.5q0 -68 -18.5 -127t-65.5 -123.5t-150.5 -102.5t-255.5 -38h-512v1366h473q139 0 234.5 -37t138.5 -98.5t59.5 -117.5t16.5 -120q0 -59 -16.5 -109t-40 -80t-48 -51.5t-41.5 -29.5zM369 1196v-408h280 q127 0 193.5 42t66.5 157q0 117 -70.5 163t-207.5 46h-262zM678 170q158 0 234.5 53t76.5 176q0 127 -84 173t-241 46h-295v-450z" />
|
||||
<glyph unicode="C" horiz-adv-x="1286" d="M782 156q203 0 396 86v-176q-205 -82 -418 -82q-94 0 -177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t177 16q213 0 418 -81v-177q-193 86 -396 86q-242 0 -351 -124.5t-109 -403.5q0 -276 109 -402t351 -126z" />
|
||||
<glyph unicode="D" horiz-adv-x="1380" d="M614 1366q315 0 478 -174t163 -510t-162.5 -509t-478.5 -173h-436v1366h436zM584 168q250 0 366.5 124t116.5 390q0 268 -116.5 392t-366.5 124h-215v-1030h215z" />
|
||||
<glyph unicode="E" horiz-adv-x="1187" d="M1069 1188h-700v-416h616v-178h-616v-416h700v-178h-891v1366h891v-178z" />
|
||||
<glyph unicode="F" horiz-adv-x="1124" d="M178 1366h860v-178h-669v-416h589v-178h-589v-594h-191v1366z" />
|
||||
<glyph unicode="G" horiz-adv-x="1386" d="M778 758h463v-666q-229 -109 -481 -108q-96 0 -179 16t-169 63.5t-147.5 123t-100.5 202.5t-39 295q0 166 39 294t100.5 202.5t147.5 122t169 63.5t179 16q227 0 430 -79v-175q-199 82 -412 82q-74 0 -132 -9t-122.5 -42t-107.5 -88t-72 -153.5t-29 -233.5t29 -234.5 t72 -154.5t108.5 -88t125 -42t132.5 -9q135 0 275 39v385h-279v178z" />
|
||||
<glyph unicode="H" horiz-adv-x="1388" d="M1022 1366h188v-1366h-188v594h-655v-594h-189v1366h189v-594h655v594z" />
|
||||
<glyph unicode="I" horiz-adv-x="544" d="M367 1366v-1366h-189v1366h189z" />
|
||||
<glyph unicode="J" horiz-adv-x="931" d="M561 1366h189v-950q0 -133 -40 -225.5t-106.5 -134.5t-127 -58t-128.5 -16q-158 0 -287 84v198q119 -96 269 -96q117 0 174 49t57 186v963z" />
|
||||
<glyph unicode="K" horiz-adv-x="1380" d="M653 748l631 -748h-235l-521 614l-161 -172v-442h-189v1366h189v-661l626 661h240z" />
|
||||
<glyph unicode="L" horiz-adv-x="1089" d="M367 178h680v-178h-869v1366h189v-1188z" />
|
||||
<glyph unicode="M" horiz-adv-x="1665" d="M1282 1366h205v-1366h-189v1077l-467 -612l-464 612v-1077h-189v1366h205l448 -590z" />
|
||||
<glyph unicode="N" horiz-adv-x="1511" d="M1159 1366h191v-1366h-211l-770 1094v-1094h-191v1366h217l764 -1087v1087z" />
|
||||
<glyph unicode="O" d="M760 1384q94 0 177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t177 16zM759.5 156q71.5 0 127 9t118 42 t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9z" />
|
||||
<glyph unicode="P" horiz-adv-x="1228" d="M668 1366q227 0 352 -112.5t125 -317.5t-125 -317.5t-352 -112.5h-301v-506h-191v1366h492zM651 674q182 0 243.5 70.5t61.5 189.5t-61 189.5t-244 70.5h-284v-520h284z" />
|
||||
<glyph unicode="Q" d="M1395 684q0 -182 -45 -317.5t-124 -212t-167 -114.5t-195 -50q0 -82 54.5 -143.5t150.5 -61.5v-145q-170 0 -280.5 101t-110.5 247q-111 10 -202 46t-174 111.5t-130 213t-47 325.5q0 166 39 294t100.5 202.5t148.5 122t170 63.5t177 16q96 0 179 -16t169 -63.5 t147.5 -122t100.5 -202.5t39 -294zM759.5 156q69.5 0 126 9t119 42t104.5 88t69.5 154.5t27.5 234.5t-27.5 233.5t-68.5 153.5t-104.5 88t-119 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -153.5t-28 -233.5t28 -234.5t69 -154.5t103.5 -88t118.5 -42t125.5 -9z" />
|
||||
<glyph unicode="R" horiz-adv-x="1298" d="M868 549l363 -549h-225l-330 518h-307v-518h-191v1366h504q229 0 360.5 -107.5t131.5 -306.5q0 -168 -87.5 -267t-218.5 -136zM674 698q178 0 243.5 69t65.5 179q0 250 -317 250h-297v-498h305z" />
|
||||
<glyph unicode="S" horiz-adv-x="1155" d="M315 993q0 -55 54.5 -96t134.5 -65.5t175 -63.5t175 -83t134 -129t54 -198q0 -176 -131 -275t-362 -99q-205 0 -406 100v197q190 -115 389 -115q319 0 320 192q0 82 -54.5 139.5t-133.5 84.5l-176 59q-95 33 -175 67.5t-134 107.5t-54 177q0 162 116.5 275.5t360.5 113.5 q184 0 352 -86v-188q-150 90 -329 90q-310 0 -310 -205z" />
|
||||
<glyph unicode="T" horiz-adv-x="1163" d="M1137 1366v-178h-463v-1188h-189v1188h-460v178h1112z" />
|
||||
<glyph unicode="U" horiz-adv-x="1474" d="M1106 1366h190v-803q0 -276 -146 -428.5t-412.5 -152.5t-413 152.5t-146.5 428.5v803h191v-819q0 -201 90 -297t278.5 -96t278.5 96t90 297v819z" />
|
||||
<glyph unicode="V" horiz-adv-x="1288" d="M1061 1366h203l-525 -1366h-190l-524 1366h202l416 -1126z" />
|
||||
<glyph unicode="W" horiz-adv-x="1961" d="M1733 1366h198l-438 -1366h-195l-319 1026l-322 -1026h-194l-438 1366h198l338 -1090l336 1090h162l338 -1090z" />
|
||||
<glyph unicode="X" horiz-adv-x="1253" d="M1217 1366l-484 -664l496 -702h-234l-368 526l-371 -526h-231l489 684l-477 682h231l359 -510l358 510h232z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1275" d="M1251 1366l-520 -754v-612h-188v610l-518 756h229l383 -559l383 559h231z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1247" d="M1098 1196l-717 -1008h717v-188h-967v166l721 1010h-700v190h946v-170z" />
|
||||
<glyph unicode="[" horiz-adv-x="784" d="M401 1274v-1360h213v-152h-370v1663h370v-151h-213z" />
|
||||
<glyph unicode="\" horiz-adv-x="802" d="M102 1548l752 -1749h-176l-754 1749h178z" />
|
||||
<glyph unicode="]" horiz-adv-x="780" d="M383 1274h-211v151h369v-1663h-369v152h211v1360z" />
|
||||
<glyph unicode="^" horiz-adv-x="1146" d="M600 1413l217 -444h-143l-129 303l-129 -303h-144l215 444h113z" />
|
||||
<glyph unicode="_" horiz-adv-x="1118" d="M0 -49h1118v-115h-1118v115z" />
|
||||
<glyph unicode="`" horiz-adv-x="491" d="M401 1155h-116l-195 240h184z" />
|
||||
<glyph unicode="a" horiz-adv-x="1093" d="M526 1038q213 0 329 -110.5t116 -317.5v-295q0 -33 -6.5 -65.5t-31 -83.5t-66.5 -89t-126 -65.5t-194 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51v160q145 55 309 55 zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="b" horiz-adv-x="1167" d="M575 1038q88 0 164 -21.5t149 -74.5t114.5 -159.5t41.5 -258.5q0 -135 -31.5 -236.5t-77.5 -157.5t-110.5 -91t-119 -45t-113.5 -10q-111 0 -194 27.5t-125 65.5t-66.5 89t-30.5 84t-6 65v1096h186v-403q106 30 219 30zM592 150q53 0 94 13t83 49t64.5 115t22.5 197 q0 111 -22.5 183.5t-64.5 106.5t-87 46t-107 12q-115 0 -219 -43v-526q0 -153 236 -153z" />
|
||||
<glyph unicode="c" horiz-adv-x="966" d="M616 154q147 0 285 65v-178q-145 -57 -301 -57q-233 0 -357 136t-124 392t124 391t357 135q156 0 301 -57v-178q-141 68 -285 67q-141 0 -221 -72.5t-80 -285.5q0 -113 23.5 -187.5t70 -110.5t94 -48t113.5 -12z" />
|
||||
<glyph unicode="d" horiz-adv-x="1150" d="M129 524q0 152 42 258.5t114.5 159.5t148.5 74.5t164 21.5q111 0 219 -30v403h187v-1096q0 -33 -6.5 -65.5t-31 -83.5t-66.5 -89t-125 -65.5t-193 -27.5q-59 0 -113.5 10t-119 45t-110.5 91t-78 157.5t-32 236.5zM315 524q0 -119 22.5 -197.5t64.5 -114.5t83 -49t97 -13 q236 0 235 153v526q-104 43 -219 43q-61 0 -106.5 -12t-88.5 -46t-65.5 -106.5t-22.5 -183.5z" />
|
||||
<glyph unicode="e" horiz-adv-x="1136" d="M610 143q207 0 353 76v-170q-160 -68 -363 -67q-90 0 -166 22.5t-148.5 74.5t-114.5 159.5t-42 259.5q0 541 453 540q205 0 327.5 -134t122.5 -359q0 -74 -6 -142h-704q34 -260 288 -260zM582 870q-129 0 -189.5 -66.5t-73.5 -230.5h525q-4 51 -17.5 97.5t-41 94.5 t-79.5 76.5t-124 28.5z" />
|
||||
<glyph unicode="f" horiz-adv-x="675" d="M600 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-49h264v-164h-264v-858h-187v858h-143v164h143v49q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8z" />
|
||||
<glyph unicode="g" horiz-adv-x="1101" d="M561 1040q186 0 298 -84t112 -239v-760q0 -68 -19.5 -126t-65.5 -113.5t-138.5 -87t-225.5 -31.5q-154 0 -303 43v178q145 -45 287 -45q98 0 159.5 17.5t85 50t28.5 55t5 59.5v90q-104 -29 -206 -29q-219 0 -337 129t-118 371q0 238 107.5 380t330.5 142zM784 227v502 q0 23 -4 39t-22.5 45t-68.5 44t-128 15q-51 0 -89 -12t-78 -46t-61.5 -108.5t-21.5 -187.5q0 -199 71 -264.5t196 -65.5q110 0 206 39z" />
|
||||
<glyph unicode="h" horiz-adv-x="1187" d="M651 1038q190 0 295 -113.5t105 -322.5v-602h-189v608q0 150 -63.5 200t-165.5 50q-125 0 -252 -49v-809h-188v1411h188v-424q131 51 270 51z" />
|
||||
<glyph unicode="i" horiz-adv-x="589" d="M201 0v1022h188v-1022h-188zM395 1378v-198h-200v198h200z" />
|
||||
<glyph unicode="j" horiz-adv-x="526" d="M176 1180v198h199v-198h-199zM369 1022v-1081q0 -342 -363 -342v159q109 0 142.5 47.5t33.5 135.5v1081h187z" />
|
||||
<glyph unicode="k" horiz-adv-x="1204" d="M627 596l503 -596h-249l-379 475l-127 -123v-352h-187v1411h187v-817l442 428h254z" />
|
||||
<glyph unicode="l" horiz-adv-x="602" d="M207 1411h188v-1411h-188v1411z" />
|
||||
<glyph unicode="m" horiz-adv-x="1853" d="M1266 1040q193 0 301 -101t108 -282v-657h-186v670q0 88 -43 142t-168 54q-135 0 -274 -57q25 -68 24 -152v-657h-188v668q0 90 -47.5 142t-188.5 52q-109 0 -223 -31v-831h-188v938q205 102 425 102q166 0 273 -77q193 77 375 77z" />
|
||||
<glyph unicode="n" horiz-adv-x="1198" d="M356 0h-188v934q213 106 436 106q193 0 302.5 -101t109.5 -280v-659h-189v672q0 90 -46 142t-185 52q-125 0 -240 -37v-829z" />
|
||||
<glyph unicode="o" horiz-adv-x="1161" d="M581.5 1036q92.5 0 170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170 22.5zM581.5 150q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5 t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48t111.5 -12z" />
|
||||
<glyph unicode="p" horiz-adv-x="1167" d="M1044 500q0 -152 -41.5 -259.5t-114.5 -159.5t-148.5 -74.5t-166.5 -22.5q-113 0 -217 30v-403h-188v1098q0 33 6 65.5t30.5 82.5t66.5 88t126 65.5t195 27.5q57 0 111.5 -10t119 -45t111.5 -91t78.5 -157.5t31.5 -234.5zM856 500q0 119 -22.5 197.5t-64.5 114.5t-83 49 t-94 13q-236 0 -236 -153v-528q106 -41 217 -41q63 0 107.5 12t87.5 46t65.5 106.5t22.5 183.5z" />
|
||||
<glyph unicode="q" horiz-adv-x="1157" d="M584 -16q-90 0 -166 21.5t-147.5 74.5t-113.5 160.5t-42 259.5q0 133 31.5 234.5t77.5 157.5t110.5 91t119 45t111.5 10q111 0 195 -27.5t126 -65.5t66.5 -88t30.5 -83t6 -65v-1098h-188v403q-104 -30 -217 -30zM565 874q-53 0 -94 -13t-83 -49t-64.5 -115t-22.5 -197 q0 -111 22.5 -183.5t65.5 -106.5t87 -46t108 -12q113 0 217 41v528q0 153 -236 153z" />
|
||||
<glyph unicode="r" horiz-adv-x="702" d="M354 823v-823h-188v936q256 102 498 102v-172q-152 -2 -310 -43z" />
|
||||
<glyph unicode="s" horiz-adv-x="892" d="M469 1038q139 0 274 -67v-162q-133 61 -251 61q-203 0 -203 -131q0 -43 54 -71.5t130 -50t152.5 -52t131 -102.5t54.5 -178q0 -123 -93 -212t-288 -89q-164 0 -295 71v170q135 -76 287 -75q98 0 149.5 35.5t51.5 90.5q0 63 -53.5 101.5t-130.5 60t-153.5 48t-130 88 t-53.5 159.5q0 127 90.5 216t276.5 89z" />
|
||||
<glyph unicode="t" horiz-adv-x="765" d="M686 864h-272v-594q0 -121 153 -120q70 0 119 30v-168q-72 -29 -145 -28q-37 0 -79 9t-100.5 35.5t-96.5 92t-38 162.5v581h-178v158h178v305h187v-305h272v-158z" />
|
||||
<glyph unicode="u" horiz-adv-x="1208" d="M844 1022h188v-592q0 -213 -113.5 -330.5t-318.5 -117.5t-318.5 117.5t-113.5 330.5v592h186v-606q0 -139 59.5 -204t186.5 -65t185.5 64.5t58.5 204.5v606z" />
|
||||
<glyph unicode="v" horiz-adv-x="1107" d="M842 1022h200l-393 -1022h-192l-391 1022h200l287 -797z" />
|
||||
<glyph unicode="w" horiz-adv-x="1656" d="M1370 1022h207l-338 -1022h-186l-224 711l-225 -711h-186l-338 1022h207l229 -756l225 756h174l228 -756z" />
|
||||
<glyph unicode="x" horiz-adv-x="1073" d="M647 524l369 -524h-230l-249 354l-250 -354h-230l369 510l-360 512h229l242 -342l241 342h230z" />
|
||||
<glyph unicode="y" horiz-adv-x="1073" d="M809 1022h201l-420 -1131q-109 -295 -318 -294q-68 0 -143 16v168q61 -16 115 -17q127 0 205 236l-386 1022h201l275 -766z" />
|
||||
<glyph unicode="z" horiz-adv-x="962" d="M104 1022h748v-172l-518 -674h518v-176h-760v172l520 676h-508v174z" />
|
||||
<glyph unicode="{" horiz-adv-x="763" d="M475 811q0 -123 -119 -207q119 -88 119 -209v-307q0 -92 36 -123t120 -33v-157h-17q-156 0 -237.5 83t-81.5 238v312q0 96 -109 127v137q109 31 109 127v313q0 156 82 238t237 82h17v-158q-84 0 -120 -32t-36 -124v-307z" />
|
||||
<glyph unicode="|" horiz-adv-x="946" d="M567 -203h-188v1569h188v-1569z" />
|
||||
<glyph unicode="}" horiz-adv-x="759" d="M311 395q0 121 119 209q-119 84 -119 207v307q0 94 -35.5 125t-119.5 31v158h18q154 0 237 -82t83 -238v-313q0 -94 106 -127v-137q-106 -33 -106 -127v-312q0 -156 -83 -238.5t-237 -82.5h-18v157q84 2 119.5 33t35.5 123v307z" />
|
||||
<glyph unicode="~" horiz-adv-x="1024" d="M823 512q-57 -68 -122.5 -74t-127.5 24l-121 60q-60 31 -127 25t-124 -74v135q57 68 123.5 74t127.5 -25l121 -60q61 -30 127 -23.5t123 73.5v-135z" />
|
||||
<glyph unicode="¡" horiz-adv-x="788" d="M303 848v174h186v-174h-186zM494 -344h-195l16 1030h162z" />
|
||||
<glyph unicode="¢" horiz-adv-x="976" d="M899 975q-123 57 -237 65v-712q121 8 237 63v-178q-117 -47 -237 -55v-158h-123v158q-205 16 -313.5 152t-108.5 374t108.5 373t313.5 151v158h123v-158q131 -12 237 -55v-178zM313 684q0 -182 59.5 -260t166.5 -94v708q-106 -16 -166 -94t-60 -260z" />
|
||||
<glyph unicode="£" horiz-adv-x="1155" d="M733 1206q-264 0 -264 -209v-258h389v-168h-389v-366q45 -8 139 -33t150.5 -35t135.5 -3t146 44v-182q-86 -47 -186 -47t-191.5 25.5t-183.5 48t-190.5 8t-184.5 -83.5v182q82 66 181 82v360h-181v168h181v258q0 74 23.5 139.5t71.5 122t134 89t201 32.5q172 0 325 -90 v-192q-143 108 -307 108z" />
|
||||
<glyph unicode="¥" horiz-adv-x="1298" d="M1264 1366l-435 -629h215v-153h-301v-162h301v-154h-301v-268h-188v268h-301v154h301v162h-301v153h215l-432 629h229l383 -559l383 559h232z" />
|
||||
<glyph unicode="§" horiz-adv-x="1198" d="M1083 643q0 -90 -64.5 -145.5t-160.5 -79.5q72 -53 72 -131q0 -125 -101.5 -214t-314.5 -89q-190 0 -375 106v191q174 -117 348 -117q246 0 246 123q0 31 -45 54.5t-111.5 39.5t-144.5 43t-144.5 60.5t-111.5 96t-45 144.5q0 160 225 225q-72 55 -71 140q0 125 100 209.5 t313 84.5q166 0 322 -77v-181q-145 80 -291 80q-248 0 -248 -125q0 -31 45 -54t112 -39.5t144.5 -43t144 -60.5t111.5 -96.5t45 -144.5zM690 516q90 8 143.5 40t53.5 81q0 33 -19.5 58.5t-61.5 46t-80 35t-101.5 33.5t-100.5 34q-90 -8 -143 -41t-53 -80q0 -33 19.5 -59.5 t61.5 -46t79.5 -34t101 -34t100.5 -33.5z" />
|
||||
<glyph unicode="¨" horiz-adv-x="831" d="M651 1329v-174h-186v174h186zM348 1329v-174h-186v174h186z" />
|
||||
<glyph unicode="©" horiz-adv-x="1593" d="M815 373q115 0 232 49v-103q-117 -47 -244 -47q-55 0 -103.5 9.5t-99.5 37t-87 71.5t-58.5 118t-22.5 172q0 121 33 206t90 127t117.5 59.5t130.5 17.5q127 0 244 -48v-104q-113 51 -232 51q-141 0 -204.5 -72.5t-63.5 -236.5q0 -162 63.5 -234.5t204.5 -72.5z M794.5 1378q288.5 0 493.5 -204.5t205 -493.5t-205 -492.5t-493.5 -203.5t-492.5 203.5t-204 492.5t204 493.5t492.5 204.5zM795 74q252 0 430 178t178 428q0 252 -178 430t-430 178q-250 0 -428.5 -178t-178.5 -430q0 -250 178.5 -428t428.5 -178z" />
|
||||
<glyph unicode="ª" horiz-adv-x="813" d="M385 1384q119 0 182.5 -61t63.5 -176v-164q0 -25 -7.5 -49.5t-28 -58t-72.5 -55t-128 -21.5q-63 0 -110 15t-71 36.5t-38 50.5t-17 47.5t-3 36.5q0 84 71.5 132t196.5 48q53 0 102 -6q-4 72 -39.5 103.5t-117.5 31.5q-70 0 -156 -28v88q86 30 172 30zM526 983v92 q-35 8 -98 8q-33 0 -66.5 -6t-67.5 -29.5t-34 -60.5q0 -96 135 -96q131 0 131 92z" />
|
||||
<glyph unicode="«" horiz-adv-x="1171" d="M633 911l-365 -389l365 -391h-223l-347 391l347 389h223zM1067 911l-365 -389l365 -391h-223l-346 391l346 389h223z" />
|
||||
<glyph unicode="¬" horiz-adv-x="1273" d="M199 684h876v-360h-151v204h-725v156z" />
|
||||
<glyph unicode="­" horiz-adv-x="950" d="M162 690h624v-160h-624v160z" />
|
||||
<glyph unicode="®" horiz-adv-x="1593" d="M932 606l211 -321h-131l-193 303h-180v-303h-111v796h295q133 0 210 -62.5t77 -178.5q0 -98 -51 -156t-127 -78zM817 692q180 0 180 145.5t-184 145.5h-174v-291h178zM799 1384q291 0 495.5 -205.5t204.5 -494.5q0 -291 -204.5 -495.5t-495.5 -204.5t-496 204.5 t-205 495.5q0 289 205 494.5t496 205.5zM799 74q252 0 430 178t178 432q0 252 -178 430t-430 178q-254 0 -432.5 -178t-178.5 -430q0 -254 178.5 -432t432.5 -178z" />
|
||||
<glyph unicode="¯" horiz-adv-x="825" d="M653 1303v-123h-477v123h477z" />
|
||||
<glyph unicode="°" horiz-adv-x="792" d="M391.5 1370q108.5 0 165.5 -58.5t57 -168.5q0 -109 -57 -167t-165.5 -58t-166 58t-57.5 167q0 111 57.5 169t166 58zM391.5 1001q69.5 0 99 33t29.5 109t-29.5 108.5t-99 32.5t-100.5 -32.5t-31 -108.5t31 -109t100.5 -33z" />
|
||||
<glyph unicode="±" horiz-adv-x="1214" d="M684 762h301v-150h-301v-303h-149v303h-304v150h304v301h149v-301zM231 55v150h754v-150h-754z" />
|
||||
<glyph unicode="²" horiz-adv-x="671" d="M565 1481q0 -184 -278 -430h274v-103h-452v82q137 102 246.5 226t109.5 223q0 119 -164 118q-104 0 -180 -55v96q88 53 194 54q127 0 188.5 -62.5t61.5 -148.5z" />
|
||||
<glyph unicode="³" horiz-adv-x="661" d="M451 1341q123 -53 122 -178q0 -92 -66.5 -157.5t-207.5 -65.5q-104 0 -190 43v100q86 -49 180 -49q182 0 182 127q0 129 -192 129h-62v92h59q158 0 158 106.5t-158 106.5q-86 0 -159 -41v99q74 39 172 39q127 0 187.5 -59.5t60.5 -143.5q0 -95 -86 -148z" />
|
||||
<glyph unicode="´" horiz-adv-x="518" d="M240 1155h-117l127 240h184z" />
|
||||
<glyph unicode="µ" horiz-adv-x="1253" d="M862 1024h189v-934q-213 -106 -437 -106q-129 0 -223 47v-461h-188v1454h188v-672q0 -90 46 -142t186 -52q125 0 239 37v829z" />
|
||||
<glyph unicode="¶" horiz-adv-x="940" d="M561 1366h238v-1366h-170v504h-68q-236 0 -359.5 111.5t-123.5 320.5q0 207 123.5 318.5t359.5 111.5z" />
|
||||
<glyph unicode="·" horiz-adv-x="663" d="M424 645v-174h-186v174h186z" />
|
||||
<glyph unicode="¸" horiz-adv-x="555" d="M297 -10h145l-141 -252h-186z" />
|
||||
<glyph unicode="¹" horiz-adv-x="491" d="M227 1683h113v-735h-102v635l-129 -74v107z" />
|
||||
<glyph unicode="º" horiz-adv-x="864" d="M424 1384q113 0 191.5 -64.5t78.5 -229.5q0 -164 -78.5 -229.5t-191.5 -65.5q-111 0 -189.5 65.5t-78.5 229.5q0 115 44 184t99 89.5t125 20.5zM424 889q78 0 121 40t43 160.5t-43 161.5t-121 41t-121 -41t-43 -161.5t43 -160.5t121 -40z" />
|
||||
<glyph unicode="»" horiz-adv-x="1212" d="M571 911h224l346 -389l-346 -391h-224l365 391zM137 911h223l347 -389l-347 -391h-223l365 391z" />
|
||||
<glyph unicode="¼" horiz-adv-x="1447" d="M225 1380h111v-735h-103v635l-127 -74v107zM1237 324h104v-93h-104v-229h-102v229h-336v93l323 413h115v-413zM920 324h215v266zM1038 1403h131l-895 -1448h-129z" />
|
||||
<glyph unicode="½" horiz-adv-x="1482" d="M1350 535q0 -188 -279 -431h277v-102h-453v82q135 102 244.5 226t109.5 222q0 119 -164 119q-92 0 -180 -55v96q88 53 195 53q127 0 188.5 -61t61.5 -149zM225 1380h111v-735h-103v635l-127 -74v107zM1038 1403h131l-895 -1448h-129z" />
|
||||
<glyph unicode="¾" horiz-adv-x="1662" d="M477 1038q123 -53 123 -178q0 -92 -66.5 -157.5t-207.5 -65.5q-100 0 -191 43v100q86 -49 180 -49q182 0 183 127q0 129 -193 129h-61v92h59q160 0 160 106.5t-160 106.5q-86 0 -160 -41v99q82 41 172 41q127 0 187.5 -60.5t60.5 -144.5q0 -95 -86 -148zM1462 324h105 v-93h-105v-229h-102v229h-336v93l322 413h116v-413zM1145 324h215v266zM1264 1403h129l-893 -1448h-131z" />
|
||||
<glyph unicode="¿" horiz-adv-x="1052" d="M174 37q0 82 31 146.5t76 106.5l90 83q45 41 75.5 100t30.5 135v70h180v-76q0 -104 -30.5 -184t-75.5 -127t-89 -86t-75 -81t-31 -89q0 -219 258 -219q166 0 306 123v-203q-150 -96 -322 -96q-115 0 -200 33.5t-132 92t-69.5 126t-22.5 145.5zM467 836v186h201v-186h-201 z" />
|
||||
<glyph unicode="À" horiz-adv-x="1359" d="M606 1722l129 -239h-117l-194 239h182zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Á" horiz-adv-x="1359" d="M625 1483l129 239h182l-195 -239h-116zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Â" horiz-adv-x="1359" d="M680 1616l-86 -133h-143l180 250h98l182 -250h-145zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Ã" horiz-adv-x="1359" d="M991 1655v-135q-57 -68 -122.5 -74t-127.5 23l-121 61q-60 31 -127 24.5t-124 -73.5v135q57 68 123.5 74t127.5 -25l121 -60q61 -30 127 -24t123 74zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Ä" horiz-adv-x="1359" d="M434 1483v174h189v-174h-189zM737 1483v174h189v-174h-189zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Å" horiz-adv-x="1359" d="M680 1774q84 0 131 -46.5t47 -128.5q0 -84 -47 -130t-131 -46t-131 46.5t-47 129.5q0 82 47 128.5t131 46.5zM680 1507q45 0 62.5 20.5t17.5 72t-17.5 72t-62.5 20.5t-62.5 -20.5t-17.5 -72t17.5 -72t62.5 -20.5zM1112 0l-147 385h-570l-147 -385h-205l545 1366h186 l543 -1366h-205zM680 1128l-217 -567h434z" />
|
||||
<glyph unicode="Æ" horiz-adv-x="2031" d="M1892 1188h-700v-416h616v-178h-616v-416h700v-178h-891v414h-481l-258 -414h-211l858 1366h983v-178zM633 592h368v588z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="1286" d="M782 1212q-242 0 -351 -124.5t-109 -403.5q0 -276 109.5 -402t350.5 -126q203 0 396 86v-176q-176 -72 -361 -80l-137 -248h-188l184 250q-111 10 -201 47t-173 112.5t-130 213t-47 323.5q0 168 39 295t100.5 202.5t148.5 123t170 63.5t177 16q213 0 418 -81v-177 q-193 86 -396 86z" />
|
||||
<glyph unicode="È" horiz-adv-x="1187" d="M1069 1188h-700v-416h616v-178h-616v-416h700v-178h-891v1366h891v-178zM723 1483h-117l-194 239h184z" />
|
||||
<glyph unicode="É" horiz-adv-x="1187" d="M1069 1188h-700v-416h616v-178h-616v-416h700v-178h-891v1366h891v-178zM582 1483l127 239h184l-195 -239h-116z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1187" d="M1069 1188h-700v-416h616v-178h-616v-416h700v-178h-891v1366h891v-178zM645 1616l-86 -133h-143l180 250h98l183 -250h-146z" />
|
||||
<glyph unicode="Ë" horiz-adv-x="1187" d="M1069 1188h-700v-416h616v-178h-616v-416h700v-178h-891v1366h891v-178zM887 1657v-174h-187v174h187zM584 1657v-174h-187v174h187z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="544" d="M326 1483h-117l-195 239h185zM178 1366v-1366h189v1366h-189z" />
|
||||
<glyph unicode="Í" horiz-adv-x="544" d="M217 1483l127 239h184l-194 -239h-117zM367 0h-189v1366h189v-1366z" />
|
||||
<glyph unicode="Î" horiz-adv-x="544" d="M270 1616l-86 -133h-143l180 250h98l183 -250h-146zM367 0v1366h-189v-1366h189z" />
|
||||
<glyph unicode="Ï" horiz-adv-x="544" d="M516 1657v-174h-186v174h186zM213 1657v-174h-186v174h186zM367 0v1366h-189v-1366h189z" />
|
||||
<glyph unicode="Ð" horiz-adv-x="1480" d="M709 1366q315 0 479 -174t164 -510t-164 -509t-479 -173h-437v606h-163v154h163v606h437zM678 168q252 0 368.5 124t116.5 390q0 268 -116.5 392t-368.5 124h-215v-438h305v-154h-305v-438h215z" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1511" d="M1075 1520q-57 -68 -122.5 -74t-127.5 23l-122 61q-60 31 -126.5 24.5t-123.5 -73.5v135q57 68 123.5 74t126.5 -25l122 -60q61 -30 127 -24t123 74v-135zM1159 1366h191v-1366h-211l-770 1094v-1094h-191v1366h217l764 -1087v1087z" />
|
||||
<glyph unicode="Ò" d="M836 1483h-117l-195 239h185zM125 684q0 168 39 295t100.5 202.5t148.5 123t170 63.5t177 16t177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295zM315 684 q0 -135 28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9t127 9t118 42t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5z" />
|
||||
<glyph unicode="Ó" d="M684 1483l127 239h184l-194 -239h-117zM760 1384q94 0 177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t177 16 zM759.5 156q71.5 0 127 9t118 42t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9z" />
|
||||
<glyph unicode="Ô" d="M758 1616l-86 -133h-144l181 250h98l182 -250h-145zM760 1384q94 0 177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123 t170 63.5t177 16zM759.5 156q71.5 0 127 9t118 42t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9z" />
|
||||
<glyph unicode="Õ" d="M1071 1520q-57 -68 -122.5 -74t-127.5 23l-122 61q-60 31 -126.5 24.5t-123.5 -73.5v135q57 68 123.5 74t126.5 -25l122 -60q61 -30 127 -24t123 74v-135zM760 1384q94 0 177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123 t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t177 16zM759.5 156q71.5 0 127 9t118 42t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42 t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9z" />
|
||||
<glyph unicode="Ö" d="M1004 1657v-174h-187v174h187zM700 1657v-174h-186v174h186zM760 1384q94 0 177 -16t170 -63.5t148.5 -123t100.5 -202.5t39 -295t-39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16t-177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5 t148.5 123t170 63.5t177 16zM759.5 156q71.5 0 127 9t118 42t103.5 88t68.5 154.5t27.5 234.5t-27.5 234.5t-68.5 154.5t-103.5 88t-118 42t-127 9t-126.5 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t126.5 -9z" />
|
||||
<glyph unicode="×" horiz-adv-x="1050" d="M887 889l-281 -365l281 -364h-162l-203 258l-200 -258h-164l282 364l-282 365h164l200 -258l203 258h162z" />
|
||||
<glyph unicode="Ø" d="M1432 1366l-168 -199q131 -174 131 -483q0 -168 -39 -295t-100.5 -202.5t-148.5 -123t-170 -63.5t-177 -16q-244 0 -400 112l-81 -96h-191l168 201q-131 174 -131 483q0 168 39 295t100.5 202.5t148.5 123t170 63.5t177 16q244 0 399 -112l82 94h191zM315 684 q0 -209 64 -336l665 789q-100 76 -284 75q-72 0 -127 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5zM1204 684q0 209 -63 336l-666 -789q98 -76 285 -75q72 0 127 9t117.5 42t103.5 88t68.5 154.5t27.5 234.5z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="1476" d="M809 1483h-117l-194 239h184zM178 1366h191v-819q0 -201 90 -297t278.5 -96t278.5 96t90 297v819h190v-803q0 -276 -146 -428.5t-412.5 -152.5t-413 152.5t-146.5 428.5v803z" />
|
||||
<glyph unicode="Ú" horiz-adv-x="1476" d="M666 1483l127 239h184l-195 -239h-116zM1106 1366h190v-803q0 -276 -146 -428.5t-412.5 -152.5t-413 152.5t-146.5 428.5v803h191v-819q0 -201 90 -297t278.5 -96t278.5 96t90 297v819z" />
|
||||
<glyph unicode="Û" horiz-adv-x="1476" d="M735 1616l-86 -133h-143l180 250h98l183 -250h-146zM1106 1366h190v-803q0 -276 -146 -428.5t-412.5 -152.5t-413 152.5t-146.5 428.5v803h191v-819q0 -201 90 -297t278.5 -96t278.5 96t90 297v819z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1476" d="M981 1657v-174h-186v174h186zM678 1657v-174h-186v174h186zM1106 1366h190v-803q0 -276 -146 -428.5t-412.5 -152.5t-413 152.5t-146.5 428.5v803h191v-819q0 -201 90 -297t278.5 -96t278.5 96t90 297v819z" />
|
||||
<glyph unicode="Ý" horiz-adv-x="1275" d="M561 1483l127 239h184l-194 -239h-117zM1251 1366l-520 -754v-612h-188v610l-518 756h229l383 -559l383 559h231z" />
|
||||
<glyph unicode="Þ" horiz-adv-x="1187" d="M598 1161q227 0 352 -112.5t125 -317.5t-125 -317.5t-352 -112.5h-231v-301h-191v1366h191v-205h231zM887 729v2v2q0 119 -61.5 189.5t-243.5 70.5h-215v-524h215q182 0 243.5 70.5t61.5 189.5z" />
|
||||
<glyph unicode="ß" horiz-adv-x="1255" d="M887 713q254 -74 254 -316q0 -186 -150.5 -291.5t-400.5 -105.5v174q61 0 115.5 10.5t113 33t93 70.5t34.5 118q0 217 -356 231v143q293 4 293 219q0 219 -267 220q-53 0 -92 -13.5t-75.5 -49.5t-56 -111.5t-19.5 -190.5v-854h-193v862q0 154 39 262.5t106.5 161.5 t137 75.5t153.5 22.5q236 0 347.5 -114.5t111.5 -276.5q0 -188 -188 -280z" />
|
||||
<glyph unicode="à" horiz-adv-x="1099" d="M627 1155h-117l-195 240h185zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185t-211.5 56 q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="á" horiz-adv-x="1099" d="M461 1155l127 240h184l-194 -240h-117zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185 t-211.5 56q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="â" horiz-adv-x="1099" d="M567 1288l-86 -133h-143l180 250h98l183 -250h-146zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12 q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="ã" horiz-adv-x="1099" d="M872 1192q-57 -68 -122.5 -74t-126.5 24l-122 60q-60 31 -127 25t-124 -74v135q57 68 123.5 74t127.5 -25l122 -60q61 -30 126.5 -23.5t122.5 73.5v-135zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5 q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z " />
|
||||
<glyph unicode="ä" horiz-adv-x="1099" d="M813 1329v-174h-186v174h186zM510 1329v-174h-186v174h186zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12 q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="å" horiz-adv-x="1099" d="M557 1096q-84 0 -131 46t-47 130t47 130t131 46q86 0 132 -46t46 -130t-46 -130t-132 -46zM557 1364q-45 0 -62.5 -20.5t-17.5 -71.5t17.5 -71.5t62.5 -20.5t62.5 20.5t17.5 71.5t-17.5 71.5t-62.5 20.5zM526 1038q213 0 328 -110.5t115 -317.5v-295q0 -33 -5.5 -65.5 t-31 -83.5t-67.5 -89t-125 -65.5t-193 -27.5q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51v160q159 55 309 55zM782 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53 t-34 -88q0 -174 246 -174q235 -1 235 167z" />
|
||||
<glyph unicode="æ" horiz-adv-x="1802" d="M1677 545q0 -74 -6 -142h-704q35 -260 288 -260q197 0 353 76v-170q-160 -68 -363 -67q-229 0 -350 131q-106 -129 -352 -129q-113 0 -198 28.5t-128 66.5t-68.5 90t-31.5 86t-6 67q0 152 128 237.5t353 85.5q96 0 186 -12q-6 129 -70.5 185t-211.5 56q-133 0 -283 -51 v160q160 55 309 55q244 0 357 -143q113 143 348 143q205 0 327.5 -134t122.5 -359zM778 317v166q-74 12 -178 13q-41 0 -86 -7.5t-97 -23.5t-86 -53t-34 -88q0 -174 246 -174q235 -1 235 167zM965 573h524q-27 297 -262 297q-129 0 -189.5 -66.5t-72.5 -230.5z" />
|
||||
<glyph unicode="ç" horiz-adv-x="966" d="M616 870q-141 0 -221 -72.5t-80 -285.5q0 -113 23.5 -187.5t70 -110.5t94.5 -48t113 -12q147 0 285 65v-178q-104 -41 -223 -53l-139 -254h-189l182 254q-201 18 -307 152t-106 372q0 256 124 391t357 135q156 0 301 -57v-178q-142 67 -285 67z" />
|
||||
<glyph unicode="è" horiz-adv-x="1136" d="M1032 547q0 -74 -6 -141h-704q35 -260 288 -261q201 0 353 74v-168q-160 -68 -363 -67q-90 0 -166 22.5t-148.5 74.5t-114.5 159.5t-42 259.5q0 541 453 540q205 0 327.5 -134t122.5 -359zM319 575h525q-4 51 -17.5 97.5t-41 94.5t-80 76.5t-123.5 28.5 q-129 0 -190 -66.5t-73 -230.5zM657 1155h-116l-195 240h184z" />
|
||||
<glyph unicode="é" horiz-adv-x="1136" d="M1032 547q0 -74 -6 -141h-704q35 -260 288 -261q201 0 353 74v-168q-160 -68 -363 -67q-90 0 -166 22.5t-148.5 74.5t-114.5 159.5t-42 259.5q0 541 453 540q205 0 327.5 -134t122.5 -359zM319 575h525q-4 51 -17.5 97.5t-41 94.5t-80 76.5t-123.5 28.5 q-129 0 -190 -66.5t-73 -230.5zM506 1155l127 240h184l-194 -240h-117z" />
|
||||
<glyph unicode="ê" horiz-adv-x="1136" d="M1032 547q0 -74 -6 -141h-704q35 -260 288 -261q201 0 353 74v-168q-160 -68 -363 -67q-90 0 -166 22.5t-148.5 74.5t-114.5 159.5t-42 259.5q0 541 453 540q205 0 327.5 -134t122.5 -359zM319 575h525q-4 51 -17.5 97.5t-41 94.5t-80 76.5t-123.5 28.5 q-129 0 -190 -66.5t-73 -230.5zM580 1288l-86 -133h-144l180 250h99l182 -250h-145z" />
|
||||
<glyph unicode="ë" horiz-adv-x="1136" d="M825 1329v-174h-186v174h186zM522 1329v-174h-186v174h186zM1032 547q0 -74 -6 -141h-704q35 -260 288 -261q201 0 353 74v-168q-160 -68 -363 -67q-90 0 -166 22.5t-148.5 74.5t-114.5 159.5t-42 259.5q0 541 453 540q205 0 327.5 -134t122.5 -359zM319 575h525 q-4 51 -17.5 97.5t-41 94.5t-80 76.5t-123.5 28.5q-129 0 -190 -66.5t-73 -230.5z" />
|
||||
<glyph unicode="ì" horiz-adv-x="589" d="M352 1155h-116l-195 240h184zM201 1022v-1022h188v1022h-188z" />
|
||||
<glyph unicode="í" horiz-adv-x="589" d="M236 1155l126 240h185l-195 -240h-116zM389 0h-188v1022h188v-1022z" />
|
||||
<glyph unicode="î" horiz-adv-x="589" d="M293 1288l-86 -133h-144l181 250h98l182 -250h-145zM389 0v1022h-188v-1022h188z" />
|
||||
<glyph unicode="ï" horiz-adv-x="589" d="M539 1329v-174h-187v174h187zM236 1329v-174h-187v174h187zM389 0v1022h-188v-1022h188z" />
|
||||
<glyph unicode="ð" horiz-adv-x="1212" d="M870 1217q193 -197 193 -590q0 -643 -473 -643q-229 0 -350 138t-121 331q0 182 108.5 310t347.5 128q170 0 285 -72q-41 193 -162 293l-217 -131l-67 113l151 90q-66 23 -157 22q-74 0 -156 -18v172q84 23 186 22q184 0 322 -79l178 108l68 -113zM590 156q39 0 64.5 3 t70.5 26.5t72.5 68.5t50 138t24.5 224q-106 100 -282 101q-281 0 -281 -264q0 -43 9.5 -85t35 -94.5t87 -85t149.5 -32.5z" />
|
||||
<glyph unicode="ñ" horiz-adv-x="1198" d="M903 1192q-57 -68 -122.5 -74t-127.5 24l-122 60q-60 31 -126.5 25t-123.5 -74v135q57 68 123.5 74t126.5 -25l122 -60q61 -30 127 -23.5t123 73.5v-135zM356 0h-188v934q213 106 436 106q193 0 302.5 -101t109.5 -280v-659h-189v672q0 90 -46 142t-185 52 q-125 0 -240 -37v-829z" />
|
||||
<glyph unicode="ò" horiz-adv-x="1155" d="M631 1155h-117l-195 240h185zM100 510q0 156 43 264.5t117 162.5t151.5 76.5t170 22.5t170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5zM289 510q0 -115 22.5 -189.5 t67.5 -110.5t91 -48t111.5 -12t111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5z" />
|
||||
<glyph unicode="ó" horiz-adv-x="1155" d="M532 1155l127 240h185l-195 -240h-117zM581.5 1036q92.5 0 170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170 22.5zM581.5 150 q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48t111.5 -12z" />
|
||||
<glyph unicode="ô" horiz-adv-x="1155" d="M580 1288l-86 -133h-144l180 250h99l182 -250h-145zM581.5 1036q92.5 0 170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170 22.5zM581.5 150 q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48t111.5 -12z" />
|
||||
<glyph unicode="õ" horiz-adv-x="1155" d="M893 1192q-57 -68 -122.5 -74t-127.5 24l-122 60q-60 31 -126.5 25t-124.5 -74v135q57 68 124 74t127 -25l122 -60q61 -30 127 -23.5t123 73.5v-135zM581.5 1036q92.5 0 170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5 t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170 22.5zM581.5 150q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48 t111.5 -12z" />
|
||||
<glyph unicode="ö" horiz-adv-x="1155" d="M825 1329v-174h-186v174h186zM522 1329v-174h-186v174h186zM581.5 1036q92.5 0 170 -22.5t151.5 -76.5t117 -162.5t43 -264.5t-43 -264.5t-117 -162.5t-151.5 -76.5t-170 -22.5t-170 22.5t-151.5 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170 22.5z M581.5 150q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48t111.5 -12z" />
|
||||
<glyph unicode="÷" horiz-adv-x="1286" d="M227 604h832v-151h-832v151zM735 317v-174h-186v174h186zM735 913v-174h-186v174h186z" />
|
||||
<glyph unicode="ø" horiz-adv-x="1175" d="M1108 1022l-135 -162q90 -131 90 -350q0 -156 -43 -264.5t-117 -162.5t-151.5 -76.5t-169.5 -22.5q-172 0 -287 73l-49 -57h-191l135 160q-90 131 -90 350q0 156 43 264.5t117 162.5t151.5 76.5t170.5 22.5q170 0 284 -73l52 59h190zM289 510q0 -119 26 -199l441 520 q-61 39 -174 39q-66 0 -112 -12t-91 -48t-67.5 -110.5t-22.5 -189.5zM874 510q0 125 -28 201l-440 -523q61 -39 176 -38q66 0 111.5 12t90.5 48t67.5 110.5t22.5 189.5z" />
|
||||
<glyph unicode="ù" horiz-adv-x="1208" d="M670 1155h-117l-195 240h185zM168 1022h188v-606q0 -139 58.5 -204t185.5 -65t186.5 64.5t59.5 204.5v606h186v-592q0 -213 -113.5 -330.5t-318.5 -117.5t-318.5 117.5t-113.5 330.5v592z" />
|
||||
<glyph unicode="ú" horiz-adv-x="1208" d="M528 1155l127 240h185l-195 -240h-117zM844 1022h188v-592q0 -213 -113.5 -330.5t-318.5 -117.5t-318.5 117.5t-113.5 330.5v592h186v-606q0 -139 59.5 -204t186.5 -65t185.5 64.5t58.5 204.5v606z" />
|
||||
<glyph unicode="û" horiz-adv-x="1208" d="M598 1288l-86 -133h-143l180 250h98l182 -250h-145zM844 1022h188v-592q0 -213 -113.5 -330.5t-318.5 -117.5t-318.5 117.5t-113.5 330.5v592h186v-606q0 -139 59.5 -204t186.5 -65t185.5 64.5t58.5 204.5v606z" />
|
||||
<glyph unicode="ü" horiz-adv-x="1208" d="M844 1329v-174h-187v174h187zM541 1329v-174h-187v174h187zM844 1022h188v-592q0 -213 -113.5 -330.5t-318.5 -117.5t-318.5 117.5t-113.5 330.5v592h186v-606q0 -139 59.5 -204t186.5 -65t185.5 64.5t58.5 204.5v606z" />
|
||||
<glyph unicode="ý" horiz-adv-x="1073" d="M467 1155l127 240h184l-194 -240h-117zM809 1022h201l-420 -1131q-109 -295 -318 -294q-68 0 -143 16v168q61 -16 115 -17q127 0 205 236l-386 1022h201l275 -766z" />
|
||||
<glyph unicode="þ" horiz-adv-x="1142" d="M575 1024q88 0 164 -21.5t149 -75t114.5 -159.5t41.5 -258t-41.5 -258.5t-114.5 -159.5t-148.5 -74.5t-164.5 -21.5q-113 0 -219 31v-404h-186v1774h186v-404q106 31 219 31zM575 162q61 0 106.5 12t88.5 46t65.5 106.5t22.5 183.5t-22.5 183.5t-65.5 106.5t-88 46 t-107 12q-115 0 -219 -43v-610q104 -43 219 -43z" />
|
||||
<glyph unicode="ÿ" horiz-adv-x="1069" d="M780 1329v-174h-186v174h186zM477 1329v-174h-186v174h186zM809 1022h201l-420 -1131q-109 -295 -318 -294q-68 0 -143 16v168q61 -16 115 -17q127 0 205 236l-386 1022h201l275 -766z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="2056" d="M1923 1188h-700v-416h616v-178h-616v-416h700v-178h-891v29q-121 -45 -272 -45q-94 0 -177 16t-170 63.5t-148.5 123t-100.5 202.5t-39 295t39 295t100.5 202.5t148.5 123t170 63.5t177 16q152 0 272 -45v27h891v-178zM760 156q174 0 272 67v922q-98 68 -272 67 q-72 0 -127 -9t-117.5 -42t-103.5 -88t-69 -154.5t-28 -234.5t28 -234.5t69 -154.5t103.5 -88t117.5 -42t127 -9z" />
|
||||
<glyph unicode="œ" horiz-adv-x="1886" d="M1776 547q0 -74 -7 -141h-704q35 -260 289 -261q201 0 352 74v-168q-160 -68 -363 -67q-260 0 -378 166q-121 -166 -383 -166q-92 0 -170 22.5t-152 76.5t-117 162.5t-43 264.5t43 264.5t117 162.5t151.5 76.5t170.5 22.5q256 0 381 -159q113 164 362 163q205 0 328 -134 t123 -359zM581.5 150q65.5 0 111.5 12t91 48t67.5 110.5t22.5 189.5t-22.5 189.5t-67.5 110.5t-91 48t-111.5 12t-111.5 -12t-91 -48t-67.5 -110.5t-22.5 -189.5t22.5 -189.5t67.5 -110.5t91 -48t111.5 -12zM1063 575h524q-27 297 -262 297q-129 0 -189.5 -66.5 t-72.5 -230.5z" />
|
||||
<glyph unicode="Ÿ" horiz-adv-x="1277" d="M883 1657v-174h-187v174h187zM580 1657v-174h-187v174h187zM1251 1366l-520 -754v-612h-188v610l-518 756h229l383 -559l383 559h231z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="882" d="M436 1288l-86 -133h-143l180 250h98l183 -250h-146z" />
|
||||
<glyph unicode="˜" horiz-adv-x="1079" d="M838 1192q-57 -68 -123 -74t-127 24l-122 60q-60 31 -127 25t-124 -74v135q57 68 124 74t127 -25l122 -60q61 -30 126.5 -23.5t123.5 73.5v-135z" />
|
||||
<glyph unicode=" " horiz-adv-x="886" />
|
||||
<glyph unicode=" " horiz-adv-x="1773" />
|
||||
<glyph unicode=" " horiz-adv-x="886" />
|
||||
<glyph unicode=" " horiz-adv-x="1773" />
|
||||
<glyph unicode=" " horiz-adv-x="589" />
|
||||
<glyph unicode=" " horiz-adv-x="442" />
|
||||
<glyph unicode=" " horiz-adv-x="294" />
|
||||
<glyph unicode=" " horiz-adv-x="294" />
|
||||
<glyph unicode=" " horiz-adv-x="221" />
|
||||
<glyph unicode=" " horiz-adv-x="354" />
|
||||
<glyph unicode=" " horiz-adv-x="98" />
|
||||
<glyph unicode="‐" horiz-adv-x="950" d="M162 690h624v-160h-624v160z" />
|
||||
<glyph unicode="‑" horiz-adv-x="950" d="M162 690h624v-160h-624v160z" />
|
||||
<glyph unicode="‒" horiz-adv-x="950" d="M162 690h624v-160h-624v160z" />
|
||||
<glyph unicode="–" horiz-adv-x="1146" d="M141 676h860v-160h-860v160z" />
|
||||
<glyph unicode="—" horiz-adv-x="1824" d="M162 676h1501v-160h-1501v160z" />
|
||||
<glyph unicode="‘" horiz-adv-x="552" d="M96 1384h193l151 -401h-172z" />
|
||||
<glyph unicode="’" horiz-adv-x="552" d="M248 1384h192l-172 -401h-172z" />
|
||||
<glyph unicode="‚" horiz-adv-x="643" d="M299 172h193l-173 -401h-172z" />
|
||||
<glyph unicode="“" horiz-adv-x="843" d="M594 1384l151 -401h-172l-172 401h193zM96 1384h193l151 -401h-172z" />
|
||||
<glyph unicode="”" horiz-adv-x="827" d="M248 1384h192l-172 -401h-172zM745 1384l-172 -401h-172l152 401h192z" />
|
||||
<glyph unicode="„" horiz-adv-x="940" d="M299 172h193l-173 -401h-172zM797 172l-172 -401h-172l151 401h193z" />
|
||||
<glyph unicode="•" horiz-adv-x="864" d="M672 684q0 -104 -74 -178t-176 -74q-104 0 -178 74t-74 178t73.5 177t178.5 73q102 0 176 -73t74 -177z" />
|
||||
<glyph unicode="…" horiz-adv-x="1607" d="M897 174v-174h-186v174h186zM406 174v-174h-187v174h187zM1386 174v-174h-186v174h186z" />
|
||||
<glyph unicode=" " horiz-adv-x="354" />
|
||||
<glyph unicode="‹" horiz-adv-x="733" d="M633 911l-365 -389l365 -391h-223l-347 391l347 389h223z" />
|
||||
<glyph unicode="›" horiz-adv-x="792" d="M502 522l-365 389h223l347 -389l-347 -391h-223z" />
|
||||
<glyph unicode=" " horiz-adv-x="442" />
|
||||
<glyph unicode="€" horiz-adv-x="1400" d="M899 1212q-184 0 -290.5 -70.5t-145.5 -221.5h614v-142h-635q-4 -61 -4 -94q0 -63 4 -92h635v-141h-614q39 -154 145.5 -224.5t290.5 -70.5q203 0 395 86v-176q-205 -82 -417 -82q-512 0 -613 467h-162v141h142q-2 29 -2 92q0 33 4 94h-144v142h162q29 135 94.5 231 t153.5 144t176 68.5t189 20.5q213 0 417 -81v-177q-192 86 -395 86z" />
|
||||
<glyph unicode="™" horiz-adv-x="1568" d="M100 1366h555v-88h-231v-594h-94v594h-230v88zM1313 1366h102v-682h-94v539l-234 -308l-231 308v-539h-94v682h102l223 -295z" />
|
||||
<glyph unicode="" horiz-adv-x="1020" d="M0 1020h1020v-1020h-1020v1020z" />
|
||||
<glyph unicode="fi" horiz-adv-x="1202" d="M600 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-47h264v-166h-264v-858h-187v858h-143v166h143v47q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8zM881 0v1022h188v-1022h-188zM1075 1378v-198h-201v198h201z" />
|
||||
<glyph unicode="fl" horiz-adv-x="1220" d="M600 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-47h264v-166h-264v-858h-187v858h-143v166h143v47q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8zM881 1411h188v-1411h-188v1411z" />
|
||||
<glyph unicode="ffi" horiz-adv-x="1941" d="M1553 0v1022h188v-1022h-188zM1747 1378v-198h-200v198h200zM1276 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-49h264v-164h-264v-858h-187v858h-143v164h143v49q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8zM600 1284q-47 0 -71.5 -4t-56.5 -22.5 t-46 -64.5t-14 -122v-49h264v-164h-264v-858h-187v858h-143v164h143v49q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8z" />
|
||||
<glyph unicode="ffl" horiz-adv-x="1953" d="M1559 1411h188v-1411h-188v1411zM1276 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-49h264v-164h-264v-858h-187v858h-143v164h143v49q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8zM600 1284q-47 0 -71.5 -4t-56.5 -22.5t-46 -64.5t-14 -122v-49h264v-164 h-264v-858h-187v858h-143v164h143v49q0 381 340 381q57 0 111 -14v-162q-41 8 -76 8z" />
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 51 KiB |
|
@ -1,245 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
This is a custom SVG webfont generated by Font Squirrel.
|
||||
Copyright : Copyright c 2011 by Vissol Ltd All rights reserved
|
||||
Designer : Joe Prince
|
||||
Foundry : Joe Prince
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="webfontOM8fITNz" horiz-adv-x="1529" >
|
||||
<font-face units-per-em="2048" ascent="1638" descent="-410" />
|
||||
<missing-glyph horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="	" horiz-adv-x="692" />
|
||||
<glyph unicode=" " horiz-adv-x="692" />
|
||||
<glyph unicode="!" horiz-adv-x="761" d="M303 0v164h164v-164h-164zM311 1366h148l-15 -1022h-118z" />
|
||||
<glyph unicode=""" horiz-adv-x="780" d="M440 1384h170l-37 -411h-98zM203 973l-37 411h170l-35 -411h-98z" />
|
||||
<glyph unicode="#" horiz-adv-x="1210" d="M850 1071h125l-43 -242h147v-122h-168l-57 -326h166v-123h-186l-37 -219h-125l37 219h-271l-39 -219h-125l39 219h-168v123h189l55 326h-186v122h209l41 242h125l-41 -242h270zM729 381l57 326h-272l-55 -326h270z" />
|
||||
<glyph unicode="$" horiz-adv-x="1181" d="M1055 348q0 -156 -105.5 -250t-296.5 -110v-209h-110v205q-207 6 -377 96v160q158 -104 377 -109v520q-76 23 -117 37t-101.5 44t-92 63.5t-55 87t-23.5 121.5q0 143 95 249.5t294 126.5v209h110v-205q166 -8 314 -81v-152q-150 84 -314 86v-469q88 -29 147.5 -55.5 t124 -73.5t97.5 -120t33 -171zM301 1004q0 -78 61.5 -121t180.5 -80v428q-242 -34 -242 -227zM653 135q254 33 254 213q0 106 -65.5 165.5t-188.5 102.5v-481z" />
|
||||
<glyph unicode="%" horiz-adv-x="1777" d="M442 1360q123 0 209 -83t86 -294q0 -113 -26.5 -190.5t-71.5 -116.5t-93 -55.5t-104 -16.5q-57 0 -104 16.5t-93 55.5t-73 116.5t-27 190.5q0 111 27 189.5t73 116.5t93 54.5t104 16.5zM442 711q84 0 133.5 55t49.5 217t-49.5 216t-133.5 54q-86 0 -135 -54t-49 -216 t50 -217t134 -55zM1384 1366l-858 -1366h-131l858 1366h131zM1339 6q-57 0 -104 16.5t-93 55.5t-73 116.5t-27 190.5t27 190.5t73 116.5t93 55.5t104 16.5q55 0 103.5 -16.5t93.5 -55.5t71.5 -116.5t26.5 -190.5t-26.5 -190.5t-71.5 -116.5t-93.5 -55.5t-103.5 -16.5z M1339 657q-84 0 -134 -55t-50 -217t50 -217t134 -55t133.5 55t49.5 217t-49.5 217t-133.5 55z" />
|
||||
<glyph unicode="&" horiz-adv-x="1310" d="M1014 272l227 -272h-192l-125 152q-162 -168 -385 -168q-111 0 -198 38.5t-134 101t-71.5 127t-24.5 126.5q0 119 56 220t220 191q-135 168 -135 283q0 127 91 218t218 91q131 0 221 -87t90 -214q0 -109 -59 -183.5t-192 -152.5l297 -354q57 100 83 205h134 q-33 -177 -121 -322zM565 1233q-70 0 -120 -48t-50 -116q0 -72 129 -213q131 70 171 116t40 105q0 68 -49 112t-121 44zM545 127q172 0 291 129l-357 428q-78 -41 -128 -85t-68.5 -87t-22.5 -67.5t-4 -63.5q0 -33 12.5 -71t42 -82t90 -72.5t144.5 -28.5z" />
|
||||
<glyph unicode="'" horiz-adv-x="509" d="M203 973l-37 411h170l-35 -411h-98z" />
|
||||
<glyph unicode="(" horiz-adv-x="706" d="M418 1483h155q-29 -47 -59.5 -112.5t-74.5 -180.5t-72.5 -264.5t-28.5 -300.5q0 -150 28.5 -300.5t72.5 -264t76 -180t58 -111.5h-155q-227 408 -228 856q1 450 228 858z" />
|
||||
<glyph unicode=")" horiz-adv-x="706" d="M291 1483q227 -408 227 -856q0 -451 -227 -858h-158q29 47 59.5 111.5t75.5 180t74 265t29 301.5q0 195 -53.5 396.5t-98.5 296.5t-86 163h158z" />
|
||||
<glyph unicode="*" horiz-adv-x="841" d="M666 1270l-177 -80l177 -78l-56 -98l-153 112l16 -184h-111l21 184l-156 -112l-55 98l178 78l-178 80l55 94l156 -111l-21 187h111l-16 -187l153 111z" />
|
||||
<glyph unicode="+" horiz-adv-x="1128" d="M926 674v-123h-301v-301h-123v301h-303v123h303v303h123v-303h301z" />
|
||||
<glyph unicode="," horiz-adv-x="641" d="M303 172h168l-172 -401h-147z" />
|
||||
<glyph unicode="-" horiz-adv-x="950" d="M786 682v-143h-624v143h624z" />
|
||||
<glyph unicode="." horiz-adv-x="671" d="M260 0v164h164v-164h-164z" />
|
||||
<glyph unicode="/" horiz-adv-x="827" d="M723 1548h135l-754 -1749h-133z" />
|
||||
<glyph unicode="0" horiz-adv-x="1345" d="M671.5 1378q538.5 0 538.5 -700.5t-538.5 -700.5t-538.5 700.5t538.5 700.5zM671.5 113q61.5 0 110.5 10t104.5 45t92.5 94.5t60.5 164.5t23.5 251q0 178 -34 298t-95.5 174t-121.5 73.5t-140 19.5t-140.5 -19.5t-122 -73.5t-95 -174t-33.5 -298q0 -145 23.5 -250.5 t60 -165t92 -94.5t104.5 -45t110.5 -10z" />
|
||||
<glyph unicode="1" horiz-adv-x="923" d="M463 1366h168v-1366h-148v1212l-272 -180v174z" />
|
||||
<glyph unicode="2" horiz-adv-x="1189" d="M401 147h619v-147h-862v129q102 76 208.5 169t223.5 215t189.5 252t72.5 234q0 238 -322 238q-190 0 -358 -119v162q172 104 371 104q233 0 344.5 -112.5t111.5 -272.5q0 -111 -56 -232.5t-151.5 -236t-190 -206t-200.5 -177.5z" />
|
||||
<glyph unicode="3" horiz-adv-x="1193" d="M788 739q10 -4 26.5 -12t58.5 -39t75 -67.5t59.5 -99t26.5 -132.5q0 -78 -27.5 -147.5t-84 -129t-157.5 -94t-235 -34.5q-197 0 -364 86v151q160 -90 346 -90q182 0 278.5 67.5t96.5 194.5t-98.5 194.5t-284.5 67.5h-150v142h156q150 0 228.5 56t78.5 162.5t-83 164 t-240 57.5q-152 0 -295 -72v150q147 70 311 69q233 0 344 -108.5t111 -259.5q0 -172 -148 -260z" />
|
||||
<glyph unicode="4" horiz-adv-x="1210" d="M889 547h194v-137h-194v-410h-148v410h-663v157l645 799h166v-819zM242 547h499v608z" />
|
||||
<glyph unicode="5" horiz-adv-x="1202" d="M248 1366h702v-145h-575l-39 -406q121 37 266 37q84 0 153.5 -18.5t136 -63.5t105.5 -135t39 -217t-39 -217t-105.5 -135.5t-136 -63.5t-153.5 -18q-236 0 -391 84v153q150 -94 381 -94q80 0 138 19.5t89 46t47.5 69.5t20.5 77t4 79q0 92 -24.5 152.5t-71.5 88t-93.5 37 t-109.5 9.5q-96 0 -177 -16.5t-112 -33.5l-33 -14l-92 94z" />
|
||||
<glyph unicode="6" horiz-adv-x="1193" d="M598 874q215 0 340 -115.5t125 -314.5q0 -84 -25.5 -162.5t-78 -147t-145.5 -109.5t-216 -41q-465 0 -465 641q0 141 25.5 257.5t65.5 193.5t96.5 135.5t111.5 90t118.5 51t111 25.5t94.5 6q109 0 198 -26v-137q-102 25 -182 24q-47 0 -92 -6t-113.5 -32.5t-122 -73 t-97.5 -136.5t-58 -213q133 90 309 90zM598 123q102 0 172 38t98.5 98t37.5 103.5t9 83.5q0 139 -81.5 215t-235.5 76q-201 0 -317 -116q2 -141 27.5 -241.5t57 -149t83 -75t79 -29.5t70.5 -3z" />
|
||||
<glyph unicode="7" horiz-adv-x="1175" d="M143 1366h932v-137l-592 -1229h-164l596 1219h-772v147z" />
|
||||
<glyph unicode="8" horiz-adv-x="1191" d="M842 739q10 -4 25.5 -11t54.5 -34.5t69.5 -62.5t55 -95.5t24.5 -129.5q0 -78 -25.5 -149t-79 -134.5t-148.5 -101t-220 -37.5q-240 0 -356.5 127t-116.5 295q0 203 184 307l51 24l-20 11q-12 6 -44 30.5t-56.5 55t-44 84t-19.5 112.5q0 145 103.5 249.5t318.5 104.5 t318.5 -103t103.5 -251q0 -184 -148 -274zM324 1030q0 -111 72.5 -173t201.5 -62t201.5 62.5t72.5 172.5q0 209 -274 209t-274 -209zM598 123q86 0 149.5 23.5t96.5 56.5t52 76t23.5 71.5t4.5 55.5q0 123 -84 188t-242 65t-242 -65.5t-84 -187.5q0 -27 4.5 -55.5t23.5 -71.5 t52 -76t96.5 -56.5t149.5 -23.5z" />
|
||||
<glyph unicode="9" horiz-adv-x="1202" d="M584 494q-215 0 -340 115.5t-125 314.5q0 84 25.5 162.5t77.5 147.5t145.5 109.5t216.5 40.5q465 0 465 -643q0 -195 -48.5 -340t-116 -223t-160.5 -124t-160.5 -58t-137.5 -12q-104 0 -199 24v139q84 -25 183 -24q47 0 92 6t113.5 32.5t120.5 73t97.5 136.5t57.5 213 q-121 -90 -307 -90zM584 1245q-102 0 -172 -38t-98.5 -98t-38 -103t-9.5 -84q0 -139 82 -215t236 -76q207 0 317 117q-2 141 -27.5 241.5t-57.5 148.5t-83 74.5t-78.5 29.5t-70.5 3z" />
|
||||
<glyph unicode=":" horiz-adv-x="800" d="M324 98v164h163v-164h-163zM324 754v164h163v-164h-163z" />
|
||||
<glyph unicode=";" horiz-adv-x="854" d="M352 754v164h164v-164h-164zM350 172h168l-172 -401h-147z" />
|
||||
<glyph unicode="<" horiz-adv-x="1351" d="M246 621l844 383v-164l-672 -289l672 -291v-162l-844 383v140z" />
|
||||
<glyph unicode="=" horiz-adv-x="1306" d="M1049 524v-143h-789v143h789zM1049 840v-142h-789v142h789z" />
|
||||
<glyph unicode=">" horiz-adv-x="1329" d="M1112 621v-140l-842 -383v162l670 291l-670 289v164z" />
|
||||
<glyph unicode="?" horiz-adv-x="993" d="M391 0v164h164v-164h-164zM449 1382q61 0 120.5 -14t129 -50t112.5 -117t43 -197q0 -82 -31.5 -142.5t-77.5 -98.5l-90 -76q-45 -38 -76.5 -101.5t-31.5 -151.5v-90h-148v100q0 104 32 181t77 120t90 78t77 79t32 102q0 231 -269 231q-156 0 -274 -90v160q113 77 285 77z " />
|
||||
<glyph unicode="@" horiz-adv-x="1869" d="M1040 596q74 0 152 -10q2 14 2 43q0 35 -6 59.5t-23.5 50t-60.5 39t-109 13.5q-143 0 -256 -43l17 118q123 41 239 41q156 0 237 -70.5t81 -207.5q0 -59 -11.5 -142.5t-17.5 -137.5t-4 -107.5t30.5 -79t86.5 -25.5q90 0 169 114t79 312q0 145 -55.5 262t-144.5 186.5 t-191.5 106.5t-206.5 37q-311 0 -554 -230.5t-243 -553.5q0 -154 51 -270.5t123 -177t163 -98.5t153.5 -47t113.5 -9q254 0 430 100l-18 -92q-172 -82 -428 -82q-86 0 -174.5 22.5t-178.5 74.5t-158.5 127t-112.5 192.5t-44 259.5q0 244 133 445.5t334 309t410 107.5 q82 0 171 -21.5t180 -73t162.5 -126t116.5 -189t45 -254.5q0 -221 -91 -362t-242 -141q-137 0 -191 100q-96 -100 -295 -100q-143 0 -225 62t-82 171q0 49 16.5 94t59.5 94.5t138 79t230 29.5zM903 184q49 0 88 8.5t65.5 17.5t47 31.5t31 37t18.5 46t11 46t6.5 51.5t5.5 47 q-55 8 -136 8q-326 0 -325 -178q0 -115 188 -115z" />
|
||||
<glyph unicode="A" horiz-adv-x="1325" d="M735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625z" />
|
||||
<glyph unicode="B" horiz-adv-x="1271" d="M940 727q10 -2 24.5 -8t54.5 -33t69.5 -61.5t54 -98t24.5 -139.5q0 -387 -495 -387h-494v1366h453q455 0 454 -367q0 -55 -15 -104t-36.5 -78t-42 -50.5t-37.5 -29.5zM684 137q156 0 246 54.5t90 203.5q0 63 -21.5 108.5t-52.5 71t-80 39t-91 17.5t-97 4h-352v-498h358z M938 989q0 133 -72.5 184.5t-220.5 51.5h-319v-451h338q125 0 199.5 43t74.5 172z" />
|
||||
<glyph unicode="C" horiz-adv-x="1286" d="M272 684q0 -291 121 -426t381 -135q209 0 400 80v-142q-199 -78 -416 -77q-633 0 -633 700t633 700q219 0 416 -79v-142q-195 82 -400 82q-260 0 -381 -135t-121 -426z" />
|
||||
<glyph unicode="D" horiz-adv-x="1372" d="M178 1366h428q641 0 641 -682q0 -684 -641 -684h-428v1366zM596 139q262 0 383 131t121 414t-121 414t-383 131h-270v-1090h270z" />
|
||||
<glyph unicode="E" horiz-adv-x="1159" d="M326 1227v-471h628v-144h-628v-473h714v-139h-862v1366h862v-139h-714z" />
|
||||
<glyph unicode="F" horiz-adv-x="1097" d="M178 1366h838v-139h-690v-471h606v-144h-606v-612h-148v1366z" />
|
||||
<glyph unicode="G" horiz-adv-x="1386" d="M758 600v143h477v-653q-221 -106 -477 -106q-633 0 -633 700t633 700q227 0 430 -86v-143q-199 88 -414 88q-260 0 -381 -135t-121 -424q0 -291 121 -425t381 -134q164 0 313 49v426h-329z" />
|
||||
<glyph unicode="H" horiz-adv-x="1380" d="M1053 1366h147v-1366h-147v612h-727v-612h-148v1366h148v-612h727v612z" />
|
||||
<glyph unicode="I" horiz-adv-x="501" d="M178 1366h148v-1366h-148v1366z" />
|
||||
<glyph unicode="J" horiz-adv-x="915" d="M573 1366h148v-958q0 -125 -35 -213.5t-95.5 -131.5t-124 -61t-136.5 -18q-147 0 -271 71v154q117 -82 252 -82q139 0 200.5 68.5t61.5 224.5v946z" />
|
||||
<glyph unicode="K" horiz-adv-x="1294" d="M571 727l633 -727h-194l-535 623l-149 -164v-459h-148v1366h148v-704l632 704h199z" />
|
||||
<glyph unicode="L" horiz-adv-x="1067" d="M326 143h698v-143h-846v1366h148v-1223z" />
|
||||
<glyph unicode="M" horiz-adv-x="1619" d="M1278 1366h160v-1366h-148v1124l-483 -696l-481 696v-1124h-148v1366h160l469 -694z" />
|
||||
<glyph unicode="N" horiz-adv-x="1490" d="M1161 1366h148v-1366h-166l-817 1151v-1151h-148v1366h168l815 -1151v1151z" />
|
||||
<glyph unicode="O" d="M758 1384q635 0 635 -700t-635 -700q-633 0 -633 700t633 700zM758 123q254 0 370.5 135t116.5 426t-116.5 426t-370.5 135q-252 0 -369 -135t-117 -426t117 -426t369 -135z" />
|
||||
<glyph unicode="P" horiz-adv-x="1220" d="M662 1366q229 0 351 -108.5t122 -313.5t-122 -313.5t-351 -108.5h-338v-522h-148v1366h486zM643 664q109 0 181.5 23.5t105.5 68.5t45 88t12 100t-12 100t-45 88.5t-105.5 69t-181.5 23.5h-319v-561h319z" />
|
||||
<glyph unicode="Q" d="M1393 684q0 -651 -553 -698q41 -170 268 -176v-134q-113 0 -196 30t-127 81t-65.5 98t-29.5 101q-565 37 -565 698q0 700 633 700q635 0 635 -700zM758 123q254 0 370.5 135t116.5 426t-116.5 426t-370.5 135q-252 0 -369 -135t-117 -426t117 -426t369 -135z" />
|
||||
<glyph unicode="R" horiz-adv-x="1271" d="M829 573l375 -573h-174l-356 551h-348v-551h-148v1366h502q223 0 343 -101.5t120 -295.5q0 -88 -28 -160t-63.5 -112t-84.5 -69.5t-80 -39t-58 -15.5zM672 690q102 0 170.5 23.5t99.5 65.5t42 83t11 96.5t-11 96.5t-42 83t-99.5 65.5t-170.5 23.5h-346v-537h346z" />
|
||||
<glyph unicode="S" horiz-adv-x="1150" d="M272 1004q0 -70 56.5 -117t139.5 -69.5t181.5 -57.5t181 -76t139 -127t56.5 -209q0 -170 -128 -267t-357 -97q-223 0 -404 96v160q162 -109 393 -109q348 0 349 217q0 92 -56.5 154.5t-139.5 91.5l-181 60q-98 32 -181 65t-139.5 105.5t-56.5 179.5q0 158 114.5 269 t356.5 111q174 0 342 -81v-152q-152 86 -328 86q-164 0 -251 -60t-87 -173z" />
|
||||
<glyph unicode="T" horiz-adv-x="1163" d="M25 1366h1112v-143h-482v-1223h-147v1223h-483v143z" />
|
||||
<glyph unicode="U" horiz-adv-x="1476" d="M1141 1366h147v-805q0 -281 -143.5 -429t-411.5 -148t-411.5 148.5t-143.5 428.5v805h148v-813q0 -434 407.5 -434t407.5 434v813z" />
|
||||
<glyph unicode="V" horiz-adv-x="1251" d="M1061 1366h158l-525 -1366h-145l-524 1366h157l441 -1155z" />
|
||||
<glyph unicode="W" horiz-adv-x="1947" d="M1765 1366h156l-440 -1366h-150l-358 1114l-359 -1114h-151l-438 1366h155l359 -1143l360 1143h148l358 -1143z" />
|
||||
<glyph unicode="X" horiz-adv-x="1206" d="M690 690l484 -690h-177l-397 563l-395 -563h-180l485 692l-473 674h176l387 -549l385 549h180z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1224" d="M1012 1366h178l-508 -739v-627h-147v627l-510 739h178l405 -596z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1247" d="M1104 1366v-125l-785 -1094h785v-147h-973v129l780 1090h-759v147h952z" />
|
||||
<glyph unicode="[" horiz-adv-x="784" d="M391 1286v-1384h223v-140h-370v1663h370v-139h-223z" />
|
||||
<glyph unicode="\" horiz-adv-x="753" d="M59 1548l752 -1749h-133l-754 1749h135z" />
|
||||
<glyph unicode="]" horiz-adv-x="780" d="M393 1286h-221v139h369v-1663h-369v140h221v1384z" />
|
||||
<glyph unicode="^" horiz-adv-x="1146" d="M600 1413l213 -444h-123l-145 325l-148 -325h-123l213 444h113z" />
|
||||
<glyph unicode="_" horiz-adv-x="1118" d="M0 -49h1118v-90h-1118v90z" />
|
||||
<glyph unicode="`" horiz-adv-x="448" d="M244 1391l116 -236h-96l-170 236h150z" />
|
||||
<glyph unicode="a" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -317.5v-307q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5 q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186z" />
|
||||
<glyph unicode="b" horiz-adv-x="1167" d="M569 1040q70 0 131.5 -12t125 -47t109.5 -90t74.5 -149.5t28.5 -217.5q0 -135 -31.5 -236.5t-77.5 -157.5t-110.5 -91t-119 -45t-111.5 -10q-111 0 -193 27.5t-123 63.5t-66.5 86t-30.5 82.5t-5 63.5v1106h147v-414q123 41 252 41zM588 119q57 0 103 13t95.5 51t77 125 t27.5 216q0 199 -76 289t-246 90q-127 0 -252 -51v-553q1 -180 271 -180z" />
|
||||
<glyph unicode="c" horiz-adv-x="966" d="M266 512q0 -205 83 -296t265 -91q154 0 287 57v-143q-143 -55 -303 -55q-72 0 -134.5 12t-128 48t-111.5 92.5t-75.5 152.5t-29.5 223q0 156 43 265.5t116.5 163.5t150.5 76.5t169 22.5q154 0 303 -57v-141q-139 57 -287 57q-182 0 -265 -92t-83 -295z" />
|
||||
<glyph unicode="d" horiz-adv-x="1150" d="M129 524q0 152 41 258.5t113.5 159.5t147.5 74.5t165 21.5q135 0 254 -39v412h147v-1106q0 -41 -12 -84t-50 -102.5t-130 -97t-227 -37.5q-57 0 -111.5 10t-118 45t-109.5 91t-78 157.5t-32 236.5zM276 524q0 -129 28 -216t77 -125t94 -51t103 -13q272 0 272 180v553 q-125 51 -254 51q-168 0 -244 -90t-76 -289z" />
|
||||
<glyph unicode="e" horiz-adv-x="1136" d="M578 1040q94 0 170.5 -29.5t121.5 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-745q14 -154 94 -223.5t237 -69.5q223 0 351 76v-152q-150 -72 -365 -71q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5v7.5v7.5q0 527 449 527zM279 555h598 q0 35 -8.5 78t-34 110.5t-92 112.5t-164.5 45q-152 0 -220.5 -79t-78.5 -267z" />
|
||||
<glyph unicode="f" horiz-adv-x="675" d="M612 1317q-49 0 -74.5 -4t-61.5 -24.5t-53 -73t-17 -136.5v-57h280v-135h-280v-887h-148v887h-176v135h176v55q0 106 27.5 182t62.5 112t89.5 56.5t83 22.5t67.5 2q55 0 98 -12v-131q-41 8 -74 8z" />
|
||||
<glyph unicode="g" horiz-adv-x="1101" d="M557 1040q131 0 220 -36.5t125 -94t48.5 -99.5t12.5 -83v-770q0 -68 -19.5 -125t-64.5 -111.5t-137.5 -85t-223.5 -30.5q-143 0 -291 37v139q131 -37 275 -37q98 0 164.5 17.5t96.5 50t41 64.5t11 77v102q-115 -37 -240 -37q-68 0 -127 11.5t-120.5 45.5t-105.5 88 t-71.5 144t-27.5 209q0 160 43 271.5t115.5 162.5t138 70.5t137.5 19.5zM815 203v530q0 172 -258 172q-55 0 -98 -13t-90 -50t-73 -120t-26 -206q0 -115 24.5 -189.5t72 -110.5t95.5 -48t113 -12q123 0 240 47z" />
|
||||
<glyph unicode="h" horiz-adv-x="1181" d="M649 1040q188 0 290.5 -113.5t102.5 -320.5v-606h-147v606q0 287 -262 287q-143 0 -293 -62v-831h-147v1411h147v-436q155 65 309 65z" />
|
||||
<glyph unicode="i" horiz-adv-x="540" d="M348 0v1022h-147v-1022h147zM356 1366v-162h-163v162h163z" />
|
||||
<glyph unicode="j" horiz-adv-x="514" d="M207 1366h164v-162h-164v162zM215 1022h147v-1081q0 -336 -356 -336v137q127 2 168 50t41 157v1073z" />
|
||||
<glyph unicode="k" horiz-adv-x="1124" d="M559 553l492 -553h-197l-391 449l-127 -138v-311h-148v1411h148v-891l459 502h200z" />
|
||||
<glyph unicode="l" horiz-adv-x="552" d="M354 0h-147v1411h147v-1411z" />
|
||||
<glyph unicode="m" horiz-adv-x="1824" d="M1251 1040q186 0 288.5 -98t102.5 -276v-666h-147v666q0 43 -8 76.5t-32.5 71.5t-79 58.5t-134.5 20.5q-129 0 -283 -51q33 -74 33 -176v-666h-147v666q0 45 -8.5 78.5t-33 70.5t-80.5 57.5t-138 20.5q-125 0 -244 -37v-856h-147v942q197 98 409 98q168 0 270 -84 q197 84 379 84z" />
|
||||
<glyph unicode="n" horiz-adv-x="1189" d="M600 1040q193 0 299.5 -98t106.5 -276v-666h-148v666q0 43 -9 76.5t-35 71.5t-84 58.5t-146 20.5q-129 0 -269 -41v-852h-147v940q201 100 432 100z" />
|
||||
<glyph unicode="o" horiz-adv-x="1155" d="M579.5 1040q92.5 0 170 -22.5t151.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-151.5 -76.5t-170 -22.5t-169 22.5t-150.5 76.5t-117 163.5t-43 265.5t43 265.5t117 163.5t150.5 76.5t169 22.5zM580 119q174 0 253.5 93t79.5 300t-79.5 300t-253.5 93 t-253 -94t-79 -299t79 -299t253 -94z" />
|
||||
<glyph unicode="p" horiz-adv-x="1159" d="M588 1040q57 0 111.5 -10t118 -45t109.5 -92t77.5 -158.5t31.5 -236.5q0 -152 -41 -258.5t-113.5 -159.5t-147.5 -74.5t-165 -21.5q-125 0 -254 39v-402h-147v1096q0 41 12.5 84t50 103.5t130 98t227.5 37.5zM569 121q168 0 244 89t76 290q0 129 -27.5 215t-77 125 t-94.5 52t-102 13q-272 0 -273 -182v-551q117 -51 254 -51z" />
|
||||
<glyph unicode="q" horiz-adv-x="1150" d="M115 498q0 135 31.5 236.5t77.5 158.5t109.5 92t118 45t111.5 10q111 0 193 -27.5t123 -63.5t66.5 -86t30.5 -82.5t5 -63.5v-1096h-147v402q-117 -39 -252 -39q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5zM262 500q0 -201 76 -290t244 -89q135 0 252 51v551 q0 182 -271 182q-57 0 -102 -13t-94.5 -52t-77 -125t-27.5 -215z" />
|
||||
<glyph unicode="r" horiz-adv-x="702" d="M662 897q-168 -4 -349 -53v-844h-147v940q231 98 496 98v-141z" />
|
||||
<glyph unicode="s" horiz-adv-x="872" d="M248 743q0 -53 56 -85.5t137 -54t162 -51.5t137.5 -101.5t56.5 -182.5q0 -133 -99.5 -208.5t-275.5 -75.5q-170 0 -309 77v156q147 -90 303 -90q233 0 233 141q0 76 -56 119t-137 64.5t-162 47t-137.5 86t-56.5 158.5q0 123 89.5 210t273.5 87q131 0 262 -63v-148 q-117 70 -246 70q-231 0 -231 -156z" />
|
||||
<glyph unicode="t" horiz-adv-x="706" d="M375 887v-623q0 -78 32.5 -109.5t114.5 -31.5q63 0 117 24v-139q-68 -25 -135 -24q-41 0 -80 9t-88 35.5t-79 89t-30 154.5v615h-178v135h178v289h148v-289h264v-135h-264z" />
|
||||
<glyph unicode="u" horiz-adv-x="1202" d="M877 1022h147v-592q0 -213 -111.5 -329.5t-316.5 -116.5t-316.5 116.5t-111.5 329.5v592h147v-600q0 -156 68 -228.5t213 -72.5q143 0 212 72.5t69 228.5v600z" />
|
||||
<glyph unicode="v" horiz-adv-x="1062" d="M842 1022h157l-393 -1022h-149l-391 1022h157l309 -838z" />
|
||||
<glyph unicode="w" horiz-adv-x="1603" d="M1368 1022h156l-340 -1022h-150l-233 764l-234 -764h-149l-340 1022h155l261 -791l235 791h141l238 -791z" />
|
||||
<glyph unicode="x" horiz-adv-x="1032" d="M600 514l363 -514h-177l-274 389l-274 -389h-181l365 518l-354 504h174l268 -379l268 379h180l-356 -504z" />
|
||||
<glyph unicode="y" horiz-adv-x="1028" d="M807 1022h158l-418 -1122q-109 -295 -322 -295q-49 0 -96 18v135q41 -18 88 -18q39 0 77 28.5t62.5 68.5t45 81t28.5 70l10 28l-377 1006h158l291 -809z" />
|
||||
<glyph unicode="z" horiz-adv-x="950" d="M840 1022v-129l-561 -752h561v-141h-748v133l557 748h-543v141h734z" />
|
||||
<glyph unicode="{" horiz-adv-x="763" d="M463 72q0 -88 39 -122t121 -38v-137q-150 0 -229 78.5t-79 228.5v319q0 111 -129 150v100q129 33 129 148v319q0 150 79 229.5t229 79.5v-139q-82 -4 -121 -36.5t-39 -123.5v-329q0 -119 -119 -199q119 -80 119 -199v-329z" />
|
||||
<glyph unicode="|" horiz-adv-x="907" d="M526 -203h-147v1565h147v-1565z" />
|
||||
<glyph unicode="}" horiz-adv-x="753" d="M315 72v329q0 117 121 199q-121 82 -121 199v329q0 90 -37.5 123t-121.5 37v139q150 0 228.5 -79.5t78.5 -229.5v-319q0 -115 129 -148v-100q-129 -39 -129 -150v-319q0 -150 -79 -228.5t-228 -78.5v137q82 4 120.5 38t38.5 122z" />
|
||||
<glyph unicode="~" horiz-adv-x="1024" d="M823 639v-123q-57 -72 -122.5 -79t-127.5 26l-122 64q-61 32 -127 25t-123 -79v125q57 72 122.5 79t127.5 -26l122 -65q61 -33 127 -26t123 79z" />
|
||||
<glyph unicode="¡" horiz-adv-x="741" d="M467 1022v-162h-164v162h164zM459 -344h-148l15 1022h118z" />
|
||||
<glyph unicode="¢" horiz-adv-x="976" d="M897 1014q-125 51 -266 55v-772q143 4 266 57v-143q-125 -49 -266 -55v-156h-103v158q-412 41 -411 526q0 268 116.5 388t294.5 136v158h103v-156q131 -2 266 -55v-141zM264 684q0 -178 63.5 -270t200.5 -111v762q-137 -20 -200.5 -111.5t-63.5 -269.5z" />
|
||||
<glyph unicode="£" horiz-adv-x="1136" d="M727 1243q-299 0 -299 -233v-299h412v-136h-412v-415q51 -6 145.5 -25.5t154.5 -30t143 -7.5t153 30v-150q-100 -39 -229 -29.5t-230.5 38t-229.5 31.5t-231 -48v150q80 39 177 45v411h-177v136h177v293q0 158 105.5 269t328.5 111q162 0 309 -79v-150q-139 88 -297 88z " />
|
||||
<glyph unicode="¥" horiz-adv-x="1232" d="M1204 1366l-444 -645h256v-123h-322v-192h322v-123h-322v-283h-147v283h-322v123h322v192h-322v123h256l-444 645h180l404 -588l403 588h180z" />
|
||||
<glyph unicode="§" horiz-adv-x="1112" d="M1008 629q0 -76 -51.5 -130.5t-125.5 -78.5q72 -59 72 -158q0 -131 -111.5 -204.5t-310.5 -73.5q-203 0 -350 73v152q135 -84 340 -84q285 0 285 137q0 61 -48.5 102.5t-218.5 79.5q-184 43 -277 101.5t-93 181.5q0 164 186 223q-82 51 -82 144q0 119 100.5 204.5 t309.5 85.5q156 0 297 -61v-145q-131 70 -285 69q-274 0 -274 -153q0 -25 8 -40.5t68.5 -44t179.5 -55.5q84 -18 140 -38.5t116.5 -56.5t92.5 -94t32 -136zM743 514q117 35 117 115q0 61 -49 102t-217 80q-98 23 -176 49q-152 -29 -152 -133q0 -25 8.5 -40t70 -44t179.5 -55 q135 -29 219 -74z" />
|
||||
<glyph unicode="¨" horiz-adv-x="788" d="M162 1155v162h162v-162h-162zM465 1155v162h162v-162h-162z" />
|
||||
<glyph unicode="©" horiz-adv-x="1593" d="M799 -16q-289 0 -495 204.5t-206 493.5q0 291 206 495.5t495 204.5q291 0 495.5 -204.5t204.5 -495.5q0 -289 -204.5 -493.5t-495.5 -204.5zM799 1311q-258 0 -442.5 -184.5t-184.5 -444.5q0 -258 184.5 -442.5t442.5 -184.5q260 0 443 184.5t183 442.5q0 260 -183 444.5 t-443 184.5zM535 682q0 -170 70.5 -249t221.5 -79q121 0 234 47v-82q-115 -45 -244 -45q-369 0 -368 408q0 410 368 410q129 0 244 -45v-82q-109 45 -234 45q-152 0 -222 -79t-70 -249z" />
|
||||
<glyph unicode="ª" horiz-adv-x="806" d="M381 1382q246 0 246 -235v-172q0 -72 -46 -115t-92.5 -53t-95.5 -10t-96 10t-94 54t-47 118q0 186 297 186l92 -6q0 143 -168 144q-92 0 -164 -29v80q72 28 168 28zM545 977v108q-37 6 -101 7q-207 0 -206 -111q0 -109 155 -109q152 1 152 105z" />
|
||||
<glyph unicode="«" horiz-adv-x="1132" d="M608 911l-364 -389l364 -391h-198l-347 391l347 389h198zM997 911l-364 -389l364 -391h-198l-346 391l346 389h198z" />
|
||||
<glyph unicode="¬" horiz-adv-x="1273" d="M199 664h876v-340h-135v204h-741v136z" />
|
||||
<glyph unicode="­" horiz-adv-x="950" d="M786 682v-143h-624v143h624z" />
|
||||
<glyph unicode="®" horiz-adv-x="1593" d="M926 618l219 -335h-103l-206 323h-205v-323h-86v798h293q131 0 201.5 -58t70.5 -173q0 -63 -22.5 -111.5t-57.5 -72t-58 -33t-46 -15.5zM834 688q113 0 150.5 43t37.5 112.5t-38 112.5t-150 43h-203v-311h203zM799 -16q-289 0 -495 204.5t-206 493.5q0 291 206 495.5 t495 204.5q291 0 495.5 -204.5t204.5 -495.5q0 -289 -204.5 -493.5t-495.5 -204.5zM799 1311q-258 0 -442.5 -184.5t-184.5 -444.5q0 -258 184.5 -442.5t442.5 -184.5q260 0 443 184.5t183 442.5q0 260 -183 444.5t-443 184.5z" />
|
||||
<glyph unicode="¯" horiz-adv-x="825" d="M176 1180v108h479v-108h-479z" />
|
||||
<glyph unicode="°" horiz-adv-x="792" d="M391 1370q109 0 166 -58.5t57 -168.5q0 -227 -223 -227.5t-223 227t223 227.5zM391 989q78 0 114 36t36 118q0 80 -36 116.5t-114 36.5q-80 0 -114.5 -36.5t-34.5 -116.5q0 -82 34.5 -118t114.5 -36z" />
|
||||
<glyph unicode="±" horiz-adv-x="1198" d="M657 721h301v-123h-301v-303h-122v303h-304v123h304v301h122v-301zM231 68v122h727v-122h-727z" />
|
||||
<glyph unicode="²" horiz-adv-x="671" d="M240 1028h331v-80h-462v70q133 98 252.5 230t119.5 239q0 125 -172 125q-106 0 -192 -62v86q90 55 198 56q125 0 185.5 -60.5t60.5 -144.5q1 -197 -321 -459z" />
|
||||
<glyph unicode="³" horiz-adv-x="661" d="M444 1346q6 -2 14.5 -6.5t31 -20.5t40 -36.5t31.5 -54.5t14 -71q0 -90 -66.5 -153.5t-203.5 -63.5q-102 0 -196 45v82q90 -49 186 -49q203 0 203 141t-207 141h-80v76h84q164 0 164 119q0 117 -174 117q-88 0 -158 -37v80q82 37 168 37q125 0 184.5 -58.5t59.5 -138.5 q0 -49 -23.5 -86t-48.5 -49z" />
|
||||
<glyph unicode="´" horiz-adv-x="483" d="M240 1391h151l-170 -236h-98z" />
|
||||
<glyph unicode="µ" horiz-adv-x="1247" d="M891 1022h147v-938q-193 -100 -430 -100q-152 2 -258 82v-496h-147v1452h147v-664q0 -45 9.5 -78.5t35 -70.5t83 -57.5t145.5 -20.5q135 0 268 39v852z" />
|
||||
<glyph unicode="¶" horiz-adv-x="911" d="M549 1366h203v-1366h-136v524h-67q-229 0 -350 108.5t-121 313.5q0 203 121 311.5t350 108.5z" />
|
||||
<glyph unicode="·" horiz-adv-x="636" d="M399 639v-164h-161v164h161z" />
|
||||
<glyph unicode="¸" horiz-adv-x="518" d="M399 -10l-129 -236h-155l168 236h116z" />
|
||||
<glyph unicode="¹" horiz-adv-x="491" d="M244 1683h90v-735h-78v651l-147 -96v94z" />
|
||||
<glyph unicode="º" horiz-adv-x="854" d="M422 1384q266 0 266 -294q0 -293 -266 -293q-113 0 -189.5 64.5t-76.5 228.5q0 86 23.5 147t64.5 92t84 43t94 12zM422 872q98 0 141 51.5t43 166t-43 167t-141 52.5q-96 0 -140 -52.5t-44 -167t44 -166t140 -51.5z" />
|
||||
<glyph unicode="»" horiz-adv-x="1132" d="M526 911h197l348 -389l-348 -391h-197l363 391zM137 911h197l348 -389l-348 -391h-197l363 391z" />
|
||||
<glyph unicode="¼" horiz-adv-x="1433" d="M1225 295h104v-74h-104v-221h-80v221h-357v84l347 428h90v-438zM877 295h268v326zM240 1380h92v-733h-80v651l-146 -98v94zM1042 1403h97l-895 -1448h-97z" />
|
||||
<glyph unicode="½" horiz-adv-x="1460" d="M240 1380h92v-733h-80v651l-146 -98v94zM999 80h332v-80h-461v70q133 98 252 229t119 238q0 127 -172 127q-104 0 -192 -64v88q98 55 198 55q127 0 186.5 -60t59.5 -146q0 -195 -322 -457zM1042 1403h97l-895 -1448h-97z" />
|
||||
<glyph unicode="¾" horiz-adv-x="1654" d="M471 1042q6 -2 14.5 -6t31 -20.5t39.5 -35.5t31.5 -53t14.5 -71q0 -90 -65.5 -154.5t-204.5 -64.5q-98 0 -197 47v80q94 -47 189 -47q201 0 200 141q0 68 -53 104.5t-154 36.5h-79v74h84q164 0 163.5 119t-174.5 119q-84 0 -157 -39v82q82 37 168 37q125 0 184 -58.5 t59 -140.5q0 -49 -23.5 -86t-45.5 -49zM1446 295h104v-74h-104v-221h-80v221h-356v84l346 428h90v-438zM1098 295h268v326zM1264 1403h96l-895 -1448h-96z" />
|
||||
<glyph unicode="¿" horiz-adv-x="989" d="M610 1022v-162h-164v162h164zM553 -360q-47 0 -93 7t-105.5 31.5t-102.5 64.5t-74 111.5t-31 165.5q0 82 32 141.5t77 97.5l90 76q45 38 77 101.5t32 151.5v92h147v-102q0 -104 -31.5 -181.5t-76.5 -119t-90.5 -77.5t-77 -80t-31.5 -100q0 -233 270 -233q141 0 275 90 v-160q-115 -77 -287 -77z" />
|
||||
<glyph unicode="À" horiz-adv-x="1325" d="M735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625zM590 1718l117 -235h-99l-170 235h152z" />
|
||||
<glyph unicode="Á" horiz-adv-x="1325" d="M43 0l545 1366h147l543 -1366h-158l-164 426h-589l-164 -426h-160zM422 567h479l-239 625zM731 1718h152l-170 -235h-99z" />
|
||||
<glyph unicode="Â" horiz-adv-x="1325" d="M735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625zM705 1731l163 -248h-114l-92 145l-93 -145h-114l163 248h87z" />
|
||||
<glyph unicode="Ã" horiz-adv-x="1325" d="M948 1526q-53 -66 -114.5 -73t-117.5 23l-112 59q-55 30 -116.5 22.5t-114.5 -72.5v117q53 66 114.5 71.5t116.5 -23.5l112 -60q56 -30 117.5 -23.5t114.5 71.5v-112zM735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625z" />
|
||||
<glyph unicode="Ä" horiz-adv-x="1325" d="M428 1483v164h164v-164h-164zM731 1483v164h164v-164h-164zM735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625z" />
|
||||
<glyph unicode="Å" horiz-adv-x="1325" d="M735 1366l543 -1366h-158l-164 426h-589l-164 -426h-160l545 1366h147zM422 567h479l-239 625zM661.5 1759q79.5 0 122.5 -43t43 -125t-43 -125t-122.5 -43t-122.5 43t-43 125t43 125t122.5 43zM662 1493q49 0 70.5 22.5t21.5 76t-21.5 77t-70.5 23.5q-51 0 -72 -23.5 t-21 -77t21 -76t72 -22.5z" />
|
||||
<glyph unicode="Æ" horiz-adv-x="1939" d="M1126 1225v-471h607v-144h-607v-469h691v-141h-838v428h-506l-252 -428h-170l811 1366h955v-141h-691zM979 575v644h-45l-375 -644h420z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="1286" d="M774 1247q-260 0 -381 -134t-121 -425t121 -426t381 -135q209 0 400 80v-141q-172 -68 -357 -78l-125 -232h-155l163 232q-575 35 -575 698q0 700 633 700q217 0 416 -77v-142q-187 80 -400 80z" />
|
||||
<glyph unicode="È" horiz-adv-x="1159" d="M596 1718l117 -235h-99l-170 235h152zM326 1227v-471h628v-144h-628v-473h714v-139h-862v1366h862v-139h-714z" />
|
||||
<glyph unicode="É" horiz-adv-x="1159" d="M680 1718h151l-169 -235h-97zM326 1227v-471h628v-144h-628v-473h714v-139h-862v1366h862v-139h-714z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1159" d="M662 1731l165 -248h-114l-92 145l-95 -145h-114l166 248h84zM326 1227v-471h628v-144h-628v-473h714v-139h-862v1366h862v-139h-714z" />
|
||||
<glyph unicode="Ë" horiz-adv-x="1159" d="M395 1483v164h162v-164h-162zM698 1483v164h162v-164h-162zM326 1227v-471h628v-144h-628v-473h714v-139h-862v1366h862v-139h-714z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="501" d="M178 0v1366h148v-1366h-148zM184 1718l117 -235h-98l-170 235h151z" />
|
||||
<glyph unicode="Í" horiz-adv-x="501" d="M326 0v1366h-148v-1366h148zM319 1718h152l-170 -235h-98z" />
|
||||
<glyph unicode="Î" horiz-adv-x="501" d="M326 0v1366h-148v-1366h148zM295 1731l164 -248h-115l-92 145l-92 -145h-115l164 248h86z" />
|
||||
<glyph unicode="Ï" horiz-adv-x="501" d="M326 0v1366h-148v-1366h148zM18 1483v164h164v-164h-164zM322 1483v164h163v-164h-163z" />
|
||||
<glyph unicode="Ð" horiz-adv-x="1468" d="M696 1366q641 0 641 -682q0 -684 -641 -684h-428v621h-159v122h159v623h428zM686 139q262 0 383 131t121 414t-121 414t-383 131h-270v-486h350v-122h-350v-482h270z" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1490" d="M1161 1366h148v-1366h-166l-817 1151v-1151h-148v1366h168l815 -1151v1151zM1032 1526q-53 -66 -114.5 -73t-117.5 23l-113 59q-56 30 -117.5 22.5t-114.5 -72.5v117q53 66 114.5 71.5t117.5 -23.5l113 -60q56 -30 117.5 -23.5t114.5 71.5v-112z" />
|
||||
<glyph unicode="Ò" d="M125 684q0 700 633 700t633 -700t-633 -700t-633 700zM272 684q0 -291 117 -426t369 -135t368.5 135t116.5 426t-116.5 426t-368.5 135t-369 -135t-117 -426zM713 1718l116 -235h-96l-170 235h150z" />
|
||||
<glyph unicode="Ó" d="M758 1384q633 0 633 -700t-633 -700t-633 700t633 700zM758 123q252 0 368.5 135t116.5 426t-116.5 426t-368.5 135t-369 -135t-117 -426t117 -426t369 -135zM801 1718h151l-170 -235h-96z" />
|
||||
<glyph unicode="Ô" d="M758 1384q633 0 633 -700t-633 -700t-633 700t633 700zM758 123q252 0 368.5 135t116.5 426t-116.5 426t-368.5 135t-369 -135t-117 -426t117 -426t369 -135zM801 1731l164 -248h-115l-92 145l-92 -145h-115l164 248h86z" />
|
||||
<glyph unicode="Õ" d="M758 1384q635 0 635 -700t-635 -700q-633 0 -633 700t633 700zM758 123q254 0 370.5 135t116.5 426t-116.5 426t-370.5 135q-252 0 -369 -135t-117 -426t117 -426t369 -135zM1047 1526q-53 -66 -115 -73t-118 23l-113 59q-56 30 -116.5 22.5t-113.5 -72.5v117 q53 66 113.5 71.5t116.5 -23.5l113 -60q56 -30 117.5 -23.5t115.5 71.5v-112z" />
|
||||
<glyph unicode="Ö" d="M524 1483v164h164v-164h-164zM827 1483v164h164v-164h-164zM758 1384q633 0 633 -700t-633 -700t-633 700t633 700zM758 123q252 0 368.5 135t116.5 426t-116.5 426t-368.5 135t-369 -135t-117 -426t117 -426t369 -135z" />
|
||||
<glyph unicode="×" horiz-adv-x="985" d="M705 160l-209 276l-207 -276h-131l272 364l-272 365h131l207 -277l209 277h131l-273 -365l273 -364h-131z" />
|
||||
<glyph unicode="Ø" d="M1415 1366l-160 -188q137 -174 138 -494q0 -702 -635 -702q-254 0 -410 118l-86 -100h-160l158 188q-135 172 -135 496q0 700 633 700q256 0 411 -118l86 100h160zM272 684q0 -252 84 -383l721 856q-115 88 -319 88q-252 0 -369 -135t-117 -426zM1245 684q0 244 -84 381 l-721 -856q115 -88 318 -88q254 0 370.5 135t116.5 428z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="1476" d="M672 1718l116 -235h-96l-172 235h152zM1141 1366h147v-805q0 -281 -143.5 -429t-411.5 -148t-411.5 148.5t-143.5 428.5v805h148v-813q0 -434 407.5 -434t407.5 434v813z" />
|
||||
<glyph unicode="Ú" horiz-adv-x="1476" d="M795 1718h151l-170 -235h-98zM1141 1366h147v-805q0 -281 -143.5 -429t-411.5 -148t-411.5 148.5t-143.5 428.5v805h148v-813q0 -434 407.5 -434t407.5 434v813z" />
|
||||
<glyph unicode="Û" horiz-adv-x="1476" d="M776 1731l164 -248h-115l-92 145l-92 -145h-115l164 248h86zM1141 1366h147v-805q0 -281 -143.5 -429t-411.5 -148t-411.5 148.5t-143.5 428.5v805h148v-813q0 -434 407.5 -434t407.5 434v813z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1476" d="M500 1483v164h164v-164h-164zM803 1483v164h164v-164h-164zM1141 1366h147v-805q0 -281 -143.5 -429t-411.5 -148t-411.5 148.5t-143.5 428.5v805h148v-813q0 -434 407.5 -434t407.5 434v813z" />
|
||||
<glyph unicode="Ý" horiz-adv-x="1224" d="M655 1718h150l-170 -235h-96zM1012 1366h178l-508 -739v-627h-147v627l-510 739h178l405 -596z" />
|
||||
<glyph unicode="Þ" horiz-adv-x="1167" d="M590 1159q227 0 349 -109.5t122 -314.5t-122 -313.5t-349 -108.5h-266v-313h-148v1366h148v-207h266zM569 455q109 0 181.5 23.5t105.5 68.5t45 88t12 100.5t-12 100.5t-45 88t-105.5 68.5t-181.5 23.5h-245v-561h245z" />
|
||||
<glyph unicode="ß" horiz-adv-x="1255" d="M889 705q10 -4 27.5 -12.5t61.5 -39t76.5 -66.5t60.5 -94.5t28 -123.5q0 -170 -150.5 -269.5t-384.5 -99.5v133q162 0 274.5 61.5t112.5 188.5q0 129 -120.5 188.5t-266.5 59.5v129q145 0 232.5 62.5t87.5 181.5q0 123 -85 183t-222 60q-141 0 -217 -87t-76 -300v-860 h-148v868q0 113 23.5 203t73 162t136.5 111.5t208 39.5q229 0 341.5 -112.5t112.5 -267.5q0 -51 -19.5 -100.5t-46 -84.5t-54 -61.5t-46.5 -40.5z" />
|
||||
<glyph unicode="à" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5 q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186zM506 1391l117 -236h-97l-170 236h150z" />
|
||||
<glyph unicode="á" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5 q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186zM584 1391h151l-170 -236h-98z" />
|
||||
<glyph unicode="â" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5 q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186zM612 1401l164 -246h-114l-93 143l-92 -143h-115l164 246h86z" />
|
||||
<glyph unicode="ã" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t93 59t101 36t105.5 17.5t85 7t59.5 1l166 -10q0 137 -75.5 195.5t-223.5 58.5 q-150 0 -299 -47v141q141 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -201q0 -195 281 -194q272 0 272 186zM846 1198q-53 -66 -114.5 -73t-118.5 23l-112 59q-56 30 -117.5 23t-115.5 -73v117q53 66 114.5 72t118.5 -24l112 -59q56 -30 118 -24t115 72v-113z" />
|
||||
<glyph unicode="ä" horiz-adv-x="1093" d="M336 1155v162h164v-162h-164zM639 1155v162h164v-162h-164zM522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36 t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186z" />
|
||||
<glyph unicode="å" horiz-adv-x="1093" d="M522 1040q215 0 328 -108.5t113 -315.5v-309q0 -98 -45.5 -167.5t-117 -100.5t-134 -43t-123.5 -12q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5q0 70 25.5 125.5t62.5 90t94 59t101 36t104.5 17.5t86 7t60.5 1l164 -10q0 137 -75.5 195.5t-223.5 58.5 q-166 0 -299 -49v143q151 53 307 53zM815 307v197q-68 12 -182 12q-371 0 -371 -203q0 -193 281 -192q272 0 272 186zM559 1432q80 0 123 -43t43 -125t-43 -125t-123 -43t-123 43t-43 125t43 125t123 43zM559 1163q49 0 70.5 23.5t21.5 77t-21.5 76t-70.5 22.5 q-51 0 -71.5 -22.5t-20.5 -76t20.5 -77t71.5 -23.5z" />
|
||||
<glyph unicode="æ" horiz-adv-x="1824" d="M1255 1040q94 0 171 -29.5t122 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-746q14 -154 94 -223.5t240 -69.5q219 0 350 76v-152q-154 -72 -366 -71q-248 0 -365 151q-104 -152 -370 -151q-47 0 -96.5 6t-112 27.5t-108.5 55t-78.5 96t-32.5 144.5 q0 70 25.5 125.5t62.5 90t93 59t101 36t105.5 17.5t85 7t59.5 1l166 -10q0 137 -76 195.5t-223 58.5q-166 0 -299 -49v143q152 53 305 53q268 0 377 -168q112 168 362 168zM809 307v197q-66 12 -180 12q-371 0 -371 -203q0 -193 281 -192q270 0 270 186zM956 555h598 q0 35 -8 78t-33.5 110.5t-92 112.5t-165.5 45q-150 0 -219.5 -79t-79.5 -267z" />
|
||||
<glyph unicode="ç" horiz-adv-x="966" d="M614 899q-182 0 -265 -92t-83 -295q0 -205 83 -296t265 -91q154 0 287 57v-143q-115 -41 -225 -53l-127 -230h-156l164 228q-86 4 -157.5 30.5t-138 83t-104.5 162t-38 252.5q0 156 43 265.5t116.5 163.5t150.5 76.5t169 22.5q154 0 303 -57v-141q-140 57 -287 57z" />
|
||||
<glyph unicode="è" horiz-adv-x="1136" d="M578 1040q94 0 170.5 -29.5t121.5 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-745q14 -154 94 -223.5t237 -69.5q223 0 351 76v-152q-150 -72 -365 -71q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5v10q-2 532 449 532zM279 555h598 q0 35 -8.5 78t-34 110.5t-92 112.5t-164.5 45q-152 0 -220.5 -79t-78.5 -267zM547 1391l117 -236h-99l-170 236h152z" />
|
||||
<glyph unicode="é" horiz-adv-x="1136" d="M578 1040q94 0 170.5 -29.5t121.5 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-745q14 -154 94 -223.5t237 -69.5q223 0 351 76v-152q-150 -72 -365 -71q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5v10q-2 532 449 532zM279 555h598 q0 35 -8.5 78t-34 110.5t-92 112.5t-164.5 45q-152 0 -220.5 -79t-78.5 -267zM623 1391h151l-170 -236h-98z" />
|
||||
<glyph unicode="ê" horiz-adv-x="1136" d="M578 1040q94 0 170.5 -29.5t121.5 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-745q14 -154 94 -223.5t237 -69.5q223 0 351 76v-152q-150 -72 -365 -71q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5v10q-2 532 449 532zM279 555h598 q0 35 -8.5 78t-34 110.5t-92 112.5t-164.5 45q-152 0 -220.5 -79t-78.5 -267zM621 1401l163 -246h-114l-92 143l-93 -143h-114l164 246h86z" />
|
||||
<glyph unicode="ë" horiz-adv-x="1136" d="M578 1040q94 0 170.5 -29.5t121.5 -69.5t79 -104.5t48.5 -109.5t22.5 -108.5t8 -78.5v-44l-4 -72h-745q14 -154 94 -223.5t237 -69.5q223 0 351 76v-152q-150 -72 -365 -71q-90 0 -165 21.5t-147.5 74.5t-113.5 159.5t-41 258.5v10q-2 532 449 532zM279 555h598 q0 35 -8.5 78t-34 110.5t-92 112.5t-164.5 45q-152 0 -220.5 -79t-78.5 -267zM344 1155v162h164v-162h-164zM647 1155v162h164v-162h-164z" />
|
||||
<glyph unicode="ì" horiz-adv-x="552" d="M203 0v1022h147v-1022h-147zM209 1391l117 -236h-99l-170 236h152z" />
|
||||
<glyph unicode="í" horiz-adv-x="552" d="M350 0v1022h-147v-1022h147zM342 1391h152l-170 -236h-97z" />
|
||||
<glyph unicode="î" horiz-adv-x="552" d="M350 0v1022h-147v-1022h147zM317 1401l166 -246h-114l-93 143l-94 -143h-114l165 246h84z" />
|
||||
<glyph unicode="ï" horiz-adv-x="552" d="M350 0v1022h-147v-1022h147zM43 1155v162h162v-162h-162zM346 1155v162h162v-162h-162z" />
|
||||
<glyph unicode="ð" horiz-adv-x="1193" d="M852 1223q197 -193 197 -596q0 -643 -465 -643q-123 0 -216.5 41t-145.5 109.5t-77.5 147t-25.5 162.5q0 199 125 314.5t340 115.5q186 0 307 -90q-25 244 -174 365l-230 -129l-55 98l170 94q-86 33 -192 33q-41 0 -111 -8v137q66 10 127 10q184 0 328 -86l190 107 l53 -98zM584 123q43 0 70.5 3t78.5 29.5t83 75t57.5 148.5t27.5 242q-111 117 -317 116q-154 0 -236 -75.5t-82 -215.5q0 -41 9.5 -84t38 -103t98.5 -98t172 -38z" />
|
||||
<glyph unicode="ñ" horiz-adv-x="1189" d="M600 1040q193 0 299.5 -98t106.5 -276v-666h-148v666q0 43 -9 76.5t-35 71.5t-84 58.5t-146 20.5q-129 0 -269 -41v-852h-147v940q201 100 432 100zM874 1198q-53 -66 -114.5 -73t-117.5 23l-113 59q-56 30 -116.5 23t-113.5 -73v117q53 66 113.5 72t116.5 -24l113 -59 q56 -30 117.5 -24t114.5 72v-113z" />
|
||||
<glyph unicode="ò" horiz-adv-x="1155" d="M100 512q0 156 43 265.5t117 163.5t151.5 76.5t170 22.5t169 -22.5t150.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-150.5 -76.5t-169 -22.5t-170 22.5t-151.5 76.5t-117 163.5t-43 265.5zM248 512q0 -207 80 -300t254 -93t252.5 94t78.5 299t-78.5 299 t-252.5 94t-254 -93t-80 -300zM514 1391l117 -236h-99l-170 236h152z" />
|
||||
<glyph unicode="ó" horiz-adv-x="1155" d="M581.5 1040q92.5 0 169 -22.5t150.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-150.5 -76.5t-169 -22.5t-170 22.5t-151.5 76.5t-117 163.5t-43 265.5t43 265.5t117 163.5t151.5 76.5t170 22.5zM582 119q174 0 252.5 94t78.5 299t-78.5 299t-252.5 94 t-254 -93t-80 -300t80 -300t254 -93zM647 1391h152l-170 -236h-99z" />
|
||||
<glyph unicode="ô" horiz-adv-x="1155" d="M100 512q0 156 43 265.5t117 163.5t151.5 76.5t170 22.5t169 -22.5t150.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-150.5 -76.5t-169 -22.5t-170 22.5t-151.5 76.5t-117 163.5t-43 265.5zM248 512q0 -207 80 -300t254 -93t252.5 94t78.5 299t-78.5 299 t-252.5 94t-254 -93t-80 -300zM623 1401l165 -246h-114l-92 143l-95 -143h-114l166 246h84z" />
|
||||
<glyph unicode="õ" horiz-adv-x="1155" d="M100 512q0 156 43 265.5t117 163.5t150.5 76.5t169 22.5t170 -22.5t151.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-151.5 -76.5t-170 -22.5t-169 22.5t-150.5 76.5t-117 163.5t-43 265.5zM248 512q0 -207 79 -300t253 -93t253.5 93t79.5 300t-79.5 300 t-253.5 93t-253 -93t-79 -300zM877 1198q-53 -66 -115 -73t-118 23l-113 59q-56 30 -116.5 24t-113.5 -72v115q53 66 113.5 73t116.5 -23l113 -60q56 -31 117.5 -24t115.5 73v-115z" />
|
||||
<glyph unicode="ö" horiz-adv-x="1155" d="M100 512q0 156 43 265.5t117 163.5t151.5 76.5t170 22.5t169 -22.5t150.5 -76.5t117 -163.5t43 -265.5t-43 -265.5t-117 -163.5t-150.5 -76.5t-169 -22.5t-170 22.5t-151.5 76.5t-117 163.5t-43 265.5zM248 512q0 -207 80 -300t254 -93t252.5 94t78.5 299t-78.5 299 t-252.5 94t-254 -93t-80 -300zM348 1155v162h162v-162h-162zM651 1155v162h162v-162h-162z" />
|
||||
<glyph unicode="÷" horiz-adv-x="1286" d="M561 735v164h164v-164h-164zM561 152v163h164v-163h-164zM1059 465v123h-832v-123h832z" />
|
||||
<glyph unicode="ø" horiz-adv-x="1175" d="M938 1022h160l-125 -150q94 -131 94 -360q0 -156 -43 -265.5t-116.5 -163.5t-150.5 -76.5t-169 -22.5q-182 0 -297 79l-55 -63h-160l127 152q-96 133 -97 360q0 156 43.5 265.5t117 163.5t151.5 76.5t170 22.5q180 0 297 -82zM254 512q0 -158 45 -246l496 586 q-78 53 -207 53q-174 0 -254 -93t-80 -300zM920 512q0 156 -46 246l-493 -588q76 -51 207 -51q174 0 253 93t79 300z" />
|
||||
<glyph unicode="ù" horiz-adv-x="1202" d="M877 1022h147v-592q0 -213 -111.5 -329.5t-316.5 -116.5t-316.5 116.5t-111.5 329.5v592h147v-600q0 -156 68 -228.5t213 -72.5q143 0 212 72.5t69 228.5v600zM535 1391l116 -236h-98l-170 236h152z" />
|
||||
<glyph unicode="ú" horiz-adv-x="1202" d="M877 1022h147v-592q0 -213 -111.5 -329.5t-316.5 -116.5t-316.5 116.5t-111.5 329.5v592h147v-600q0 -156 68 -228.5t213 -72.5q143 0 212 72.5t69 228.5v600zM657 1391h150l-170 -236h-96z" />
|
||||
<glyph unicode="û" horiz-adv-x="1202" d="M877 1022h147v-592q0 -213 -111.5 -329.5t-316.5 -116.5t-316.5 116.5t-111.5 329.5v592h147v-600q0 -156 68 -228.5t213 -72.5q143 0 212 72.5t69 228.5v600zM637 1401l166 -246h-115l-92 143l-92 -143h-115l164 246h84z" />
|
||||
<glyph unicode="ü" horiz-adv-x="1202" d="M877 1022h147v-592q0 -213 -111.5 -329.5t-316.5 -116.5t-316.5 116.5t-111.5 329.5v592h147v-600q0 -156 68 -228.5t213 -72.5q143 0 212 72.5t69 228.5v600zM362 1155v162h164v-162h-164zM666 1155v162h163v-162h-163z" />
|
||||
<glyph unicode="ý" horiz-adv-x="1028" d="M807 1022h158l-418 -1122q-109 -295 -320 -295q-51 0 -98 18v135q41 -18 88 -18q63 0 118.5 68.5t80.5 138.5l24 69l-377 1006h158l293 -809zM565 1391h152l-170 -236h-98z" />
|
||||
<glyph unicode="þ" horiz-adv-x="1136" d="M569 1026q70 0 131.5 -12.5t125 -47t109.5 -90t74.5 -149.5t28.5 -217q0 -152 -42 -258.5t-114.5 -159.5t-148.5 -74.5t-164 -21.5q-129 0 -252 41v-414h-147v1776h147v-414q123 41 252 41zM569 133q170 0 246 89t76 288t-76 289t-246 90q-135 0 -252 -51v-654 q117 -51 252 -51z" />
|
||||
<glyph unicode="ÿ" horiz-adv-x="1028" d="M807 1022h158l-418 -1122q-109 -295 -320 -295q-51 0 -98 18v135q41 -18 88 -18q63 0 118.5 68.5t80.5 138.5l24 69l-377 1006h158l293 -809zM279 1155v162h161v-162h-161zM582 1155v162h161v-162h-161z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="2029" d="M1894 1227h-716v-471h628v-144h-628v-473h716v-139h-864v27q-117 -43 -274 -43q-633 0 -633 700t633 700q160 0 274 -45v27h864v-139zM756 123q170 0 274 59v1004q-109 59 -274 59q-252 0 -369 -135t-117 -426t117 -426t369 -135z" />
|
||||
<glyph unicode="œ" horiz-adv-x="1921" d="M1356 1040q94 0 170 -29.5t122 -69.5t78.5 -104.5t47 -109.5t22.5 -108.5t8 -78.5v-44l-2 -72h-745q14 -154 94 -223.5t238 -69.5q219 0 350 76v-152q-150 -72 -365 -71q-276 0 -393 190q-119 -190 -399 -190q-92 0 -169 22.5t-151 76.5t-117 163.5t-43 265.5t43 265.5 t117 163.5t150.5 76.5t169.5 22.5q279 0 397 -186q113 186 377 186zM582 119q174 0 253.5 93t79.5 300t-79.5 300t-253.5 93t-253 -93t-79 -300t79 -300t253 -93zM1055 555h600q0 33 -8.5 77t-35 111.5t-93 112.5t-162.5 45q-152 0 -221.5 -79t-79.5 -267z" />
|
||||
<glyph unicode="Ÿ" horiz-adv-x="1224" d="M375 1483v164h164v-164h-164zM678 1483v164h164v-164h-164zM1012 1366h178l-508 -739v-627h-147v627l-510 739h178l405 -596z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="823" d="M457 1401l164 -246h-115l-92 143l-92 -143h-115l166 246h84z" />
|
||||
<glyph unicode="˜" horiz-adv-x="1038" d="M791 1198q-53 -66 -115 -73t-118 23l-113 59q-56 30 -116.5 23t-113.5 -73v117q53 66 113.5 72t116.5 -24l113 -59q56 -30 117.5 -24t115.5 72v-113z" />
|
||||
<glyph unicode=" " horiz-adv-x="878" />
|
||||
<glyph unicode=" " horiz-adv-x="1759" />
|
||||
<glyph unicode=" " horiz-adv-x="878" />
|
||||
<glyph unicode=" " horiz-adv-x="1759" />
|
||||
<glyph unicode=" " horiz-adv-x="585" />
|
||||
<glyph unicode=" " horiz-adv-x="438" />
|
||||
<glyph unicode=" " horiz-adv-x="292" />
|
||||
<glyph unicode=" " horiz-adv-x="292" />
|
||||
<glyph unicode=" " horiz-adv-x="219" />
|
||||
<glyph unicode=" " horiz-adv-x="350" />
|
||||
<glyph unicode=" " horiz-adv-x="96" />
|
||||
<glyph unicode="‐" horiz-adv-x="950" d="M786 682v-143h-624v143h624z" />
|
||||
<glyph unicode="‑" horiz-adv-x="950" d="M786 682v-143h-624v143h624z" />
|
||||
<glyph unicode="‒" horiz-adv-x="950" d="M786 682v-143h-624v143h624z" />
|
||||
<glyph unicode="–" horiz-adv-x="1146" d="M1001 655v-127h-860v127h860z" />
|
||||
<glyph unicode="—" horiz-adv-x="1824" d="M1663 664v-136h-1501v136h1501z" />
|
||||
<glyph unicode="‘" horiz-adv-x="522" d="M264 1384l152 -401h-148l-172 401h168z" />
|
||||
<glyph unicode="’" horiz-adv-x="522" d="M248 1384h168l-172 -401h-148z" />
|
||||
<glyph unicode="‚" horiz-adv-x="614" d="M299 172h166l-170 -401h-148z" />
|
||||
<glyph unicode="“" horiz-adv-x="800" d="M543 1384l151 -401h-147l-172 401h168zM264 1384l152 -401h-148l-172 401h168z" />
|
||||
<glyph unicode="”" horiz-adv-x="792" d="M248 1384h168l-172 -401h-148zM526 1384h168l-172 -401h-147z" />
|
||||
<glyph unicode="„" horiz-adv-x="892" d="M299 172h166l-170 -401h-148zM578 172h167l-172 -401h-147z" />
|
||||
<glyph unicode="•" horiz-adv-x="849" d="M657 684q0 -98 -69.5 -168t-165.5 -70q-98 0 -168 70t-70 168t70 167t168 69q96 0 165.5 -69t69.5 -167z" />
|
||||
<glyph unicode="…" horiz-adv-x="1576" d="M219 0v164h164v-164h-164zM1200 0v164h162v-164h-162zM711 0v164h161v-164h-161z" />
|
||||
<glyph unicode=" " horiz-adv-x="350" />
|
||||
<glyph unicode="‹" horiz-adv-x="710" d="M608 911l-364 -389l364 -391h-198l-347 391l347 389h198z" />
|
||||
<glyph unicode="›" horiz-adv-x="776" d="M137 911h197l348 -389l-348 -391h-197l363 391z" />
|
||||
<glyph unicode=" " horiz-adv-x="438" />
|
||||
<glyph unicode="€" horiz-adv-x="1390" d="M883 1245q-207 0 -325 -84t-157 -260h658v-123h-674q-4 -61 -4 -94q0 -37 4 -94h674v-123h-658q39 -176 157 -260t325 -84q209 0 399 80v-142q-203 -78 -416 -77q-524 0 -614 483h-150v123h136q-4 61 -4.5 94t4.5 94h-136v123h150q90 483 614 483q215 0 416 -79v-142 q-194 82 -399 82z" />
|
||||
<glyph unicode="™" horiz-adv-x="1550" d="M100 1366h557v-72h-241v-610h-74v610h-242v72zM1313 1366h80v-682h-74v561l-242 -348l-241 348v-561h-74v682h80l235 -346z" />
|
||||
<glyph unicode="" horiz-adv-x="1020" d="M0 1020h1020v-1020h-1020v1020z" />
|
||||
<glyph unicode="fi" horiz-adv-x="1202" d="M1040 0v1022h-147v-1022h147zM1049 1366v-162h-164v162h164zM616 1317q-39 0 -59 -2t-54 -14.5t-52.5 -35t-33 -70.5t-14.5 -116v-55h287v-137h-287v-887h-143v887h-176v137h176v53q0 106 28.5 182t63.5 112t89.5 56.5t82 22.5t66.5 2q53 0 100 -10v-133q-41 8 -74 8z " />
|
||||
<glyph unicode="fl" horiz-adv-x="1220" d="M1040 0v1411h-147v-1411h147zM616 1317q-39 0 -59 -2t-54 -14.5t-52.5 -35t-33 -70.5t-14.5 -116v-55h287v-137h-287v-887h-143v887h-176v137h176v53q0 106 28.5 182t63.5 112t89.5 56.5t82 22.5t66.5 2q53 0 100 -10v-133q-41 8 -74 8z" />
|
||||
<glyph unicode="ffi" horiz-adv-x="1892" d="M1700 0v1022h-147v-1022h147zM1708 1366v-162h-163v162h163zM1288 1317q-49 0 -74.5 -4t-61.5 -24.5t-53 -73t-17 -136.5v-57h280v-135h-280v-887h-148v887h-176v135h176v55q0 106 27.5 182t62.5 112t89.5 56.5t83 22.5t67.5 2q55 0 98 -12v-131q-41 8 -74 8zM612 1317 q-49 0 -74.5 -4t-61.5 -24.5t-53 -73t-17 -136.5v-57h280v-135h-280v-887h-148v887h-176v135h176v55q0 106 27.5 182t62.5 112t89.5 56.5t83 22.5t67.5 2q55 0 98 -12v-131q-41 8 -74 8z" />
|
||||
<glyph unicode="ffl" horiz-adv-x="1904" d="M1706 0h-147v1411h147v-1411zM1288 1317q-49 0 -74.5 -4t-61.5 -24.5t-53 -73t-17 -136.5v-57h280v-135h-280v-887h-148v887h-176v135h176v55q0 106 27.5 182t62.5 112t89.5 56.5t83 22.5t67.5 2q55 0 98 -12v-131q-41 8 -74 8zM612 1317q-49 0 -74.5 -4t-61.5 -24.5 t-53 -73t-17 -136.5v-57h280v-135h-280v-887h-148v887h-176v135h176v55q0 106 27.5 182t62.5 112t89.5 56.5t83 22.5t67.5 2q55 0 98 -12v-131q-41 8 -74 8z" />
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 144 B |
|
@ -1,77 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>Welcome</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>MOTH</h1>
|
||||
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="register.html">Register</a></li>
|
||||
<li><a href="puzzles.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<section>
|
||||
<h2>Getting Started</h2>
|
||||
|
||||
<p>
|
||||
Here is what you need to do:
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
<a href="register.html">Register</a> your team.
|
||||
This only needs to happen once per team,
|
||||
so if somebody else on your team has already done it,
|
||||
you don't need to.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Get an <a href="puzzles.html">overview of puzzles</a>,
|
||||
and start working on something.
|
||||
The list of open puzzles changes over time,
|
||||
you need to reload the page to get the current version!
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Check the <a href="scoreboard.html">scoreboard</a>
|
||||
in another tab,
|
||||
to see how your team is doing.
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Reading Material</h2>
|
||||
|
||||
<p>
|
||||
Stuck? Taking a break?
|
||||
Here are some things to read.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="credits.html">Credits</a></li>
|
||||
<li>
|
||||
<a href="scoring.html">About Scoring</a>
|
||||
explains how we calculate scores,
|
||||
and why.
|
||||
Reading this will help you formulate a strategy to win.
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section id="sponsors">
|
||||
<img src="images/logo0.png" alt="">
|
||||
<img src="images/logo1.png" alt="">
|
||||
<img src="images/logo2.png" alt="">
|
||||
<img src="images/logo3.png" alt="">
|
||||
<img src="images/logo4.png" alt="">
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +0,0 @@
|
|||
[
|
||||
"scoreboard.html"
|
||||
]
|
|
@ -1,73 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scoreboard</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<script src="scoreboard.js" async></script>
|
||||
<style>
|
||||
body, html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
cursor: none;
|
||||
}
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var SECS = 1000, DELAY = 30*SECS;
|
||||
var urls = ["scoreboard.html"];
|
||||
var stack = [];
|
||||
var i = 0;
|
||||
var xmlhttp;
|
||||
if (window.XMLHttpRequest){
|
||||
xmlhttp = new XMLHttpRequest();
|
||||
}
|
||||
xmlhttp.onreadystatechange = function(){
|
||||
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
|
||||
// update urls
|
||||
urls = JSON.parse(xmlhttp.responseText);
|
||||
console.log("new urls:", urls);
|
||||
}
|
||||
}
|
||||
xmlhttp.open("GET", "projections.json", true);
|
||||
xmlhttp.send();
|
||||
function reload() {
|
||||
// alternate between scoreboard and other things
|
||||
if (i%2){
|
||||
url = urls[0];
|
||||
}
|
||||
else {
|
||||
if (stack.length === 0){
|
||||
xmlhttp.open("GET", "projections.json", true);
|
||||
xmlhttp.send();
|
||||
if (urls.length > 1){
|
||||
stack = urls.slice(1);
|
||||
}
|
||||
else {
|
||||
stack = urls;
|
||||
}
|
||||
}
|
||||
url = stack.pop();
|
||||
console.log("loading " + url + " of " + urls);
|
||||
}
|
||||
document.getElementById("reloader").src = url;
|
||||
i++;
|
||||
}
|
||||
|
||||
function init() {
|
||||
setInterval(reload, DELAY);
|
||||
}
|
||||
|
||||
window.addEventListener("load", init);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<iframe id="reloader" src="scoreboard.html"></iframe>
|
||||
</body>
|
||||
</html>
|
|
@ -1,21 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Open Puzzles</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<link rel="stylesheet" href="res/style.css">
|
||||
<link rel="icon" href="res/luna-moth.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/luna-moth.png" type="image/png">
|
||||
|
||||
<script src="res/common.js"></script>
|
||||
<script src="res/terminal.js"></script>
|
||||
<script src="res/puzzles.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Open Puzzles</h1>
|
||||
<div class="readme">
|
||||
<div id="puzzles"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Open Puzzles</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<link rel="stylesheet" href="res/style.css">
|
||||
<link rel="icon" href="res/luna-moth.svg" type="image/svg+xml">
|
||||
<link rel="icon" href="res/luna-moth.png" type="image/png">
|
||||
|
||||
<script src="res/common.js"></script>
|
||||
<script src="res/terminal.js"></script>
|
||||
<script src="res/puzzles.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Open Puzzles</h1>
|
||||
<div class="readme">
|
||||
<div id="puzzles"></div>
|
||||
</div>
|
||||
<section>
|
||||
<fieldset><legend>External Token:</legend>
|
||||
<p>Example: <samp>category:5:xylep-radar-nanox</samp></p>
|
||||
<form action='cgi-bin/token.cgi'>
|
||||
Team Hash: <input name='t'><br>
|
||||
Token: <input name='k'><input type='submit'>
|
||||
</form>
|
||||
</fieldset>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
|
@ -1 +0,0 @@
|
|||
puzzles-notoken.html
|
|
@ -1,52 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Team Registration</title>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Team Registration</h1>
|
||||
|
||||
<section>
|
||||
<h2>Register Your Team</h2>
|
||||
|
||||
<p>
|
||||
Before you can use a team hash,
|
||||
you must name your team.
|
||||
You can only do this once,
|
||||
so make sure it's the team name you actually want.
|
||||
Staff are unable to make changes to team names.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If somebody on your team has already registered your hash,
|
||||
you don't need to do it again.
|
||||
</p>
|
||||
|
||||
<form method="get" action="cgi-bin/register.cgi">
|
||||
<label>Team Hash:</label>
|
||||
<input type="text" name="h">
|
||||
<br>
|
||||
<label>Team Name:</label>
|
||||
<input type="text" name="n">
|
||||
<br>
|
||||
<input type="submit" value="Register">
|
||||
</form>
|
||||
</section>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="register.html">Register</a></li>
|
||||
<li><a href="puzzles.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<section id="sponsors">
|
||||
<img src="images/logo0.png" alt="">
|
||||
<img src="images/logo1.png" alt="">
|
||||
<img src="images/logo2.png" alt="">
|
||||
<img src="images/logo3.png" alt="">
|
||||
<img src="images/logo4.png" alt="">
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
|
@ -1,18 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Lato Regular'), local('Lato-Regular'), url(Lato-Regular.ttf) format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Lato Bold'), local('Lato-Bold'), url(Lato-Bold.ttf) format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Lato Italic'), local('Lato-Italic'), url(Lato-Italic.ttf) format('truetype');
|
||||
}
|
Before Width: | Height: | Size: 236 KiB |
|
@ -1,50 +0,0 @@
|
|||
function loadJSON(url, callback) {
|
||||
function loaded(e) {
|
||||
callback(e.target.response);
|
||||
}
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onload = loaded;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "json";
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function createElement(tagName) {
|
||||
return document.createElement(tagName);
|
||||
}
|
||||
|
||||
function djb2hash(str) {
|
||||
var hash = 5381;
|
||||
|
||||
for (var i = 0; i < str.length; i += 1) {
|
||||
var c = str.charCodeAt(i);
|
||||
hash = ((hash * 33) + c) & 0xffffffff;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
// Make code readable by providing Function.prototype.bind in older JS environments
|
||||
if (!Function.prototype.bind) {
|
||||
Function.prototype.bind = function(oThis) {
|
||||
if (typeof this !== 'function') {
|
||||
// closest thing possible to the ECMAScript 5
|
||||
// internal IsCallable function
|
||||
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
||||
}
|
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||
fToBind = this,
|
||||
fNOP = function() {},
|
||||
fBound = function() {
|
||||
return fToBind.apply(this instanceof fNOP && oThis
|
||||
? this
|
||||
: oThis,
|
||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||
};
|
||||
|
||||
fNOP.prototype = this.prototype;
|
||||
fBound.prototype = new fNOP();
|
||||
|
||||
return fBound;
|
||||
};
|
||||
}
|
Before Width: | Height: | Size: 34 KiB |
|
@ -1,274 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
sodipodi:docname="luna-moth.svg"
|
||||
viewBox="0 0 435.58 606.43"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
bordercolor="#666666"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-y="27"
|
||||
fit-margin-left="0"
|
||||
pagecolor="#ffffff"
|
||||
fit-margin-top="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="716"
|
||||
showgrid="false"
|
||||
borderopacity="1.0"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:cx="325.81575"
|
||||
inkscape:cy="175.14133"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:document-units="px" />
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-169.61 -199.65)">
|
||||
<g
|
||||
id="g4449"
|
||||
transform="matrix(-0.88604614,0.46359708,0.46359708,0.88604614,470.47926,-197.23926)">
|
||||
<g
|
||||
id="g5242"
|
||||
transform="matrix(1.5856107,0.2341624,0.16998437,1.0681247,-408.59758,-19.14161)">
|
||||
<path
|
||||
d="m 486.09807,434.34389 c 0,0 33.21943,37.1978 28.44237,74.37852 -9.69431,-1.18729 -28.05784,-15.23506 -49.27832,31.40255 -26.1093,57.38302 4.04174,56.10536 -8.44016,86.24229 -12.48109,30.13515 -22.15846,-14.83784 -21.15287,-20.87068 27.75853,-86.95342 19.16417,-80.74245 50.42898,-171.15268 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a0b977;stroke:#fff6a4;stroke-width:0.84436792"
|
||||
id="path3012"
|
||||
sodipodi:nodetypes="ccsscc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsscc"
|
||||
id="path5252"
|
||||
style="fill:#a0b977;stroke:#fff6a4;stroke-width:0.84436792"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 483.14429,428.90547 c 0,0 -49.53236,20.97257 -65.01984,56.05329 9.315,2.5399 33.23264,-3.21777 27.44694,46.44614 -7.11913,61.10645 -33.44802,48.75472 -38.28907,80.38979 -4.84082,31.6332 27.73702,-5.05478 30.04352,-10.83255 28.20085,-88.31453 25.759,-79.4494 45.81845,-172.05667 z" />
|
||||
</g>
|
||||
<g
|
||||
id="g2994"
|
||||
transform="translate(137.37681,206.38155)">
|
||||
<g
|
||||
id="g2996">
|
||||
<path
|
||||
id="path2998"
|
||||
style="opacity:0.65;fill:#988378"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 331.9,266.68 c 0,0 -3.033,-36.711 32.988,-31.248 0.001,0 -8.798,28.704 -32.988,31.248 z" />
|
||||
<path
|
||||
id="path3000"
|
||||
style="opacity:0.65;fill:none;stroke:#4d2b2b"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 365.19,236.01 c -16.611,5.02 -37.262,34.979 -37.262,34.979" />
|
||||
</g>
|
||||
<g
|
||||
id="g3002">
|
||||
<path
|
||||
id="path3004"
|
||||
style="opacity:0.65;fill:#988378"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 322.29,263.16 c 0,0 30.612,-20.489 3.905,-45.27 0,0 -16.978,24.759 -3.905,45.27 z" />
|
||||
<path
|
||||
id="path3006"
|
||||
style="opacity:0.65;fill:none;stroke:#4d2b2b"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 325.56,218.02 c 6.415,16.123 -4.164,50.937 -4.164,50.937" />
|
||||
</g>
|
||||
<g
|
||||
id="g3008">
|
||||
<g
|
||||
id="g3014">
|
||||
<g
|
||||
id="g3016">
|
||||
<path
|
||||
id="path3018"
|
||||
style="fill:#a0b977;stroke:#fff8bd"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 312.76,265.25 c 0,0 -7.279,-0.166 -8.315,3.177 0,0 -10.622,-1.202 -12.795,0.741 -2.173,1.943 -83.173,23.401 -105.58,33.197 -22.412,9.798 -52.957,23.878 -62.557,56.499 -9.601,32.618 47.177,25.109 47.177,25.109 0,0 15.808,-0.329 43.093,11.279 27.285,11.609 68.089,11.708 84.028,-43.027 0,0 -19.067,71.565 45.054,82.563 64.119,11 88.375,59.362 91.092,15.183 2.717,-44.179 2.635,-40.541 -25.9,-81.855 -28.537,-41.314 -53.385,-72.585 -53.385,-72.585 0,0 -0.527,-10.11 -11.182,-12.893 0,0 -0.28,-5.846 -6.373,-9.83 -0.001,0 -7.393,-10.433 -24.354,-7.558 z" />
|
||||
<path
|
||||
id="path3020"
|
||||
style="fill:#fff8bd"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 360.56,302.09 c -3.478,-4.498 -5.454,-6.984 -5.454,-6.984 0,0 -0.527,-10.111 -11.182,-12.893 0,0 -0.279,-5.846 -6.371,-9.831 0,0 -7.394,-10.434 -24.355,-7.559 0,0 -7.277,-0.165 -8.315,3.178 0,0 -10.621,-1.202 -12.794,0.741 -0.426,0.382 -3.868,1.507 -9.299,3.149 l -6.162,11.986 c 0,0 26.633,-7.093 27.148,2.491 0.516,9.583 5.73,11.9 5.73,11.9 0,0 3.08,11.078 2.149,17.07 0,0 6.907,-12.514 10.485,-12.8 0,0 9.773,1.124 11.463,-7.692 0,0 16.849,10.656 21.34,16.184 0.237,0.292 0.439,0.568 0.604,0.828 3.271,5.205 5.013,-9.768 5.013,-9.768 z" />
|
||||
<path
|
||||
id="path3022"
|
||||
style="fill:none;stroke:#fff8bd"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 313.73,311.85 c 0,0 -13.709,22.16 -17.873,49.646" />
|
||||
<path
|
||||
id="path3024"
|
||||
style="fill:#fff8bd"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 225.91,315.99 c 0,0 6.543,21.195 22.854,12.133 0,0 -8.072,-8.788 -10.24,-9.892 -2.168,-1.102 -6.429,-1.994 -6.429,-1.994 l 3.36,-11.951 c 0,0 -1.844,-4.046 -9.545,11.704 z" />
|
||||
<path
|
||||
id="path3026"
|
||||
style="fill:#fff8bd"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 379.47,367.78 c 0,0 -15.43,8.015 -24.641,-3.771 l 10.435,-3.478 c 0,0 8.961,1.849 8.698,2.699 -0.265,0.851 6.322,-6.878 6.322,-6.878 0,0 3.014,7.895 -0.814,11.428 z" />
|
||||
<path
|
||||
id="path3028"
|
||||
style="fill:#4d2b2b"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 229.7,317.19 c 0,0 8.137,15.76 18.629,10.824 0,0 -8.191,-6.876 -8.109,-7.558 0.082,-0.682 -8,-5.868 -10.52,-3.266 z" />
|
||||
<path
|
||||
id="path3030"
|
||||
style="fill:#4d2b2b"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 374.9,364.06 c 0,0 -15.354,8.875 -21.523,-0.941 0,0 10.607,-1.369 10.906,-1.986 0.299,-0.619 9.903,-0.626 10.617,2.927 z" />
|
||||
<g
|
||||
id="g3032">
|
||||
<path
|
||||
id="path3034"
|
||||
style="fill:#988378"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 341.58,278.41 c 2.846,1.426 1.744,5.08 1.744,5.08 10.654,2.782 11.182,12.894 11.182,12.894 0,0 24.85,31.27 53.385,72.584 28.537,41.315 27.662,40.764 24.943,84.943 0,0 0.961,-3.087 -0.504,-18.654 -1.465,-15.565 -5.752,-23.075 -5.752,-23.075 -12.012,-29.904 -42.311,-57.106 -42.311,-57.106 1.119,3.139 -6.828,16.378 -4.391,11.899 2.438,-4.479 0.834,-10.56 -0.529,-8.413 -1.367,2.148 -3.982,9.456 -7.013,5.725 -3.029,-3.732 -1.735,-2.285 -12.151,-1.33 -10.42,0.955 -6.982,-1.119 -6.982,-1.119 -0.889,2.865 6.521,-0.768 6.521,-0.768 10.789,-3.283 14.434,-0.406 14.434,-0.406 l 2.492,-6.906 c 5.588,-10.133 -29.023,-47.05 -32.24,-54.68 -3.217,-7.629 -7.158,-9.549 -7.158,-9.549 2.932,-6.071 -15.424,-6.533 -15.424,-6.533 -0.482,-2.943 -7.926,-5.949 -13.338,-7.629 -5.412,-1.68 -2.876,3.643 -2.876,3.643 -1.515,-1.865 -8.749,0.079 -16.517,4.299 -7.768,4.221 -29.491,8.996 -40.82,11.763 -11.329,2.766 -14.416,18.339 -14.416,18.339 0,0 5.523,0.191 8.379,5.614 2.854,5.422 6.021,8.15 6.021,8.15 0,0 0.098,4.742 -5.435,-2.732 -5.533,-7.478 -13.437,-7.313 -13.437,-7.313 l 3.704,-11.938 c -4.347,3.886 -7.491,12.333 -7.491,12.333 -1.203,-4.561 3.16,-15.247 3.16,-15.247 0,0 -26.412,7.509 -53.154,14.392 -26.741,6.883 -46.178,32.961 -46.178,32.961 12.879,-23.555 37.309,-38.035 56.473,-46.413 22.411,-9.798 103.41,-31.254 105.58,-33.197 2.174,-1.942 12.795,-0.741 12.795,-0.741 0.52,-1.671 2.598,-2.466 4.547,-2.842 0,0 14.472,4.288 15.098,9.018 0.001,0 6.241,-2.764 17.655,2.954 z" />
|
||||
<path
|
||||
id="path3036"
|
||||
style="fill:#4d2b2b"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 403.91,370.46 c -27.5,-39.816 -50.17,-74.071 -50.17,-74.071 0,0 -0.508,-9.744 -10.775,-12.426 0,0 1.061,-3.521 -1.682,-4.896 -11.001,-5.509 -17.014,-2.846 -17.014,-2.846 -0.604,-4.56 -14.551,-8.693 -14.551,-8.693 -1.878,0.363 -3.883,1.13 -4.381,2.739 0,0 -10.236,-1.157 -12.332,0.715 -2.095,1.872 -79.716,27.89 -101.31,37.332 0,0 108.65,-38.886 110.44,-35.965 0,0 2.538,-0.563 4.079,-0.085 0,0 1.508,-5.949 6.385,-2.073 0,0 2.324,-0.963 9.282,4.91 l 1.392,3.133 c 0,0 5.651,-3.311 11.19,0.771 0,0 8.491,-1.079 6.696,5.792 0,0 6.988,2.507 9.793,9.793 l 0.469,2.847 52.489,73.023 z" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3038"
|
||||
style="opacity:0.5" />
|
||||
</g>
|
||||
<g
|
||||
id="g3050"
|
||||
style="opacity:0.2">
|
||||
<g
|
||||
id="g3052">
|
||||
<path
|
||||
id="path3054"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 193.51,313.22 c 0,0 -5.379,15.082 -24.865,26.137 -19.486,11.057 -23.777,32.758 -23.777,32.758" />
|
||||
<path
|
||||
id="path3056"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 229.05,308.89 c 0,0 -17.959,18.51 -37.127,29.663 -19.166,11.153 -27.597,31.571 -27.927,36.007" />
|
||||
<path
|
||||
id="path3058"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 219.07,341.05 c 0,0 -24.876,10.43 -32.637,37.687" />
|
||||
<path
|
||||
id="path3060"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 237.68,338.45 c 0,0 -28.399,28.531 -29.662,43.846" />
|
||||
<path
|
||||
id="path3062"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 301.4,299.58 c 0,0 -8.387,63.012 -22.965,81.872" />
|
||||
<path
|
||||
id="path3064"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 284.8,292.34 c 0,0 -22.351,40.531 -18.574,59.851" />
|
||||
</g>
|
||||
<g
|
||||
id="g3066">
|
||||
<path
|
||||
id="path3068"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 409.42,384 c 0,0 -4.191,15.455 5.504,35.652 9.695,20.199 0.838,40.471 0.838,40.471" />
|
||||
<path
|
||||
id="path3070"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 382.7,360.17 c 0,0 4.191,25.448 13.566,45.545 9.377,20.094 4.648,41.675 2.391,45.505" />
|
||||
<path
|
||||
id="path3072"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 372.55,392.27 c 0,0 14.479,22.76 5.299,49.573" />
|
||||
<path
|
||||
id="path3074"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 358.75,379.52 c 0,0 7.042,39.637 -0.657,52.934" />
|
||||
<path
|
||||
id="path3076"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 328.6,311.25 c 0,0 -29.065,56.534 -27.854,80.341" />
|
||||
<path
|
||||
id="path3078"
|
||||
style="fill:none;stroke:#fdee72"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 346.36,314.77 c 0,0 -4.771,46.039 -18.897,59.751" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata4698">
|
||||
<rdf:RDF>
|
||||
<cc:Work>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:publisher>
|
||||
<cc:Agent
|
||||
rdf:about="http://openclipart.org/">
|
||||
<dc:title>Openclipart</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:title></dc:title>
|
||||
<dc:date>2012-05-15T03:53:14</dc:date>
|
||||
<dc:description>luna moth, moon, night, butterfly</dc:description>
|
||||
<dc:source>https://openclipart.org/detail/170025/papillon-lune-by-presquesage</dc:source>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>presquesage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>butterfly</rdf:li>
|
||||
<rdf:li>luna moth</rdf:li>
|
||||
<rdf:li>lune</rdf:li>
|
||||
<rdf:li>moon</rdf:li>
|
||||
<rdf:li>night</rdf:li>
|
||||
<rdf:li>nuit</rdf:li>
|
||||
<rdf:li>papillon</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,26 +0,0 @@
|
|||
var main_terminal;
|
||||
|
||||
function Main(element) {
|
||||
var term = new Terminal(element);
|
||||
|
||||
function start() {
|
||||
term.clear();
|
||||
term.par("Main terminal.")
|
||||
term.par("This is the main terminal. In this terminal you will get your puzzle content and someplace to enter in possible answers. It's probably just going to pull the old URL, steal the body element, and submit it to a new Terminal method for slow-despooling of the content of text nodes.")
|
||||
term.par("One side-effect of the method I'm considering to slow-despool pre-written HTML is that inline images will load before the text. While not exactly what I had in mind for the feel of the thing, it may still be an interesting effect. I mean, if anything, text should render the *quickest*, so if we're going to turn everything on its head, why not make images pull in quicker than text.");
|
||||
term.par("Anyway.");
|
||||
term.par("Hopefully this demo illustrates how things are going to look.");
|
||||
}
|
||||
|
||||
term.clear();
|
||||
term.par("Loading…");
|
||||
|
||||
setTimeout(start, 2500);
|
||||
}
|
||||
|
||||
|
||||
function main_start() {
|
||||
main_terminal = new Main(document.getElementById("main"));
|
||||
}
|
||||
|
||||
window.addEventListener("load", main_start);
|
|
@ -1,2 +0,0 @@
|
|||
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;e>t;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;e>t;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
|
||||
//# sourceMappingURL=md5.min.js.map
|
|
@ -1,22 +0,0 @@
|
|||
var messages_terminal;
|
||||
|
||||
function Messages(element) {
|
||||
var term = new Terminal(element);
|
||||
|
||||
function start() {
|
||||
term.clear();
|
||||
term.par("Messages terminal");
|
||||
term.par("I've long wanted a way to communicate things to participants, like «yes, we're aware that JS 12 is broken, we are working on it», or «tanks category is now open!». This might have updates about people scoring points, or provide a chat service (although that has not historically been well-utilized).");
|
||||
}
|
||||
|
||||
term.clear();
|
||||
term.par("Loading…");
|
||||
setTimeout(start, 500);
|
||||
}
|
||||
|
||||
|
||||
function messages_start() {
|
||||
messages_terminal = new Messages(document.getElementById("messages"));
|
||||
}
|
||||
|
||||
window.addEventListener("load", messages_start);
|
|
@ -1,19 +0,0 @@
|
|||
var overview_proc;
|
||||
|
||||
function Overview(element) {
|
||||
var term = new Terminal(element);
|
||||
|
||||
this.start = function() {
|
||||
term.clear();
|
||||
term.par("Overview terminal");
|
||||
term.par("Here you will find something resembling a scoreboard, maybe your team name.")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function overview_start() {
|
||||
overview_proc = new Overview(document.getElementById("overview"));
|
||||
setTimeout(overview_proc.start, 4000);
|
||||
}
|
||||
|
||||
window.addEventListener("load", overview_start);
|
Before Width: | Height: | Size: 52 KiB |
|
@ -1,67 +0,0 @@
|
|||
var puzzlesTerminal;
|
||||
var puzzlesJsonUrl = "puzzles.json";
|
||||
|
||||
function loadPuzzle(cat, id, points) {
|
||||
console.log("Requested " + cat + "/" + id + "(" + points + ")");
|
||||
}
|
||||
|
||||
function puzzlesRefresh(term, obj) {
|
||||
term.clear();
|
||||
|
||||
let cats = [];
|
||||
for (let cat in obj) {
|
||||
cats.push(cat);
|
||||
}
|
||||
cats.sort();
|
||||
|
||||
for (let cat of cats) {
|
||||
let puzzles = obj[cat];
|
||||
|
||||
let pdiv = createElement('div');
|
||||
pdiv.className = 'category';
|
||||
|
||||
let h = createElement('h2');
|
||||
pdiv.appendChild(h);
|
||||
h.textContent = cat;
|
||||
|
||||
let l = createElement('ul');
|
||||
pdiv.appendChild(l);
|
||||
|
||||
for (var puzzle of puzzles) {
|
||||
var points = puzzle[0];
|
||||
var id = puzzle[1];
|
||||
|
||||
var i = createElement('li');
|
||||
l.appendChild(i);
|
||||
|
||||
if (points === 0) {
|
||||
i.textContent = "‡";
|
||||
} else {
|
||||
var a = createElement('a');
|
||||
i.appendChild(a);
|
||||
a.className = "link";
|
||||
a.textContent = points;
|
||||
a.href = cat + "/" + id + "/index.html";
|
||||
// a.addEventListener("click", loadPuzzle.bind(undefined, cat, id, points));
|
||||
}
|
||||
}
|
||||
|
||||
term.appendShallow(pdiv);
|
||||
}
|
||||
}
|
||||
|
||||
function puzzles_start() {
|
||||
var element = document.getElementById("puzzles");
|
||||
var puzzlesTerminal = new Terminal(element);
|
||||
var refreshInterval = 40 * 1000;
|
||||
|
||||
var refreshCallback = puzzlesRefresh.bind(undefined, puzzlesTerminal);
|
||||
var refreshFunction = loadJSON.bind(undefined, puzzlesJsonUrl + '?_=' + new Date().getTime(), refreshCallback);
|
||||
|
||||
puzzlesTerminal.clear();
|
||||
puzzlesTerminal.par("Loading...");
|
||||
refreshFunction();
|
||||
setInterval(refreshFunction, refreshInterval);
|
||||
}
|
||||
|
||||
window.addEventListener("load", puzzles_start);
|
|
@ -1,116 +0,0 @@
|
|||
function loadJSON(url, callback) {
|
||||
function loaded(e) {
|
||||
callback(e.target.response);
|
||||
}
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onload = loaded;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "json";
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function scoreboard(element, continuous) {
|
||||
function update(state) {
|
||||
var teamnames = state["teams"];
|
||||
var pointslog = state["points"];
|
||||
var pointshistory = JSON.parse(localStorage.getItem("pointshistory")) || [];
|
||||
if (pointshistory.length >= 20){
|
||||
pointshistory.shift();
|
||||
}
|
||||
pointshistory.push(pointslog);
|
||||
localStorage.setItem("pointshistory", JSON.stringify(pointshistory));
|
||||
var highscore = {};
|
||||
var teams = {};
|
||||
|
||||
// Dole out points
|
||||
for (var i in pointslog) {
|
||||
var entry = pointslog[i];
|
||||
var timestamp = entry[0];
|
||||
var teamhash = entry[1];
|
||||
var category = entry[2];
|
||||
var points = entry[3];
|
||||
|
||||
var team = teams[teamhash] || {__hash__: teamhash};
|
||||
|
||||
// Add points to team's points for that category
|
||||
team[category] = (team[category] || 0) + points;
|
||||
|
||||
// Record highest score in a category
|
||||
highscore[category] = Math.max(highscore[category] || 0, team[category]);
|
||||
|
||||
teams[teamhash] = team;
|
||||
}
|
||||
|
||||
// Sort by team score
|
||||
function teamScore(t) {
|
||||
var score = 0;
|
||||
|
||||
for (var category in highscore) {
|
||||
score += (t[category] || 0) / highscore[category];
|
||||
}
|
||||
// XXX: This function really shouldn't have side effects.
|
||||
t.__score__ = score;
|
||||
return score;
|
||||
}
|
||||
function teamCompare(a, b) {
|
||||
return teamScore(a) - teamScore(b);
|
||||
}
|
||||
|
||||
var winners = [];
|
||||
for (var i in teams) {
|
||||
winners.push(teams[i]);
|
||||
}
|
||||
if (winners.length == 0) {
|
||||
// No teams!
|
||||
return;
|
||||
}
|
||||
winners.sort(teamCompare);
|
||||
winners.reverse();
|
||||
|
||||
// Clear out the element we're about to populate
|
||||
while (element.lastChild) {
|
||||
element.removeChild(element.lastChild);
|
||||
}
|
||||
|
||||
// Populate!
|
||||
var topActualScore = winners[0].__score__;
|
||||
|
||||
// (100 / ncats) * (ncats / topActualScore);
|
||||
var maxWidth = 100 / topActualScore;
|
||||
for (var i in winners) {
|
||||
var team = winners[i];
|
||||
var row = document.createElement("div");
|
||||
var ncat = 0;
|
||||
for (var category in highscore) {
|
||||
var catHigh = highscore[category];
|
||||
var catTeam = team[category] || 0;
|
||||
var catPct = catTeam / catHigh;
|
||||
var width = maxWidth * catPct;
|
||||
|
||||
var bar = document.createElement("span");
|
||||
bar.classList.add("cat" + ncat);
|
||||
bar.style.width = width + "%";
|
||||
bar.textContent = category + ": " + catTeam;
|
||||
bar.title = bar.textContent;
|
||||
|
||||
row.appendChild(bar);
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
var te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamnames[team.__hash__];
|
||||
row.appendChild(te);
|
||||
|
||||
element.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
||||
function once() {
|
||||
loadJSON("points.json", update);
|
||||
}
|
||||
if (continuous) {
|
||||
setInterval(once, 60000);
|
||||
}
|
||||
once();
|
||||
}
|
|
@ -1,139 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Lato Regular'), local('Lato-Regular'), url(Lato-Regular.ttf) format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Lato Bold'), local('Lato-Bold'), url(Lato-Bold.ttf) format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Lato Italic'), local('Lato-Italic'), url(Lato-Italic.ttf) format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Inconsolata';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(Inconsolata-Regular.ttf) format('truetype');
|
||||
}
|
||||
|
||||
|
||||
html {
|
||||
background: rgba(61, 50, 44, 0) url(brown-lines.jpg) no-repeat center center fixed;
|
||||
background-size: cover;
|
||||
color: #ccb;
|
||||
height: 100%;
|
||||
font-family: Lato, sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
height: 100%
|
||||
}
|
||||
|
||||
pre, tt {
|
||||
font-family: Inconsolata, monospace;
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.terminal {
|
||||
background: rgba(80, 70, 60, 0.96);
|
||||
display: inline-block;
|
||||
margin: 1%;
|
||||
border: solid black 0.2em;
|
||||
border-radius: 1em 1em 0.5em 1em;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.terminal p {
|
||||
padding: 0.25em 0.5em;
|
||||
}
|
||||
|
||||
#preview {
|
||||
background-image: url(preview.png);
|
||||
background-size: contain;
|
||||
max-width: 40em;
|
||||
display: block;
|
||||
margin: 1% auto;
|
||||
}
|
||||
|
||||
#overview, #messages {
|
||||
width: 47%;
|
||||
height: 20%;
|
||||
}
|
||||
|
||||
#puzzles {
|
||||
width: 24%;
|
||||
height: 70%;
|
||||
}
|
||||
|
||||
#main {
|
||||
width: 70%;
|
||||
height: 70%;
|
||||
}
|
||||
|
||||
.download {
|
||||
background: #080;
|
||||
color: white;
|
||||
display: inline-block;
|
||||
}
|
||||
.download:link {
|
||||
color: inherit;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
a:link, .link {
|
||||
color: #13a5de;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.category h2 {
|
||||
margin: 0;
|
||||
font-size: 100%;
|
||||
}
|
||||
.category ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
font-size: 90%;
|
||||
}
|
||||
.category li {
|
||||
display: inline;
|
||||
}
|
||||
.category li + li:before {
|
||||
content: " ";
|
||||
}
|
||||
|
||||
@media (max-width: 52em) {
|
||||
#overview, #messages, #puzzles, #main {
|
||||
width: 96%;
|
||||
}
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 0.7em;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
/* -webkit-box-shadow: inset 0 0 0.5em rgba(200, 200, 200, 0.3); */
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 1em;
|
||||
}
|
|
@ -1,160 +0,0 @@
|
|||
// A class to turn an element into a cybersteampunk terminal.
|
||||
// Runs at 1200 baud by default, but unlike an actual modem,
|
||||
// will despool in parallel. This looks pretty cool.
|
||||
|
||||
// XXX: Hack for chrome not supporting an iterator method on HTMLCollection
|
||||
HTMLCollection.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
|
||||
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
|
||||
|
||||
function Terminal(target, bps) {
|
||||
bps = bps || 9600;
|
||||
|
||||
var outq = [];
|
||||
var outTimer;
|
||||
|
||||
// Heavy lifting happens here.
|
||||
// At first I had it auto-scrolling to the bottom, like xterm (1987).
|
||||
// But that was actually kind of annoying, since this is meant to be read.
|
||||
// So now it leaves the scrollbar in place, and the user has to scroll.
|
||||
// This is how the Plan 9 terminal (1991) works.
|
||||
function tx(pairs, bps, scroll) {
|
||||
var drawTimer;
|
||||
|
||||
// Looks like EMCAScript 6 has a yield statement.
|
||||
// That would make this mess a lot easier to understand.
|
||||
|
||||
var pairIndex = 0;
|
||||
var pair = pairs[0];
|
||||
|
||||
var textIndex = 0;
|
||||
var text = "";
|
||||
|
||||
function draw() {
|
||||
var node = pair[0];
|
||||
var src = pair[1];
|
||||
var c = src[textIndex];
|
||||
|
||||
text += c;
|
||||
node.textContent = text;
|
||||
|
||||
textIndex += 1;
|
||||
if (textIndex == src.length) {
|
||||
textIndex = 0;
|
||||
text = "";
|
||||
|
||||
pairIndex += 1;
|
||||
if (pairIndex == pairs.length) {
|
||||
clearInterval(drawTimer);
|
||||
return;
|
||||
}
|
||||
pair = pairs[pairIndex];
|
||||
}
|
||||
|
||||
if (scroll) {
|
||||
node.scrollIntoView();
|
||||
}
|
||||
}
|
||||
|
||||
// N81 uses 1 stop bit, and 1 parity bit.
|
||||
// That works out to exactly 10 bits per byte.
|
||||
msec = 10000 / bps;
|
||||
|
||||
drawTimer = setInterval(draw, msec);
|
||||
draw();
|
||||
}
|
||||
|
||||
|
||||
function start() {
|
||||
if (! outTimer) {
|
||||
outTimer = setInterval(drawElement, 25);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function stop() {
|
||||
if (outTimer) {
|
||||
clearInterval(outTimer);
|
||||
outTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function drawElement() {
|
||||
var pairs = outq.shift();
|
||||
|
||||
if (! pairs) {
|
||||
stop();
|
||||
return;
|
||||
}
|
||||
|
||||
tx(pairs, bps);
|
||||
}
|
||||
|
||||
|
||||
function prepare(element) {
|
||||
var pairs = [];
|
||||
|
||||
walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);
|
||||
while (walker.nextNode()) {
|
||||
var node = walker.currentNode;
|
||||
var text = node.textContent;
|
||||
|
||||
node.textContent = "";
|
||||
pairs.push([node, text]);
|
||||
}
|
||||
|
||||
return pairs;
|
||||
}
|
||||
|
||||
|
||||
// The main entry point: works like appendChild
|
||||
this.append = function(element) {
|
||||
pairs = prepare(element);
|
||||
target.appendChild(element);
|
||||
outq.push(pairs);
|
||||
start();
|
||||
}
|
||||
|
||||
|
||||
// A cool effect where it despools children in parallel
|
||||
this.appendShallow = function(element) {
|
||||
for (var child of element.childNodes) {
|
||||
pairs = prepare(child);
|
||||
outq.push(pairs);
|
||||
}
|
||||
target.appendChild(element);
|
||||
start();
|
||||
}
|
||||
|
||||
|
||||
this.clear = function() {
|
||||
stop();
|
||||
outq = [];
|
||||
while (target.firstChild) {
|
||||
target.removeChild(target.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.par = function(txt) {
|
||||
var e = document.createElement("p");
|
||||
e.textContent = txt;
|
||||
this.append(e);
|
||||
}
|
||||
|
||||
|
||||
this.pre = function(txt) {
|
||||
var e = document.createElement("pre");
|
||||
e.textContent = txt;
|
||||
this.append(e);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Usage:
|
||||
//
|
||||
// var e = Terminal(document.getElementById("output"));
|
||||
// e.output("This is a paragraph. It has sentences.");
|
||||
// e.output("This is a second paragraph.");
|
||||
//
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Points History</title>
|
||||
<script>
|
||||
function init() {
|
||||
|
||||
function getParameterByName(name) {
|
||||
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
||||
results = regex.exec(location.search);
|
||||
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||
}
|
||||
|
||||
var pointsDiv = document.getElementById("pointslog");
|
||||
var pointshistory = JSON.parse(localStorage.getItem("pointshistory"));
|
||||
// get snapshot specified by query param or else most recent snapshot
|
||||
var i = parseInt(getParameterByName("snapshot")) || pointshistory.length-1;
|
||||
var snapshot = pointshistory[i];
|
||||
pointsDiv.innerHTML = snapshot.map(function(entry){
|
||||
return entry.join(" ");
|
||||
}).join("<br>");
|
||||
}
|
||||
|
||||
window.addEventListener("load", init);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="pointslog"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,50 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scoreboard</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<style>
|
||||
#info {
|
||||
max-width: 20em;
|
||||
position: absolute;
|
||||
opacity: 0.8;
|
||||
bottom: 1em;
|
||||
right: 10em;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<script src="d3.js" async></script>
|
||||
<script src="scoreboard.js" async></script>
|
||||
<script>
|
||||
|
||||
var type = "original";
|
||||
var interval = 60000;
|
||||
|
||||
function preinit()
|
||||
{
|
||||
type = "total";
|
||||
interval = 60000;
|
||||
}
|
||||
|
||||
function updateType(newType)
|
||||
{
|
||||
type = newType;
|
||||
init();
|
||||
}
|
||||
|
||||
function init() {
|
||||
var sb = document.getElementById("scoreboard");
|
||||
scoreboard(sb, true, type, interval);
|
||||
}
|
||||
|
||||
window.addEventListener("load", preinit);
|
||||
window.addEventListener("load", init);
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Scoreboard</h1>
|
||||
<div id="scoreboard"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,164 +0,0 @@
|
|||
function loadJSON(url, callback) {
|
||||
function loaded(e) {
|
||||
callback(e.target.response);
|
||||
}
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onload = loaded;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "json";
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function scoreboardHistoryPush(pointslog) {
|
||||
let pointsHistory = JSON.parse(localStorage.getItem("pointsHistory")) || [];
|
||||
if (pointsHistory.length >= 20) {
|
||||
pointsHistory.shift();
|
||||
}
|
||||
pointsHistory.push(pointslog);
|
||||
localStorage.setItem("pointsHistory", JSON.stringify(pointsHistory));
|
||||
}
|
||||
|
||||
function scoreboard(element, continuous) {
|
||||
function update(state) {
|
||||
let teamNames = state["teams"];
|
||||
let pointsLog = state["points"];
|
||||
|
||||
// Establish scores, calculate category maximums
|
||||
let categories = {};
|
||||
let maxPointsByCategory = {};
|
||||
let totalPointsByTeamByCategory = {};
|
||||
for (let entry of pointsLog) {
|
||||
let entryTimeStamp = entry[0];
|
||||
let entryTeamHash = entry[1];
|
||||
let entryCategory = entry[2];
|
||||
let entryPoints = entry[3];
|
||||
|
||||
// Populate list of all categories
|
||||
categories[entryCategory] = entryCategory;
|
||||
|
||||
// Add points to team's points for that category
|
||||
let points = totalPointsByTeamByCategory[entryTeamHash] || {};
|
||||
let categoryPoints = points[entryCategory] || 0;
|
||||
categoryPoints += entryPoints;
|
||||
points[entryCategory] = categoryPoints;
|
||||
totalPointsByTeamByCategory[entryTeamHash] = points;
|
||||
|
||||
// Calculate maximum points scored in each category
|
||||
let m = maxPointsByCategory[entryCategory] || 0;
|
||||
maxPointsByCategory[entryCategory] = Math.max(m, categoryPoints);
|
||||
}
|
||||
|
||||
// Calculate overall scores
|
||||
let overallScore = {};
|
||||
let orderedOverallScores = [];
|
||||
for (let teamHash in teamNames) {
|
||||
var score = 0;
|
||||
for (let cat in categories) {
|
||||
var catPoints = totalPointsByTeamByCategory[teamHash][cat] || 0;
|
||||
if (catPoints > 0) {
|
||||
score += catPoints / maxPointsByCategory[cat];
|
||||
}
|
||||
}
|
||||
overallScore[teamHash] = score;
|
||||
orderedOverallScores.push([score, teamHash]);
|
||||
}
|
||||
orderedOverallScores.sort();
|
||||
orderedOverallScores.reverse();
|
||||
|
||||
// Clear out the element we're about to populate
|
||||
while (element.lastChild) {
|
||||
element.removeChild(element.lastChild);
|
||||
}
|
||||
|
||||
// Set up scoreboard structure
|
||||
let spansByTeamByCategory = {};
|
||||
for (let pair of orderedOverallScores) {
|
||||
let teamHash = pair[1];
|
||||
let teamName = teamNames[teamHash];
|
||||
let teamRow = document.createElement("div");
|
||||
let ncat = 0;
|
||||
spansByTeamByCategory[teamHash] = {};
|
||||
for (let cat in categories) {
|
||||
let catSpan = document.createElement("span");
|
||||
catSpan.classList.add("cat" + ncat);
|
||||
catSpan.style.width = "0%";
|
||||
catSpan.textContent = cat + ": 0";
|
||||
|
||||
spansByTeamByCategory[teamHash][cat] = catSpan;
|
||||
|
||||
teamRow.appendChild(catSpan);
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
var te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamName;
|
||||
teamRow.appendChild(te);
|
||||
|
||||
element.appendChild(teamRow);
|
||||
}
|
||||
|
||||
// How many categories are there?
|
||||
var numCategories = 0;
|
||||
for (var cat in categories) {
|
||||
numCategories += 1;
|
||||
}
|
||||
|
||||
// Replay points log, displaying scoreboard at each step
|
||||
let replayTimer = null;
|
||||
let replayIndex = 0;
|
||||
function replayStep(event) {
|
||||
if (replayIndex > pointsLog.length) {
|
||||
clearInterval(replayTimer);
|
||||
return;
|
||||
}
|
||||
|
||||
// Replay log up until replayIndex
|
||||
let totalPointsByTeamByCategory = {};
|
||||
for (let index = 0; index < replayIndex; index += 1) {
|
||||
let entry = pointsLog[index];
|
||||
let entryTimeStamp = entry[0];
|
||||
let entryTeamHash = entry[1];
|
||||
let entryCategory = entry[2];
|
||||
let entryPoints = entry[3];
|
||||
|
||||
// Add points to team's points for that category
|
||||
let points = totalPointsByTeamByCategory[entryTeamHash] || {};
|
||||
let categoryPoints = points[entryCategory] || 0;
|
||||
categoryPoints += entryPoints;
|
||||
points[entryCategory] = categoryPoints;
|
||||
totalPointsByTeamByCategory[entryTeamHash] = points;
|
||||
}
|
||||
|
||||
// Figure out everybody's score
|
||||
for (let teamHash in teamNames) {
|
||||
for (let cat in categories) {
|
||||
let totalPointsByCategory = totalPointsByTeamByCategory[teamHash] || {};
|
||||
let points = totalPointsByCategory[cat] || 0;
|
||||
if (points > 0) {
|
||||
let score = points / maxPointsByCategory[cat];
|
||||
let span = spansByTeamByCategory[teamHash][cat];
|
||||
let width = (100.0 / numCategories) * score;
|
||||
|
||||
span.style.width = width + "%";
|
||||
span.textContent = cat + ": " + points;
|
||||
span.title = span.textContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
replayIndex += 1;
|
||||
}
|
||||
replayStep();
|
||||
replayTimer = setInterval(replayStep, 20);
|
||||
}
|
||||
|
||||
function once() {
|
||||
loadJSON("points.json", update);
|
||||
}
|
||||
if (continuous) {
|
||||
setInterval(once, 60000);
|
||||
}
|
||||
once();
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scoreboard</title>
|
||||
</head>
|
||||
<body style="margin: 0; padding: 0; height: 100%; overflow: hidden;">
|
||||
<div style="position:absolute; left: 0; right: 0; bottom: 0; top: 0px;">
|
||||
<iframe id="content" src="scoreboard.html" style="border:none;" height="100%" width="100%"></iframe>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
var cycle = ["scoreboard.html", "scoreboard-all.html", "scoreboard-timeline.html"];
|
||||
var current = 0;
|
||||
var timeout = 25000;
|
||||
var curTimeout;
|
||||
curTimeout = setInterval(update, timeout);
|
||||
function update()
|
||||
{
|
||||
if(curTimeout)
|
||||
{
|
||||
clearInterval(curTimeout);
|
||||
}
|
||||
current++;
|
||||
if(current >= cycle.length)
|
||||
{
|
||||
current = 0;
|
||||
}
|
||||
//console.log(cycle[current]);
|
||||
document.getElementById("content").src = cycle[current];
|
||||
curTimeout = setInterval(update, timeout);
|
||||
}
|
||||
</script>
|
||||
</html>
|
|
@ -1,69 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scoreboard</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<style>
|
||||
#info {
|
||||
max-width: 20em;
|
||||
position: absolute;
|
||||
opacity: 0.8;
|
||||
bottom: 1em;
|
||||
right: 10em;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<script src="d3.js" async></script>
|
||||
<script src="scoreboard.js" async></script>
|
||||
<script>
|
||||
|
||||
var type = "original";
|
||||
var interval = 60000;
|
||||
|
||||
function preinit()
|
||||
{
|
||||
type = "time";
|
||||
interval = 60000;
|
||||
}
|
||||
|
||||
function updateType(newType)
|
||||
{
|
||||
type = newType;
|
||||
init();
|
||||
}
|
||||
|
||||
function init() {
|
||||
var sb = document.getElementById("scoreboard");
|
||||
scoreboard(sb, true, type, interval);
|
||||
window.addEventListener("resize", reScoreboardCaller);
|
||||
}
|
||||
|
||||
var resizeCallback;
|
||||
|
||||
function reScoreboardCaller()
|
||||
{
|
||||
if(resizeCallback)
|
||||
{
|
||||
clearInterval(resizeCallback);
|
||||
}
|
||||
resizeCallback = setInterval(reScoreboard, 400);
|
||||
}
|
||||
|
||||
function reScoreboard()
|
||||
{
|
||||
clearInterval(resizeCallback);
|
||||
console.log("resizing");
|
||||
var sb = document.getElementById("scoreboard");
|
||||
scoreboard(sb, true, type, interval);
|
||||
}
|
||||
|
||||
window.addEventListener("load", preinit);
|
||||
window.addEventListener("load", init);
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="title">Scoreboard</h1>
|
||||
<div id="scoreboard"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,24 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Scoreboard</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<script src="scoreboard.js" async></script>
|
||||
<script>
|
||||
var type = "original";
|
||||
var interval = 60000;
|
||||
|
||||
function init() {
|
||||
var sb = document.getElementById("scoreboard");
|
||||
scoreboard(sb, true, type, interval);
|
||||
}
|
||||
|
||||
window.addEventListener("load", init);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Scoreboard</h1>
|
||||
<div id="scoreboard"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,528 +0,0 @@
|
|||
function loadJSON(url, callback) {
|
||||
function loaded(e) {
|
||||
callback(e.target.response);
|
||||
}
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onload = loaded;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "json";
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function toObject(arr) {
|
||||
var rv = {};
|
||||
for (var i = 0; i < arr.length; ++i)
|
||||
if (arr[i] !== undefined) rv[i] = arr[i];
|
||||
return rv;
|
||||
}
|
||||
|
||||
var updateInterval;
|
||||
|
||||
function scoreboard(element, continuous, mode, interval) {
|
||||
if(updateInterval) {
|
||||
clearInterval(updateInterval);
|
||||
}
|
||||
function update(state) {
|
||||
//console.log("Updating");
|
||||
var teamnames = state["teams"];
|
||||
var pointslog = state["points"];
|
||||
var highscore = {};
|
||||
var teams = {};
|
||||
|
||||
function pointsCompare(a, b) {
|
||||
return a[0] - b[0];
|
||||
}
|
||||
pointslog.sort(pointsCompare);
|
||||
var minTime = pointslog[0][0];
|
||||
var maxTime = pointslog[pointslog.length - 1][0];
|
||||
|
||||
var allQuestions = {};
|
||||
|
||||
for (var i in pointslog) {
|
||||
var entry = pointslog[i];
|
||||
var timestamp = entry[0];
|
||||
var teamhash = entry[1];
|
||||
var category = entry[2];
|
||||
var points = entry[3];
|
||||
|
||||
var catPoints = {};
|
||||
if(category in allQuestions) {
|
||||
catPoints = allQuestions[category];
|
||||
} else {
|
||||
catPoints["total"] = 0;
|
||||
}
|
||||
|
||||
if(!(points in catPoints)) {
|
||||
catPoints[points] = 1;
|
||||
catPoints["total"] = catPoints["total"] + points;
|
||||
} else {
|
||||
catPoints[points] = catPoints[points] + 1;
|
||||
}
|
||||
|
||||
allQuestions[category] = catPoints;
|
||||
}
|
||||
|
||||
// Dole out points
|
||||
for (var i in pointslog) {
|
||||
var entry = pointslog[i];
|
||||
var timestamp = entry[0];
|
||||
var teamhash = entry[1];
|
||||
var category = entry[2];
|
||||
var points = entry[3];
|
||||
|
||||
var team = teams[teamhash] || {__hash__: teamhash};
|
||||
|
||||
// Add points to team's points for that category
|
||||
team[category] = (team[category] || 0) + points;
|
||||
|
||||
// Record highest score in a category
|
||||
highscore[category] = Math.max(highscore[category] || 0, team[category]);
|
||||
|
||||
teams[teamhash] = team;
|
||||
}
|
||||
|
||||
// Sort by team score
|
||||
function teamScore(t) {
|
||||
var score = 0;
|
||||
|
||||
for (var category in highscore) {
|
||||
score += (t[category] || 0) / highscore[category];
|
||||
}
|
||||
// XXX: This function really shouldn't have side effects.
|
||||
t.__score__ = score;
|
||||
return score;
|
||||
}
|
||||
function pointScore(points, category) {
|
||||
return points / highscore[category]
|
||||
}
|
||||
function teamCompare(a, b) {
|
||||
return teamScore(a) - teamScore(b);
|
||||
}
|
||||
|
||||
var winners = [];
|
||||
for (var i in teams) {
|
||||
winners.push(teams[i]);
|
||||
}
|
||||
if (winners.length == 0) {
|
||||
// No teams!
|
||||
return;
|
||||
}
|
||||
winners.sort(teamCompare);
|
||||
winners.reverse();
|
||||
|
||||
// Clear out the element we're about to populate
|
||||
while (element.lastChild) {
|
||||
element.removeChild(element.lastChild);
|
||||
}
|
||||
|
||||
// Populate!
|
||||
var topActualScore = winners[0].__score__;
|
||||
|
||||
|
||||
if(mode == "time") {
|
||||
var colorScale = d3.schemeCategory20;
|
||||
|
||||
var teamLines = {};
|
||||
var reverseTeam = {};
|
||||
for(var i in pointslog) {
|
||||
var entry = pointslog[i];
|
||||
var timestamp = entry[0];
|
||||
var teamhash = entry[1];
|
||||
var category = entry[2];
|
||||
var points = entry[3];
|
||||
var teamname = teamnames[teamhash];
|
||||
reverseTeam[teamname] = teamhash;
|
||||
points = pointScore(points, category);
|
||||
|
||||
if(!(teamname in teamLines)) {
|
||||
var teamHistory = [[timestamp, points, category, entry[3], [minTime, 0, category, 0]]];
|
||||
teamLines[teamname] = teamHistory;
|
||||
} else {
|
||||
var teamHistory = teamLines[teamname];
|
||||
teamHistory.push([timestamp, points + teamHistory[teamHistory.length - 1][1], category, entry[3], teamHistory[teamHistory.length - 1]]);
|
||||
}
|
||||
}
|
||||
|
||||
//console.log(teamLines);
|
||||
|
||||
var graph = document.createElement("svg");
|
||||
graph.id = "graph";
|
||||
graph.style.width="100%";
|
||||
graph.style.height = "100vh";
|
||||
var titleHeight = document.getElementById("title").clientHeight;
|
||||
titleHeight += document.getElementById("title").offsetTop * 2;
|
||||
graph.style.backgroundColor = "white";
|
||||
graph.style.display = "table";
|
||||
var holdingDiv = document.createElement("div");
|
||||
holdingDiv.align="center";
|
||||
holdingDiv.id="holding";
|
||||
holdingDiv.style.height = "100%";
|
||||
element.style.height = "100%";
|
||||
element.appendChild(holdingDiv);
|
||||
holdingDiv.appendChild(graph);
|
||||
|
||||
var margins = 40;
|
||||
var marginsX = 120;
|
||||
|
||||
var width = graph.offsetWidth;
|
||||
var height = graph.offsetHeight;
|
||||
height = height - titleHeight - margins;
|
||||
|
||||
//var xScale = d3.scaleLinear().range([minTime, maxTime]);
|
||||
//var yScale = d3.scaleLinear().range([0, topActualScore]);
|
||||
var originTime = (maxTime - minTime) / 60;
|
||||
var xScale = d3.scaleLinear().range([marginsX, width - margins]);
|
||||
xScale.domain([0, originTime]);
|
||||
var yScale = d3.scaleLinear().range([height - margins, margins]);
|
||||
yScale.domain([0, topActualScore]);
|
||||
|
||||
graph = d3.select("#graph");
|
||||
graph.remove();
|
||||
graph = d3.select("#holding").append("svg")
|
||||
.attr("width", width)
|
||||
.attr("height", height);
|
||||
//.attr("style", "background: white");
|
||||
|
||||
|
||||
//graph.append("g")
|
||||
// .attr("transform", "translate(" + margins + ", 0)")
|
||||
// .call(d3.axisLeft(yScale))
|
||||
// .style("stroke", "white");;
|
||||
|
||||
var maxNumEntry = 10;
|
||||
//var curEntry = 0;
|
||||
var winningTeams = [];
|
||||
for(entry in winners) {
|
||||
var curEntry = entry;
|
||||
if(curEntry >= maxNumEntry) {
|
||||
break;
|
||||
}
|
||||
entry = teamnames[winners[entry].__hash__];
|
||||
winningTeams.push(entry);
|
||||
//console.log(curEntry);
|
||||
//console.log(entry);
|
||||
|
||||
//var isTop = false;
|
||||
//for(var x=0; x < maxNumEntry; x++)
|
||||
//{
|
||||
// var teamhash = reverseTeam[entry];
|
||||
// if(winners[x].__hash__ == teamhash)
|
||||
// {
|
||||
// curEntry = x;
|
||||
// isTop = true;
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
//if(!isTop)
|
||||
//{
|
||||
// continue;
|
||||
//}
|
||||
|
||||
var curTeam = teamLines[entry];
|
||||
var lastEntry = curTeam[curTeam.length - 1];
|
||||
//curTeam.append()
|
||||
curTeam.push([maxTime, lastEntry[1], lastEntry[2], lastEntry[3], lastEntry]);
|
||||
var curLayer = graph.append("g");
|
||||
curLayer.selectAll("line")
|
||||
.data(curTeam)
|
||||
.enter()
|
||||
.append("line")
|
||||
.style("stroke", colorScale[curEntry * 2])
|
||||
.attr("stroke-width", 4)
|
||||
.attr("class", "team_" + entry)
|
||||
.style("z-index", maxNumEntry - curEntry)
|
||||
.attr("x1",
|
||||
function(d) {
|
||||
return xScale((d[4][0] - minTime) / 60);
|
||||
})
|
||||
.attr("x2",
|
||||
function(d) {
|
||||
return xScale((d[0] - minTime) / 60);
|
||||
})
|
||||
.attr("y1",
|
||||
function(d) {
|
||||
return yScale(d[4][1]);
|
||||
})
|
||||
.attr("y2",
|
||||
function(d) {
|
||||
return yScale(d[1]);
|
||||
})
|
||||
.on("mouseover", handleMouseover)
|
||||
.on("mouseout", handleMouseout);
|
||||
|
||||
curLayer.selectAll("circle")
|
||||
.data(curTeam)
|
||||
.enter()
|
||||
.append("circle")
|
||||
.style("fill", colorScale[curEntry * 2])
|
||||
.style("z-index", maxNumEntry - curEntry)
|
||||
.attr("class", "team_" + entry)
|
||||
.attr("r", 5)
|
||||
.attr("cx",
|
||||
function(d) {
|
||||
return xScale((d[0] - minTime) / 60);
|
||||
})
|
||||
.attr("cy",
|
||||
function(d) {
|
||||
return yScale(d[1]);
|
||||
})
|
||||
.on("mouseover", handleMouseoverCircle)
|
||||
.on("mouseout", handleMouseoutCircle);
|
||||
|
||||
curEntry++;
|
||||
}
|
||||
|
||||
var axisG = graph.append("g");
|
||||
axisG
|
||||
.attr("transform", "translate(0," + (height - margins) + ")")
|
||||
.call(d3.axisBottom(xScale));
|
||||
//.style("stroke", "white");
|
||||
axisG.selectAll("path").style("stroke", "white");
|
||||
axisG.selectAll("line").style("stroke", "white");
|
||||
axisG.selectAll("text").style("fill", "white");
|
||||
|
||||
graph.append("text")
|
||||
.attr("text-anchor", "middle")
|
||||
.attr("transform", "translate(" + (width / 2) + ", " + (height - margins / 8) + ")")
|
||||
.style("fill", "white")
|
||||
.text("Time (minutes)");
|
||||
|
||||
var legend = graph.append("g");
|
||||
var legendRowHeight = (height - margins) / 10;
|
||||
legend.selectAll("rect")
|
||||
.data(winningTeams)
|
||||
.enter()
|
||||
.append("rect")
|
||||
.attr("class", function(d){ return "team_" + d; })
|
||||
.attr("fill", function(d, i){ return colorScale[i * 2]; })
|
||||
.style("z-index", function(d, i){ return i; })
|
||||
.attr("x", 0)
|
||||
.attr("y", function(d, i){ return legendRowHeight * i; })
|
||||
.attr("height", legendRowHeight)
|
||||
.attr("width", marginsX)
|
||||
.on("mouseover", handleMouseoverLegend)
|
||||
.on("mouseout", handleMouseoutLegend);
|
||||
|
||||
legend.selectAll("text")
|
||||
.data(winningTeams)
|
||||
.enter()
|
||||
.append("text")
|
||||
//.attr("class", function(d){ return "team_" + d; })
|
||||
.attr("fill", "black")
|
||||
.style("z-index", function(d, i){ return i; })
|
||||
.attr("dx", 0)
|
||||
.attr("dy", function(d, i){ return legendRowHeight * (i + .5); })
|
||||
.text(function(d, i){ return i + ": " + d; })
|
||||
.attr("dominant-baseline", "central")
|
||||
.style("pointer-events", "none");
|
||||
|
||||
//legend.append("g").selectAll("text")
|
||||
// .data(winningTeams)
|
||||
// .enter()
|
||||
// .append("text")
|
||||
// .attr("class", function(d){ return "team_" + d; })
|
||||
// .attr("fill", function(d, i){ return colorScale[i]; })
|
||||
// .style("z-index", function(d, i){ return i; })
|
||||
// .attr("dx", margins)
|
||||
// .attr("dy", function(d, i){ return margins + legendRowHeight * (i); })
|
||||
// .text(function(d){ return d; });
|
||||
//.attr("dominant-baseline", "central");
|
||||
//.style("pointer-events", "none");
|
||||
|
||||
|
||||
function handleMouseover(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", "white")
|
||||
.style("fill", "white");
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
}
|
||||
|
||||
function handleMouseout(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
var zIndex = d3.select(this).style("z-index");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", colorScale[(maxNumEntry - zIndex) * 2])
|
||||
.style("fill", colorScale[(maxNumEntry - zIndex) * 2]);
|
||||
legend.selectAll("." + curClass)
|
||||
.style("stroke", colorScale[(maxNumEntry - zIndex) * 2])
|
||||
.style("fill", colorScale[(maxNumEntry - zIndex) * 2]);
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
}
|
||||
|
||||
var tooltipPadding = 10;
|
||||
function handleMouseoverCircle(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", "white")
|
||||
.style("fill", "white");
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
|
||||
graph.append("g").append("text")
|
||||
.attr("class", "tooltip")
|
||||
.attr("text-anchor", "middle")
|
||||
.style("fill", "red")
|
||||
.style("stroke-width", -4)
|
||||
.style("stroke", "black")
|
||||
.style("font-weight", "bolder")
|
||||
.style("font-size", "large")
|
||||
.attr("dx",
|
||||
function() {
|
||||
return xScale((d[0] - minTime) / 60);
|
||||
})
|
||||
.attr("dy",
|
||||
function() {
|
||||
return yScale(d[1]) - tooltipPadding;
|
||||
})
|
||||
.text(function(){ return d[2] + " " + d[3]; })
|
||||
.style("pointer-events", "none");
|
||||
|
||||
}
|
||||
|
||||
function handleMouseoutCircle(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
var zIndex = d3.select(this).style("z-index");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", colorScale[(maxNumEntry - zIndex) * 2])
|
||||
.style("fill", colorScale[(maxNumEntry - zIndex) * 2]);
|
||||
legend.selectAll("." + curClass)
|
||||
.style("stroke", colorScale[(maxNumEntry - zIndex) * 2])
|
||||
.style("fill", colorScale[(maxNumEntry - zIndex) * 2]);
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
}
|
||||
|
||||
function handleMouseoverLegend(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", "white")
|
||||
.style("fill", "white");
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
}
|
||||
|
||||
function handleMouseoutLegend(d, i) {
|
||||
d3.select("body").selectAll(".tooltip").remove();
|
||||
var curClass = d3.select(this).attr("class");
|
||||
var zIndex = d3.select(this).style("z-index");
|
||||
d3.select("body").selectAll("." + curClass)
|
||||
.style("stroke", colorScale[zIndex * 2])
|
||||
.style("fill", colorScale[zIndex * 2]);
|
||||
legend.selectAll("." + curClass)
|
||||
.style("stroke", colorScale[(zIndex) * 2])
|
||||
.style("fill", colorScale[(zIndex) * 2]);
|
||||
d3.select("body").selectAll("text")
|
||||
.style("stroke-width", 0);
|
||||
}
|
||||
|
||||
|
||||
} else if(mode == "original") {
|
||||
// (100 / ncats) * (ncats / topActualScore);
|
||||
var maxWidth = 100 / topActualScore;
|
||||
for (var i in winners) {
|
||||
var team = winners[i];
|
||||
var row = document.createElement("div");
|
||||
var ncat = 0;
|
||||
for (var category in highscore) {
|
||||
var catHigh = highscore[category];
|
||||
var catTeam = team[category] || 0;
|
||||
var catPct = catTeam / catHigh;
|
||||
var width = maxWidth * catPct;
|
||||
|
||||
var bar = document.createElement("span");
|
||||
bar.classList.add("cat" + ncat);
|
||||
bar.style.width = width + "%";
|
||||
bar.textContent = category + ": " + catTeam;
|
||||
bar.title = bar.textContent;
|
||||
|
||||
row.appendChild(bar);
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
var te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamnames[team.__hash__];
|
||||
row.appendChild(te);
|
||||
|
||||
element.appendChild(row);
|
||||
}
|
||||
}
|
||||
if(mode == "total") {
|
||||
var colorScale = d3.schemeCategory20;
|
||||
|
||||
var numCats = 0;
|
||||
for(entry in allQuestions) {
|
||||
numCats++;
|
||||
}
|
||||
var maxWidth = Math.floor(100 / (0.0 + numCats));
|
||||
//console.log(maxWidth);
|
||||
|
||||
for (var i in winners) {
|
||||
var team = winners[i];
|
||||
var row = document.createElement("div");
|
||||
var ncat = 0;
|
||||
for (var category in allQuestions) {
|
||||
var catHigh = highscore[category];
|
||||
var catTeam = team[category] || 0;
|
||||
var catPct = 0;
|
||||
if (catHigh > 30000) {
|
||||
catPct = (0.0 + Math.log(1+catTeam)) / (0.0 + Math.log(1+catHigh));
|
||||
} else {
|
||||
catPct = (0.0 + catTeam) / (0.0 + catHigh);
|
||||
}
|
||||
var width = maxWidth * catPct;
|
||||
var bar = document.createElement("span");
|
||||
|
||||
var numLeft = catHigh - catTeam;
|
||||
|
||||
//bar.classList.add("cat" + ncat);
|
||||
bar.style.backgroundColor = colorScale[ncat % 20];
|
||||
bar.style.color = "white";
|
||||
bar.style.width = width + "%";
|
||||
bar.textContent = category + ": " + catTeam;
|
||||
bar.title = bar.textContent;
|
||||
|
||||
row.appendChild(bar);
|
||||
|
||||
ncat++;
|
||||
|
||||
width = maxWidth * (1 - catPct);
|
||||
if(width > 0) {
|
||||
var noBar = document.createElement("span");
|
||||
//noBar.classList.add("cat" + ncat);
|
||||
noBar.style.backgroundColor = colorScale[ncat % 20];
|
||||
noBar.style.width = width + "%";
|
||||
noBar.textContent = numLeft;
|
||||
noBar.title = bar.textContent;
|
||||
|
||||
row.appendChild(noBar);
|
||||
}
|
||||
ncat += 1;
|
||||
}
|
||||
|
||||
var te = document.createElement("span");
|
||||
te.classList.add("teamname");
|
||||
te.textContent = teamnames[team.__hash__];
|
||||
row.appendChild(te);
|
||||
|
||||
element.appendChild(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function once() {
|
||||
loadJSON("points.json", update);
|
||||
}
|
||||
if (continuous) {
|
||||
updateInterval = setInterval(once, interval);
|
||||
}
|
||||
once();
|
||||
}
|
124
www/scoring.html
|
@ -1,124 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>About scoring</title>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
<h1>About scoring</h1>
|
||||
|
||||
<section>
|
||||
<h2>How we compute scores</h2>
|
||||
|
||||
<p>
|
||||
The contest is made up of multiple categories.
|
||||
Each category is worth one point toward the total score;
|
||||
your team's score in a category is the fraction of the total points unlocked so far in that category.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The team that has 30% of the points
|
||||
in each of five categories has 1.5 points, whereas the team that
|
||||
has 80% of the points in only one category has 0.8 points. It is
|
||||
typically better to have a few points in many categories, than
|
||||
many points in a few categories.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When points are unlocked in a category,
|
||||
every other team's score in that category goes down until they too score that point.
|
||||
Unlike previous years, however,
|
||||
unlocking points is the only way to reduce another team's score.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
There are two main ways to make points: <em>puzzles</em>
|
||||
and <em>tokens</em>. Your contest may have other ways to make
|
||||
points: these will either be automatic, or explained elsewhere.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
<h2>Puzzles</h2>
|
||||
<p>
|
||||
Many of the categories are in the form of
|
||||
multiple <em>puzzles</em>: for each puzzle presented, a
|
||||
case-sensitive answer must be found to receive the amount of
|
||||
points that puzzle is worth. Any team may answer any puzzle
|
||||
question at any time. A new puzzle is revealed when a team
|
||||
correctly answers the highest-valued puzzle in that category.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
<h2 id="tokens">Tokens</h2>
|
||||
<p>
|
||||
Tokens are strings redeemable once for points. They take on
|
||||
two forms: a single or multipoint token. A single point
|
||||
token for the "example" category might look like this:
|
||||
</p>
|
||||
|
||||
<pre>example:xylep-radar-nanox</pre>
|
||||
|
||||
<p>
|
||||
A 42 point
|
||||
token for the "example" category might look like this:
|
||||
</p>
|
||||
|
||||
<pre>example:42:xihyp-ropar-nanix</pre>
|
||||
|
||||
<p>
|
||||
Tokens are typically associated with "live" categories, such as a
|
||||
network-based service or a treasure hunt. Tokens can be submitted
|
||||
with the form on the <a href="index.html">welcome page</a>, or you
|
||||
can write your own script to automate token submission.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Some tokens change periodically, typically once a minute. If you
|
||||
find a token, it's worth looking in the same place again later to
|
||||
see if the token changes.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
<h2>About time</h2>
|
||||
<p>
|
||||
Many Capture The Flag contests attempt to reward teams who answer
|
||||
quickly, by adding a "quick answer" bonus or by decaying point
|
||||
values over time. Our contest doesn't work this way.
|
||||
</p>
|
||||
<p>
|
||||
We want to focus on rewarding technical proficiency, allowing
|
||||
skilled contestants to prove their worth independent of their
|
||||
ability to hit F5 quickly. It is our hope that by providing
|
||||
enough things to work on, quick-moving teams will emerge with more
|
||||
points by solving lots of puzzles, while novice teams get a solid
|
||||
benchmark against which to judge their technical skill level: you
|
||||
don't have to make allowances for reaction time in comparing
|
||||
scores. In addition, when the game infrastructure goes down—which
|
||||
seems to happen a lot in anybody's CTF—there's no losing points
|
||||
while the organizers struggle to get things back up.
|
||||
</p>
|
||||
</section>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="register.html">Register</a></li>
|
||||
<li><a href="puzzles.html">Puzzles</a></li>
|
||||
<li><a href="scoreboard.html">Scoreboard</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<section id="sponsors">
|
||||
<img src="images/logo0.png" alt="">
|
||||
<img src="images/logo1.png" alt="">
|
||||
<img src="images/logo2.png" alt="">
|
||||
<img src="images/logo3.png" alt="">
|
||||
<img src="images/logo4.png" alt="">
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
261
www/style.css
|
@ -1,261 +0,0 @@
|
|||
/*
|
||||
Light blue: #96d1e3
|
||||
Off-white blue: #b9e0ef
|
||||
Dark brown: #35170c
|
||||
Light brown: #432115
|
||||
Tan: #e1caa5
|
||||
*/
|
||||
|
||||
@import "fonts/maven_pro.css";
|
||||
|
||||
html {
|
||||
background: #35170c url(images/background.png) no-repeat center center fixed;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
/* min-height: 100%;*/
|
||||
font-family: "Maven Pro", Ubuntu, sans-serif;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: #AD6F15;
|
||||
font-family: "Maven Pro", Ubuntu, sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
body > h1:first-child {
|
||||
color: #96d1e3;
|
||||
font-size: 3em;
|
||||
border-radius: 0.2em;
|
||||
padding: 0 0.3em;
|
||||
text-align: center;
|
||||
max-width: 66%;
|
||||
margin: 0.5em auto;
|
||||
}
|
||||
|
||||
body > h1:first-child img {
|
||||
max-width: 66%;
|
||||
}
|
||||
|
||||
.readme, pre {
|
||||
background-color: #FFDAA3;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
input {
|
||||
font-family: "Maven Pro", Ubuntu, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #432115;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #9E1336;
|
||||
}
|
||||
|
||||
a img {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: solid #ddc 2px;
|
||||
padding: 0.25em;
|
||||
font-family: "Ubuntu Mono", monospace;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
code, kbd, samp {
|
||||
font-family: "Ubuntu Mono", monospace;
|
||||
}
|
||||
|
||||
|
||||
th {
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
}
|
||||
td {
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.4em;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 1px solid #ddc;
|
||||
}
|
||||
|
||||
#prompt {
|
||||
color: #0E7450;
|
||||
border-radius: 0.2em;
|
||||
}
|
||||
|
||||
#cli {
|
||||
background: rgba(14, 116, 80, 0.2);
|
||||
color: #00120C;
|
||||
width: 100%;
|
||||
border: 0px;
|
||||
padding: 0.1em 0.1em;
|
||||
}
|
||||
|
||||
#readme img {
|
||||
max-width: 100%;
|
||||
transition: all .2s ease;
|
||||
}
|
||||
|
||||
#readme img:hover {
|
||||
transform: scale(1.5);
|
||||
}
|
||||
|
||||
/**** Section ****/
|
||||
|
||||
section, nav, address {
|
||||
color: #35170c;
|
||||
max-width: 35em;
|
||||
border-radius: 0.6em;
|
||||
margin: 1em auto;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
section, address {
|
||||
background: #e1caa5;
|
||||
}
|
||||
|
||||
/*** navigation bar ***/
|
||||
|
||||
nav {
|
||||
background: #b9e0ef;
|
||||
}
|
||||
|
||||
nav h2 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
nav li a {
|
||||
text-transform: lowercase;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
nav li + li:before {
|
||||
content: " | ";
|
||||
}
|
||||
|
||||
#sponsors {
|
||||
background: #b9e0ef;
|
||||
text-align: center;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
#sponsors img {
|
||||
max-width: 20%;
|
||||
max-height: 5em;
|
||||
}
|
||||
|
||||
|
||||
/**** Terminal ****/
|
||||
|
||||
#terminal {
|
||||
padding: 10px;
|
||||
max-width: 35em;
|
||||
margin: 1em auto;
|
||||
border-radius: 1em;
|
||||
|
||||
}
|
||||
|
||||
#terminal #output {
|
||||
max-height: 20em;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
#terminal #output::-webkit-scrollbar
|
||||
{
|
||||
width: 0.7em;
|
||||
}
|
||||
|
||||
#terminal #output::-webkit-scrollbar-track
|
||||
{
|
||||
border-radius: 0.7em;
|
||||
background-color: rgba(173, 111, 21, 0.4);
|
||||
}
|
||||
|
||||
#terminal #output::-webkit-scrollbar-thumb
|
||||
{
|
||||
border-radius: 0.7em;
|
||||
background-color: #FFDAA3;
|
||||
border: solid rgba(173, 111, 21, 0.4) 1px;
|
||||
}
|
||||
|
||||
/**** Scoreboard ****/
|
||||
|
||||
#scoreboard {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
background: rgba(25, 0, 6, 0.8);
|
||||
border-radius: 2em;
|
||||
}
|
||||
|
||||
#scoreboard span {
|
||||
font-size: 75%;
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
height: 2.2em;
|
||||
}
|
||||
|
||||
#scoreboard .teamname {
|
||||
font-size: 133%;
|
||||
color: white;
|
||||
text-shadow: 0 0 0.2em black;
|
||||
opacity: 0.8;
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
height: 1.1em;
|
||||
}
|
||||
|
||||
#scoreboard div * {white-space: nowrap;}
|
||||
.cat0, .cat8, .cat16 {background-color: #a6cee3; color: black;}
|
||||
.cat1, .cat9, .cat17 {background-color: #1f78b4; color: white;}
|
||||
.cat2, .cat10, .cat18 {background-color: #b2df8a; color: black;}
|
||||
.cat3, .cat11, .cat19 {background-color: #33a02c; color: white;}
|
||||
.cat4, .cat12, .cat20 {background-color: #fb9a99; color: black;}
|
||||
.cat5, .cat13, .cat21 {background-color: #e31a1c; color: white;}
|
||||
.cat6, .cat14, .cat22 {background-color: #fdbf6f; color: black;}
|
||||
.cat7, .cat15, .cat23 {background-color: #ff7f00; color: black;}
|
||||
|
||||
|
||||
.wide {
|
||||
max-width: inherit;
|
||||
}
|
||||
|
||||
.figure {
|
||||
margin: 0.5em 1em;
|
||||
float: right;
|
||||
font-size: small;
|
||||
text-align: center;
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
var baud = 1200;
|
||||
|
||||
function tx(element, text, baud_) {
|
||||
var drawTimer;
|
||||
baud_ = baud_ || baud;
|
||||
|
||||
var sp = false;
|
||||
function draw() {
|
||||
c = text[0];
|
||||
if ((c == " ") || (c == "\n")) {
|
||||
sp = true;
|
||||
c = " ";
|
||||
} else if (sp) {
|
||||
c = " " + c;
|
||||
sp = false;
|
||||
}
|
||||
element.textContent += c;
|
||||
text = text.substr(1);
|
||||
if (text == "") {
|
||||
clearInterval(drawTimer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// N81 uses 1 stop bit, and 1 parity bit.
|
||||
// That works out to exactly 10 bits per byte.
|
||||
msec = 10000 / baud_;
|
||||
|
||||
drawTimer = setInterval(draw, msec);
|
||||
draw();
|
||||
}
|
||||
|
||||
|
||||
var outq = [];
|
||||
var outTimer;
|
||||
|
||||
function drawPar() {
|
||||
oute = document.getElementById("output");
|
||||
outp = document.createElement("p");
|
||||
|
||||
oute.appendChild(outp);
|
||||
tx(outp, outq.shift());
|
||||
if (outq.length == 0) {
|
||||
clearInterval(outTimer);
|
||||
}
|
||||
}
|
||||
|
||||
function output(par) {
|
||||
outq = outq.concat(par);
|
||||
if (! outTimer) {
|
||||
outTimer = setInterval(drawPar, 150);
|
||||
}
|
||||
}
|
||||
|