commit 0cc9d8fdc5e64f126fcd94d78f2737969b83ff4b Author: Niels Serup Date: Tue Aug 2 19:57:57 2011 +0200 First commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df35f54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*~ +*#*# +*.#* +/.old/ +/.local/ +/heavy/ +/nohi/ +subsites/roptoligs +subsites/suum diff --git a/dotorgredirect/.htaccess b/dotorgredirect/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/films/.htaccess b/dotorgredirect/films/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/films/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/films/index.php b/dotorgredirect/films/index.php new file mode 100644 index 0000000..6ecb970 --- /dev/null +++ b/dotorgredirect/films/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/heavy/.htaccess b/dotorgredirect/heavy/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/heavy/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/heavy/index.php b/dotorgredirect/heavy/index.php new file mode 100644 index 0000000..d0d3007 --- /dev/null +++ b/dotorgredirect/heavy/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/index.php b/dotorgredirect/index.php new file mode 100644 index 0000000..2af62ae --- /dev/null +++ b/dotorgredirect/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/nohix/.htaccess b/dotorgredirect/nohix/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/nohix/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/nohix/index.php b/dotorgredirect/nohix/index.php new file mode 100644 index 0000000..9ce44be --- /dev/null +++ b/dotorgredirect/nohix/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/oldsites/.htaccess b/dotorgredirect/oldsites/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/oldsites/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/oldsites/index.php b/dotorgredirect/oldsites/index.php new file mode 100644 index 0000000..edc1407 --- /dev/null +++ b/dotorgredirect/oldsites/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/pictures/.htaccess b/dotorgredirect/pictures/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/pictures/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/pictures/index.php b/dotorgredirect/pictures/index.php new file mode 100644 index 0000000..a3027c6 --- /dev/null +++ b/dotorgredirect/pictures/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/projects/.htaccess b/dotorgredirect/projects/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/projects/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/projects/index.php b/dotorgredirect/projects/index.php new file mode 100644 index 0000000..73bb330 --- /dev/null +++ b/dotorgredirect/projects/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/roptoligs/.htaccess b/dotorgredirect/roptoligs/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/roptoligs/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/roptoligs/index.php b/dotorgredirect/roptoligs/index.php new file mode 100644 index 0000000..19c8b95 --- /dev/null +++ b/dotorgredirect/roptoligs/index.php @@ -0,0 +1,4 @@ + diff --git a/dotorgredirect/suum/.htaccess b/dotorgredirect/suum/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/dotorgredirect/suum/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/dotorgredirect/suum/index.php b/dotorgredirect/suum/index.php new file mode 100644 index 0000000..6f3a9ab --- /dev/null +++ b/dotorgredirect/suum/index.php @@ -0,0 +1,4 @@ + diff --git a/subsites/addsymlinks.sh b/subsites/addsymlinks.sh new file mode 100755 index 0000000..83178b2 --- /dev/null +++ b/subsites/addsymlinks.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +ln -s ../../nohix . +ln -s ../../roptoligs . +ln -s ../../suum . diff --git a/subsites/films-apache b/subsites/films-apache new file mode 100644 index 0000000..ab48413 --- /dev/null +++ b/subsites/films-apache @@ -0,0 +1,36 @@ + + + ServerName films.lcl + ServerAlias films.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/subsites/films + + Alias /robots.txt /home/niels/www/meta/subsites/films/robots.txt + Alias /favicon.ico /home/niels/www/meta/subsites/films/favicon.ico + Alias /favicon.png /home/niels/www/meta/subsites/films/favicon.png + Alias /static /home/niels/www/meta/subsites/films/static + Alias /previews /home/niels/www/meta/subsites/films/previews + Alias /films /home/niels/www/meta/heavy/films + Alias /films.wsgi /home/niels/www/meta/subsites/films/films.wsgi + Alias /apache-config-template /home/niels/www/meta/subsites/films/apache-config-template + + + Order allow,deny + Allow from all + + + WSGIDaemonProcess films.lcl processes=2 threads=15 display-name=%{GROUP} + WSGIProcessGroup films.lcl + + WSGIScriptAlias / /home/niels/www/meta/subsites/films/films.wsgi + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + \ No newline at end of file diff --git a/subsites/films/about.html b/subsites/films/about.html new file mode 100644 index 0000000..4eef6f8 --- /dev/null +++ b/subsites/films/about.html @@ -0,0 +1,18 @@ +

+ This is nohifilms, Niels Serup's index of his short films. The earliest films + involved often revolve around + the stopmotion + technique, while others don't. +

+ +

+ + Play OGG + +

+ +

+ nohifilms runs on a simple AGPLv3-licensed WSGI script which can downloaded + here using an Apache config file similar + to this one. +

diff --git a/subsites/films/apache-config-template b/subsites/films/apache-config-template new file mode 100644 index 0000000..67af8a6 --- /dev/null +++ b/subsites/films/apache-config-template @@ -0,0 +1,28 @@ + + + ServerName films.example.org + ServerAlias films.example.org + ServerAdmin webmaster@example.org + + DocumentRoot /path/to/dir/of/films + + Alias /robots.txt /path/to/dir/of/films/robots.txt + Alias /favicon.ico /path/to/dir/of/films/favicon.ico + Alias /favicon.png /path/to/dir/of/films/favicon.png + Alias /static /path/to/dir/of/films/static + Alias /previews /path/to/dir/of/films/previews + Alias /films /path/to/dir/of/videos + Alias /films.wsgi /path/to/dir/of/films/films.wsgi + Alias /apache-config-template /path/to/dir/of/films/apache-config-template + + + Order allow,deny + Allow from all + + + WSGIDaemonProcess films.example.org processes=2 threads=15 display-name=%{GROUP} + WSGIProcessGroup films.example.org + + WSGIScriptAlias / /path/to/dir/of/films/films.wsgi + + diff --git a/subsites/films/filminfo b/subsites/films/filminfo new file mode 100644 index 0000000..be719af --- /dev/null +++ b/subsites/films/filminfo @@ -0,0 +1,175 @@ +super-surveillance +SUPER SURVEILLANCE +2011 +true +ab +true + +Yes, it is true. Truedom. + + +creative-process +The Creative Process of an Artist +2010 +false +ab +false + +I was bored. + + +paranoia +Paranoia +2010 +true +ab +false + +Do you have paranoia? + + +box +Box +2010 +true +ab +false + +A box and a human. + + +cola +Cola +2008 +true +bcd +false + +The Coca Cola Company has created a monster: a can that moves by itself! Too +much caffeine, perhaps? + + +robo +Robo +2009 +true +bcd +false + +In the future, scientists will have to construct robots out of crap. For now, +simple boxes will do.

Music credit goes to user RedChili at http://jamendo.com/en/user/redchili. His +track is called "Sen Mandaryna" and is released under CC-BY-NC-SA 3.0, which is +why I have to license this works as a whole under the same license, thus +releasing this film under the Creative Commons +Attribution-Noncommercial-ShareAlike 3.0. Note that this film is available +under CC-BY-SA as well, just without the background music. So if you want to +use this for commercial purposes, use another soundtrack. + + +dice +Dice +2010 +false +bcd +false + +A die meets a die. No sound. + + +compufight +Compufight +2009 +false +bcde +false + +The kung fu of computing. + + +mobility +Mobility +2008 +true +bcde +false + +Is it a bird? Is it an airplane? No, it's a MOBILE PHONE! + + +legoshow +Lego SHOW +2006 +false +none +false + +Showoff. + + +easteregg +Beware of the Easter Egg +2007 +false +none +false + +It's dangerous, I tell you. Beware of other traditions, too.

Music +credit goes to freesound contributor Richard Frohlich at freesound.org. His piano track is released +under CC Sampling +Plus 1.0.. When I originally applied this track to my film, I didn't +realize that its license was somewhat non-free and not compatible with +CC-BY-SA. So to get this film under CC-BY-SA, you'll have to take it without +sound. + + +compumotion +Compumotion +2008 +false +bcd +false + +Or maybe "Lapstop"? + + +crazychristmas +Crazy Christmas +2007 +false +bcd +false + +Celebrating Christmas also means celebrating the day these unfortunate lego +accesories went berserk. + + +testdraw +Test draw +2008 +true +b +false + +Just testing. + + +legoparty +Lego Party +2006 +false +bc +false + +They seem to be slightly.. drunk? + + +saltvspepper +Salt vs. pepper +2008 +false +bcd +false + +Who will win this battle of destiny? diff --git a/subsites/films/films.config b/subsites/films/films.config new file mode 100644 index 0000000..172d00d --- /dev/null +++ b/subsites/films/films.config @@ -0,0 +1,3 @@ +[films] +previews_dir = /previews +videos_dir = /films diff --git a/subsites/films/films.wsgi b/subsites/films/films.wsgi new file mode 100644 index 0000000..b7e30b7 --- /dev/null +++ b/subsites/films/films.wsgi @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 + +# films.wsgi: a WSGI script for showing films +# Copyright (C) 2011 Niels Serup + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with this program. If not, see +# . + +## Version:...... 0.1.0 +## Maintainer:... Niels Serup +## Website:...... http://films.metanohi.name/about/ + +import sys +import os +import bottle +from bottle import route, abort, error, request, redirect +import configparser +import locale +_preferred_encoding = 'utf-8' #locale.getpreferredencoding() # fail + +_absfile = os.path.abspath(__file__) +_filedir = os.path.dirname(_absfile) +_configfile_name = 'films.config' + +# Get settings +_settings = {'previews_dir': '/previews', 'videos_dir': '/videos'} # Defaults + +_cfg = configparser.SafeConfigParser(_settings) +_cfg.add_section('films') +try: + _cfg.read(os.path.join(_filedir, _configfile_name)) +except configparser.Error as e: + print('Python error: ' + repr(e), file=sys.stderr) +except TypeError: + pass +_settings = {name: value for name, value in _cfg.items('films')} + +# Get templates +def _readfile(locpath): + with open(os.path.join(_filedir, locpath), 'rb') as f: + return f.read().decode(_preferred_encoding) + +_template, _about, _frontpage = (_readfile(x + '.html') for x in + ('template', 'about', 'frontpage')) + +# Create more templates +_videosource = ''' \n''' +_videotemplate = ''' + + +
+

{description}

+

Year: {year}

+
+ +
+

Download: {downloads}

+
+''' + +# Extract info +def _parse_filminfo(locpath): + with open(os.path.join(_filedir, locpath), 'U') as f: + sfilms = (line.split('\n', 7) for line in f.read().split('\n' * 3)) + films, films_html = [], {} + i = 1 + for x in sfilms: + kwds = { + 'name': x[0], + 'title': x[1], + 'year': int(x[2]), + '16:9': x[3] == 'true', + 'sizes': x[4], + 'webm': x[5] == 'true', + 'description': x[7] + } + + if kwds['16:9']: + kwds['height'] = 360 + sizes = ( + '640x360', + '1024x576', + '1280x720', + '1920x1080' + ) + else: + kwds['height'] = 480 + sizes = ( + '640x480', + '768x576', + '960x720', + '1440x1080' + ) + kwds['downloads'] = '' + linknames = { + '': (sizes[0], '640w'), + 'b': (sizes[1], '576p'), + 'c': (sizes[2], '720p'), + 'd': (sizes[3], '1080p'), + 'e': ('Behind', 'behind') + } + for x in filter(lambda x: x in kwds['sizes'], linknames.keys()): + linkname, sid = linknames[x] + if kwds['webm']: + kwds['downloads'] += "{linkname} WebM".format( + dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname) + kwds['downloads'] += "{linkname} Theora".format( + dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname) + + addr = _settings['videos_dir'] + srcs = '' + kwds['url'] = '{}/{}-{}.ogv'.format( + addr, kwds['name'], linknames[''][1]) + if kwds['webm']: + srcs += _videosource.format(url='{}/{}-{}.webm'.format( + addr, kwds['name'], linknames[''][1]), mime='video/webm') + srcs += _videosource.format(url=kwds['url'], mime='video/ogg') + kwds['sources'] = srcs + kwds['content'] = _videotemplate.format(**kwds) + kwds['leftclass'] = " class='left'" if i % 2 else '' + i += 1 + + films.append(kwds) + films_html[kwds['name']] = _template.format(**kwds) + return films, films_html + +_films, _films_html = _parse_filminfo('filminfo') +_settings['numberoffilms'] = len(_films) + +# Improve templates +_frontpage_boxlink = ''' + + {{title}} + +'''.format(**_settings) + +_settings['filmboxes'] = ''.join(_frontpage_boxlink.format(**kwds) + for kwds in _films) + +_frontpage = _frontpage.format(**_settings) + +_settings['content'], _settings['title'] = _frontpage, 'Start' +_frontpage = _template.format(**_settings) +_settings['content'], _settings['title'] = _about, 'About' +_about = _template.format(**_settings) +del _settings['content'] +del _settings['title'] + +@route('/') +def frontpage(): + if request.query_string: + # compatibility reasons, can be removed + redirect('/' + request.query_string) + return _frontpage + +@route('/about') +@route('/!about') # compatibility reasons, can be removed +def about(): + return _about + +@route('/:name') +def film(name): + return _films_html[name] + +application = bottle.default_app() + diff --git a/subsites/films/frontpage.html b/subsites/films/frontpage.html new file mode 100644 index 0000000..ed6846f --- /dev/null +++ b/subsites/films/frontpage.html @@ -0,0 +1,17 @@ +

+ This is my personal film index. Below is a list of the {numberoffilms} films + that I have so far produced. The films are both downloadable and directly + viewable in any fairly modern web browser. I'm releasing all of my films + under the Creative + Commons Attribution-ShareAlike 3.0 license, which permits everyone to + remix and share my videos as long as they attribute me and do not restrict + other remixers and sharers from altering and sharing new versions. +

+

Read more.

+ +
+ {filmboxes} +
+
+ +

That is all.

diff --git a/subsites/films/previews/box.jpg b/subsites/films/previews/box.jpg new file mode 100644 index 0000000..fff623c Binary files /dev/null and b/subsites/films/previews/box.jpg differ diff --git a/subsites/films/previews/cola.jpg b/subsites/films/previews/cola.jpg new file mode 100644 index 0000000..b766179 Binary files /dev/null and b/subsites/films/previews/cola.jpg differ diff --git a/subsites/films/previews/compufight.jpg b/subsites/films/previews/compufight.jpg new file mode 100644 index 0000000..83810dc Binary files /dev/null and b/subsites/films/previews/compufight.jpg differ diff --git a/subsites/films/previews/compumotion.jpg b/subsites/films/previews/compumotion.jpg new file mode 100644 index 0000000..1ea7235 Binary files /dev/null and b/subsites/films/previews/compumotion.jpg differ diff --git a/subsites/films/previews/crazychristmas.jpg b/subsites/films/previews/crazychristmas.jpg new file mode 100644 index 0000000..81ec236 Binary files /dev/null and b/subsites/films/previews/crazychristmas.jpg differ diff --git a/subsites/films/previews/creative-process.jpg b/subsites/films/previews/creative-process.jpg new file mode 100644 index 0000000..ae62dae Binary files /dev/null and b/subsites/films/previews/creative-process.jpg differ diff --git a/subsites/films/previews/dice.jpg b/subsites/films/previews/dice.jpg new file mode 100644 index 0000000..ff21336 Binary files /dev/null and b/subsites/films/previews/dice.jpg differ diff --git a/subsites/films/previews/easteregg.jpg b/subsites/films/previews/easteregg.jpg new file mode 100644 index 0000000..77d1693 Binary files /dev/null and b/subsites/films/previews/easteregg.jpg differ diff --git a/subsites/films/previews/legoparty.jpg b/subsites/films/previews/legoparty.jpg new file mode 100644 index 0000000..fb3e8ac Binary files /dev/null and b/subsites/films/previews/legoparty.jpg differ diff --git a/subsites/films/previews/legoshow.jpg b/subsites/films/previews/legoshow.jpg new file mode 100644 index 0000000..53dae3d Binary files /dev/null and b/subsites/films/previews/legoshow.jpg differ diff --git a/subsites/films/previews/mobility.jpg b/subsites/films/previews/mobility.jpg new file mode 100644 index 0000000..da7a955 Binary files /dev/null and b/subsites/films/previews/mobility.jpg differ diff --git a/subsites/films/previews/paranoia.jpg b/subsites/films/previews/paranoia.jpg new file mode 100644 index 0000000..d7d46a5 Binary files /dev/null and b/subsites/films/previews/paranoia.jpg differ diff --git a/subsites/films/previews/robo.jpg b/subsites/films/previews/robo.jpg new file mode 100644 index 0000000..7bae901 Binary files /dev/null and b/subsites/films/previews/robo.jpg differ diff --git a/subsites/films/previews/saltvspepper.jpg b/subsites/films/previews/saltvspepper.jpg new file mode 100644 index 0000000..4b292f6 Binary files /dev/null and b/subsites/films/previews/saltvspepper.jpg differ diff --git a/subsites/films/previews/super-surveillance.jpg b/subsites/films/previews/super-surveillance.jpg new file mode 100644 index 0000000..1a41aee Binary files /dev/null and b/subsites/films/previews/super-surveillance.jpg differ diff --git a/subsites/films/previews/testdraw.jpg b/subsites/films/previews/testdraw.jpg new file mode 100644 index 0000000..ddb780d Binary files /dev/null and b/subsites/films/previews/testdraw.jpg differ diff --git a/subsites/films/robots.txt b/subsites/films/robots.txt new file mode 100644 index 0000000..2f698a1 --- /dev/null +++ b/subsites/films/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /static diff --git a/subsites/films/static/logo.png b/subsites/films/static/logo.png new file mode 100644 index 0000000..d87b77f Binary files /dev/null and b/subsites/films/static/logo.png differ diff --git a/subsites/films/static/logo.svg b/subsites/films/static/logo.svg new file mode 100644 index 0000000..f821dc6 --- /dev/null +++ b/subsites/films/static/logo.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + nohifilms + + diff --git a/subsites/films/static/playogg.png b/subsites/films/static/playogg.png new file mode 100644 index 0000000..05b4b97 Binary files /dev/null and b/subsites/films/static/playogg.png differ diff --git a/subsites/films/static/screen.css b/subsites/films/static/screen.css new file mode 100644 index 0000000..291a984 --- /dev/null +++ b/subsites/films/static/screen.css @@ -0,0 +1,135 @@ +* { + margin: 0; + padding: 0; +} + +body { + background-color: #555; + color: #fff; + font-size: 14px; + font-family: 'Dejavu Sans', 'Nimbus Sans', Helvetica, Arial, Verdana, sans-serif; +} + +.end { + clear: both; + float: none; + width: 1px; + height: 1px; + background: transparent; +} + +#wrapper { + width: 900px; + margin: 0 auto; +} + +#header { + font-size: 30px; + height: 20px; + background: #000 url(logo.png) right top no-repeat; + margin-bottom: 6px; + padding: 23px 6px; + position: relative; +} + +#header a { + position: absolute; + right: 0; + top: 0; + width: 198px; + height: 66px; + text-decoration: none; +} + +#content { + background: #222; + padding: 10px; +} + +/* MAIN PAGE SPECIFIC */ +#films { + margin-top: 5px; +} + +#films a { + width: 435px; + height: 300px; + float: left; + background-color: #666; + background-position: center center; + display: block; + text-decoration: none; + margin-bottom: 10px; +} + +#films a.left { + margin-right: 10px; +} + +#films a span { + width: 425px; + padding: 3px 5px; + background: rgba(0, 0, 0, .5); + font-size: 25px; + display: inline-block; +} + +#films a:hover div { + height: 294px; +} + +#film { + width: 640px; + background: #999; + margin-right: 10px; +} + +span { + font-weight: bold; +} + +#description { + padding: 5px; + width: 220px; + overflow: auto; + float: right; + margin-bottom: 10px; +} + +#dl { + clear: both; + padding: 3px; + background: #444; +} + +#dl a { + padding: 0 15px; +} + +#footer { + margin-top: 6px; + background: #000; + padding: 3px; + font-size: 11px; + text-align: center; +} + +pre { + font-family: Inconsolata, 'Dejavu Sans Mono', monospace; +} + +.end { + clear: both; +} + +img { + border: 0; +} + +a:link, a:visited { + color: #00aaff; +} + +a:hover { + color: #00eeff; +} diff --git a/subsites/films/template.html b/subsites/films/template.html new file mode 100644 index 0000000..ada554d --- /dev/null +++ b/subsites/films/template.html @@ -0,0 +1,50 @@ + + + + + nohifilms :: {title} + + + + + + + + + + + + + + + +
+ + + +
+{content} +
+ + + +
+ + diff --git a/subsites/hvy-apache b/subsites/hvy-apache new file mode 100644 index 0000000..140d9af --- /dev/null +++ b/subsites/hvy-apache @@ -0,0 +1,43 @@ + + ServerName hvy.lcl + ServerAlias hvy.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/heavy + + Options FollowSymLinks + AllowOverride None + + + Options Indexes Includes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/subsites/nohix-apache b/subsites/nohix-apache new file mode 100644 index 0000000..55cd4e0 --- /dev/null +++ b/subsites/nohix-apache @@ -0,0 +1,43 @@ + + ServerName nohix.lcl + ServerAlias nohix.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/subsites/nohix + + Options FollowSymLinks + AllowOverride None + + + Options Indexes Includes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/subsites/nohix/canvas2dw3d.htm b/subsites/nohix/canvas2dw3d.htm new file mode 100644 index 0000000..17ee550 --- /dev/null +++ b/subsites/nohix/canvas2dw3d.htm @@ -0,0 +1,33 @@ + + + + Graphics {Canvas 2D with 3D (nothing yet, really)} + + + + + +
+
+
+

Back to index

+
+ + + diff --git a/subsites/nohix/canvas2dw3d.js b/subsites/nohix/canvas2dw3d.js new file mode 100644 index 0000000..3b95574 --- /dev/null +++ b/subsites/nohix/canvas2dw3d.js @@ -0,0 +1,44 @@ +Canvas2Dw3D = function(object, width, height) { + this.object = object; + this.numberOfPoints = this.object.length; + this.width = width; + this.height = height; + this.origo2D = [this.width / 2, this.height / 2]; + + this.element = document.createElement("canvas"); + this.element.width = this.width; + this.element.height = this.height; + this.context = this.element.getContext("2d"); + this.context.strokeStyle = "rgb(0, 255, 0)"; + + this.parentElement = null; + + this.drawObject(); +} + +Canvas2Dw3D.prototype.drawObject = function() { + var c, p, q; + for (c in this.object) { + p = this.object[c]; + q = this.object[(c+1)%this.numberOfPoints]; + this.drawLine([p[0], p[1]], [q[0], q[1]]); + } +} + +Canvas2Dw3D.prototype.drawLine = function(xy1, xy2) { + with (this.context) { + beginPath(); + moveTo(-xy1[0]+this.origo2D[0], -xy1[1]+this.origo2D[1]); + lineTo(-xy2[0]+this.origo2D[0], -xy2[1]+this.origo2D[1]); + stroke(); + } +} + +Canvas2Dw3D.prototype.setParentElement = function(obj) { + obj.appendChild(this.element); + this.parentElement = obj; +} + +HTMLElement.prototype.appendCanvas2Dw3DChild = function(obj) { + obj.setParentElement(this); +} diff --git a/subsites/nohix/data/genericstyle.css b/subsites/nohix/data/genericstyle.css new file mode 100644 index 0000000..516163a --- /dev/null +++ b/subsites/nohix/data/genericstyle.css @@ -0,0 +1,56 @@ +* { + margin: 0; + padding: 0; + line-height: 1.5; +} + +body { + background: #666; + color: #ccc; + margin: 10px 0 0 10px; +} + +div { + float: left; + margin: 10px 0 0 10px; + padding: 5px; + border: 5px solid #333; + background-color: #000; +} + +div.simple { + border: none; + padding: 0; + margin: 0; + background-color: transparent; +} + +div.simple > * { + vertical-align: middle; +} + +div.clear { + clear: both; + float: none; + border: none; + margin: 0; + padding: 0; +} + +a { + text-decoration: none; + padding: 1px 3px; + color: #333; +} + +a:link { + background-color: #bbeaf8; +} + +a:visited { + background-color: #d6bbf8; +} + +a:hover { + background-color: #a2b8ec; +} diff --git a/subsites/nohix/data/slogans b/subsites/nohix/data/slogans new file mode 100644 index 0000000..2239c93 --- /dev/null +++ b/subsites/nohix/data/slogans @@ -0,0 +1,12 @@ +Unknowingly the best website in the universe +Not to be confused with 42 +It equals π! +Never has a website had this much content. +Hello Dave. +I do not possess artificial intelligence.. Oops. +Breaking the digitial barriers of tomorrow +This sentence has no punchline. +Making technical restrictions go away +Making it possible to travel 4 au in -4 seconds +Redefining the purpose of redefining +Producing code snippets faster than it takes to not produce them \ No newline at end of file diff --git a/subsites/nohix/index.php b/subsites/nohix/index.php new file mode 100644 index 0000000..9cb45e7 --- /dev/null +++ b/subsites/nohix/index.php @@ -0,0 +1,157 @@ +"; + $tag_e = ""; + $tag_s_pos = strpos($html_string, $tag_s); + $tag_e_pos = strpos($html_string, $tag_e); + if ($tag_s_pos === false || $tag_e_pos == false || $tag_e_pos < $tag_s_pos) + return ""; + + $start = $tag_s_pos + strlen($tag_s); + $end = $tag_e_pos; + $title = substr($html_string, $start, $end - $start); + return $title; + } + + // THE ACTUAL WEBSITE CODE + $pages = array(); + $grouped_pages = array(); + + $scanned_dir = scandir('.'); + foreach ($scanned_dir as $filename) { + if ( + is_file($filename) && + !in_array($filename, array("index.php", ".", "..")) && + preg_match("/^[^\.]+\.(htm|html|xhtml|php|py)$/", $filename) == 1 + ) { + $content = file_get_contents($filename); + $title = get_html_tag_content($content, "title"); + array_push($pages, array($title, $filename)); + } + } + + foreach ($pages as $page) { + $title = $page[0]; + $filename = $page[1]; + + $group = "General"; + + if ($title == "") { + $group = "Untitled"; + $title = $filename; + } + else if (preg_match("/^[^\{\}]+\{.+\}\s*$/", $title) == 1) { + $spl = explode("{", $title); + $group = $spl[0]; + $title = $spl[1]; + $group = trim($group); + $title = trim(substr($title, 0, strlen($title) - 1)); + } + + if (!array_key_exists($group, $grouped_pages)) + $grouped_pages[$group] = array(); + array_push($grouped_pages[$group], array($title, $filename)); + } +?> + + + nohiX {L@B} + + + + +
+ nohiX {L@B} +

nohiX

+ $slogan

\n"; + ?> + +

Experiments

+
    + $pages) { + echo " +
  • +

    $group

    +
      "; + foreach ($pages as $page) { + $title = $page[0]; + $filename = $page[1]; + echo " +
    • +

      $title

      +
    • "; + } + echo " +
    +
  • +"; + } + ?> +
+ +

About

+ + +
+ + diff --git a/subsites/nohix/key.htm b/subsites/nohix/key.htm new file mode 100644 index 0000000..56f29d0 --- /dev/null +++ b/subsites/nohix/key.htm @@ -0,0 +1,12 @@ + + + + Keycode detection + + + +

Back to index

+ + + diff --git a/subsites/nohix/key.js b/subsites/nohix/key.js new file mode 100644 index 0000000..1ddc5a3 --- /dev/null +++ b/subsites/nohix/key.js @@ -0,0 +1,28 @@ +window.onload = function() { + UP = 38 + RIGHT = 39 + DOWN = 40 + LEFT = 37 + document.onkeydown = keydown + document.onkeyup = keyup + keys = [] +} + +function getkeycode(e) { + var keycode + if (window.event) keycode = window.event.keyCode + else if (e) keycode = e.which + else keycode = 0 + return keycode +} + +function keydown(e) { + var keycode = getkeycode(e) + keys[keycode] = true + document.title = keycode +} + +function keyup(e) { + var keycode = getkeycode(e) + keys[keycode] = true +} diff --git a/subsites/nohix/key_advanced.js b/subsites/nohix/key_advanced.js new file mode 100644 index 0000000..18e082a --- /dev/null +++ b/subsites/nohix/key_advanced.js @@ -0,0 +1,92 @@ +window.onload = function() { + key_up=false + key_right=false + key_down=false + key_left=false + key_shift=false + key_control=false + + key_order=new Array() + for (var i=0;i<4;i++) { + key_order[i]=0 + } + + document.onkeydown=keydown + document.onkeyup=keyup +} + +function getkeycode(e) { + var keycode + if (window.event) keycode=window.event.keyCode + else if (e) keycode=e.which + else keycode=0 + return keycode +} + +function keydown(e) { + var keycode=getkeycode(e) + + if (keycode==38 && !key_up) { + key_up=true + key_order.splice(0,0,1) + key_order.splice(3,1) + } + else if (keycode==39 && !key_right) { + key_right=true + key_order.splice(0,0,2) + key_order.splice(3,1) + } + else if (keycode==40 && !key_down) { + key_down=true + key_order.splice(0,0,3) + key_order.splice(3,1) + } + else if (keycode==37 && !key_left) { + key_left=true + key_order.splice(0,0,4) + key_order.splice(3,1) + } + else if (keycode==16) key_shift=true + else if (keycode==17) key_control=true + + if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function keyup(e) { + var keycode=getkeycode(e) + + if (keycode==38 && key_up) { + key_up=false + for (var i=0;i<4;i++) { + if (key_order[i]==1) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==39 && key_right) { + key_right=false + for (var i=0;i<4;i++) { + if (key_order[i]==2) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==40 && key_down) { + key_down=false + for (var i=0;i<4;i++) { + if (key_order[i]==3) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==37 && key_left) { + key_left=false + for (var i=0;i<4;i++) { + if (key_order[i]==4) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==16) key_shift=false + else if (keycode==17) key_control=false + + if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} diff --git a/subsites/nohix/lgpl-3.0.txt b/subsites/nohix/lgpl-3.0.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/subsites/nohix/lgpl-3.0.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/subsites/nohix/media/greek-letters-large.png b/subsites/nohix/media/greek-letters-large.png new file mode 100644 index 0000000..0805d37 Binary files /dev/null and b/subsites/nohix/media/greek-letters-large.png differ diff --git a/subsites/nohix/media/greek-letters-stretched.png b/subsites/nohix/media/greek-letters-stretched.png new file mode 100644 index 0000000..24be016 Binary files /dev/null and b/subsites/nohix/media/greek-letters-stretched.png differ diff --git a/subsites/nohix/media/greek-letters.png b/subsites/nohix/media/greek-letters.png new file mode 100644 index 0000000..29b2004 Binary files /dev/null and b/subsites/nohix/media/greek-letters.png differ diff --git a/subsites/nohix/media/greek-letters.svg b/subsites/nohix/media/greek-letters.svg new file mode 100644 index 0000000..c4e83fd --- /dev/null +++ b/subsites/nohix/media/greek-letters.svg @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + + + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + ΣηκΨον + + + diff --git a/subsites/nohix/media/nohix-logo.png b/subsites/nohix/media/nohix-logo.png new file mode 100644 index 0000000..7cfe17d Binary files /dev/null and b/subsites/nohix/media/nohix-logo.png differ diff --git a/subsites/nohix/media/nohix-logo.svg b/subsites/nohix/media/nohix-logo.svg new file mode 100644 index 0000000..14a83da --- /dev/null +++ b/subsites/nohix/media/nohix-logo.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + nohi + nohi + X + X + + diff --git a/subsites/nohix/media/video.ogv b/subsites/nohix/media/video.ogv new file mode 120000 index 0000000..18af54b --- /dev/null +++ b/subsites/nohix/media/video.ogv @@ -0,0 +1 @@ +/home/niels/Videos/Various/big_buck_bunny_cut.ogv \ No newline at end of file diff --git a/subsites/nohix/media/wmap-screenshot.png b/subsites/nohix/media/wmap-screenshot.png new file mode 100644 index 0000000..bfd0609 Binary files /dev/null and b/subsites/nohix/media/wmap-screenshot.png differ diff --git a/subsites/nohix/modernart-examples/index.php b/subsites/nohix/modernart-examples/index.php new file mode 100644 index 0000000..8a59cb1 --- /dev/null +++ b/subsites/nohix/modernart-examples/index.php @@ -0,0 +1,76 @@ + + + + Graphics {Modern art {Example <?=$num?>}} + + + + + +

An Example of the Advent of Modern Art ()

+
+ Greek letters + Greek letters +
+ +
+
+

Previous | Next

+
+ + + + + + diff --git a/subsites/nohix/modernart.htm b/subsites/nohix/modernart.htm new file mode 100644 index 0000000..33bd543 --- /dev/null +++ b/subsites/nohix/modernart.htm @@ -0,0 +1,62 @@ + + + + Graphics {Modern art} + + + + + +

A few examples

+
+ Greek letters + Greek letters + Greek letters +
+ +
+ +

Pause and resume

+

Click on the masterpieces to pause and resume the animations.

+ +

Other examples

+ + +

Code

+

Source code

+ +

Picture

+

The picture has been released under CC 0.

+ + + + + diff --git a/subsites/nohix/modernart.js b/subsites/nohix/modernart.js new file mode 100644 index 0000000..3f481a7 --- /dev/null +++ b/subsites/nohix/modernart.js @@ -0,0 +1,436 @@ +/* + * modernart.js -- Transforming ordinary pictures into dynamic art + * Copyright (C) 2010 Niels Serup + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License is available at + * . + */ + +/* + * Version 0.1.1 + * Maintainer: Niels Serup +*/ + +/* + * There is no real documentation for this script. Look at + * to get an idea on how to + * implement it. It's very easy. + * This has currently only been tested in Conkeror, IceCat (like + * Firefox) 3.67 and Chromium. +*/ + +/***************** + *** CHANGELOG *** + 0.1.1, September 25 2010 -- Now also works with images with absolute or + fixed positions. + + 0.1.0, August 5 2010 -- Initial release. +*****************/ + +createCode = function(dict) { + for (x in dict) { + try { + dict[x].prototype.objectParent = dict; + } catch (e) {}; + } + return dict; +}; + +var modernart = createCode({ + ModernArtRunner: function(imgElem, boxElems, lineElems, + colorFunction) { + this.imgElem = imgElem; + this.boxElems = boxElems; + this.lineElems = lineElems; + this.colorFunctions = this.objectParent.colorFunctions; + this.colorFunction = this.colorFunctions[colorFunction]; + this.parent = this.imgElem.parentNode; + this.timers = []; + + for (var i in this.boxElems) { + for (var j in this.boxElems[i]) { + this.boxElems[i][j].objectParent = this; + this.parent.appendChild(this.boxElems[i][j]); + } + } + for (var i in this.lineElems) + this.parent.appendChild(this.lineElems[i]); + + var self = this; + var timerPause = function() { + for (var i in self.timers) + self.timers[i].pause(); + }; + var timerResume = function() { + for (var i in self.timers) + self.timers[i].resume(); + }; + var timerToggle = function() { + for (var i in self.timers) + self.timers[i].toggle(); + }; + this.imgElem.pause = timerPause; + this.imgElem.resume = timerResume; + this.imgElem.toggle = timerToggle; + this.parent.pause = timerPause; + this.parent.resume = timerResume; + this.parent.toggle = timerToggle; + + if (this.objectParent.customFunction) + this.objectParent.customFunction(this); + + this.rgb = [0, 255, 0]; + this.colorFunction(); + }, + + Timer: function(func, delay) { + this.func = func; + this.delay = delay; + this.resume(); + }, + + colorFunctions: { + flow: function() { + var power = parseInt(this.imgElem.getSetting( + 'modernflowpower')) || 25; + var flowType = this.imgElem.getSetting( + 'modernflowtype') || 'stop'; + var flowIgnore = flowType == 'stop'; + var xPower = parseInt(power / this.boxElems[0].length); + var yPower = parseInt(power / this.boxElems.length); + var flowRun = function() { + var r = this.rgb[0]; + var g = this.rgb[1]; + var b = this.rgb[2]; + if (r < 255 && g <= 0 && b >= 255) + r += 10; + else if (r > 0 && g >= 255 && b <= 0) + r -= 10; + else if (r >= 255 && g < 255 && b <= 0) + g += 10; + else if (r <= 0 && g > 0 && b >= 255) + g -= 10; + else if (r <= 0 && g >= 255 & b < 255) + b += 10; + else if (r >= 255 && g <= 0 && b > 0) + b -= 10; + + this.rgb[0] = r; + this.rgb[1] = g; + this.rgb[2] = b; + + var tr, tg, tb; + for (var i in this.boxElems) { + for (var j in this.boxElems[i]) { + if (flowIgnore) { + if (r > 255) tr = 255; + else tr = r; + if (g > 255) tg = 255; + else tg = g; + if (b > 255) tb = 255; + else tb = b; + this.boxElems[i][j].style.setBackground( + tr, tg, tb); + } + else + this.boxElems[i][j].style.setBackground( + r % 256, g % 256, b % 256); + r += xPower; + g += xPower; + b += xPower; + } + r += yPower; + g += yPower; + b += yPower; + } + }; + var self = this; + this.timers.push(new this.objectParent.Timer( + function() {flowRun.apply(self);}, 100)); + }, + + individual: function() { + var IndividualBox = function(boxElem) { + this.elem = boxElem; + this.objectParent = this.elem.objectParent; + this.topParent = this.objectParent.objectParent; + this.rgb = [this.topParent.randInt(255), + this.topParent.randInt(255), + this.topParent.randInt(255)]; + this.way = [this.topParent.randInt(1) || -1, + this.topParent.randInt(1) || -1, + this.topParent.randInt(1) || -1]; + this.generateSpeed(); + var self = this; + this.objectParent.timers.push( + new this.topParent.Timer(function() {self.run()}, 100)); + }; + + IndividualBox.prototype.generateSpeed = function() { + this.spd = [this.topParent.randInt(5, 15), + this.topParent.randInt(5, 15), + this.topParent.randInt(5, 15)]; + }; + + IndividualBox.prototype.run = function() { + var rgb = this.rgb; + var i; + this.elem.style.setBackground(rgb[0], rgb[1], rgb[2]); + for (i = 0; i < 3; i++) { + rgb[i] += this.spd[i] * this.way[i]; + if (this.rgb[i] >= 255) { + rgb[i] = 255 - (this.spd[i] - (rgb[i] - 255)); + this.generateSpeed(); + this.way[i] *= -1; + } + else if (this.rgb[i] <= 0) { + rgb[i] = this.rgb[i] + this.spd[i]; + this.generateSpeed(); + this.way[i] *= -1; + } + } + for (i in rgb) + this.rgb[i] = rgb[i]; + }; + + for (var i in this.boxElems) { + for (var j in this.boxElems[i]) + new IndividualBox(this.boxElems[i][j]); + } + } + }, + + applyEffectToImages: function() { + var candidates = document.getElementsByTagName('img'); + for (var i = 0, node; node = candidates[i++];) { + if (node.className.indexOf('modernart') != -1) { + if (arguments.length > 0) + this.applyEffectToImage(node, arguments[0]); + else + this.applyEffectToImage(node); + } + } + }, + + applyEffectToImage: function(imgElem) { + var i, j; + var size = [imgElem.offsetWidth, imgElem.offsetHeight]; + var parent = imgElem.parentNode; + var colorFunction = imgElem.getSetting('moderncolor') || 'flow'; + var rectSize = parseInt(imgElem.getSetting('modernrect')) || 20; + var lineWidth = parseInt(imgElem.getSetting('modernline')); + if (isNaN(lineWidth)) + lineWidth = 5; + var opacity = parseFloat(imgElem.getSetting('modernopacity')) || 0.5; + var numbers = parseInt(imgElem.getSetting('modernnumbers')); + if (arguments.length > 1) + this.customFunction = arguments[1]; + else + this.customFunction = null; + + if (!numbers) { + numbers = []; + var f = rectSize + lineWidth; + for (i = 0; i < 2; i++) + numbers.push(parseInt((size[i] + lineWidth) / f)); + } + else { + var relativeTo = imgElem.getSetting( + 'modernnumbersrel') || 'x'; + if (relativeTo == 'x') { + numbers = [numbers, + parseInt(size[1] / (size[0] / numbers))]; + rectSize = ((size[0] + lineWidth) / + numbers[0] - lineWidth); + } + else { // y + numbers = [parseInt(size[0] / (size[1] / numbers)), + numbers]; + rectSize = ((size[1] + lineWidth) / + numbers[1] - lineWidth); + } + } + + if (lineWidth == 0) { + rectSize = []; + for (i = 0; i < 2; i++) + rectSize.push(size[i] / numbers[i]); + + lineWidth = [0, 0]; + } + else { + lineWidth = []; + for (i = 0; i < 2; i++) + lineWidth.push((size[i] - numbers[i] * rectSize) / + (numbers[i] - 1)); + + rectSize = [rectSize, rectSize]; + } + + var container = document.createElement('div'); + container.className = imgElem.className; + container.style.set('width', size[0] + 'px'); + container.style.set('height', size[1] + 'px'); + container.style.set('padding', '0'); + container.style.set('display', 'inline-block'); + container.style.set('float', 'none'); + found_pos = imgElem.style.getPropertyValue('position'); + container.style.set('position', imgElem.getSetting('modernposition') + || found_pos || 'relative'); + + try { + var property, value; + for (i in imgElem.style) { + property = imgElem.style[i]; + value = imgElem.style.getPropertyValue(property); + if (value) + container.style.set(property, value); + } + } catch (e) {}; + + imgElem.style.set('border', 'none'); + imgElem.style.set('margin', '0'); + imgElem.style.set('left', '0'); + imgElem.style.set('top', '0'); + imgElem.style.set('background-color', '#000'); + parent.insertBefore(container, imgElem); + parent.removeChild(imgElem); + container.appendChild(imgElem); + + var elemPos = [0, 0]; + var boxElems = []; + for (i = 0; i < numbers[1]; i++) { + boxes = []; + for (j = 0; j < numbers[0]; j++) { + elem = document.createElement('div'); + elem.style.set('width', rectSize[0] + 'px'); + elem.style.set('height', rectSize[1] + 'px'); + elem.style.set('background-color', 'transparent'); + elem.style.set('position', 'absolute'); + elem.style.set('left', elemPos[0] + 'px'); + elem.style.set('top', elemPos[1] + 'px'); + elem.style.set('margin', '0'); + elem.style.set('padding', '0'); + elem.style.set('border', 'none'); + elem.style.setOpacity(opacity); + boxes.push(elem); + elemPos[0] += rectSize[0] + lineWidth[0]; + } + boxElems.push(boxes); + elemPos[1] += rectSize[1] + lineWidth[1]; + elemPos[0] = 0; + } + + var lineElems = []; + if (lineWidth[0] > 0) { + var tempWidth, tempHeight, tempTop, tempLeft; + for (i = 0; i < 2; i++) { + elemPos = rectSize[i]; + if (i == 0) { + tempWidth = lineWidth[0]; + tempHeight = size[1]; + } + else { + tempWidth = size[0]; + tempHeight = lineWidth[1]; + } + for (j = 0; j < numbers[i] - 1; j++) { + if (i == 0) { + tempLeft = elemPos; + tempTop = 0; + } + else { + tempLeft = 0; + tempTop = elemPos; + } + elem = document.createElement('div'); + elem.style.set('width', tempWidth + 'px'); + elem.style.set('height', tempHeight + 'px'); + elem.style.set('background-color', '#000'); + elem.style.set('position', 'absolute'); + elem.style.set('left', tempLeft + 'px'); + elem.style.set('top', tempTop + 'px'); + elem.style.set('margin', '0'); + elem.style.set('padding', '0'); + elem.style.set('border', 'none'); + lineElems.push(elem); + elemPos += rectSize[i] + lineWidth[i]; + } + } + } + new this.ModernArtRunner(imgElem, boxElems, lineElems, colorFunction); + }, + + randInt: function() { // function([min, ]max) + if (arguments.length == 0) + return 0; + var min, max; + if (arguments.length > 1) { + min = arguments[0]; + max = arguments[1]; + } + else { + min = 0; + max = arguments[0]; + } + return Math.floor(Math.random() * (max + 1)) + min; + } +}); +delete createCode; + +modernart.Timer.prototype.resume = function() { + this.interval = setInterval(this.func, this.delay); + this.running = true; +}; + +modernart.Timer.prototype.pause = function() { + clearInterval(this.interval); + delete this.interval; + this.running = false; +}; + +modernart.Timer.prototype.toggle = function() { + if (this.running) + this.pause(); + else + this.resume(); +}; + +HTMLElement.prototype.getSetting = function(property) { + var string = this.className; + var start, end; + start = string.indexOf(property + ':'); + + if (start != -1) { + end = string.indexOf(' ', start); + if (end == -1) + return string.substring(start + property.length + 1); + else + return string.substring(start + property.length + 1, end); + } +}; + +CSSStyleDeclaration.prototype.set = function(property, value) { + this.setProperty(property, value, null); +}; + +CSSStyleDeclaration.prototype.setOpacity = function(val) { + this.set('opacity', val); + this.set('-moz-opacity', val); + this.set('-khtml-opacity', val); + this.filter = 'alpha(opacity=' + val*100 + ')'; +}; + +CSSStyleDeclaration.prototype.setBackground = function(r, g, b) { + this.set('background-color', 'rgb('+r+', '+g+', '+b+')'); +}; diff --git a/subsites/nohix/videocanvas1.htm b/subsites/nohix/videocanvas1.htm new file mode 100644 index 0000000..3eb7749 --- /dev/null +++ b/subsites/nohix/videocanvas1.htm @@ -0,0 +1,39 @@ + + + + Fun with <video> and <canvas> {Flicker} + + + + + +
+
+
+ +
+
+
+

Video clip © copyright Blender Foundation | www.bigbuckbunny.org

+

Licensed under the Creative Commons Attribution 3.0 license

+
+

Code and XHTML partly taken from an example from mozbox.

+
+
+ + + + diff --git a/subsites/nohix/videocanvas1.js b/subsites/nohix/videocanvas1.js new file mode 100644 index 0000000..c4f6aea --- /dev/null +++ b/subsites/nohix/videocanvas1.js @@ -0,0 +1,74 @@ +// Code layout taken from http://www.mozbox.org/pub/green/main.js + +var processor = { + doLoad: function() { + this.video = document.getElementById("video"); + + this.c1 = document.createElement("canvas"); + this.c1.width = "160" + this.c1.height = "96" + this.ctx1 = this.c1.getContext("2d"); + + this.c2 = document.getElementById("c2"); + this.ctx2 = this.c2.getContext("2d"); + + var self = this; + this.video.addEventListener("play", function() { + self.width = self.video.videoWidth / 2; + self.height = self.video.videoHeight / 2; + self.len = self.width * self.height; + + self.video.addEventListener('timeupdate', function(event) { + self.computeFrame() + }, true); + }, false); + }, + + computeFrame: function() { + var frame, data, i, offset, rgba, mod + + this.ctx1.drawImage(this.video, 0, 0, this.width, this.height); + frame = this.ctx1.getImageData(0, 0, this.width, this.height); + data = frame.data; + ndata = [] + + for (i = 0; i < this.len; i++) { + ndata.push(0); + ndata.push(0); + ndata.push(0); + ndata.push(255); + } + + offset = Math.floor(Math.random()*10) + 5 + + for (i = 0; i < this.len; i++) { + rgba = data.getPixel(i); + mod = i % this.width; + + ndata.setPixel(i, 1, rgba[1]); + + if (mod + offset < this.width) + ndata.setPixel(i + offset, 0, rgba[0]); + if (mod - offset > 0) + ndata.setPixel(i - offset, 2, rgba[2]); + + } + + frame.data = ndata + this.ctx2.putImageData(frame, 0, 0); + return; + } +}; + +Array.prototype.getPixel = function(number) { + var real = number * 4; + return this.slice(real, real + 4); +}; + +Array.prototype.setPixel = function(number, rgba, val) { + var real = number * 4 + rgba; + if (number < 0 || real > this.length) + return; + this[real] = val; +}; + diff --git a/subsites/nohix/videocanvas2.htm b/subsites/nohix/videocanvas2.htm new file mode 100644 index 0000000..db96030 --- /dev/null +++ b/subsites/nohix/videocanvas2.htm @@ -0,0 +1,39 @@ + + + + Fun with <video> and <canvas> {Black and white lightning} + + + + + +
+
+
+ +
+
+
+

Video clip © copyright Blender Foundation | www.bigbuckbunny.org

+

Licensed under the Creative Commons Attribution 3.0 license

+
+

Code and XHTML partly taken from an example from mozbox.

+
+
+ + + + diff --git a/subsites/nohix/videocanvas2.js b/subsites/nohix/videocanvas2.js new file mode 100644 index 0000000..c78f35f --- /dev/null +++ b/subsites/nohix/videocanvas2.js @@ -0,0 +1,59 @@ +// Code layout taken from http://www.mozbox.org/pub/green/main.js + +var processor = { + doLoad: function() { + this.video = document.getElementById("video"); + + this.c1 = document.createElement("canvas"); + this.c1.width = "160" + this.c1.height = "96" + this.ctx1 = this.c1.getContext("2d"); + + this.c2 = document.getElementById("c2"); + this.ctx2 = this.c2.getContext("2d"); + + var self = this; + this.video.addEventListener("play", function() { + self.width = self.video.videoWidth / 2; + self.height = self.video.videoHeight / 2; + self.len = self.width * self.height; + + self.video.addEventListener('timeupdate', function(event) { + self.computeFrame() + }, true); + }, false); + }, + + computeFrame: function() { + var frame, data, i, num, rgba + + this.ctx1.drawImage(this.video, 0, 0, this.width, this.height); + frame = this.ctx1.getImageData(0, 0, this.width, this.height); + data = frame.data; + + num = Math.floor(Math.random()*3) + + for (i = 0; i < this.len; i++) { + rgba = data.getPixel(i); + + data.setPixel(i, 0, rgba[num]); + data.setPixel(i, 1, rgba[num]); + data.setPixel(i, 2, rgba[num]); + } + this.ctx2.putImageData(frame, 0, 0); + return; + } +}; + +Array.prototype.getPixel = function(number) { + var real = number * 4; + return this.slice(real, real + 4); +}; + +Array.prototype.setPixel = function(number, rgba, val) { + var real = number * 4 + rgba; + if (number < 0 || real > this.length) + return; + this[real] = val; +}; + diff --git a/subsites/nohix/videocanvas3.htm b/subsites/nohix/videocanvas3.htm new file mode 100644 index 0000000..64b66bd --- /dev/null +++ b/subsites/nohix/videocanvas3.htm @@ -0,0 +1,39 @@ + + + + Fun with <video> and <canvas> {Color uncertainty} + + + + + +
+
+
+ +
+
+
+

Video clip © copyright Blender Foundation | www.bigbuckbunny.org

+

Licensed under the Creative Commons Attribution 3.0 license

+
+

Code and XHTML partly taken from an example from mozbox.

+
+
+ + + + diff --git a/subsites/nohix/videocanvas3.js b/subsites/nohix/videocanvas3.js new file mode 100644 index 0000000..7925def --- /dev/null +++ b/subsites/nohix/videocanvas3.js @@ -0,0 +1,57 @@ +// Code layout taken from http://www.mozbox.org/pub/green/main.js + +var processor = { + doLoad: function() { + this.video = document.getElementById("video"); + + this.c1 = document.createElement("canvas"); + this.c1.width = "160" + this.c1.height = "96" + this.ctx1 = this.c1.getContext("2d"); + + this.c2 = document.getElementById("c2"); + this.ctx2 = this.c2.getContext("2d"); + + var self = this; + this.video.addEventListener("play", function() { + self.width = self.video.videoWidth / 2; + self.height = self.video.videoHeight / 2; + self.len = self.width * self.height; + + self.video.addEventListener('timeupdate', function(event) { + self.computeFrame() + }, true); + }, false); + }, + + computeFrame: function() { + var frame, data, i, j, rgba + + this.ctx1.drawImage(this.video, 0, 0, this.width, this.height); + frame = this.ctx1.getImageData(0, 0, this.width, this.height); + data = frame.data; + + for (i = 0; i < this.len; i++) { + rgba = data.getPixel(i); + + for (j = 0; j < 3; j++) { + data.setPixel(i, j, rgba[Math.floor(Math.random()*3)]); + } + } + this.ctx2.putImageData(frame, 0, 0); + return; + } +}; + +Array.prototype.getPixel = function(number) { + var real = number * 4; + return this.slice(real, real + 4); +}; + +Array.prototype.setPixel = function(number, rgba, val) { + var real = number * 4 + rgba; + if (number < 0 || real > this.length) + return; + this[real] = val; +}; + diff --git a/subsites/nohix/wmap.svg b/subsites/nohix/wmap.svg new file mode 100644 index 0000000..f3460ca --- /dev/null +++ b/subsites/nohix/wmap.svg @@ -0,0 +1,556 @@ + + +image/svg+xmlWorld mapNqpZ2010-11-28e + + + + + + + + + + + + + +Hover over a country to see its name + + +Scroll to zoom. Click and drag to move. Double click to go to Wikipedia. + + \ No newline at end of file diff --git a/subsites/nohix/worldmap.html b/subsites/nohix/worldmap.html new file mode 100644 index 0000000..10346e6 --- /dev/null +++ b/subsites/nohix/worldmap.html @@ -0,0 +1,23 @@ + + + + Graphics {Interactive SVG World map} + + + +

World map

+

I have created an interactive world map in SVG. Check it + out here. It is based + on http://commons.wikimedia.org/wiki/File:World_location_map_English.svg.

+

Screenshot (for non-svg browsers)

+

Screenshot

+ + + + + diff --git a/subsites/oldsites-apache b/subsites/oldsites-apache new file mode 100644 index 0000000..5c8abb5 --- /dev/null +++ b/subsites/oldsites-apache @@ -0,0 +1,43 @@ + + ServerName old.projects.lcl + ServerAlias old.projects.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/subsites/oldsites + + Options FollowSymLinks + AllowOverride None + + + Options Indexes Includes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/subsites/oldsites/.htaccess b/subsites/oldsites/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/subsites/oldsites/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/subsites/oldsites/index.php b/subsites/oldsites/index.php new file mode 100644 index 0000000..2909891 --- /dev/null +++ b/subsites/oldsites/index.php @@ -0,0 +1,3 @@ + diff --git a/subsites/pictures-apache b/subsites/pictures-apache new file mode 100644 index 0000000..49d0d51 --- /dev/null +++ b/subsites/pictures-apache @@ -0,0 +1,43 @@ + + ServerName pictures.lcl + ServerAlias pictures.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/subsites/pictures + + Options FollowSymLinks + AllowOverride None + + + Options Indexes Includes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/subsites/pictures/.gitignore b/subsites/pictures/.gitignore new file mode 100644 index 0000000..d3984ca --- /dev/null +++ b/subsites/pictures/.gitignore @@ -0,0 +1 @@ +img/ \ No newline at end of file diff --git a/subsites/pictures/.htaccess b/subsites/pictures/.htaccess new file mode 100755 index 0000000..0723dda --- /dev/null +++ b/subsites/pictures/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /show.php diff --git a/subsites/pictures/about b/subsites/pictures/about new file mode 100755 index 0000000..5df4d70 --- /dev/null +++ b/subsites/pictures/about @@ -0,0 +1,5 @@ + ...--' About '--... + +I choose a copyleft license when I want to protect a picture from being +abused by people who do not want to allow sharing and editing. When a +picture isn't worth protecting, I just throw it in the public domain. diff --git a/subsites/pictures/edit/edit.php b/subsites/pictures/edit/edit.php new file mode 100755 index 0000000..b81062d --- /dev/null +++ b/subsites/pictures/edit/edit.php @@ -0,0 +1,26 @@ + diff --git a/subsites/pictures/edit/index.php b/subsites/pictures/edit/index.php new file mode 100755 index 0000000..6c1f53f --- /dev/null +++ b/subsites/pictures/edit/index.php @@ -0,0 +1,30 @@ + + + + + + + Edit info text + + + +
+ +

+

+

+
+ + + + diff --git a/subsites/pictures/edit/php_errorlog b/subsites/pictures/edit/php_errorlog new file mode 100755 index 0000000..9b9486d --- /dev/null +++ b/subsites/pictures/edit/php_errorlog @@ -0,0 +1,3 @@ +[19-Oct-2009 05:02:21] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/metanohi/public_html/pictures/edit/edit.php on line 19 +[19-Oct-2009 05:04:08] PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/metanohi/public_html/pictures/edit/edit.php on line 20 +[19-Oct-2009 05:33:58] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/metanohi/public_html/pictures/edit/edit.php on line 18 diff --git a/subsites/pictures/get_info.php b/subsites/pictures/get_info.php new file mode 100755 index 0000000..6974d2c --- /dev/null +++ b/subsites/pictures/get_info.php @@ -0,0 +1,13 @@ +/', '/[(.*)]/'), array("<$1>", "[$1]"), $txt); + //$txt = preg_replace('/<(.*)>/', "<$1>", $txt); + //$txt = preg_replace('/\[(.*)\]/', "[$1]", $txt); + return preg_replace(array('/<(.*)>/', '/\[([^]]*)\]/'), array("<$1>", "[$1]"), $txt); + return $txt; +} +?> diff --git a/subsites/pictures/index.php b/subsites/pictures/index.php new file mode 100755 index 0000000..76333af --- /dev/null +++ b/subsites/pictures/index.php @@ -0,0 +1,26 @@ + + + + + + + + Pictures + + + + +

Pictures

$x

\n"; +} +?> + + diff --git a/subsites/pictures/info/Akiba_squirrel.jpg.info b/subsites/pictures/info/Akiba_squirrel.jpg.info new file mode 100755 index 0000000..4377ff8 --- /dev/null +++ b/subsites/pictures/info/Akiba_squirrel.jpg.info @@ -0,0 +1,6 @@ +This picture is released under the Creative Commons Attribution-ShareAlike 3.0 +Unported license. The author is Niels Serup, and it's based on the pictures +found at and at +, +both also released under CC BY-SA 3.0. +See also [Akiba_squirrel.xcf] and [ssq.png]. diff --git a/subsites/pictures/info/Akiba_squirrel.xcf.info b/subsites/pictures/info/Akiba_squirrel.xcf.info new file mode 100755 index 0000000..0c45b7c --- /dev/null +++ b/subsites/pictures/info/Akiba_squirrel.xcf.info @@ -0,0 +1,7 @@ +This picture is released under the Creative Commons Attribution-ShareAlike 3.0 +Unported license. The author is Niels Serup, and it's based on the pictures +found at and at +, +both also released under CC BY-SA 3.0. +This file can be opened in GIMP. +See also [Akiba_squirrel.jpg] and [ssq.png]. diff --git a/subsites/pictures/info/Gnou_Thoiry_19803_modbw4.png.info b/subsites/pictures/info/Gnou_Thoiry_19803_modbw4.png.info new file mode 100644 index 0000000..1f87cc6 --- /dev/null +++ b/subsites/pictures/info/Gnou_Thoiry_19803_modbw4.png.info @@ -0,0 +1,4 @@ +Based on in PD. +This also in the public domain. + +See also [Gnou_Thoiry_19803_modwb4.png] \ No newline at end of file diff --git a/subsites/pictures/info/Gnou_Thoiry_19803_modwb4.png.info b/subsites/pictures/info/Gnou_Thoiry_19803_modwb4.png.info new file mode 100644 index 0000000..bd68301 --- /dev/null +++ b/subsites/pictures/info/Gnou_Thoiry_19803_modwb4.png.info @@ -0,0 +1,4 @@ +Based on in PD. +This also in the public domain. + +See also [Gnou_Thoiry_19803_modbw4.png] \ No newline at end of file diff --git a/subsites/pictures/info/bloklys.png.info b/subsites/pictures/info/bloklys.png.info new file mode 100755 index 0000000..43de800 --- /dev/null +++ b/subsites/pictures/info/bloklys.png.info @@ -0,0 +1 @@ +It's a candle in the public domain. \ No newline at end of file diff --git a/subsites/pictures/info/catcool.jpg.info b/subsites/pictures/info/catcool.jpg.info new file mode 100644 index 0000000..1d96988 --- /dev/null +++ b/subsites/pictures/info/catcool.jpg.info @@ -0,0 +1,3 @@ +cc-by-sa Niels Serup + +[catcool.xcf] \ No newline at end of file diff --git a/subsites/pictures/info/catcool.xcf.info b/subsites/pictures/info/catcool.xcf.info new file mode 100644 index 0000000..92cc887 --- /dev/null +++ b/subsites/pictures/info/catcool.xcf.info @@ -0,0 +1,3 @@ +CC BY-SA 3.0. + +Also see [catcool.jpg]. \ No newline at end of file diff --git a/subsites/pictures/info/coolcircle.png.info b/subsites/pictures/info/coolcircle.png.info new file mode 100755 index 0000000..7eba5ba --- /dev/null +++ b/subsites/pictures/info/coolcircle.png.info @@ -0,0 +1 @@ +GIMP. Public domain. See also [coolcircle.xcf]. \ No newline at end of file diff --git a/subsites/pictures/info/coolcircle.xcf.info b/subsites/pictures/info/coolcircle.xcf.info new file mode 100755 index 0000000..0c83e3f --- /dev/null +++ b/subsites/pictures/info/coolcircle.xcf.info @@ -0,0 +1 @@ +GIMP. Public domain. See also [coolcircle.png]. \ No newline at end of file diff --git a/subsites/pictures/info/deadinsect-wshd-red.jpg.info b/subsites/pictures/info/deadinsect-wshd-red.jpg.info new file mode 100755 index 0000000..5a0d202 --- /dev/null +++ b/subsites/pictures/info/deadinsect-wshd-red.jpg.info @@ -0,0 +1,3 @@ +It wasn't me! +CC-BY-SA 3.0 +[deadinsect-wshd.jpg] \ No newline at end of file diff --git a/subsites/pictures/info/deadinsect-wshd.jpg.info b/subsites/pictures/info/deadinsect-wshd.jpg.info new file mode 100755 index 0000000..05aec5f --- /dev/null +++ b/subsites/pictures/info/deadinsect-wshd.jpg.info @@ -0,0 +1,3 @@ +I honestly didn't kill it. +CC-BY-SA 3.0 +[deadinsect-wshd-red.jpg] \ No newline at end of file diff --git a/subsites/pictures/info/end.png.info b/subsites/pictures/info/end.png.info new file mode 100755 index 0000000..b7a2cbc --- /dev/null +++ b/subsites/pictures/info/end.png.info @@ -0,0 +1,3 @@ +Or is it? + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/foot-base.png.info b/subsites/pictures/info/foot-base.png.info new file mode 100755 index 0000000..005859d --- /dev/null +++ b/subsites/pictures/info/foot-base.png.info @@ -0,0 +1,3 @@ +It's a foot. +CC-BY-SA 3.0 +Also check out [foot-neon.png] and [foot-morbid.png]. \ No newline at end of file diff --git a/subsites/pictures/info/foot-morbid.png.info b/subsites/pictures/info/foot-morbid.png.info new file mode 100755 index 0000000..50932bd --- /dev/null +++ b/subsites/pictures/info/foot-morbid.png.info @@ -0,0 +1,3 @@ +It's a foot. +CC-BY-SA 3.0 +Also check out [foot-base.png] and [foot-neon.png]. \ No newline at end of file diff --git a/subsites/pictures/info/foot-neon.png.info b/subsites/pictures/info/foot-neon.png.info new file mode 100755 index 0000000..e4f800a --- /dev/null +++ b/subsites/pictures/info/foot-neon.png.info @@ -0,0 +1,3 @@ +It's a foot. +CC-BY-SA 3.0 +Also check out [foot-base.png] and [foot-morbid.png]. \ No newline at end of file diff --git a/subsites/pictures/info/laseronwall.png.info b/subsites/pictures/info/laseronwall.png.info new file mode 100644 index 0000000..4ddfe2e --- /dev/null +++ b/subsites/pictures/info/laseronwall.png.info @@ -0,0 +1 @@ +public domain \ No newline at end of file diff --git a/subsites/pictures/info/laseronwall2.png.info b/subsites/pictures/info/laseronwall2.png.info new file mode 100644 index 0000000..4ddfe2e --- /dev/null +++ b/subsites/pictures/info/laseronwall2.png.info @@ -0,0 +1 @@ +public domain \ No newline at end of file diff --git a/subsites/pictures/info/ldit.png.info b/subsites/pictures/info/ldit.png.info new file mode 100755 index 0000000..13de69f --- /dev/null +++ b/subsites/pictures/info/ldit.png.info @@ -0,0 +1 @@ +It's just a couple 'o warm 'n fuzzy colors. Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/me1.jpg.info b/subsites/pictures/info/me1.jpg.info new file mode 100644 index 0000000..8a5dab5 --- /dev/null +++ b/subsites/pictures/info/me1.jpg.info @@ -0,0 +1,6 @@ +A picture of me sitting in a chair reading about something on Wikipedia (I think) + +This picture is released under the Creative Commons Attribution-ShareAlike 3.0 +Unported license. The author is Niels Serup. + +I didn't take this picture (my parents did), but they have transferred their copyright to me. \ No newline at end of file diff --git a/subsites/pictures/info/skelhand.png.info b/subsites/pictures/info/skelhand.png.info new file mode 100755 index 0000000..51b6a79 --- /dev/null +++ b/subsites/pictures/info/skelhand.png.info @@ -0,0 +1,3 @@ +Watch out! +CC-BY-SA 3.0 +[skelhand.xcf] \ No newline at end of file diff --git a/subsites/pictures/info/skelhand.xcf.info b/subsites/pictures/info/skelhand.xcf.info new file mode 100755 index 0000000..cee6a13 --- /dev/null +++ b/subsites/pictures/info/skelhand.xcf.info @@ -0,0 +1 @@ +GIMP-specific. See [skelhand.png]. \ No newline at end of file diff --git a/subsites/pictures/info/snegle.png.info b/subsites/pictures/info/snegle.png.info new file mode 100644 index 0000000..6493f65 --- /dev/null +++ b/subsites/pictures/info/snegle.png.info @@ -0,0 +1,5 @@ +Scary! + +CC BY-SA 3.0 Unported + +[snegle.xcf] \ No newline at end of file diff --git a/subsites/pictures/info/snegle.xcf.info b/subsites/pictures/info/snegle.xcf.info new file mode 100644 index 0000000..a5ad5de --- /dev/null +++ b/subsites/pictures/info/snegle.xcf.info @@ -0,0 +1,5 @@ +U-U-h + +CC BY-SA 3.0 Unported + +[snegle.png] \ No newline at end of file diff --git a/subsites/pictures/info/sq.png.info b/subsites/pictures/info/sq.png.info new file mode 100644 index 0000000..8c35369 --- /dev/null +++ b/subsites/pictures/info/sq.png.info @@ -0,0 +1 @@ +WTFPL 2.0 \ No newline at end of file diff --git a/subsites/pictures/info/sqrt-n.png.info b/subsites/pictures/info/sqrt-n.png.info new file mode 100644 index 0000000..31b4a38 --- /dev/null +++ b/subsites/pictures/info/sqrt-n.png.info @@ -0,0 +1 @@ +=? \ No newline at end of file diff --git a/subsites/pictures/info/ssq.png.info b/subsites/pictures/info/ssq.png.info new file mode 100755 index 0000000..a6e081b --- /dev/null +++ b/subsites/pictures/info/ssq.png.info @@ -0,0 +1,6 @@ +This picture is released under the Creative Commons Attribution-ShareAlike 3.0 +Unported license. The author is Niels Serup, and it's based on the picture +found at +, +also released under CC BY-SA 3.0. +See also [Akiba_squirrel.xcf] and [Akiba_squirrel.jpg]. diff --git a/subsites/pictures/info/stam.png.info b/subsites/pictures/info/stam.png.info new file mode 100644 index 0000000..68237f6 --- /dev/null +++ b/subsites/pictures/info/stam.png.info @@ -0,0 +1,7 @@ +Stamtræ for Knud Romers "Papa Schneider blinzelt nicht!" + +^^^^^^^^^ +in Danish + +-------------------- +cc-by-sa Niels Serup \ No newline at end of file diff --git a/subsites/pictures/info/tube0.png.info b/subsites/pictures/info/tube0.png.info new file mode 100644 index 0000000..04a8583 --- /dev/null +++ b/subsites/pictures/info/tube0.png.info @@ -0,0 +1,3 @@ +See also [tube1.png], [tube2.png], [tube3.png] and [tube3m.png]. + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/tube1.png.info b/subsites/pictures/info/tube1.png.info new file mode 100644 index 0000000..c712814 --- /dev/null +++ b/subsites/pictures/info/tube1.png.info @@ -0,0 +1,3 @@ +See also [tube0.png], [tube2.png], [tube3.png] and [tube3m.png]. + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/tube2.png.info b/subsites/pictures/info/tube2.png.info new file mode 100644 index 0000000..1e1398c --- /dev/null +++ b/subsites/pictures/info/tube2.png.info @@ -0,0 +1,3 @@ +See also [tube0.png], [tube1.png], [tube3.png] and [tube3m.png]. + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/tube3.png.info b/subsites/pictures/info/tube3.png.info new file mode 100644 index 0000000..439813d --- /dev/null +++ b/subsites/pictures/info/tube3.png.info @@ -0,0 +1,3 @@ +See also [tube0.png], [tube1.png], [tube2.png] and [tube3m.png]. + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/tube3m.png.info b/subsites/pictures/info/tube3m.png.info new file mode 100644 index 0000000..cc36aa1 --- /dev/null +++ b/subsites/pictures/info/tube3m.png.info @@ -0,0 +1,3 @@ +See also [tube0.png], [tube1.png], [tube2.png] and [tube3.png]. + +Public domain. \ No newline at end of file diff --git a/subsites/pictures/info/vortex.png.info b/subsites/pictures/info/vortex.png.info new file mode 100755 index 0000000..1f257e0 --- /dev/null +++ b/subsites/pictures/info/vortex.png.info @@ -0,0 +1,2 @@ +It's just a vortex. Public domain. +[vortex.xcf] \ No newline at end of file diff --git a/subsites/pictures/info/vortex.xcf.info b/subsites/pictures/info/vortex.xcf.info new file mode 100755 index 0000000..3c6f8ab --- /dev/null +++ b/subsites/pictures/info/vortex.xcf.info @@ -0,0 +1 @@ +See [vortex.png]. \ No newline at end of file diff --git a/subsites/pictures/info/xcf.png.info b/subsites/pictures/info/xcf.png.info new file mode 100755 index 0000000..b3fbf44 --- /dev/null +++ b/subsites/pictures/info/xcf.png.info @@ -0,0 +1 @@ +Eh.. \ No newline at end of file diff --git a/subsites/pictures/saved_crypt_pass.php b/subsites/pictures/saved_crypt_pass.php new file mode 100755 index 0000000..0945be7 --- /dev/null +++ b/subsites/pictures/saved_crypt_pass.php @@ -0,0 +1,3 @@ + diff --git a/subsites/pictures/show.php b/subsites/pictures/show.php new file mode 100755 index 0000000..4eafa30 --- /dev/null +++ b/subsites/pictures/show.php @@ -0,0 +1,37 @@ + + + + + + + + <?php echo $img; ?> + + + +Index +

+

<?php echo $img; ?>

+

Information

+
+
+
+Edit + + diff --git a/subsites/pictures/upload/index.php b/subsites/pictures/upload/index.php new file mode 100755 index 0000000..02260c4 --- /dev/null +++ b/subsites/pictures/upload/index.php @@ -0,0 +1,22 @@ + + + + + + + Upload picture + + + +
+

+

+

+

+
+ + + + diff --git a/subsites/pictures/upload/upload.php b/subsites/pictures/upload/upload.php new file mode 100755 index 0000000..e87e57b --- /dev/null +++ b/subsites/pictures/upload/upload.php @@ -0,0 +1,42 @@ +$filename' uploaded"; + if (!(file_exists($info_path) && $info == '')) { + $info = str_replace('\\\'', '\'', str_replace('\"', "\"", $info)); + // Info file + $f = fopen($info_path, 'w'); + fwrite($f, $info); + fclose($f); + } + } + else + $msg = "Upload error"; +} +?> + + + Uploader + + +

+New + + + diff --git a/subsites/projects-apache b/subsites/projects-apache new file mode 100644 index 0000000..2391de2 --- /dev/null +++ b/subsites/projects-apache @@ -0,0 +1,43 @@ + + ServerName projects.lcl + ServerAlias projects.lcl + ServerAdmin ns@metanohi.org + + DocumentRoot /home/niels/www/meta/subsites/projects + + Options FollowSymLinks + AllowOverride None + + + Options Indexes Includes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/subsites/projects/.htaccess b/subsites/projects/.htaccess new file mode 100644 index 0000000..a83a189 --- /dev/null +++ b/subsites/projects/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /index.php diff --git a/subsites/projects/algo/.gitignore b/subsites/projects/algo/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/algo/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/algo/COPYING b/subsites/projects/algo/COPYING new file mode 100644 index 0000000..57f721d --- /dev/null +++ b/subsites/projects/algo/COPYING @@ -0,0 +1,681 @@ +Most of the images on Algo are released under the Creative Commons +Attribution-ShareAlike license with Niels Serup being the author. +When this is not the case, a text file with .txt will +state the license. + +The source code of Algo is released under the GPLv3 (see below). + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/subsites/projects/algo/algo_v.0.1.7z b/subsites/projects/algo/algo_v.0.1.7z new file mode 100644 index 0000000..d0b8345 Binary files /dev/null and b/subsites/projects/algo/algo_v.0.1.7z differ diff --git a/subsites/projects/algo/algo_v.0.1.zip b/subsites/projects/algo/algo_v.0.1.zip new file mode 100644 index 0000000..163373f Binary files /dev/null and b/subsites/projects/algo/algo_v.0.1.zip differ diff --git a/subsites/projects/algo/dir.txt b/subsites/projects/algo/dir.txt new file mode 100644 index 0000000..350720a --- /dev/null +++ b/subsites/projects/algo/dir.txt @@ -0,0 +1 @@ +This directory holds the main HTML file and the main CSS file. \ No newline at end of file diff --git a/subsites/projects/algo/environment.css b/subsites/projects/algo/environment.css new file mode 100644 index 0000000..7df3b52 --- /dev/null +++ b/subsites/projects/algo/environment.css @@ -0,0 +1,244 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* Standard stuff + This file holds all standard css stuff that must not + (and cannot) be changed in any css theme file. */ + +* { + margin: 0; + padding: 0; + font-size: 12px; + font-family: 'dejavu sans' arial; +} + +body { + overflow: hidden; +} + +/* Navigation bar (normally there are two navigation bars - + one at the top of the page and one at the bottom of the page). */ +.navbar { + position: absolute; + z-index: 100; + width: 100%; +} + +/* Dropdowns */ +.dropdown { + display: block; + float: left; + position: relative; +} + +.dropdown * { + display: none; + position: relative; +} + +.dropdown .top { + display: block; +} + +.dropdown .group { + position: relative; +} + +.dropdown .entries { + position: absolute; +} + +.dropdown .entry, .dropdown .header { + overflow: hidden; +} + +.dropdown .side { + position: absolute; +} + +.dropdown:hover * { + display: block; +} + +.dropdown:hover .top { + position: relative; +} + +.dropdown:hover .entries { + display: none; +} + +.dropdown .group:hover > .entries { + display: block; +} + +/* When an entry in a dropdown list is clicked, the .dropdown class receives + another class: the .dropdownh class. This takes care of hiding the box. */ +.dropdownh *, .dropdownh:hover * { + display: none; +} + + +/* Area - the area where the windows are */ +.area { + position: absolute; + overflow: hidden; +} + +/* Windows */ +.window { + position: absolute; +} + +.window > * { + position: absolute; + top: 0; + left: 0; +} + +/* The handle is there, but it's transparent */ +.window > .handle { + background: #000; + filter: alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; +} + +/* The following stuff features the divs around the window. */ +.window > .tl { + cursor: nw-resize; +} + +.window > .tr { + cursor: ne-resize; +} + +.window > .r { + cursor: e-resize; +} + +.window > .br { + cursor: se-resize; +} + +.window > .b { + cursor: s-resize; +} + +.window > .bl { + cursor: sw-resize; +} + +.window > .l { + cursor: w-resize; +} + +/* The .t class (the top, or header, of the window) is only for showing + a background image (read: css theme files). The .resize_handle acts as + the top resizer. */ +.window > .resize_handle { + cursor: n-resize; +} + +.window > .title { + overflow: hidden; + white-space: nowrap; +} + +/* .data is the object/iframe */ +.window > .data { + overflow: auto; +} + +/* .data_overlay is showed whenever moving or adjusting a window. + If it is not on, the object/iframe might catch focus of the mouse */ +.window > .data_overlay { + display: none; + background: #000; + filter: alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; +} + +/* .options is the div that holds the minimize, maximize and close button */ +.window > .options > *, .window_max > .options > * { + position: absolute; + height: 100%; +} + +/* When a window is maximized, it receives a new class - the .window_max class + Resize cursors must not be visible when in maximized mode */ +.window_max > .tl, .window_max > .resize_handle, .window_max > .tr, .window_max > .r, .window_max > .br, .window_max > .b, .window_max > .bl, .window_max > .l, .nrsz > .tl, .nrsz > .resize_handle, .nrsz > .tr, .nrsz > .r, .nrsz > .br, .nrsz > .b, .nrsz > .bl, .nrsz > .l { + cursor: default; +} + +/* .overlay is the general overlay that is displayed (yes, it's transparent) + whenever moving or adjusting a window. Same reasons as .data_overlay */ +.overlay { + display: none; + position: absolute; + width: 100%; + height: 100%; + background: #000; + filter: alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; +} + +/* .appboxes holds information about the text boxes, + normally placed in the bottom navigation bar, + that show which windows are open */ +.appboxes * { + white-space: nowrap; + overflow: hidden; +} + +/* .abs is shown when there is not enough space for all appboxes on one line. + .scrollup and .scrolldown are the buttons used for scrolling. */ +.abs { + position: absolute; + top: 0; + right: 0; + height: 100%; + display: none; +} + +.scrollup { + width: 100%; + height: 50%; + position: absolute; +} + +.scrolldown { + width: 100%; + height: 50%; + position: absolute; + top: 50%; +} + + +/* .highlightfix is a fix needed (at least in Firefox). + When moving or adjusting a window, some text will + automatically turn highlighted. This fix fixes that. */ +.highlightfix { + position: absolute; + width: 1px; + height: 1px; +} \ No newline at end of file diff --git a/subsites/projects/algo/img/dir.txt b/subsites/projects/algo/img/dir.txt new file mode 100644 index 0000000..b6d8e9d --- /dev/null +++ b/subsites/projects/algo/img/dir.txt @@ -0,0 +1 @@ +This folder holds images indepent of themes. \ No newline at end of file diff --git a/subsites/projects/algo/index.htm b/subsites/projects/algo/index.htm new file mode 100644 index 0000000..586f5fd --- /dev/null +++ b/subsites/projects/algo/index.htm @@ -0,0 +1,15 @@ + + + + + Algo + + + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/algo/js/dir.txt b/subsites/projects/algo/js/dir.txt new file mode 100644 index 0000000..cd8d8ce --- /dev/null +++ b/subsites/projects/algo/js/dir.txt @@ -0,0 +1,11 @@ +This folder holds the JavaScript files used by Algohol. For an understanding of how the JavaScript environment of Algohol works, it's a good idea to read the files in the following order: + +1. navbar.js +2. screen.js +3. scr_window.js +4. themes.js +5. onload.js + +The 5 files are all commented. + +The httpobj.js file found in this directory does not have anything to do with the environment directly, but it's still pretty important. Algohol needs it. The httpobj.js file is not commented. \ No newline at end of file diff --git a/subsites/projects/algo/js/httpobj.js b/subsites/projects/algo/js/httpobj.js new file mode 100644 index 0000000..2ee889d --- /dev/null +++ b/subsites/projects/algo/js/httpobj.js @@ -0,0 +1,106 @@ +/* + This program is free software. It comes without any warranty, to + the extent permitted by applicable law. You can redistribute it + and/or modify it under the terms of the Do What The Fuck You Want + To Public License, Version 2, as published by Sam Hocevar. See + http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +/* + httpobj: javascript class using XMLHttpRequest to send and retrieve info. + See /httpobj to get an example of the usage. +*/ +//v.1.0 +function httpobj() { + // Get XMLHttpRequest object + this.obj = this.getobj() + if (!this.obj) { + alert('Your browser does not support HTTP Requests! Get a new one (a browser, that is. Not a request).') + delete this + return false + } + + // Define default variables + this.param = {} + this.method = 'POST' + + // Fix for later on + this.obj.topelem = this +} + +httpobj.prototype.getobj = function() { + // Try to get the XMLHttpRequest object + try { return new XMLHttpRequest() } catch (e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP.6.0') } catch(e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP.3.0') } catch(e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP') } catch(e) {} + try { return new ActiveXObject('Microsoft.XMLHTTP') } + catch(e) { + return false // FAILURE + } +} + +httpobj.prototype.send = function() { + /* + send(): Sends parametres (param) to url (url) and sets up function to + react on retrievement + */ + + if (!this.url) { + // Exit function if either url or the function to be called is undefined + delete this + return false + } + + // Transform param into string type ?foo=bar&hmm=aha + this.text_params = '' + if (this.param) { + for (var x in this.param) + this.text_params += '&' + x + '=' + this.param[x] + this.text_params = this.text_params.substr(1) + } + + if (this.method.toLowerCase() == 'get') { + // In case of GET method, use '?' + var after_url + if (!this.param) + after_url = '' + else + after_url = '?' + this.text_params + + this.obj.open('GET', this.url + after_url, true) + this.obj.send(null) + } + else { + // In case of POST method, use RequestHeader + this.obj.open('POST', this.url, true) + this.obj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded') + this.obj.setRequestHeader('Content-length', this.text_params.length) + this.obj.setRequestHeader('Connection', 'close') + this.obj.send(this.text_params) + } + + // What to do when something happens + this.obj.onreadystatechange = function() { + // Only do something when it's complete + if (this.readyState == 4 || this.readyState == 'complete') { + // Define 3 variables to be used with the user-defined function (func) + var text, params, state + text = this.responseText + params = this.topelem.param // this.topelem = this.obj.topelem = this + + // State 0 is good, state 1 is bad + state = 0 + if (this.status != 200) { + state = 1 + text = '' + } + + // Call user-defined function + if (this.topelem.func) + eval(this.topelem.func) + delete this + } + } + return true // It has a chance of working.. +} \ No newline at end of file diff --git a/subsites/projects/algo/js/navbar.js b/subsites/projects/algo/js/navbar.js new file mode 100644 index 0000000..6656f68 --- /dev/null +++ b/subsites/projects/algo/js/navbar.js @@ -0,0 +1,285 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* + The navbar class creates a navigation bar. Normally Algo features two + navigation bars - one at the top of the page and one at the bottom of the + page. Several obejcts can be added to a navigation bar after its creation, + including dropdowns, appboxes (the boxes with text that you can click on, + usually found in the bottom navigation bar) and a clock. The style of the + navigation bar itself and the objects on the navigation bar is found in an + external css themes file. +*/ +function navbar(pos) { + // navnum = the order in which it was created (0, 1, etc.) + this.navnum = navi.length + // If pos is undefined, set the navigation bar to be at the top + if (pos == undefined || pos == -1) var pos = [[0, ''], -1, -1, [0, '']] + // Save pos + this.pos = pos + + // Create the actual navigation bar element + this.menu = document.createElement('div') + + /* Makes it identifiable by a css file. + By adding " navi" followed by the number of the navbar, + each navbar can be independently changed by a css file */ + this.menu.className = 'navbar navi' + this.navnum + + // Update the position of the navbar + this.update() + + // Append the navbar to the wrapper + wrapper.appendChild(this.menu) +} + +navbar.prototype.update = function() { + // Loop through the 4 global directions (top to right) + for (var i = 0; i < global_directions_length; i++) { + /* If the pos is not no-existant, style the navbar's menu element with the + amount ([i][0]) followed by a unit ([i][1]) */ + if (this.pos[i] != -1) + this.menu.style[global_directions[i]] = this.pos[i][0] + this.pos[i][1] + } +} + +navbar.prototype.support = function(name) { + /* When supporting objects, they will be linked to the supporting navbar + to make them accesible later on via the global "posis" list */ + posis[name] = this.navnum + + // Special cases + if (name == 'dropdowns') + this.drops = [] +} + +navbar.prototype.unsupport = function(name) { + // Cease support of a certain object + if (posis[name] == undefined) return + delete posis[name] + + // Special cases + if (name == 'dropdowns') + delete this.dropdowns + else if (name == 'appboxes') + delete this.appboxes +} + +// DROPDOWN +navbar.prototype.drop = function(name, list) { + /* Adds a dropdown menu. Dropdowns will appear in the order they are created. + "name" is the name of the dropdown menu, while "list" holds all the + entries in an array-like format. + */ + var listlen = list.length + var wrap = this.append_level(list, name) + this.dropdowns.appendChild(wrap) + + // Adds a new dropdown object to the "drops" + this.drops[this.drops.length] = [wrap, name, list] +} + +navbar.prototype.append_level = function(list, first) { + /* This function creates the elements of a dropdown menu, + based on a list of strings and (eventually) more lists. + This function will call itself if a list at level one + has another list. That way, there are no factors that + limit the number of levels in a dropdown menu. "first" + is set to the name of the list when called from the + original drop prototype function, while it is set to + false when called from this function itself. */ + var listlen = list.length + var i, wrap, dtop, type, elem, elema, elemb, spl, title + + // Creates the temporary element that will hold everything + wrap = document.createElement('div') + if (first) { + wrap.className = 'dropdown' + // dtop = the header element + dtop = document.createElement('div') + // Adds two classes, one general and one special (" drop" + drops.length) + dtop.className = 'top drop' + navi[posis['dropdowns']].drops.length + dtop.innerHTML = first + wrap.appendChild(dtop) + } + else { + /* If it's not the first time the function is called, it will create a + div with entries instead of a div with a header. */ + wrap.className = 'entries' + elem = document.createElement('div') + elem.className = 'side' + wrap.appendChild(elem) + } + + /* This is the main loop. It looks at the list entries and evaluates them + based on what they are. If a string is encountered, it is written to the + dropdown menu. If an object (a list in this case) is encountered, this + function is recalled with the sublist as the main list. */ + for (i = 0; i < listlen; i++) { + type = typeof(list[i]) + if (type == 'string') { + spl = [list[i], 'true'] + if (list[i].indexOf('#') != -1) + spl = list[i].split('#') + elem = document.createElement('div') + elem.className = 'entry' + elem.rel = spl[1] + elem.onmouseup = function() { + navi[posis['dropdowns']].hide_drops() + } + elem.innerHTML = spl[0] + elem.onclick = function() { + eval('scr.setwindow(\'' + this.innerHTML + '\',' + this.rel + ')') + } + wrap.appendChild(elem) + } + else if (type == 'object') { + elem = document.createElement('div') + elem.className = 'group' + elema = document.createElement('div') + elema.className = 'header' + elema.innerHTML = list[i][0] + elem.appendChild(elema) + elema = this.append_level(list[i][1]) + elem.appendChild(elema) + wrap.appendChild(elem) + } + } + return wrap +} + +navbar.prototype.hide_drops = function() { + /* When clicking on an entry in a dropdown menu, the mouse will still hover + the dropdown element, and the dropdown element will still be visible. + By temporarily changing the class of the dropdown menu, this function + makes the dropdown disappear. */ + if (!hiding_drops) { + hiding_drops = true + var l = this.drops.length + for (i = 0; i < l; i++) { + this.drops[i][0].className = 'dropdownh dropdown' + } + // No need to wait for more than 0.1 seconds + setTimeout('navi[posis[\'dropdowns\']].hide_drops()', 100) + } + else { + hiding_drops = false + var l = this.drops.length + for (i = 0; i < l; i++) { + this.drops[i][0].className = 'dropdown' + } + } +} + +navbar.prototype.box = function(name, pos) { + /* This function adds a box with an object to the navigation bar. "pos" is + the css float property and is completely optional. For the most part it + should in fact not be neccesary to use it, as the styles of most elements + added by this function is defined in a css file. */ + if (pos == undefined) pos = 'none' + this[name] = document.createElement('div') + this[name].className = name + this[name].style.cssFloat = pos + this.menu.appendChild(this[name]) + + // Special cases + if (name == 'clock') { + this.setclock() + this.clockinterval = setInterval('navi[posis[\'clock\']].setclock()', 30000) + } + if (name == 'abs_scroller') { + // abs_scroller appears when there is not enough space for all appboxes. + this.abs_scroller.className = 'abs' + var elem + elem = document.createElement('div') + elem.className = 'scrollup' + elem.onclick = function() { + // Scroll up + navi[posis['appboxes']].abs_scroll(1) + } + this.abs_scroller.appendChild(elem) + elem = document.createElement('div') + elem.className = 'scrolldown' + elem.onclick = function() { + // Scroll down + navi[posis['appboxes']].abs_scroll(-1) + } + this.abs_scroller.appendChild(elem) + + this.menu.style.overflow = 'hidden' + } +} + +navbar.prototype.check_abs_height = function(force) { + /* This function checks if there is a need for a scroller, i.e. if there are + too many appboxes to be shown in one line. */ + var abs = navi[posis['appboxes']].height + var rnum = navi[posis['appboxes']].appboxes.scrollHeight + if (ie) { + // Internet Explorer has some issues. This fix isn't perfect. + if ((rnum / abs + '').indexOf('.') != -1) rnum += appbox_margin * 2 + } + var num = rnum / abs + if (num > 1) { + // If there are too many appboxes + navi[posis['appboxes']].appboxes.style.marginRight = abs_scroller_width + 3 + 'px' + navi[posis['appboxes']].abs_scroller.style.display = 'block' + /* If the force is true, scroll to the place where the window linked with + the appbox is */ + if (force) this.abs_scroll(-Math.floor(wnds[scr.wndpos[0]].appbox.offsetTop / abs)) + } + else { + navi[posis['appboxes']].appboxes.style.marginRight = '0' + navi[posis['appboxes']].abs_scroller.style.display = 'none' + this.abs_scroll(-abs_scrolled) + } +} + +navbar.prototype.abs_scroll = function(am) { + var abam = abs_scrolled + am * 1 + var abs = this.height + var rnum = this.appboxes.scrollHeight + if (ie) { + // Internet Explorer has some issues. This fix isn't perfect. + if ((rnum / abs + '').indexOf('.') != -1) rnum += appbox_margin * 2 + } + + /* num = the actual height of the appboxes container divided with the + displayed height */ + var num = rnum / abs + if (abs_scrolled + am < 1 && abam * -1 < num) { + // Only do the scrolling if there's something to scroll to + abs_scrolled = abam + this.appboxes.style.marginTop = abs * abs_scrolled + 'px' + } +} + +navbar.prototype.setclock = function() { + var time = new Date () + + var hours = time.getHours() + var minutes = time.getMinutes() + + // "07" is nicer than just "7" + hours = (hours < 10 ? "0" : "") + hours + minutes = (minutes < 10 ? "0" : "") + minutes + + this.clock.innerHTML = hours + ':' + minutes +} \ No newline at end of file diff --git a/subsites/projects/algo/js/onload.js b/subsites/projects/algo/js/onload.js new file mode 100644 index 0000000..edd8cc5 --- /dev/null +++ b/subsites/projects/algo/js/onload.js @@ -0,0 +1,166 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +window.onload = function() { + // Get the head element + head_con = document.getElementsByTagName('head')[0] + + // Theme support - .href will be added at the end of the onload function + theme = document.createElement('link') + theme.rel = 'stylesheet' + theme.type = 'text/css' + head_con.appendChild(theme) + + + // wrapper holds everything + wrapper = document.createElement('div') + wrapper.style.display = 'none' + document.body.appendChild(wrapper) + + + // A lot of globals used in various functions + global_directions = ['top', 'right', 'bottom', 'left'] + global_directions_length = global_directions.length + global_directions_dt = ['tl', 't', 'tr', 'r', 'br', 'b', 'bl', 'l'] + global_directions_dt_length = global_directions.length + global_options = ['minimize', 'maximize', 'close'] + hiding_drops = false + posis = {} + wnds = new Array() + + x = 0 + y = 0 + moving_window = -1 + adjusting_window = -1 + adjusting_dir = -1 + start_x = -1 + start_y = -1 + diff_x = 0 + diff_y = 0 + + width_min = 150 + height_min = 100 + + abs_scroller_width = 10 + appbox_padding = 2 + appbox_margin = 2 + appbox_border = 1 + abs_scrolled = 0 + + theme_set = false + + // Ew + if (navigator.appName == 'Microsoft Internet Explorer') ie = true + else ie = false + + + /* Prepares fixing a highligthing problem that occurs whenever + you've moved or adjusted a window. */ + highlightfix = document.createElement('textarea') + highlightfix.className = 'highlightfix' + highlightfix.value = 'fix' + wrapper.appendChild(highlightfix) + + // Extra security for some elements that just don't exist + fallback = document.createElement('div') + + + // navi = navigation bar = navbar. Here 2 are created. + navi = [] + navi[0] = new navbar([[0, ''], -1, -1, [0, '']]) + navi[1] = new navbar([-1, -1, [0, ''], [0, '']]) + + // Where to put different stuff.. + navi[0].support('dropdowns') + navi[0].support('clock') + navi[1].support('appboxes') + + // ..and actually putting it there + navi[posis['dropdowns']].box('dropdowns', 'left') + navi[posis['clock']].box('clock') + navi[posis['appboxes']].box('appboxes', 'left') + navi[posis['appboxes']].box('abs_scroller') + + + + /* Create dropdown menus. You can change the way a window opens + by writing a "#" after the title, followed by your variables */ + + navi[posis['dropdowns']].drop('Programs', [ + ['Math', [ + 'Calculator' + ]], + ['Office', [ + 'Notes#true,-1,-1,400,400,w-405,sh-405' + ]] + ]) + + navi[posis['dropdowns']].drop('Algo', [ + 'About', + 'Help', + ]) + + navi[posis['dropdowns']].drop('Test', [ + 'A', + ['B', [ + 'C', + 'D', + ['E', [ + ['F', [ + 'G', + 'H' + ]] + ]], + 'I' + ]] + ]) + + // Create the screen area (the area on which the windows can move freely) + scr = new screen() + scr.wh() + + // Event actions + document.onmousemove = scr.set_coor + + window.onresize = function() { + scr.update() + for (var i = 0; i < scr.len; i++) { + if (!wnds[i].normal) { + scr.wh() + wnds[i].width = w + scr.margin_g * 2 + wnds[i].height = sh + scr.margin_g + wnds[i].update() + } + } + // Check if scrollbars are needed to make all appboxes visible + navi[posis['appboxes']].check_abs_height(false) + } + + document.onmouseup = function() { + // End various stuff + if (moving_window > -1) + scr.move_end() + if (adjusting_window > -1) + scr.adjust_end() + } + + // Set the theme (will default to the default if you specify an unexisting theme) + settheme('Default') +} \ No newline at end of file diff --git a/subsites/projects/algo/js/scr_window.js b/subsites/projects/algo/js/scr_window.js new file mode 100644 index 0000000..71b036c --- /dev/null +++ b/subsites/projects/algo/js/scr_window.js @@ -0,0 +1,407 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* + This is the scr_window class. It takes care of creating windows and + editing windows. When a window has been created, it can be minimized, + maximized and closed by the prototype functions of this class. +*/ +function scr_window(title, icon, state, options, width, height, xpos, ypos, resizeable) { + if (title == undefined) return // The title is the identifier - a must + if (icon == undefined) var icon = false // Defaults to no icon + if (state == undefined || state == -1) var state = 1 // 0 = minimized, 1 = normal, 2 = maximized + if (options == undefined || options == -1) var options = [1, 1, 1] // Both minimizable, maximizeable and closeable + if (width == undefined || width == -1) var width = 500 // Default width + if (height == undefined || height == -1) var height = 350 // Default height + if (xpos == undefined || xpos == -1) var xpos = (w - width) / 2 // Places it center + if (ypos == undefined || ypos == -1) var ypos = (sh - height) / 2 // Places it in the middle + if (resizeable == undefined || resizeable == -1) var resizeable = true // Resizable as default + + if (width < width_min) width = width_min // Limits + if (height < height_min) height = height_min // Limits + + // Uniqueifyes the variables + this.title = title + this.icon = icon + this.options = options + this.width = width + this.height = height + this.resizeable = resizeable + + /* Creates two unique numbers. "num" will change if a window opened before + this window is closed, while onum will never change */ + this.num = scr.len + this.onum = scr.olen + + // Creates the appbox in the appbox navbar + this.appbox = document.createElement('div') + this.appbox.rel = wnds.length // Accesible by JavaScript + this.appbox.onclick = function() { + // Minimize if visible and current + // Change focus if visible but not current + // Unminimize if not visible (the "un"-part happens automatically) + if (wnds[this.rel].visible) { + if (wnds[this.rel].appbox.className == 'current') + wnds[this.rel].minimize(this.rel) + else + scr.change_focus(this.rel) + } + else + wnds[this.rel].minimize(this.rel) + + } + this.appbox.innerHTML = title + // Appending it + navi[posis['appboxes']].appboxes.appendChild(this.appbox) + + + /* The following code creates all the neccesary elements for a window to + exist. It's fairly straight-forward, but it takes up a lot of space */ + var elems, belems, el, tmp, i, c + this.elem = document.createElement('div') + this.elem.className = 'window' + + el = 13 // The number of elements to be created + if (icon) el++ + + tmp = 0 + if (options[0]) tmp++ + if (options[1]) tmp++ + if (options[2]) tmp++ + this.optboxes = tmp + + if (tmp > 0) el++ + elems = new Array(el) + belems = new Array(tmp) + + // Borders + for (i = 0; i < 8; i++) { + elems[i] = document.createElement('div') + elems[i].className = global_directions_dt[i] + if (i != 1) { + if (resizeable) { + elems[i].rel = i + '' + elems[i].onmousedown = function() { + if (wnds[this.parentNode.rel].normal) + scr.adjust_start(this.parentNode.rel, this.rel) + } + elems[i].onmouseup = function() { + scr.adjust_end() + } + } + } + } + + // Title + text + icon + options + elems[8] = document.createElement('div') + elems[8].className = 'title' + elems[8].innerHTML = this.title + + elems[9] = document.createElement('div') + elems[9].className = 'handle' + elems[9].onmousedown = function() { + if (wnds[this.parentNode.rel * 1].normal) { + scr.move_start(this.parentNode.rel * 1) + } + } + elems[9].onmouseup = function() { + scr.move_end() + } + elems[9].ondblclick = function() { + wnds[this.parentNode.rel * 1].maximize() + } + + elems[10] = document.createElement('div') + elems[10].className = 'resize_handle' + if (resizeable) { + elems[10].rel = '1' + elems[10].onmousedown = function() { + if (wnds[this.parentNode.rel * 1].normal) + scr.adjust_start(this.parentNode.rel * 1, this.rel * 1) + } + elems[10].onmouseup = function() { + scr.adjust_end() + } + } + else + this.elem.className += ' nrsz' // Seen by a css file + if (!ie) { + elems[11] = document.createElement('object') + elems[11].data = 'pages/links.php?title=' + escape(title) + '&num=' + this.onum + elems[11].type = 'text/html' + } + else { + elems[11] = document.createElement('iframe') + elems[11].src = 'pages/links.php?title=' + escape(title) + '&num=' + this.onum + elems[11].frameBorder = '0' + } + elems[11].className = 'data' + + elems[12] = document.createElement('div') + elems[12].className = 'data_overlay' + + if (icon) { + elems[13] = document.createElement('div') + elems[13].className = 'icon' + elems[13].style.backgroundImage = 'url(\'pages/links.php?title=' + escape(title) + '&type=png\')' + } + + if (this.optboxes > 0) { + // If any options at all + tmp = elems.length - 1 + elems[tmp] = document.createElement('div') + elems[tmp].className ='options' + + c = 0 + for (i = 0; i < 3; i++) { + if (options[i]) { + belems[i] = document.createElement('div') + belems[i].className = global_options[i] // Refer to onload.js + if (global_options[i] == 'minimize') belems[i].onclick = function() { + wnds[this.parentNode.parentNode.rel * 1].minimize() + } + else if (global_options[i] == 'maximize') belems[i].onclick = function() { + wnds[this.parentNode.parentNode.rel * 1].maximize() + } + else belems[i].onclick = function() { + wnds[this.parentNode.parentNode.rel * 1].close() + } + elems[tmp].appendChild(belems[i]) + c++ + } + } + } + + // All clickable elements need elem.rel to determine what window to change + this.elem.rel = wnds.length + + this.elem.onmousedown = function() { + scr.change_focus(this.rel * 1) + } + + this.elem.style.left= xpos + 'px' + this.elem.style.top = ypos + 'px' + + for (i = 0; i < el; i++) { + // Append all created elements + this.elem.appendChild(elems[i]) + } + this.len = this.elem.childNodes.length + + scr.elem.appendChild(this.elem) + + this.visible = true + this.normal = true + if (state == 0) this.minimize() + + this.update() // Adjust widths, heights, etc. + this.update_appbox() // The same with the appbox + + if (state == 2) this.maximize() +} + +scr_window.prototype.update = function() { + /* This function updates the dimensions of the subelements of a window. + scr holds standard information such as the general margin, while the + window itself has some info about width, height, icons, etc. */ + var tmp, el + + el = this.cn('tl') + el.style.width = scr.margin_g + 'px' // margin_g is the general margin + el.style.height = scr.hheight + 'px' // hheight is the header height + + el = this.cn('t') + el.style.left = scr.margin_g + 'px' + el.style.width = this.width - scr.margin_g * 2 + 'px' + el.style.height = scr.hheight + 'px' + + el = this.cn('tr') + el.style.left = this.width - scr.margin_g + 'px' + el.style.width = scr.margin_g + 'px' + el.style.height = scr.hheight + 'px' + + el = this.cn('r') + el.style.top = scr.hheight + 'px' + el.style.left = this.width - scr.margin_g + 'px' + el.style.width = scr.margin_g + 'px' + el.style.height = this.height - scr.hheight - scr.margin_g + 'px' + + el = this.cn('br') + el.style.top = this.height - scr.margin_g + 'px' + el.style.left = this.width - scr.margin_g + 'px' + el.style.width = scr.margin_g + 'px' + el.style.height = scr.margin_g + 'px' + + el = this.cn('b') + el.style.top = this.height - scr.margin_g + 'px' + el.style.left = scr.margin_g + 'px' + el.style.width = this.width - scr.margin_g * 2 + 'px' + el.style.height = scr.margin_g + 'px' + + el = this.cn('bl') + el.style.top = this.height - scr.margin_g + 'px' + el.style.width = scr.margin_g + 'px' + el.style.height = scr.margin_g + 'px' + + el = this.cn('l') + el.style.top = scr.hheight + 'px' + el.style.width = scr.margin_g + 'px' + el.style.height = this.height - scr.hheight - scr.margin_g + 'px' + + el = this.cn('title') + el.style.top = scr.margin_g + 'px' + el.style.height = scr.hheight - scr.margin_g + 'px' + if (this.icon) tmp = scr.bw + scr.margin_t + else tmp = 0 + el.style.left = scr.margin_g + scr.margin_t + tmp + 'px' + el.style.width = this.width - scr.margin_g * 2 - scr.margin_t * 2 - this.optboxes * (scr.bw + scr.margin_t) - tmp + 'px' + + el = this.cn('handle') + el.style.top = scr.margin_g + 'px' + el.style.height = scr.hheight - scr.margin_g + 'px' + el.style.left = scr.margin_g + scr.bw + scr.margin_t + 'px' + el.style.width = this.width - scr.margin_g * 2 - this.optboxes * (scr.bw + scr.margin_t) - tmp + 'px' + + el = this.cn('resize_handle') + el.style.left = scr.margin_g + 'px' + el.style.width = this.width - scr.margin_g * 2 + 'px' + el.style.height = scr.margin_g + 'px' + + el = this.cn('data') + el.style.top = scr.hheight + 'px' + el.style.left = scr.margin_g + 'px' + el.style.width = this.width - scr.margin_g * 2 + 'px' + el.style.height = this.height - scr.hheight - scr.margin_g + 'px' + + el = this.cn('data_overlay') + el.style.top = scr.hheight + 'px' + el.style.left = scr.margin_g + 'px' + el.style.width = this.width - scr.margin_g * 2 + 'px' + el.style.height = this.height - scr.hheight - scr.margin_g + 'px' + + if (this.icon) { + el = this.cn('icon') + el.style.top = scr.margin_g + 'px' + el.style.left = scr.margin_g + scr.margin_t + 'px' + el.style.width = scr.bw + 'px' // bw is the box width + el.style.height = scr.bh + 'px' // bh is the box height + } + + el = this.cn('options') + if (el) { + el.style.top = scr.margin_g + 'px' + el.style.left = this.width - this.optboxes * (scr.bw + scr.margin_t) - scr.margin_g + 'px' + el.style.width = this.optboxes * (scr.bw + scr.margin_t) - scr.margin_t + 'px' // margin_t is the margin used in the top of the window + el.style.height = scr.bh + 'px' + + var elc = el.childNodes + var elcl = elc.length + for (var i = 0; i < elcl; i++) { + elc[i].style.left = i * (scr.bw + scr.margin_t) + 'px' + elc[i].style.width = scr.bw + 'px' + } + } +} + +scr_window.prototype.update_appbox = function() { + this.appbox.style.height = navi[posis['appboxes']].height - appbox_padding * 2 - appbox_margin * 2 - appbox_border * 2 + 'px' +} + +scr_window.prototype.cn = function(what) { + /* This function is a smart one. It returns a pointer to the node which + has the class specified by "what". If it's not found, the returned node + is "fallback", which does nothing but at the same time makes sure no + errors pop up. */ + var i = 0 + var ok = false + var nodes = this.elem.childNodes + var node = fallback + while (i < this.len && !ok) { + if (nodes[i].className == what) { + node = nodes[i] + ok = true + } + i++ + } + return node +} + +scr_window.prototype.settitle = function(title) { + // Sets the title of the window and the appbox associated with the window + this.cn('title').innerHTML = title + this.appbox.innerHTML = title +} + +scr_window.prototype.minimize = function() { + /* + Minimizes if visible + Unminimizes if not visible + */ + if (this.visible) { + this.visible = false + this.elem.style.display = 'none' + scr.change_focus(this.num, 1) + } + else { + this.visible = true + this.elem.style.display = 'block' + scr.change_focus(this.num) + } +} + +scr_window.prototype.maximize = function() { + /* + Maximizes if normal + Unmaximizes if already maximized + */ + if (this.normal) { + this.normal = false + this.savedpos = [this.elem.offsetLeft, this.elem.offsetTop, this.width, this.height] + this.elem.style.left = -scr.margin_g + 'px' + this.elem.style.top = 0 + this.width = w + scr.margin_g * 2 + this.height = sh + scr.margin_g + this.elem.className = 'window window_max' + } + else { + this.normal = true + this.elem.style.left = this.savedpos[0] + 'px' + this.elem.style.top = this.savedpos[1] + 'px' + this.width = this.savedpos[2] + this.height = this.savedpos[3] + this.elem.className = 'window' + if (!this.resizeable) this.elem.className += ' nrsz' + } + this.update() +} + +scr_window.prototype.close = function() { + // Changes focus with det set to 2, which in turn removes the element + scr.change_focus(this.num, 2) +} + +scr_window.prototype.renum = function(n) { + /* This function changes the "num" variable and the attributes that use it. + The "num" variable will in some cases have to be changed when a window + closes. */ + this.num += n + this.elem.rel = this.num + this.appbox.rel = this.num +} \ No newline at end of file diff --git a/subsites/projects/algo/js/screen.js b/subsites/projects/algo/js/screen.js new file mode 100644 index 0000000..b8d9772 --- /dev/null +++ b/subsites/projects/algo/js/screen.js @@ -0,0 +1,365 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* + The screen class creates the screen on which all the windows appear. + As a matter of fact, the screen class simply serves as a layer for adding + windows. That's all. */ +function screen() { + this.elem = document.createElement('div') + this.elem.className = 'area' + this.elem.style.width = '100%' // Height determined by JavaScript later on + wrapper.appendChild(this.elem) + + /* len and olen dynamically increases as new windows are opened. But while + len is decreased when windows are closed, olen is never decreases. This + proves helpful when the windows in objects/iframes must be able to access + their own windows. */ + this.len = 0 + this.olen = 0 + /* wndpos holds information about the windows on the screen. Each wndpos + entry is a link to a scr_window class. wndpos keeps the links in their + index order. */ + this.wndpos = new Array() + + /* It is neccessary to create an overlay, as the window objects/iframes will + catch focus if the mouse is moved over them. The overlay is on whenever a + window is being moved or adjusted */ + this.overlay = document.createElement('div') + this.overlay.className = 'overlay' + this.elem.appendChild(this.overlay) +} + +screen.prototype.rethink = function() { + // rethink() reorganises the screen top and height based on the navbars. + var navil = navi.length + var mh, th, borders, bl, border + mh = 0 + th = 0 + /* The following loop uses the height and the border height of the navbars + to compute the space on which the screen should be positioned. */ + for (var i = 0; i < navil; i++) { + border = 0 + borders = navi[i].border + bl = borders.length + for (var ii = 0; ii < bl; ii += 2) { + border += borders[ii] + } + mh += navi[i].height + if (navi[i].pos[0] != -1) + th += navi[i].height + border + if (navi[i].pos[0] != -1 || navi[i].pos[2] != -1) + mh += border + } + // bi = the heights of the navbars plus the border heights of the navbars + this.bi = mh + this.elem.style.top = th + 'px' +} + +screen.prototype.update = function() { + // Updates width and height and adjusts the height + this.wh() + this.elem.style.height = sh + 'px' +} + +screen.prototype.wh = function() { + // Get screen width and height + if (self.innerHeight) { + h = self.innerHeight + w = self.innerWidth + } + else if (document.documentElement && document.documentElement.clientHeight) { + h = document.documentElement.clientHeight + w = document.documentElement.clientWidth + } + else if (document.body) { + h = document.body.clientHeight + w = document.body.clientWidth + } + + // sh = screen height - navbars heights. The height of the screen area is sh + sh = h - this.bi +} + +screen.prototype.change_focus = function(num, det) { + /* This function changes focus to the window specified in "num". "det" is a + special identifier that tells this function what to do. Or whatever. */ + if (det == undefined) var det = 0 + + var num = num * 1 + for (var i = 0; i < this.len; i++) { + // Delete link from the wndpos list + if (this.wndpos[i] == num) this.wndpos.splice(i, 1) + } + /* + if det == 0: add window to front + if det == 1: add window to back + if det == 2: remove and close window + */ + if (det == 0) + this.wndpos.splice(0, 0, num) + else if (det == 1) + this.wndpos.splice(this.len, this.len, num) + else if (det == 2) { + this.len-- + this.elem.removeChild(wnds[num].elem) + navi[posis['appboxes']].appboxes.removeChild(wnds[num].appbox) + + for (i = 0; i < this.len; i++) { + if (this.wndpos[i] > num) { + wnds[this.wndpos[i]].renum(-1) // Readjust windows with a higher index + this.wndpos[i]-- + } + } + + // Different actions based on different variables + if (moving_window > num) moving_window-- + else if (moving_window == num) this.move_end() + + if (adjusting_window > num) adjusting_window-- + else if (adjusting_window == num) this.adjust_end() + + delete wnds[num] + wnds.splice(num, 1) + + } + // This function has no done anything visually. setindex takes care of that. + this.setindex() +} + +screen.prototype.setindex = function() { + /* This function writes any changes made in the classes in the wndpos to the + screen. If focus has changed from one window to another, setindex makes + the user see that. */ + for (var i = 1; i < this.len; i++) { + wnds[this.wndpos[i]].elem.style.zIndex = this.len - i + 1 + wnds[this.wndpos[i]].elem.id = '' + wnds[this.wndpos[i]].appbox.className = '' + } + if (this.len > 0) { + // The first window in the hierarchy gets the focus + wnds[this.wndpos[0]].elem.style.zIndex = this.len + 2 + wnds[this.wndpos[0]].elem.id = 'active' + wnds[this.wndpos[0]].appbox.className = '' + this.overlay.style.zIndex = this.len + 1 + } + + // vis will turn true if any window is visible + var vis = false + for (i = 0; i < this.len; i++) { + if (wnds[i].visible) vis = true + } + // Only make the current window current if at least one window is visible + if (vis) wnds[this.wndpos[0]].appbox.className = 'current' + + // Check if there's enough space for the appboxes + navi[posis['appboxes']].check_abs_height(true) +} + +screen.prototype.set_overlay = function() { + this.overlay.style.display = 'block' +} + +screen.prototype.del_overlay = function() { + this.overlay.style.display = 'none' +} + +screen.prototype.move_start = function(what) { + /* "move_start" sets the global value "moving_window" to the active window + and thereby makes it recognisable by the set_coor function. */ + moving_window = what * 1 + + /* The overlays are needed to keep the objects/iframes from getting the + mouse focus. In theory this should not happen, but as the mouse is often + moved faster than the window, this happens. + There are two overlays: one that covers the window and on that covers the + other windows. */ + wnds[moving_window].cn('data_overlay').style.display = 'block' + this.set_overlay() + + // These are needed later on to determine the position of the window. + diff_x = x - wnds[moving_window].elem.offsetLeft + diff_y = y - wnds[moving_window].elem.offsetTop +} + +screen.prototype.move_end = function() { + if (moving_window > -1) + wnds[moving_window].cn('data_overlay').style.display = 'none' + moving_window = -1 + this.blurfocus() +} + +screen.prototype.adjust_start = function(what, dir) { + /* This is the same as "move_start" except that this does not start moving + the window, but instead it starts adjusting (resizing) it. */ + adjusting_window = what * 1 + adjusting_dir = dir * 1 + wnds[adjusting_window].cn('data_overlay').style.display = 'block' + this.set_overlay() + + // Different variables are set depending on the direction of the adjusting. + /* + The directions are: + 0: top-left + 1: top + 2: top-right + 3: right + 4: bottom-right + 5: bottom + 6: bottom-left + 7: left + + If the resize direction is diagonal, both of the below options are true. + */ + if (adjusting_dir != 1 && adjusting_dir != 5) { + // If vertical + start_x = x + start_w = wnds[adjusting_window].width + diff_x = start_x - wnds[adjusting_window].elem.offsetLeft + } + if (adjusting_dir != 3 && adjusting_dir != 7) { + // If horizontal + start_y = y + start_h = wnds[adjusting_window].height + diff_y = start_y - wnds[adjusting_window].elem.offsetTop + } +} + +screen.prototype.adjust_end = function() { + if (adjusting_window > -1) + wnds[adjusting_window].cn('data_overlay').style.display = 'none' + adjusting_window = -1 + adjusting_dir = -1 + this.blurfocus() +} + +screen.prototype.blurfocus = function() { + // Hides the overlay and applies the fix + this.del_overlay() + highlightfix.focus() + highlightfix.select() +} + +screen.prototype.setwindow = function(a, b, c, d, e, f, g, h, i, j, k, l, m, n) { + // This function is the one that must be called when creating a new window. + wnds[wnds.length] = new scr_window(a, b, c, d, e, f, g, h, i, j, k, l, m, n) + + // Positions itself at the front + this.wndpos.splice(0, 0, this.len) + this.len++ + this.olen++ + this.setindex() +} + +screen.prototype.move_window = function() { + // Moves the window based on current and earlier set variables + var cx = x - diff_x + if (cx < -diff_x) cx = -diff_x + else if (cx > w - diff_x) cx = w - diff_x + var cy = y - diff_y + if (cy < 0) cy = 0 + else if (cy > sh - scr.hheight) cy = sh - scr.hheight + if (scr.len > moving_window) { + wnds[moving_window].elem.style.left = cx + 'px' + wnds[moving_window].elem.style.top = cy + 'px' + } +} + +screen.prototype.adjust_window = function() { + // Adjusts the window based on current and earlier set variables + + // This function uses the same direction principle as "adjust_start". + if (adjusting_dir != 1 && adjusting_dir != 5) { + var cx, cw, cxs + cxs = false + if (adjusting_dir == 0 || adjusting_dir == 6 || adjusting_dir == 7) { + // If to the left + cx = x - diff_x + cw = start_w + start_x - x + if (x - diff_x < 0) { + cx = 0 + cxs = true + } + } + else { + // If to the right + cx = start_x - start_w + start_w - diff_x + cw = start_w + x - start_x + if (x + start_w - diff_x > w) cxs = true + } + + if (cw < width_min) cxs = true + + if (!cxs && scr.len > adjusting_window) { + wnds[adjusting_window].elem.style.left = cx + 'px' + wnds[adjusting_window].width = cw + } + } + + if (adjusting_dir != 3 && adjusting_dir != 7) { + var cy, ch, cys + cys = false + if (adjusting_dir == 0 || adjusting_dir == 1 || adjusting_dir == 2) { + // If upwards + cy = y - diff_y + ch = start_h + start_y - y + if (y - diff_y < 0) { + cy = 0 + cys = true + } + } + else { + // If downwards + cy = start_y - start_y + start_y - diff_y + ch = start_h + y - start_y + if (y + start_h - diff_y > sh) cys = true + } + + if (ch < height_min) cys = true + + if (!cys && scr.len > adjusting_window) { + wnds[adjusting_window].elem.style.top = cy + 'px' + wnds[adjusting_window].height = ch + } + } + + // Update the window position + wnds[adjusting_window].update() +} + +screen.prototype.set_coor = function(e) { + /* This function sets the global coordinates of the screen. If a window + is eiher being moved or adjusted, this function calls the "move_window" + or "adjust_window" functions */ + if (!e) var e = window.event + if (e.pageX || e.pageY) { + x = e.pageX + y = e.pageY + } + else if (e.clientX || e.clientY) { + x = e.clientX + document.body.scrollLeft + y = e.clientY + document.body.scrollTop + } + + if (moving_window != -1) + scr.move_window() + else if (adjusting_window != -1) + scr.adjust_window() +} \ No newline at end of file diff --git a/subsites/projects/algo/js/themes.js b/subsites/projects/algo/js/themes.js new file mode 100644 index 0000000..558e078 --- /dev/null +++ b/subsites/projects/algo/js/themes.js @@ -0,0 +1,66 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* + This is the themes file. The two functions in this file manage loading + themes and changing object properties +*/ +function settheme(what) { + /* Sets the url of the themes css file. In this case it links to a PHP file + that has an index of names and urls. */ + theme.href = 'themes/links.php?title=' + what + '&type=css' + '&r=' + Math.random() + + var http = new httpobj() // Creates a new httpobj object + http.url = 'themes/links.php' // Sets the url + http.method = 'get' // Sets the method + http.param['title'] = what // Sets the title + http.param['type'] = 'js' // Sets the type + http.param['r'] = Math.random() // Fix for i.e. IE (maybe other browsers too) + http.func = "themevars(text)" // Will pass received text to that function + http.send() // Sends it +} + +function themevars(vars) { + // This function updates everything possible updating. + eval(vars) // Execute the string + + for (var i = 0; i < navi.length; i++) { + navi[i].update() + } + + // Reshow everything + scr.rethink() + scr.update() + + for (var i = 0; i < scr.len; i++) { + wnds[i].update() + wnds[i].update_appbox() + } + + // Some browsers are a bit slow, so waiting half a second or so is smart. + setTimeout("wrapper.style.display = 'block'", 500) + setTimeout("navi[posis['appboxes']].check_abs_height(false)", 1000) + + if (!theme_set) { + theme_set = true + // Open a small welcome window + setTimeout("scr.setwindow('Welcome', true, -1, -1, 300, 200)", 1000) + } +} \ No newline at end of file diff --git a/subsites/projects/algo/pages/about.htm b/subsites/projects/algo/pages/about.htm new file mode 100644 index 0000000..a93afcd --- /dev/null +++ b/subsites/projects/algo/pages/about.htm @@ -0,0 +1,17 @@ + + + + + + + + +

About Algo

+

Algo started development in March 2009 and took about a week to complete. Back then the name of Algo was "Algohol". Algohol was a project that aimed towards making math, physics and chemistry help freely available online in a new and different way. Consisting of a group with four students, we agreed that a desktop environment type website would be the way for us to present our info. The technical part of Algohol went fine, but we never did get to writing the actual content. Algohol is still online, but it doesn't serve much purpose.

+

The source code of Algo is GPLv3'ed.

+
+

The action icons

+ +

The action icons, as seen above, are made by two of my classmates. I never got to asking them whether they wanted to be credited. Using them should be fine, though. For now I'll just release it under the CC-SA license.

+ + \ No newline at end of file diff --git a/subsites/projects/algo/pages/calc.htm b/subsites/projects/algo/pages/calc.htm new file mode 100644 index 0000000..2bc02e0 --- /dev/null +++ b/subsites/projects/algo/pages/calc.htm @@ -0,0 +1,382 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/algo/pages/dir.txt b/subsites/projects/algo/pages/dir.txt new file mode 100644 index 0000000..0d854c2 --- /dev/null +++ b/subsites/projects/algo/pages/dir.txt @@ -0,0 +1 @@ +This folder holds the pages used by Algohol. They are fetched by the links.php file. In this folder is also the pages.css file and the pages.js file. These two files serve as a default for the pages in general. \ No newline at end of file diff --git a/subsites/projects/algo/pages/error.htm b/subsites/projects/algo/pages/error.htm new file mode 100644 index 0000000..cca4b01 --- /dev/null +++ b/subsites/projects/algo/pages/error.htm @@ -0,0 +1,18 @@ + + + + Error + + + + + +

Error!

+

There's no content!

+

Closing...

+ + \ No newline at end of file diff --git a/subsites/projects/algo/pages/help.htm b/subsites/projects/algo/pages/help.htm new file mode 100644 index 0000000..9f2829f --- /dev/null +++ b/subsites/projects/algo/pages/help.htm @@ -0,0 +1,11 @@ + + + + + + + + +

Using Algo should be pretty straight forward. If you don't get it, send a e-mail to ns@metanohi.org.

+ + diff --git a/subsites/projects/algo/pages/icons/default.png b/subsites/projects/algo/pages/icons/default.png new file mode 100644 index 0000000..1540abc Binary files /dev/null and b/subsites/projects/algo/pages/icons/default.png differ diff --git a/subsites/projects/algo/pages/icons/dir.txt b/subsites/projects/algo/pages/icons/dir.txt new file mode 100644 index 0000000..18ddd4d --- /dev/null +++ b/subsites/projects/algo/pages/icons/dir.txt @@ -0,0 +1,4 @@ +This folder holds the icons used by Algohol. The default.png icon is used as a default icon, while the other icons are used for specific pages. + +Example: +The calculator is opened in Algohol. The links.php file in the previous folder links to calc.htm. What also happens here is that links.php looks for calc.png in the icons folder. If such a file is not found, it defaults to defult.png. \ No newline at end of file diff --git a/subsites/projects/algo/pages/icons/help.png b/subsites/projects/algo/pages/icons/help.png new file mode 100644 index 0000000..74773c5 Binary files /dev/null and b/subsites/projects/algo/pages/icons/help.png differ diff --git a/subsites/projects/algo/pages/icons/notes.png b/subsites/projects/algo/pages/icons/notes.png new file mode 100644 index 0000000..ce09c5a Binary files /dev/null and b/subsites/projects/algo/pages/icons/notes.png differ diff --git a/subsites/projects/algo/pages/indexes.php b/subsites/projects/algo/pages/indexes.php new file mode 100644 index 0000000..4bf4f17 --- /dev/null +++ b/subsites/projects/algo/pages/indexes.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/subsites/projects/algo/pages/links.php b/subsites/projects/algo/pages/links.php new file mode 100644 index 0000000..c019ccf --- /dev/null +++ b/subsites/projects/algo/pages/links.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/subsites/projects/algo/pages/notes.php b/subsites/projects/algo/pages/notes.php new file mode 100644 index 0000000..ea3ff09 --- /dev/null +++ b/subsites/projects/algo/pages/notes.php @@ -0,0 +1,47 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/algo/pages/pages.css b/subsites/projects/algo/pages/pages.css new file mode 100644 index 0000000..6a49447 --- /dev/null +++ b/subsites/projects/algo/pages/pages.css @@ -0,0 +1,63 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* This css file includes some basic formatting stuff, + which can easily be overridden by internal stylesheets. */ + +* { + margin: 0; + padding: 0; + font-size: 12px; + font-family: 'dejavu sans' arial; +} + +body { + padding: 3px; +} + +a:link, a:visited { + text-decoration: none; + border-bottom-width: 1px; + border-bottom-style: dotted; + border-bottom-color: #0033ff; + color: #0033ff; +} + +a:hover { + border-bottom-color: #003399; + color: #003399; +} + +.header { + font-size: 16px; + font-weight: bold; +} + +.right { + float: right; +} + +.left { + float: left; +} + +.center { + text-align: center; +} \ No newline at end of file diff --git a/subsites/projects/algo/pages/pages.js b/subsites/projects/algo/pages/pages.js new file mode 100644 index 0000000..1169099 --- /dev/null +++ b/subsites/projects/algo/pages/pages.js @@ -0,0 +1,89 @@ +/* + Algo: a dekstop environment look-a-like in your web browser + Copyright (C) 2009 Niels Serup + + This file is part of Algo. + + Algo is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Algo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Algo. If not, see . +*/ + +/* This script page must be included by all pages. + Without it, clicking on a window will not focus it. + See the function below */ +document.onmousedown = get_focus + +function get_focus() { + parent.scr.change_focus(getwnd().num) +} + +/* Get the value of the id. There are always two ids and two values. + The first one covers the title, while the second one is a unique number. */ +function getget(id) { + var txt, len, ab + txt = window.location.search.substring(1).split('&') + len = txt.length + for (var i = 0; i < len; i++) { + ab = txt[i].split('=') + if (ab[0] == id) return ab[1] + } +} + +// Get the window, so to say. +function getwnd() { + var onum = getget('num') * 1 + var num = -1 + for (var i = 0; i < parent.scr.len; i++) { + if (parent.wnds[i].onum == onum) { + num = i + break + } + } + if (num > -1) + return parent.wnds[num] +} + +function minimize() { + getwnd().minimize() +} + +function maximize() { + getwnd().maximize() +} + +function close() { + getwnd().close() +} + +function setwindow(a, b, c, d, e, f, g, h, i, j, k, l, m, n) { + parent.scr.setwindow(a, b, c, d, e, f, g, h, i, j, k, l, m, n) +} + +function settitle(title) { + getwnd().settitle(title) +} + +function getwh() { + if (self.innerHeight) { + h=self.innerHeight + w=self.innerWidth + } + else if (document.documentElement && document.documentElement.clientHeight) { + h=document.documentElement.clientHeight + w=document.documentElement.clientWidth + } + else if (document.body) { + h=document.body.clientHeight + w=document.body.clientWidth + } +} \ No newline at end of file diff --git a/subsites/projects/algo/pages/start.htm b/subsites/projects/algo/pages/start.htm new file mode 100644 index 0000000..83db3ee --- /dev/null +++ b/subsites/projects/algo/pages/start.htm @@ -0,0 +1,14 @@ + + + + + + + + +

Welcome to Algo!

+

Algo is a website that imitates the look of a desktop environment. Algo is functional in most browsers and is released under GPLv3. As it is right now, Algo isn't terribly useful, but that might change someday. Navigate by clicking the tabs at the top and the bars at the bottom.

+
+ + + \ No newline at end of file diff --git a/subsites/projects/algo/pages/template.htm b/subsites/projects/algo/pages/template.htm new file mode 100644 index 0000000..2c7a7e4 --- /dev/null +++ b/subsites/projects/algo/pages/template.htm @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/algo/themes/default.css b/subsites/projects/algo/themes/default.css new file mode 100644 index 0000000..29938a0 --- /dev/null +++ b/subsites/projects/algo/themes/default.css @@ -0,0 +1,360 @@ +body { + background: #000 url('img/algo-logo.png') center fixed; +} + +.navbar { + position: absolute; + z-index: 100; +} + +.navi0 { + background: #bbb; + height: 25px; + border-color: #fff; + border-style: solid; + border-width: 0 0 2px 0; +} + +.navi1 { + background: #ccc; + height: 25px; + border-color: #fff; + border-style: solid; + border-width: 2px 0 0 0; +} + + + +.dropdown { + margin: 2px 5px 0 5px; + border-width: 0; + border-color: #fff; + border-style: solid; + width: 125px; +} + +.dropdown * { + font-size: 14px; + background: #444; + color: #fff; + padding: 3px; + display: none; + border-color: #bbb; + border-style: solid; + border-width: 0; + cursor: default; +} + +.dropdown .top { + font-size: 14px; + font-weight: bold; + color: #333; + height: 20px; + padding: 3px 0 0 0; + width: 125px; + text-align: center; + cursor: pointer; + border: 0; +} + +.dropdown .group { + padding: 0; +} + +.dropdown .entries { + top: -1px; + left: 133px; + width: 125px; + padding: 0; + border-width: 1px 1px 0 1px; +} + +.dropdown .entry, .dropdown .header { + border-width: 0 0 1px 0; + width: auto; +} + +.dropdown .entry { + cursor: pointer; +} + +.dropdown .header { + background: #444 url('img/next.png') no-repeat right 4px; + padding-right: 15px; + width: 107px; +} + +.dropdown .side { + top: -1px; + left: -9px; + width: 7px; + height: 100%; + background: #ddd; + padding: 1px 0 0 0; + border-width: 0 0 0 1px; +} + +.dropdown:hover { + border-color: #bbb; + margin: 2px 3px 0 5px; + border-width: 0 1px; + left: -1px; +} + +.dropdown:hover .top { + height: 26px; + color: #222; + border: 0; +} + +.dropdown .group:hover > .header { + background: #222 url('img/nexth.png') no-repeat right 4px; +} + +.dropdown .entry:hover { + background: #777; +} + +.dropdown > .drop0 { + background: url('img/tab3.png') no-repeat ; +} + +.dropdown:hover > .drop0 { + background: url('img/tab3.png') no-repeat 0 -30px; +} + +.dropdown > .drop1 { + background: url('img/tab4.png') no-repeat ; +} + +.dropdown:hover > .drop1 { + background: url('img/tab4.png') no-repeat 0 -30px; +} + +.dropdown > .drop2 { + background: url('img/tab5.png') no-repeat ; +} + +.dropdown:hover > .drop2 { + background: url('img/tab5.png') no-repeat 0 -30px; +} + +.dropdown > .drop3 { + background: url('img/tab2.png') no-repeat ; +} + +.dropdown:hover > .drop3 { + background: url('img/tab2.png') no-repeat 0 -30px; +} + +.dropdown > .drop4 { + background: url('img/tab1.png') no-repeat ; +} + +.dropdown:hover > .drop4 { + background: url('img/tab1.png') no-repeat 0 -30px; +} + +.dropdown > .drop5 { + background: url('img/tab6.png') no-repeat ; +} + +.dropdown:hover > .drop5 { + background: url('img/tab6.png') no-repeat 0 -30px; +} + + + +.abs { + width: 10px; +} + +.scrollup { + background: url('img/scrollup.png') no-repeat; +} + +.scrolldown { + background: url('img/scrolldown.png') no-repeat; +} + +.scrollup:hover { + background: url('img/scrolluph.png') no-repeat; +} + +.scrolldown:hover { + background: url('img/scrolldownh.png') no-repeat; +} + + + + +/* The following piece of css, namely the "screen" stuff, +is not correctly formatted css, as it is only used by a PHP script +that is requested by the JavaScript environment of Algohol. +That is the reason why it is commented out. +It is kept in the css file for ease of use. +All numbers are in the "px" unit and must be written without a unit. +screen { + hheight: 25; the height of a window header + margin_g: 5; the general margin of a window + margin_t: 2; the margin at the top of a window + bw: 16; box width; includes the window icon and the minimize/maximize/close buttons. + bh: 16; box height; includes the window icon and the minimize/maximize/close buttons. +} +*/ + +.window { + background: #fff; +} + +.window > .tl { + background: url('img/corners.png') no-repeat -20px 0; +} + +.window > .t { + background: #999; +} + +.window > .tr { + background: url('img/corners.png') no-repeat -25px 0; +} + +.window > .r { + background: #999; +} + +.window > .br { + background: url('img/corners.png') no-repeat -30px 0; +} + +.window > .b { + background: #999; +} + +.window > .bl { + background: url('img/corners.png') no-repeat -35px 0; +} + +.window > .l { + background: #999; +} + +.window#active > .tl { + background: url('img/corners.png') no-repeat 0 0; +} + +.window#active > .t { + background: #444; +} + +.window#active > .tr { + background: url('img/corners.png') no-repeat -5px 0; +} + +.window#active > .r { + background: #444; +} + +.window#active > .br { + background: url('img/corners.png') no-repeat -10px 0; +} + +.window#active > .b { + background: #444; +} + +.window#active > .bl { + background: url('img/corners.png') no-repeat -15px 0; +} + +.window#active > .l { + background: #444; +} + +.window > .title { + color: #fff; +} + +.window > .data { + background: #fff; +} + +.window > .icon { + background-repeat: no-repeat; + background-image: url('../icons/img/default.png'); +} + +.window > .title { + font-size: 14px; +} + +.window > .options > * { + background-image: url('img/action_icons.png'); +} + +.window > .options > .minimize { + background-position: 0 0; +} + +.window > .options > .minimize:hover { + background-position: -16px 0; +} + +.window > .options > .maximize { + background-position: -32px 0; +} + +.window > .options > .maximize:hover { + background-position: -48px 0; +} + +.window_max > .options > .maximize { + background-position: -64px 0; +} + +.window_max > .options > .maximize:hover { + background-position: -80px 0; +} + +.window > .options > .close { + background-position: -96px 0; +} + +.window > .options > .close:hover { + background-position: -112px 0; +} + + + +.appboxes * { + width: 100px; + margin: 2px; + padding: 2px; + border-color: #fff; + border-style: outset; + border-width: 1px; + float: left; + cursor: default; +} + +.appboxes .current { + border-style: inset; +} + +.appboxes *:hover { + background: #e2fbff; +} + +.appboxes .current:hover { + background: #d1ffea; +} + + + +.clock { + margin: 3px 2px 0 0; + padding: 2px; + border-left: 1px solid #aaa; + position: absolute; + right: 0; +} \ No newline at end of file diff --git a/subsites/projects/algo/themes/dev.css b/subsites/projects/algo/themes/dev.css new file mode 100644 index 0000000..29d46c1 --- /dev/null +++ b/subsites/projects/algo/themes/dev.css @@ -0,0 +1,273 @@ +body { + background: #000 url('img/bg.png') center; +} + +.navbar { + position: absolute; + z-index: 100; +} + + +.navi0 { + background: #bbb; + height: 25px; + border-color: #fff; + border-style: solid; + border-width: 0 0 2px 0; +} + +.navi1 { + background: #ccc; + height: 25px; + border-color: #fff; + border-style: solid; + border-width: 2px 0 0 0; +} + + +.dropdown, .dropdown_h { + margin: 2px 5px 0 5px; + border-width: 1px; + border-color: #fff; + border-style: solid; + width: 125px; +} + +.dropdown *, .dropdown_h * { + font-size: 14px; + background: #444; + color: #fff; + padding: 3px; + display: none; + border-color: #bbb; + border-style: solid; + border-width: 0; + cursor: default; +} + +.dropdown .top, .dropdown_h .top { + font-size: 14px; + font-weight: bold; + background: #333; + color: #fff; + padding-top: 0; + height: 14px; + padding: 1px 0 3px 0; + width: 125px; + text-align: center; + cursor: pointer; +} + +.dropdown .group { + padding: 0; +} + +.dropdown .entries { + top: -1px; + left: 133px; + width: 125px; + padding: 0; + border-width: 1px 1px 0 1px; +} + +.dropdown .entry, .dropdown .header { + border-width: 0 0 1px 0; + width: auto; +} + +.dropdown .entry { + cursor: pointer; +} + +.dropdown .header { + background: #444 url('../img/next.png') no-repeat right 4px; +} + +.dropdown .side { + top: -1px; + left: -9px; + width: 7px; + height: 100%; + background: #ddd; + padding: 1px 0 0 0; + border-width: 0 0 0 1px; +} + +.dropdown:hover { + border-color: #bbb; + margin:0 5px; + border-width: 0 1px; +} + +.dropdown:hover .top { + height: 28px; + color: #333; + background: #eee; + border-width: 0 1px 1px 1px; + border-left-color: #888; + border-bottom-color: #bbb; + border-right-color: #888; + padding-top: 4px; + left: -1px; +} + +.dropdown .group:hover > .header { + background: #222 url('../img/nexth.png') no-repeat right 4px; +} + +.dropdown .entry:hover { + background: #777; +} + + + + +.abs { + width: 10px; +} + +.scrollup { + background: url('img/scrollup.png') no-repeat; +} + +.scrolldown { + background: url('img/scrolldown.png') no-repeat; +} + +.scrollup:hover { + background: url('img/scrolluph.png') no-repeat; +} + +.scrolldown:hover { + background: url('img/scrolldownh.png') no-repeat; +} + +/* +All numbers are in the "px" unit and must be written without a unit. +screen { + hheight: 25; the height of a window header + margin_g: 5; the general margin of a window + margin_t: 2; the margin at the top of a window + bw: 16; box width; includes the window icon and the minimize/maximize/close buttons. + bh: 16; box height; includes the window icon and the minimize/maximize/close buttons. +} +*/ + + +.window { + background: #fff; +} + +.window > .tl { + background: #111; +} + +.window > .t { + background: #222; +} + +.window#active > .t { + background: #fff; +} + +.window > .tr { + background: #444; +} + +.window > .r { + background: #666; +} + +.window > .br { + background: #888; +} + +.window > .b { + background: #aaa; +} + +.window > .bl { + background: #ccc; +} + +.window > .l { + background: #eee; +} + +.window > .title { + color: #fff; + background: #000; +} + +.window#active > .title { + background: #aaa; +} + +.window > .handle { +} + +.window > .resize_handle { +} + +.window > .data { + background: #fff; +} + +.window > .icon { + background-repeat: no-repeat; + background-image: url('../icons/default.png'); +} + +.window > .options { + background: #00cc00; +} + +.window > .options > .minimize { + background: #000; +} + +.window > .options > .maximize { + background: #555; +} + +.window > .options > .close { + background: #aaa; +} + +.window_max > .options > .maximize { + background: blue; +} + + + +.appboxes * { + width: 100px; + margin: 2px; + padding: 2px; + border-color: #fff; + border-style: outset; + border-width: 1px; + float: left; + cursor: default; +} + +.appboxes .current { + border-style: inset; +} + +.appboxes *:hover { + background: #e2fbff; +} + +.appboxes .current:hover { + background: #d1ffea; +} + + +.clock { + margin: 3px 2px 0 0; + padding: 2px; + border-left: 1px solid #aaa; + position: absolute; + right: 0; +} diff --git a/subsites/projects/algo/themes/dir.txt b/subsites/projects/algo/themes/dir.txt new file mode 100644 index 0000000..36a4666 --- /dev/null +++ b/subsites/projects/algo/themes/dir.txt @@ -0,0 +1 @@ +This folder holds the themes css files. It's css files that holds information on how Algohol looks. Apart from the css files, there's also a php file. The links.php file links a title to a file and fetches that file. \ No newline at end of file diff --git a/subsites/projects/algo/themes/img/action_icons.png b/subsites/projects/algo/themes/img/action_icons.png new file mode 100644 index 0000000..be50b1c Binary files /dev/null and b/subsites/projects/algo/themes/img/action_icons.png differ diff --git a/subsites/projects/algo/themes/img/action_icons.png.txt b/subsites/projects/algo/themes/img/action_icons.png.txt new file mode 100644 index 0000000..0374fc2 --- /dev/null +++ b/subsites/projects/algo/themes/img/action_icons.png.txt @@ -0,0 +1 @@ +LICENSE: CC-SA \ No newline at end of file diff --git a/subsites/projects/algo/themes/img/algo-logo.png b/subsites/projects/algo/themes/img/algo-logo.png new file mode 100644 index 0000000..e572c38 Binary files /dev/null and b/subsites/projects/algo/themes/img/algo-logo.png differ diff --git a/subsites/projects/algo/themes/img/algo-logo.svg b/subsites/projects/algo/themes/img/algo-logo.svg new file mode 100644 index 0000000..3aa86dc --- /dev/null +++ b/subsites/projects/algo/themes/img/algo-logo.svg @@ -0,0 +1,183 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/subsites/projects/algo/themes/img/corners.png b/subsites/projects/algo/themes/img/corners.png new file mode 100644 index 0000000..7916bc7 Binary files /dev/null and b/subsites/projects/algo/themes/img/corners.png differ diff --git a/subsites/projects/algo/themes/img/dir.txt b/subsites/projects/algo/themes/img/dir.txt new file mode 100644 index 0000000..307178a --- /dev/null +++ b/subsites/projects/algo/themes/img/dir.txt @@ -0,0 +1 @@ +This folder holds the images used by the css themes files. \ No newline at end of file diff --git a/subsites/projects/algo/themes/img/next.png b/subsites/projects/algo/themes/img/next.png new file mode 100644 index 0000000..b13f65d Binary files /dev/null and b/subsites/projects/algo/themes/img/next.png differ diff --git a/subsites/projects/algo/themes/img/nexth.png b/subsites/projects/algo/themes/img/nexth.png new file mode 100644 index 0000000..b6af12f Binary files /dev/null and b/subsites/projects/algo/themes/img/nexth.png differ diff --git a/subsites/projects/algo/themes/img/scrolldown.png b/subsites/projects/algo/themes/img/scrolldown.png new file mode 100644 index 0000000..cdabd77 Binary files /dev/null and b/subsites/projects/algo/themes/img/scrolldown.png differ diff --git a/subsites/projects/algo/themes/img/scrolldownh.png b/subsites/projects/algo/themes/img/scrolldownh.png new file mode 100644 index 0000000..ce6ce9d Binary files /dev/null and b/subsites/projects/algo/themes/img/scrolldownh.png differ diff --git a/subsites/projects/algo/themes/img/scrollup.png b/subsites/projects/algo/themes/img/scrollup.png new file mode 100644 index 0000000..8147998 Binary files /dev/null and b/subsites/projects/algo/themes/img/scrollup.png differ diff --git a/subsites/projects/algo/themes/img/scrolluph.png b/subsites/projects/algo/themes/img/scrolluph.png new file mode 100644 index 0000000..e21eea0 Binary files /dev/null and b/subsites/projects/algo/themes/img/scrolluph.png differ diff --git a/subsites/projects/algo/themes/img/tab1.png b/subsites/projects/algo/themes/img/tab1.png new file mode 100644 index 0000000..a375117 Binary files /dev/null and b/subsites/projects/algo/themes/img/tab1.png differ diff --git a/subsites/projects/algo/themes/img/tab2.png b/subsites/projects/algo/themes/img/tab2.png new file mode 100644 index 0000000..10bdc21 Binary files /dev/null and b/subsites/projects/algo/themes/img/tab2.png differ diff --git a/subsites/projects/algo/themes/img/tab3.png b/subsites/projects/algo/themes/img/tab3.png new file mode 100644 index 0000000..1777ce9 Binary files /dev/null and b/subsites/projects/algo/themes/img/tab3.png differ diff --git a/subsites/projects/algo/themes/img/tab4.png b/subsites/projects/algo/themes/img/tab4.png new file mode 100644 index 0000000..242f4ec Binary files /dev/null and b/subsites/projects/algo/themes/img/tab4.png differ diff --git a/subsites/projects/algo/themes/img/tab5.png b/subsites/projects/algo/themes/img/tab5.png new file mode 100644 index 0000000..486b0d9 Binary files /dev/null and b/subsites/projects/algo/themes/img/tab5.png differ diff --git a/subsites/projects/algo/themes/img/tab6.png b/subsites/projects/algo/themes/img/tab6.png new file mode 100644 index 0000000..c3e5441 Binary files /dev/null and b/subsites/projects/algo/themes/img/tab6.png differ diff --git a/subsites/projects/algo/themes/indexes.php b/subsites/projects/algo/themes/indexes.php new file mode 100644 index 0000000..85ddacf --- /dev/null +++ b/subsites/projects/algo/themes/indexes.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/subsites/projects/algo/themes/links.php b/subsites/projects/algo/themes/links.php new file mode 100644 index 0000000..718baf8 --- /dev/null +++ b/subsites/projects/algo/themes/links.php @@ -0,0 +1,61 @@ + \ No newline at end of file diff --git a/subsites/projects/algo/todo.txt b/subsites/projects/algo/todo.txt new file mode 100644 index 0000000..848fc43 --- /dev/null +++ b/subsites/projects/algo/todo.txt @@ -0,0 +1,13 @@ +/* +More advanced versions of: + appbox_margin = 2 + appbox_padding = 2 + appbox_border = 1 +(Turn into arrays) + +do not maximize window on dblclick if maximize button is nonexistant + +Make the top/bottom attributes of navbars that are not positioned at the very top or bottom recognisable by the screen() class. +*/ + +cookie functions \ No newline at end of file diff --git a/subsites/projects/algo/version.txt b/subsites/projects/algo/version.txt new file mode 100644 index 0000000..5ad0148 --- /dev/null +++ b/subsites/projects/algo/version.txt @@ -0,0 +1 @@ +v.0.1 \ No newline at end of file diff --git a/subsites/projects/algo/window_elements.png b/subsites/projects/algo/window_elements.png new file mode 100644 index 0000000..22c006b Binary files /dev/null and b/subsites/projects/algo/window_elements.png differ diff --git a/subsites/projects/bsq/.gitignore b/subsites/projects/bsq/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/bsq/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/bsq/Cerebral_lobes.png b/subsites/projects/bsq/Cerebral_lobes.png new file mode 100644 index 0000000..21d81df Binary files /dev/null and b/subsites/projects/bsq/Cerebral_lobes.png differ diff --git a/subsites/projects/bsq/Cerebral_lobes.png.txt b/subsites/projects/bsq/Cerebral_lobes.png.txt new file mode 100644 index 0000000..56d8851 --- /dev/null +++ b/subsites/projects/bsq/Cerebral_lobes.png.txt @@ -0,0 +1 @@ +Image released under GFDL 1.2 or any later version. Author unknown. See . \ No newline at end of file diff --git a/subsites/projects/bsq/Cerveau_anime.gif b/subsites/projects/bsq/Cerveau_anime.gif new file mode 100644 index 0000000..7890dc3 Binary files /dev/null and b/subsites/projects/bsq/Cerveau_anime.gif differ diff --git a/subsites/projects/bsq/Cerveau_anime.gif.txt b/subsites/projects/bsq/Cerveau_anime.gif.txt new file mode 100644 index 0000000..de997a3 --- /dev/null +++ b/subsites/projects/bsq/Cerveau_anime.gif.txt @@ -0,0 +1 @@ +Image released under GFDL 1.2 or any later version. Author: modifié par Azariel. See . \ No newline at end of file diff --git a/subsites/projects/bsq/Friendly_stickman.png b/subsites/projects/bsq/Friendly_stickman.png new file mode 100644 index 0000000..933e38c Binary files /dev/null and b/subsites/projects/bsq/Friendly_stickman.png differ diff --git a/subsites/projects/bsq/Friendly_stickman.svg b/subsites/projects/bsq/Friendly_stickman.svg new file mode 100644 index 0000000..137a261 --- /dev/null +++ b/subsites/projects/bsq/Friendly_stickman.svg @@ -0,0 +1,32 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/bsq/Friendly_stickman.txt b/subsites/projects/bsq/Friendly_stickman.txt new file mode 100644 index 0000000..0e992ac --- /dev/null +++ b/subsites/projects/bsq/Friendly_stickman.txt @@ -0,0 +1 @@ +Image released under WTFPL 2.0. \ No newline at end of file diff --git a/subsites/projects/bsq/index.htm b/subsites/projects/bsq/index.htm new file mode 100644 index 0000000..cabda47 --- /dev/null +++ b/subsites/projects/bsq/index.htm @@ -0,0 +1,13 @@ + + + +Brainy Stickman Quiz + + + + + +
+
+ + \ No newline at end of file diff --git a/subsites/projects/bsq/script.js b/subsites/projects/bsq/script.js new file mode 100644 index 0000000..54c5921 --- /dev/null +++ b/subsites/projects/bsq/script.js @@ -0,0 +1,548 @@ +/* + This program is free software. It comes without any warranty, to + the extent permitted by applicable law. You can redistribute it + and/or modify it under the terms of the Do What The Fuck You Want + To Public License, Version 2, as published by Sam Hocevar. See + http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +/* +Questions and obstacles are defined in the end of this file. +*/ +function ld(num,d) { +if (d==0) num=Math.floor(num/30) +else num=Math.ceil(num/30) +return num +} + +function calc(dn) { +if (!clcn) { +clcn=true +var pstr +if (dn==star[num][3]) { +pstr="class='green'>CORRECT!" +saa[num]=3 +corrects++ +} +else { +pstr="class='red'>WRONG! ("+abc.substr(star[num][3]-1,1)+" was correct)" +saa[num]=1 +} +starstaken++ +bxd.innerHTML+="

" +} +} + +function showquestion() { +bxd.style.display="block" +bxd.style.width=(sqp*6.4-10)+"px" +bxd.style.height=(sqp*4-10)+"px" +bxd.style.marginLeft=(sqp*-3.2)+"px" +bxd.style.marginTop=(sqp*-2)+"px" +if (sqp<75) { +sqp+=3 +setTimeout("showquestion()",10) +} +else { +clcn=false +rsqw=true +bxd.innerHTML="

"+star[num][1]+"

" +for (var i=0;i"+abc.substr(i,1)+": "+star[num][2][i]+"

" +} +} +} + +function bhidequestion() { +bxd.innerHTML="" +rsqw=false +hidequestion() +} + +function hidequestion() { +bxd.style.width=(sqp*6.4-10)+"px" +bxd.style.height=(sqp*4-10)+"px" +bxd.style.marginLeft=(sqp*-3.2)+"px" +bxd.style.marginTop=(sqp*-2)+"px" +if (sqp>0) { +sqp-=3 +setTimeout("hidequestion()",10) +} +else { +bxd.style.display="none" +sqp=1 +qs=false +} +} + +function nrmlclr() { +if (ncc) { +qe=true +hclr="#ff0000" +ctxo.style.backgroundColor="#ff0000" +ncc=false +setTimeout("nrmlclr()",500) +} +else { +ncc=true +hclr="#000" +ctxo.style.backgroundColor="#000" +qe=false +} +} + +function motion() { +var i,pi +ctx.clearRect(0,0,640,400) +if (p>305 && pend-291) pp=305+p-end+291 +else pp=p + +if (!rsqw) { +if (j<0) { +jumping=false +j=0 +jc=5 +l=41 +a=21 +} +if (jumping) { +if (j>200) jc=-6 +if (jc>=0) j+=jc-j/100 +else j+=jc+j/100 +} +} + +if (!walkingr && !walkingl) { +cutd=0 +ta=1 +} +if (cutd<10) speed=ospeed+cutd/3 + +ctx.strokeStyle="#fff" +ctx.lineWidth=2 + +// BACKGROUND +for (pi=0;piy && saa[i]==2 && !qs) { +qs=true +num=i +sqp=1 +showquestion() +} +if (x+starw>0 && x<640) { +if (saa[i]==2) ctx.drawImage(starimg,x,y) +else if (saa[i]==1 && stadu) ctx.drawImage(starimgu,x,y) +else if (saa[i]==3 && stadk) ctx.drawImage(starimgk,x,y) +} +} +} + +// TRAPS +if (trapd) { +for (i=0;ix && pp+40y && !qs && !qe) { +timeshurt++ +nrmlclr() +} +if (x+trapw>0 && x<640) ctx.drawImage(trapimg,x,y) +} +} + +// STICK FIGURE START + +// LEGS +ctx.beginPath() +ctx.moveTo(pp+l,400-j) +ctx.lineTo(pp+20,350-j) +ctx.lineTo(pp+40-l,400-j) + +// BODY +ctx.moveTo(pp+20,350-j) +ctx.lineTo(pp+20,300-j) + +// ARMS +ctx.moveTo(pp+20,320-j) +ctx.lineTo(pp+10+a,350-j) +ctx.moveTo(pp+20,320-j) +ctx.lineTo(pp+30-a,350-j) +ctx.stroke() + +// HEAD +ctx.fillStyle=hclr +ctx.beginPath() +ctx.arc(pp+20,285-j,15,0,Math.PI*2,true) +ctx.fill() +ctx.stroke() + +// EYE +ctx.fillStyle="#fff" +ctx.beginPath() +ctx.arc(pp+eyex,eyey-j,3,0,Math.PI*2,true) +ctx.fill() + +// MOUTH +ctx.beginPath() +ctx.lineCap="round" +ctx.moveTo(pp+mouthax,mouthay-j) +ctx.lineTo(pp+mouthbx,mouthby-j) +ctx.stroke() + +// STICK FIGURE END + +if (!rsqw) { +if (p>=end) p=end-1 +else if (p<0) p=0 +if (p-1 && (walkingr || walkingl)) { +if (!jumping) { +if (l>40) lc=-1 +else if (l<1) lc=1 +if (a>20) ac=-.5 +else if (a<1) ac=.5 +l+=lc*speed +a+=ac*speed +} +if (walkingr) p+=speed +else p-=speed +} + +if (jumping) { +l=60 +a=40 +} +if (p>end || p<0) { +a=20 +l=40 +} +} + +if (p>=end) endgame() + +cht=setTimeout("motion()",20) +} + +function endgame() { +if (starstaken

Your grade is...
"+grade+"

OK

" +} +} + +function endall() { +document.body.removeChild(bxd) +document.body.removeChild(ctxo) +} + +function md(e) { +if (window.event) kc=window.event.keyCode +else if (e) kc=e.which + +if (!walkingr && kc==39) { +walkingr=true +walkingl=false +cutd=0 +} +if (!walkingl && kc==37) { +walkingr=false +walkingl=true +cutd=0 +} +else if (!jumping && kc==38) jumping=true + +if (walkingl) { +eyex=12 +eyey=283 +mouthax=20 +mouthay=293 +mouthbx=10 +mouthby=295 +} +else if (walkingr) { +eyex=28 +eyey=283 +mouthax=30 +mouthay=295 +mouthbx=20 +mouthby=293 +} +} + +function mu(e) { +if (window.event) kc=window.event.keyCode +else if (e) kc=e.which + +if (walkingr && kc==39) walkingr=false +if (walkingl && kc==37) walkingl=false +} + +function time() { +if (cutd==0) ta=1 +cutd+=ta +} + +function load() { +var i +fdng=100 +ospeed=3 +speed=ospeed +p=0 +l=0 +a=0 +walkingr=false +walkingl=false +jumping=false +jc=5 +j=0 +qs=false +qe=false +rsqw=false +corrects=0 +starstaken=0 +abc="ABCDEFGH" +cutd=0 +ta=1 +ncc=true +hclr="#000" +timeshurt=0 + +// BACKGROUNDS +bg=new Array() +bg[0]=new Array() +bg[0][0]=new Image() +bg[0][0].src="Cerebral_lobes.png" +bg[0][1]=.5 +bg[0][2]=20 +bg[1]=new Array() +bg[1][0]=new Image() +bg[1][0].src="Cerveau_anime.gif" +bg[1][1]=1 +bg[1][2]=90 +bg[2]=new Array() +bg[2][0]=new Image() +bg[2][0].src="Friendly_stickman.png" +bg[2][1]=1.5 +bg[2][2]=170 +bgl=bg.length + +// STARS +star=new Array() +star[0]=new Array() +star[0][0]=[200,3] +star[0][1]="To what extent does bicycles apply to world economics?" +star[0][2]=["A great extent","A noticable extent","Nothing at all","I don't know"] +star[0][3]=4 +star[1]=new Array() +star[1][0]=[650,80] +star[1][1]="What is a chocobo?" +star[1][2]=["A fictional bird","A fictional frog","A real bird","A real frog"] +star[1][3]=1 +star[2]=new Array() +star[2][0]=[850,100] +star[2][1]="What is the size of an average male human brain?" +star[2][2]=["1200-1300cm3","1100-1200cm3","1300-1400cm3","1000-1100cm3"] +star[2][3]=2 +star[3]=new Array() +star[3][0]=[1200,23] +star[3][1]="What is 2 * 8^(1/3) + 4?" +star[3][2]=["2","4","6","8"] +star[3][3]=4 +star[4]=new Array() +star[4][0]=[1577,150] +star[4][1]="What colour is the beak of a male blackbird?" +star[4][2]=["Grey","Black","Brown","Orange"] +star[4][3]=4 +star[5]=new Array() +star[5][0]=[1700,10] +star[5][1]="Do you like this quiz?" +star[5][2]=["Yes","No","Perhaps","Eventually","Maybe","Depends"] +star[5][3]=1 +star[6]=new Array() +star[6][0]=[1900,20] +star[6][1]="Who is Horacio Peña?" +star[6][2]=["An actor","A writer"] +star[6][3]=2 +star[7]=new Array() +star[7][0]=[2222,111] +star[7][1]="When did Monkey Island reveal its truth?" +star[7][2]=["1990","1991","1992","Hasn't happened yet"] +star[7][3]=4 +star[8]=new Array() +star[8][0]=[2500,23] +star[8][1]="Do you gimp?" +star[8][2]=["No, I photoshop.","Yes."] +star[8][3]=2 +starl=star.length + +Array.prototype.add=function(x,y){this[this.length]=[x,y]} + +// TRAPS +trap=new Array() +trap.add(100,5) +trap.add(300,60) +trap.add(350,43) +trap.add(660,20) +trap.add(700,250) +trap.add(750,250) +trap.add(800,250) +trap.add(860,2) +trap.add(920,30) +trap.add(930,40) +trap.add(940,50) +trap.add(1250,40) +trap.add(1400,68) +trap.add(1537,10) +trap.add(1567,10) +trap.add(1597,10) +trap.add(1700,170) +trap.add(1800,64) +trap.add(1950,3) +trap.add(1950,23) +trap.add(1950,43) +trap.add(1950,63) +trap.add(1950,203) +trap.add(2200,10) +trap.add(2375,10) +trap.add(2435,10) +trapl=trap.length + +saa=new Array() +for (i=0;i0) { +fdng-=8 +setTimeout("startgame()",10) +} +else { +document.onkeydown=md +document.onkeyup=mu +strt.style.display="none" +motion() +setInterval("time()",500) +} +} + +window.onload=load \ No newline at end of file diff --git a/subsites/projects/bsq/star.png b/subsites/projects/bsq/star.png new file mode 100644 index 0000000..994751d Binary files /dev/null and b/subsites/projects/bsq/star.png differ diff --git a/subsites/projects/bsq/stark.png b/subsites/projects/bsq/stark.png new file mode 100644 index 0000000..11af5ef Binary files /dev/null and b/subsites/projects/bsq/stark.png differ diff --git a/subsites/projects/bsq/start.png b/subsites/projects/bsq/start.png new file mode 100644 index 0000000..36affee Binary files /dev/null and b/subsites/projects/bsq/start.png differ diff --git a/subsites/projects/bsq/start.xcf b/subsites/projects/bsq/start.xcf new file mode 100644 index 0000000..a349498 Binary files /dev/null and b/subsites/projects/bsq/start.xcf differ diff --git a/subsites/projects/bsq/staru.png b/subsites/projects/bsq/staru.png new file mode 100644 index 0000000..b4ca3b0 Binary files /dev/null and b/subsites/projects/bsq/staru.png differ diff --git a/subsites/projects/bsq/style.css b/subsites/projects/bsq/style.css new file mode 100644 index 0000000..812541b --- /dev/null +++ b/subsites/projects/bsq/style.css @@ -0,0 +1,106 @@ +* { + margin:0; + padding:0; + } + +body { + background:#000; + } + +#canvas { + position:absolute; + top:50%; + left:50%; + margin-top:-202px; + margin-left:-322px; + background:#000; + border:2px solid #aaa; + } + +#box { + position:absolute; + top:50%; + left:50%; + border:2px solid #ccc; + padding:5px; + background:#000; + opacity:.9; + filter:alpha(opacity=90); + -moz-opacity:.9; + color:#fff; + display:none; + z-index:2; + } + +#start { + background:#000 url(start.png) no-repeat; + width:640px; + height:480px; + position:absolute; + top:50%; + left:50%; + margin-top:-242px; + margin-left:-322px; + z-index:3; + border:2px solid #fff; + } + +h1 { + font:normal 26px georgia; + } + +h2 { + font:normal 76px georgia; + } + +h3 { + font:normal 46px arial; + } + +h3 div { + display:inline; + color:#ff0000; + font:bold 50px 'trebuchet ms'; + } + +h4 { + width:100px; + margin:0 auto; + text-align:center; + cursor:pointer; + font:normal 60px 'lucida console'; + padding:3px; + border:5px dotted #aaa; + } + +h4:hover { + background:#444; + border:5px dotted #777; + } + +h4:active { + background:#777; + border:5px dotted #999; + } + +p { + font:18px arial; + padding:3px; + cursor:pointer; + } + +p:hover { + background:#666; + } + +p.green, p.red { + margin-top:10px; + font:26px 'trebuchet ms'; + } + +p.green { + color:#00ff00; + } +p.red { + color:#ff0000; + } \ No newline at end of file diff --git a/subsites/projects/bsq/trap.png b/subsites/projects/bsq/trap.png new file mode 100644 index 0000000..43c1dbf Binary files /dev/null and b/subsites/projects/bsq/trap.png differ diff --git a/subsites/projects/canvas/.gitignore b/subsites/projects/canvas/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/canvas/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/canvas/box.htm b/subsites/projects/canvas/box.htm new file mode 100644 index 0000000..f2c82ee --- /dev/null +++ b/subsites/projects/canvas/box.htm @@ -0,0 +1,117 @@ + + + +Canvas box + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/cb.htm b/subsites/projects/canvas/cb.htm new file mode 100644 index 0000000..1ab96b1 --- /dev/null +++ b/subsites/projects/canvas/cb.htm @@ -0,0 +1,78 @@ + + + +Circles in boxes + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/cc.htm b/subsites/projects/canvas/cc.htm new file mode 100644 index 0000000..49d5322 --- /dev/null +++ b/subsites/projects/canvas/cc.htm @@ -0,0 +1,482 @@ + + + +Circle Class + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/cursor.htm b/subsites/projects/canvas/cursor.htm new file mode 100644 index 0000000..ebd5555 --- /dev/null +++ b/subsites/projects/canvas/cursor.htm @@ -0,0 +1,97 @@ + + + +Cursor-following canvas circles + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/df.htm b/subsites/projects/canvas/df.htm new file mode 100644 index 0000000..ed3e7d1 --- /dev/null +++ b/subsites/projects/canvas/df.htm @@ -0,0 +1,76 @@ + + + +CanvasDraw :: Paintbrush + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/dl.htm b/subsites/projects/canvas/dl.htm new file mode 100644 index 0000000..9d85128 --- /dev/null +++ b/subsites/projects/canvas/dl.htm @@ -0,0 +1,106 @@ + + + +CanvasDraw :: Lines + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/img/box.png b/subsites/projects/canvas/img/box.png new file mode 100644 index 0000000..b715966 Binary files /dev/null and b/subsites/projects/canvas/img/box.png differ diff --git a/subsites/projects/canvas/img/cb.png b/subsites/projects/canvas/img/cb.png new file mode 100644 index 0000000..96697ef Binary files /dev/null and b/subsites/projects/canvas/img/cb.png differ diff --git a/subsites/projects/canvas/img/cc.png b/subsites/projects/canvas/img/cc.png new file mode 100644 index 0000000..76e6069 Binary files /dev/null and b/subsites/projects/canvas/img/cc.png differ diff --git a/subsites/projects/canvas/img/cursor.png b/subsites/projects/canvas/img/cursor.png new file mode 100644 index 0000000..0c2c413 Binary files /dev/null and b/subsites/projects/canvas/img/cursor.png differ diff --git a/subsites/projects/canvas/img/df.png b/subsites/projects/canvas/img/df.png new file mode 100644 index 0000000..9e5ec1f Binary files /dev/null and b/subsites/projects/canvas/img/df.png differ diff --git a/subsites/projects/canvas/img/dl.png b/subsites/projects/canvas/img/dl.png new file mode 100644 index 0000000..ea65970 Binary files /dev/null and b/subsites/projects/canvas/img/dl.png differ diff --git a/subsites/projects/canvas/img/header.png b/subsites/projects/canvas/img/header.png new file mode 100644 index 0000000..a497b29 Binary files /dev/null and b/subsites/projects/canvas/img/header.png differ diff --git a/subsites/projects/canvas/img/kr.jpg b/subsites/projects/canvas/img/kr.jpg new file mode 100644 index 0000000..57316a2 Binary files /dev/null and b/subsites/projects/canvas/img/kr.jpg differ diff --git a/subsites/projects/canvas/img/poly.png b/subsites/projects/canvas/img/poly.png new file mode 100644 index 0000000..c52857d Binary files /dev/null and b/subsites/projects/canvas/img/poly.png differ diff --git a/subsites/projects/canvas/img/pr.png b/subsites/projects/canvas/img/pr.png new file mode 100644 index 0000000..d29ad89 Binary files /dev/null and b/subsites/projects/canvas/img/pr.png differ diff --git a/subsites/projects/canvas/img/rc.png b/subsites/projects/canvas/img/rc.png new file mode 100644 index 0000000..bb7e8a2 Binary files /dev/null and b/subsites/projects/canvas/img/rc.png differ diff --git a/subsites/projects/canvas/img/vc.png b/subsites/projects/canvas/img/vc.png new file mode 100644 index 0000000..d82e0c2 Binary files /dev/null and b/subsites/projects/canvas/img/vc.png differ diff --git a/subsites/projects/canvas/index.php b/subsites/projects/canvas/index.php new file mode 100644 index 0000000..6e83ea2 --- /dev/null +++ b/subsites/projects/canvas/index.php @@ -0,0 +1,149 @@ +",$fr); +$fr=explode("",$fr[1]); +$title=$fr[0]; +$sites.="".$title.""; +} +} +?> + + + +Experimenting with canvas + + + + +
+ +
+ +A new tag has entered the realms of internet browsing: CANVAS! With the canvas tag, people are now able to generate images in HTML! Not all browsers support it, but they probably will at some point. The point is, I've been experimenting a little with it, and to my delight it's actually pretty easy to work with. If you see something in one of my experiments that you like, feel free to copy-paste. Consider it free software. +
Your browser doesn't support use of the canvas tag. I haven't included error detection in my experiments, so your browser is likely to show an error. Browsers that support canvas include Firefox, Opera and Safari.
+

Here it is:

+
+ +
+Hopefully your browser won't crash.. +
+
+ + \ No newline at end of file diff --git a/subsites/projects/canvas/poly.htm b/subsites/projects/canvas/poly.htm new file mode 100644 index 0000000..45d49f6 --- /dev/null +++ b/subsites/projects/canvas/poly.htm @@ -0,0 +1,98 @@ + + + +Polygons + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/pr.htm b/subsites/projects/canvas/pr.htm new file mode 100644 index 0000000..e6910b2 --- /dev/null +++ b/subsites/projects/canvas/pr.htm @@ -0,0 +1,43 @@ + + + +Canvas picture rotating + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/rc.htm b/subsites/projects/canvas/rc.htm new file mode 100644 index 0000000..28da0f7 --- /dev/null +++ b/subsites/projects/canvas/rc.htm @@ -0,0 +1,66 @@ + + + +Random canvas circles + + + + + + + \ No newline at end of file diff --git a/subsites/projects/canvas/vc.htm b/subsites/projects/canvas/vc.htm new file mode 100644 index 0000000..017d8b4 --- /dev/null +++ b/subsites/projects/canvas/vc.htm @@ -0,0 +1,59 @@ + + + +Vortex of canvas circles + + + + + + + \ No newline at end of file diff --git a/subsites/projects/dsktp/.gitignore b/subsites/projects/dsktp/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/dsktp/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/dsktp/ci.php b/subsites/projects/dsktp/ci.php new file mode 100644 index 0000000..4d5b86b --- /dev/null +++ b/subsites/projects/dsktp/ci.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/subsites/projects/dsktp/icons/qmark.png b/subsites/projects/dsktp/icons/qmark.png new file mode 100644 index 0000000..7f6f601 Binary files /dev/null and b/subsites/projects/dsktp/icons/qmark.png differ diff --git a/subsites/projects/dsktp/img/close.png b/subsites/projects/dsktp/img/close.png new file mode 100644 index 0000000..a11f959 Binary files /dev/null and b/subsites/projects/dsktp/img/close.png differ diff --git a/subsites/projects/dsktp/img/closec.png b/subsites/projects/dsktp/img/closec.png new file mode 100644 index 0000000..12d0b14 Binary files /dev/null and b/subsites/projects/dsktp/img/closec.png differ diff --git a/subsites/projects/dsktp/img/closeh.png b/subsites/projects/dsktp/img/closeh.png new file mode 100644 index 0000000..698e9b4 Binary files /dev/null and b/subsites/projects/dsktp/img/closeh.png differ diff --git a/subsites/projects/dsktp/img/deficon.png b/subsites/projects/dsktp/img/deficon.png new file mode 100644 index 0000000..2e06fe1 Binary files /dev/null and b/subsites/projects/dsktp/img/deficon.png differ diff --git a/subsites/projects/dsktp/img/desktop.png b/subsites/projects/dsktp/img/desktop.png new file mode 100644 index 0000000..b6b6ad2 Binary files /dev/null and b/subsites/projects/dsktp/img/desktop.png differ diff --git a/subsites/projects/dsktp/img/desktopc.png b/subsites/projects/dsktp/img/desktopc.png new file mode 100644 index 0000000..c391495 Binary files /dev/null and b/subsites/projects/dsktp/img/desktopc.png differ diff --git a/subsites/projects/dsktp/img/desktoph.png b/subsites/projects/dsktp/img/desktoph.png new file mode 100644 index 0000000..f848507 Binary files /dev/null and b/subsites/projects/dsktp/img/desktoph.png differ diff --git a/subsites/projects/dsktp/img/entry.png b/subsites/projects/dsktp/img/entry.png new file mode 100644 index 0000000..c131165 Binary files /dev/null and b/subsites/projects/dsktp/img/entry.png differ diff --git a/subsites/projects/dsktp/img/entryc.png b/subsites/projects/dsktp/img/entryc.png new file mode 100644 index 0000000..5ed80a5 Binary files /dev/null and b/subsites/projects/dsktp/img/entryc.png differ diff --git a/subsites/projects/dsktp/img/entryh.png b/subsites/projects/dsktp/img/entryh.png new file mode 100644 index 0000000..e599f79 Binary files /dev/null and b/subsites/projects/dsktp/img/entryh.png differ diff --git a/subsites/projects/dsktp/img/entrysel.png b/subsites/projects/dsktp/img/entrysel.png new file mode 100644 index 0000000..1f0e1e8 Binary files /dev/null and b/subsites/projects/dsktp/img/entrysel.png differ diff --git a/subsites/projects/dsktp/img/entryselc.png b/subsites/projects/dsktp/img/entryselc.png new file mode 100644 index 0000000..3319490 Binary files /dev/null and b/subsites/projects/dsktp/img/entryselc.png differ diff --git a/subsites/projects/dsktp/img/entryselh.png b/subsites/projects/dsktp/img/entryselh.png new file mode 100644 index 0000000..fbbcba0 Binary files /dev/null and b/subsites/projects/dsktp/img/entryselh.png differ diff --git a/subsites/projects/dsktp/img/launch.png b/subsites/projects/dsktp/img/launch.png new file mode 100644 index 0000000..979d9f4 Binary files /dev/null and b/subsites/projects/dsktp/img/launch.png differ diff --git a/subsites/projects/dsktp/img/launchc.png b/subsites/projects/dsktp/img/launchc.png new file mode 100644 index 0000000..302a19f Binary files /dev/null and b/subsites/projects/dsktp/img/launchc.png differ diff --git a/subsites/projects/dsktp/img/launchh.png b/subsites/projects/dsktp/img/launchh.png new file mode 100644 index 0000000..4fc76ca Binary files /dev/null and b/subsites/projects/dsktp/img/launchh.png differ diff --git a/subsites/projects/dsktp/img/ll.png b/subsites/projects/dsktp/img/ll.png new file mode 100644 index 0000000..c909143 Binary files /dev/null and b/subsites/projects/dsktp/img/ll.png differ diff --git a/subsites/projects/dsktp/img/lle.png b/subsites/projects/dsktp/img/lle.png new file mode 100644 index 0000000..352bdb8 Binary files /dev/null and b/subsites/projects/dsktp/img/lle.png differ diff --git a/subsites/projects/dsktp/img/lleh.png b/subsites/projects/dsktp/img/lleh.png new file mode 100644 index 0000000..fb3b26c Binary files /dev/null and b/subsites/projects/dsktp/img/lleh.png differ diff --git a/subsites/projects/dsktp/img/llt.png b/subsites/projects/dsktp/img/llt.png new file mode 100644 index 0000000..8139049 Binary files /dev/null and b/subsites/projects/dsktp/img/llt.png differ diff --git a/subsites/projects/dsktp/img/logo.jpg b/subsites/projects/dsktp/img/logo.jpg new file mode 100644 index 0000000..b74d181 Binary files /dev/null and b/subsites/projects/dsktp/img/logo.jpg differ diff --git a/subsites/projects/dsktp/img/menubar.png b/subsites/projects/dsktp/img/menubar.png new file mode 100644 index 0000000..5f51a09 Binary files /dev/null and b/subsites/projects/dsktp/img/menubar.png differ diff --git a/subsites/projects/dsktp/img/minimize.png b/subsites/projects/dsktp/img/minimize.png new file mode 100644 index 0000000..acc80c0 Binary files /dev/null and b/subsites/projects/dsktp/img/minimize.png differ diff --git a/subsites/projects/dsktp/img/minimizec.png b/subsites/projects/dsktp/img/minimizec.png new file mode 100644 index 0000000..38cf2c7 Binary files /dev/null and b/subsites/projects/dsktp/img/minimizec.png differ diff --git a/subsites/projects/dsktp/img/minimizeh.png b/subsites/projects/dsktp/img/minimizeh.png new file mode 100644 index 0000000..9e35326 Binary files /dev/null and b/subsites/projects/dsktp/img/minimizeh.png differ diff --git a/subsites/projects/dsktp/img/scrolldown.png b/subsites/projects/dsktp/img/scrolldown.png new file mode 100644 index 0000000..273fb5a Binary files /dev/null and b/subsites/projects/dsktp/img/scrolldown.png differ diff --git a/subsites/projects/dsktp/img/scrolldownc.png b/subsites/projects/dsktp/img/scrolldownc.png new file mode 100644 index 0000000..c00b04b Binary files /dev/null and b/subsites/projects/dsktp/img/scrolldownc.png differ diff --git a/subsites/projects/dsktp/img/scrollup.png b/subsites/projects/dsktp/img/scrollup.png new file mode 100644 index 0000000..ffaa363 Binary files /dev/null and b/subsites/projects/dsktp/img/scrollup.png differ diff --git a/subsites/projects/dsktp/img/scrollupc.png b/subsites/projects/dsktp/img/scrollupc.png new file mode 100644 index 0000000..e724556 Binary files /dev/null and b/subsites/projects/dsktp/img/scrollupc.png differ diff --git a/subsites/projects/dsktp/img/top.png b/subsites/projects/dsktp/img/top.png new file mode 100644 index 0000000..b91124b Binary files /dev/null and b/subsites/projects/dsktp/img/top.png differ diff --git a/subsites/projects/dsktp/img/topselected.png b/subsites/projects/dsktp/img/topselected.png new file mode 100644 index 0000000..bd3a5b4 Binary files /dev/null and b/subsites/projects/dsktp/img/topselected.png differ diff --git a/subsites/projects/dsktp/index.htm b/subsites/projects/dsktp/index.htm new file mode 100644 index 0000000..f52af59 --- /dev/null +++ b/subsites/projects/dsktp/index.htm @@ -0,0 +1,2 @@ + +dsktp \ No newline at end of file diff --git a/subsites/projects/dsktp/script.js b/subsites/projects/dsktp/script.js new file mode 100644 index 0000000..a768297 --- /dev/null +++ b/subsites/projects/dsktp/script.js @@ -0,0 +1,589 @@ +/* + This program is free software. It comes without any warranty, to + the extent permitted by applicable law. You can redistribute it + and/or modify it under the terms of the Do What The Fuck You Want + To Public License, Version 2, as published by Sam Hocevar. See + http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +/* + This code is MESSY! It is UNCOMMENTED! It is JAVASCRIPT! + In short: It's not perfect. WTF. +*/ + +lw=true +selected=false +x=0 +y=0 +index=0 +opts=true +ccl=null +cmi=null +cemd=null +menuh=30 +lsp=0 +ll=false +nom=0 +dpc=0 +mst=0 + +function mdown(num) { +c=0 +for (i=0;ibnz[num]) { +bnz[c]-=1 +node.style.zIndex=bnz[c] +} +} +c+=1 +} +} +bnz[num]=index + +document.getElementById("select").id="selected" + +offl=document.getElementById("selected").offsetLeft +offt=document.getElementById("selected").offsetTop +xcoor=x-offl +ycoor=y-offt +xm=xcoor +ym=ycoor + +c=0 +for (i=0;i0 && x>0 && ynum) { +for (ii=0;iinum) { +node.lang=c-1 +} +c+=1 +} +} +menuc.removeChild(document.getElementById("eremove")) + +if (index>nom) { +mdown(bnh) +mup() +} +checkscroll() +} + +function istop(num) { +num=num*1 +for (i=0;iqheight || mon) { +if (mon) nwdiv.style.height=qheight+"px" + +for (i=0;inom) { +mdown(tnt) +mup() +} +} + +function godesktop() { +if (index>0) { +mdown(dpc) +mup() +minimizewindow(dpc) +dpc+=1 +if (dpc0) { +lsp-=10 +launchlist.style.height=lsp+"%" +llto=setTimeout("listslided()",1) +} +else { +launch.className="" +ll=false +} +} + +function listslideu() { +if (lsp<80) { +lsp+=10 +launchlist.style.height=lsp+"%" +llto=setTimeout("listslideu()",1) +} +else { +ll=true +} +} + +function launchtlist() { +if (!ll) { +launch.className="click" +listslideu() +} +} + +function checkscroll() { +msh=menuc.scrollHeight +if (msh>26) { +scrollmenu.className="v" +menuc.scrollTop=mst +} +else { +menuc.scrollTop=0 +//mst=menuc.scrollTop +scrollmenu.className="" +} +} + +function scrolltmenu(ud) { +msh=menuc.scrollHeight +if (ud) { +menuc.scrollTop+=26 +} +else { +menuc.scrollTop-=26 +} +mst=menuc.scrollTop +} + +function load() { +if (lw) { +stylesheet=document.createElement("link") +stylesheet.rel="stylesheet" +stylesheet.type="text/css" +stylesheet.href="style.css" +head=document.getElementsByTagName("head")[0] +head.appendChild(stylesheet) +windows=document.createElement("div") +windows.id="windows" +windows.onmousedown=function(){cnellh()} +menu=document.createElement("div") +menuc=document.createElement("div") +menuc.id="menuc" +menu.id="menu" +menu.onmousedown=function(){cnellh()} +menu.appendChild(menuc) +launch=document.createElement("div") +launch.id="launch" +launch.onmousedown=function(){launchtlist()} +desktop=document.createElement("div") +desktop.id="desktop" +desktop.onmousedown=function(){this.className="click"} +desktop.onmouseup=function(){this.className=""} +desktop.onclick=function(){godesktop()} +scrollmenu=document.createElement("div") +scrollmenu.id="scrollmenu" +scrollup=document.createElement("div") +scrollup.id="scrollup" +scrollup.onmousedown=function(){this.className="click"} +scrollup.onmouseout=function(){this.className=""} +scrollup.onclick=function(){this.className="";scrolltmenu(false)} +scrolldown=document.createElement("div") +scrolldown.id="scrolldown" +scrolldown.onmousedown=function(){this.className="click"} +scrolldown.onmouseout=function(){this.className=""} +scrolldown.onclick=function(){this.className="";scrolltmenu(true)} +scrollmenu.appendChild(scrollup) +scrollmenu.appendChild(scrolldown) +menu.appendChild(launch) +menu.appendChild(desktop) +menu.appendChild(scrollmenu) +launchlist=document.createElement("div") +launchlistc=document.createElement("div") +launchlistcc=document.createElement("div") +launchlist.id="launchlist" +launchlistc.id="launchlistc" +launchlistcc.id="launchlistcc" + +ghjkl="sdgtsdgh sh sdf sfdh sdf hdfh dfdfx hgf gfj gfj gfj gfj gfj gfj gfgfj gf gfj gf jg gf j g gfj dj jyfrdj uy dju ydjy jgf jfryj drj d fhjf5d 4df5j 1651j gf6j15dr6j156 1ty5j 6dfy1j 6df1j 56dy1j 56dy1j56 1d6j1 d5f6j1 df56j1 xhfx hf hfd hdf hxdf hdf sfgj fghjftr sjsfjfgjfgjfgj sdgsgsdfg sadfg asdg as gsd sdfag sadfg sagra ergrh adf" +welctxt="Welcome to dsktp! Browse through all the cool stuff in the \"Launch\" menu. If you're using Firefox or IE7, you shouldn't have any problems viewing this site. Safari hasn't been tested properly, but there seem to be no problems. Opera appears to have some issues with the \"Launch\" menu where the items aren't showing. Explore!" + +programs=new Array() +program=new Array() +programimg=new Array() +programs[0]=new Array() +programs[0][0]="Program 1" +programs[0][1]="1st program" +programs[0][2]="Random content...
asga dhgs 8fd4 9 s fhas dhszf gzss sdg 5s s 5 dg5dfh adfh!"+ghjkl +programs[0][3]=200 +programs[0][4]=150 +programs[0][5]=false +programs[0][6]=null +programs[1]=new Array() +programs[1][0]="Program 2" +programs[1][1]="2nd program" +programs[1][2]="Random content...
asga dhgsdfdf 8df458 df dfh fhass gsd8 49 s489 dhdfh adfh!" +programs[1][3]=200 +programs[1][4]=150 +programs[1][5]=true +programs[1][6]=null +programs[2]=new Array() +programs[2][0]="Program 3" +programs[2][1]="3rd program" +programs[2][2]="Random content...
asdf hxdf hxdf dh dth th ga dhgsfgj dfhhas dh 5g4dfh adfh!" +programs[2][3]=100 +programs[2][4]=300 +programs[2][5]=false +programs[2][6]="qmark" + +nop=programs.length +for (i=0;i0) { +if (sdfg==0) { +sdfg=1 +if (werty +Well done, my friend. You actually made it to the error page. You are worthy. \ No newline at end of file diff --git a/subsites/projects/eonaton/0_0.php b/subsites/projects/eonaton/0_0.php new file mode 100644 index 0000000..3f7d17f --- /dev/null +++ b/subsites/projects/eonaton/0_0.php @@ -0,0 +1,7 @@ + +

Welcome to Eon Aton!

+
Eon Aton is a multisided entertainment center that consists of a game and a story.
+

The game tries to mimic retro style RPGs, while the story is a mix of fantasy and science fiction. Eon Aton is a world of its own, merging reality with fantasy. The concept is still in beta fase, though. But that will change someday.


+

Beginning to get curious, are you? Can't wait to start reading the story and playing the game? There's nothing holding you back. Go click on the links in the menu to the left.


+
By the way..
+

The name "Eon Aton" doesn't really mean anything. Aton is a city in the universe of Eon Aton, but the word "Eon" in front of "Aton" simply sounds cool. There's no definite way to pronounce it. It's up to you.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_1.php b/subsites/projects/eonaton/0_1.php new file mode 100644 index 0000000..14dab86 --- /dev/null +++ b/subsites/projects/eonaton/0_1.php @@ -0,0 +1,3 @@ + +Play Eon Aton +
Note: The game is still in beta fase.
\ No newline at end of file diff --git a/subsites/projects/eonaton/0_2.php b/subsites/projects/eonaton/0_2.php new file mode 100644 index 0000000..5bd9fa6 --- /dev/null +++ b/subsites/projects/eonaton/0_2.php @@ -0,0 +1,4 @@ + +

Instructions

+

Use the arrow keys to walk.

+

Press Shift while using the arrow keys to run.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_3.php b/subsites/projects/eonaton/0_3.php new file mode 100644 index 0000000..55272da --- /dev/null +++ b/subsites/projects/eonaton/0_3.php @@ -0,0 +1,2 @@ + +

Coming when the game nears a finished state.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_4.php b/subsites/projects/eonaton/0_4.php new file mode 100644 index 0000000..811ab74 --- /dev/null +++ b/subsites/projects/eonaton/0_4.php @@ -0,0 +1,5 @@ + +

Technical information

+

When finished, Eon Aton will use a combination of JavaScript and XML to power its engine. The JavaScript code will hold the basic information on how to do things, and the XML file will tell the JavaScript code what to do.


+

The XML file


+

The XML file is currently not being used, though.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_5.php b/subsites/projects/eonaton/0_5.php new file mode 100644 index 0000000..a1473b0 --- /dev/null +++ b/subsites/projects/eonaton/0_5.php @@ -0,0 +1,9 @@ + +

The story

+

PDF version

+

ODT version

+

Plain text version (gzipped version)

+

Plain text version with 80-character lines. (gzipped version)

+
+

Eon Aton is released under Creative Commons Attribution-ShareAlike 3.0. Copyright holder: Niels Serup

+ diff --git a/subsites/projects/eonaton/0_6.php b/subsites/projects/eonaton/0_6.php new file mode 100644 index 0000000..196a166 --- /dev/null +++ b/subsites/projects/eonaton/0_6.php @@ -0,0 +1,17 @@ + +

FAQ

+
(although nobody actually asked these questions..)

+

Q: What's this story about?

+

A: Eon Aton is a story about a bunch of people who seek to have their cities restored. Naturally they'll also want to do some harm to the ones at fault. However, Eon Aton also incorporates themes such as sadness, longing and anger, while still keeping it a bit humourous at times. In theory, that is.

+ +

Q: Why did you make it?

+

A: I guess I was bored (this goes for the game as well).

+ +

Q: Did you ever consider quitting?

+

A: I never worked.

+ +

Q: I think I see a resemblance to [write random RPG here] in your story. Is this true?

+

A: Probably. I've played a few RPG's, and I might've copied some things. After all, there's also a reason why the Eon Aton game is RPG-like.

+ +

Q: Do you expect the public to actually like this story?

+

A: I don't know.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_7.php b/subsites/projects/eonaton/0_7.php new file mode 100644 index 0000000..59498ee --- /dev/null +++ b/subsites/projects/eonaton/0_7.php @@ -0,0 +1,12 @@ + +

Who is behind this oddity in which the ulterior purpose is to take over the world? (Oops.. I guess I shouldn't have said that..)

+

Who has spent hours finishing this project with no real purpose?

+

Who has written code that's too messy for others to be able to understand it?


+

It is...

+

The creator

+Not me +

Or whatever you want to call me.

+

I'm from Denmark. And no, Denmark isn't a city in Sweden, it's a country on its own.

+

To get to know more about me, simple click on the link "nqpz" in the bottom right corner.

+
+

The wizard to the left isn't me.

\ No newline at end of file diff --git a/subsites/projects/eonaton/0_8.php b/subsites/projects/eonaton/0_8.php new file mode 100644 index 0000000..211dce2 --- /dev/null +++ b/subsites/projects/eonaton/0_8.php @@ -0,0 +1,39 @@ + +

Images

+

Here's a couple of logos and such that you can freely download and use yourself.


+ + \ No newline at end of file diff --git a/subsites/projects/eonaton/0_9.php b/subsites/projects/eonaton/0_9.php new file mode 100644 index 0000000..322f9e0 --- /dev/null +++ b/subsites/projects/eonaton/0_9.php @@ -0,0 +1,2 @@ + +

You can contact me at ns@metanohi.org.

\ No newline at end of file diff --git a/subsites/projects/eonaton/1_0.php b/subsites/projects/eonaton/1_0.php new file mode 100644 index 0000000..c28ecd3 --- /dev/null +++ b/subsites/projects/eonaton/1_0.php @@ -0,0 +1,19 @@ + +
Terms of Use
+
Version 7.5.1.23.5
+
+TERMS OF USE - PLEASE READ VERY CAREFULLY
+
+While at this site, you are NOT allowed to do one or more of the following actions:
+- Bomb buildings
+- Pretend you're not yourself
+- Play Wolfenstein 3D
+- Eat squirrels
+- Do silly walks
+- Type "f*ck" (typing "fuck" is okay)
+- Defeat Bowser
+- Mimic Donald Duck
+- Count to ∞
+
+Also, you are not allowed to leave Eon Aton.
+
\ No newline at end of file diff --git a/subsites/projects/eonaton/1_1.php b/subsites/projects/eonaton/1_1.php new file mode 100644 index 0000000..b1dfab8 --- /dev/null +++ b/subsites/projects/eonaton/1_1.php @@ -0,0 +1,13 @@ + +

Privacy Policy

+

(Shit.. I forgot to make one. Better just use the standard version..)

+
+
+PRIVACY POLICY - PLEASE DO NOT READ VERY CAREFULLY
+
+The millisecond you entered Eon Aton, all your rights were taken from you.
+Eon Aton owns all your rights now. Every move you make is being traced,
+and whatever you do from now on to your death will be made public.
+
+On the bright side, you get to play and read Eon Aton!
+
\ No newline at end of file diff --git a/subsites/projects/eonaton/1_2.php b/subsites/projects/eonaton/1_2.php new file mode 100644 index 0000000..dff4307 --- /dev/null +++ b/subsites/projects/eonaton/1_2.php @@ -0,0 +1,2 @@ + +

The game is GPL, the story is CC-BY-SA.

\ No newline at end of file diff --git a/subsites/projects/eonaton/1_3.php b/subsites/projects/eonaton/1_3.php new file mode 100644 index 0000000..7b56464 --- /dev/null +++ b/subsites/projects/eonaton/1_3.php @@ -0,0 +1,2 @@ + +

I really like time machines.

\ No newline at end of file diff --git a/subsites/projects/eonaton/1_4.php b/subsites/projects/eonaton/1_4.php new file mode 100644 index 0000000..de77736 --- /dev/null +++ b/subsites/projects/eonaton/1_4.php @@ -0,0 +1,2 @@ + +

Lizards are really fascinating creatures.

\ No newline at end of file diff --git a/subsites/projects/eonaton/1_5.php b/subsites/projects/eonaton/1_5.php new file mode 100644 index 0000000..581c9db --- /dev/null +++ b/subsites/projects/eonaton/1_5.php @@ -0,0 +1,2 @@ + +

See source code.

\ No newline at end of file diff --git a/subsites/projects/eonaton/classes.php b/subsites/projects/eonaton/classes.php new file mode 100644 index 0000000..aa26eb8 --- /dev/null +++ b/subsites/projects/eonaton/classes.php @@ -0,0 +1,71 @@ +list[sizeof($this->list)]=array($what,$who); + } + + function random() { + $rnd=mt_rand(0,sizeof($this->list)-1); + return "

".$this->list[$rnd][0]."

\n

- ".$this->list[$rnd][1]."

"; + } +} + +$type=0; + +class linksarray { + private $list=array(); + private $cats=array(); + private $type; + + function linksarray() { + global $type; + $this->type=$type; + $type++; + } + + function add($page) { + $this->list[sizeof($this->list)]=$page; + } + + function cat($title) { + $this->cats[sizeof($this->cats)]=array($title,sizeof($this->list)); + } + + function size() { + return sizeof($this->list); + } + + function generate($split="") { + global $pagetype,$pagesite,$title; + $list_size=sizeof($this->list); + $cats_size=sizeof($this->cats); + $current_cat=0; + $output=""; + $i=array(); + + for ($i[0]=0;$i[0]<$list_size;$i[0]++) { + + for ($i[1]=$current_cat;$i[1]<$cats_size;$i[1]++) { + if ($this->cats[$i[1]][1]==$i[0]) $output.="\n
".$this->cats[$i[1]][0]."
\n"; + } + + if ($pagetype==$this->type && $pagesite==$i[0]) { + $container[0]="
"; + $container[1]="
"; + $title=$this->list[$i[0]]; + } + else { + if ($this->type==0 && $i[0]==0) $link="."; + else $link="?t=".$this->type."&s=".$i[0]; + $container[0]=""; + $container[1]=""; + } + + $output.=$container[0].$this->list[$i[0]].$container[1]."\n".$split; + } + return $output; + } +} +?> \ No newline at end of file diff --git a/subsites/projects/eonaton/game/COPYING b/subsites/projects/eonaton/game/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/subsites/projects/eonaton/game/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/subsites/projects/eonaton/game/char/simplearrows.png b/subsites/projects/eonaton/game/char/simplearrows.png new file mode 100644 index 0000000..09ee20a Binary files /dev/null and b/subsites/projects/eonaton/game/char/simplearrows.png differ diff --git a/subsites/projects/eonaton/game/char/wizard.png b/subsites/projects/eonaton/game/char/wizard.png new file mode 100644 index 0000000..812f745 Binary files /dev/null and b/subsites/projects/eonaton/game/char/wizard.png differ diff --git a/subsites/projects/eonaton/game/classes.js b/subsites/projects/eonaton/game/classes.js new file mode 100644 index 0000000..375a79e --- /dev/null +++ b/subsites/projects/eonaton/game/classes.js @@ -0,0 +1,94 @@ +/* + Eon Aton: a RPG-like game system in JavaScript + Copyright (C) 2008-2009 Niels Serup + + This file is part of Eon Aton. + + Eon Aton is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Eon Aton is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Eon Aton. If not, see . +*/ + +/* + This file contains the different classes to be used with Eon Aton. +*/ +// Screen +function screen() { + var type, name, description, background, bbackground, width, height, viswidth, visheight, viselem, elem + this.type="screen" +} + +screen.prototype.create=function() { + document.body.style.background=style_bg_img(this.bbackground) + this.viselem=document.createElement("div") + this.viselem.id="visgamebox" + if (this.viswidth>this.width) this.viswidth=this.width + if (this.visheight>this.height) this.visheight=this.height + this.viselem.style.width=(this.viswidth)+"px" + this.viselem.style.height=(this.visheight)+"px" + this.viselem.style.marginLeft=(-this.viswidth/2)+"px" + this.viselem.style.marginTop=(-this.visheight/2)+"px" + + this.elem=document.createElement("div") + this.elem.style.background=style_bg_img(this.background) + this.elem.id="gamebox" + this.elem.style.width=(this.width)+"px" + this.elem.style.height=(this.height)+"px" + + this.viselem.appendChild(this.elem) + document.body.appendChild(this.viselem) + + characters_container=document.createElement("div") + characters_container.id="characters" + this.elem.appendChild(characters_container) +} + +screen.prototype.add=function(obj) { + eval(obj.type+"s_container").appendChild(obj.elem) + if (obj.type=="character") give_life(obj) +} + +screen.prototype.remove=function() { + document.body.style.background="" + document.body.removeChild(this.elem) +} + +// Character +function character() { + var type, visible, name, description, src, width, height, dirs, elem, posX, posY + this.type="character" + + this.visible=false + this.dirs=new Array(8) + this.posX=0 + this.posY=0 +} + +character.prototype.dir=function(dir,row,stand,walk,run) { +this.dirs[dir]=new Array() +this.dirs[dir][0]=row +this.dirs[dir][1]=stand +this.dirs[dir][2]=walk +this.dirs[dir][3]=run +} + +character.prototype.create=function() { + this.elem=document.createElement("div") + this.elem=document.createElement("div") + this.elem.style.background="url("+this.src+")" + this.elem.style.width=(this.width)+"px" + this.elem.style.height=(this.height)+"px" +} + +character.prototype.remove=function() { + characters_container.removeChild(this.elem) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/functions.js b/subsites/projects/eonaton/game/functions.js new file mode 100644 index 0000000..53c3793 --- /dev/null +++ b/subsites/projects/eonaton/game/functions.js @@ -0,0 +1,360 @@ +/* + Eon Aton: a RPG-like game system in JavaScript + Copyright (C) 2008-2009 Niels Serup + + This file is part of Eon Aton. + + Eon Aton is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Eon Aton is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Eon Aton. If not, see . +*/ + +/* + This file contains various functions to be used together with the classes. +*/ +function style_bg_img(background) { + var cssurl + if (background.indexOf(".")!=-1) cssurl=["url(",")"] + else cssurl=["",""] + return cssurl[0]+background+cssurl[1] +} + +function remove(obj) { + if (obj.type="character") take_life(obj) + obj.remove() + delete obj +} + +function getkeycode(e) { + var keycode + if (window.event) keycode=window.event.keyCode + else if (e) keycode=e.which + else keycode=0 + return keycode +} + +function START_systems() { + key_up=false + key_right=false + key_down=false + key_left=false + key_shift=false + key_control=false + + key_order=new Array() + for (var i=0;i<4;i++) { + key_order[i]=0 + } + + direction=7 + character_state=1 + + document.onkeydown=keydown + document.onkeyup=keyup + + row_num=new Array() + col_num=new Array() + col_length=new Array() + + maxwidth=0 + maxheight=0 + + define_pixel_movement(5,10) + define_character_distance(-5) + + direction_changing_speed=3 + + frame_showing_speed=150 + movement_speed=50 + frame_showing() + movement() +} + +function define_pixel_movement(walk,run) { + pixel_movement=[0,walk,run] + diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)] +} + +function define_character_distance(dist) { + character_distance=dist + diagonal_character_distance=Math.sqrt(dist*dist*2) + if (dist<0) diagonal_character_distance=-diagonal_character_distance +} + +function show_frame(cha_num,row,col) { + characters[cha_num].elem.style.backgroundPosition="-"+(col*(characters[cha_num].width+1)+1)+"px -"+(characters[cha_num].dirs[row][0]*(characters[cha_num].height+1)+1)+"px" +} + +function frame_showing() { + for (var i=0;i-1 && x-1 && ycharacters[i].posY) cy-- + } + characters[i].elem.style.zIndex=cy + li=i + } + + if (characters.length>0) { + if (characters[0].posX>(current_screen.viswidth-characters[0].width)/2 && characters[0].posX(current_screen.visheight-characters[0].height)/2 && characters[0].posY0) character_state=2 + else if (key_shift && key_order[0]>0) character_state=3 +} + +function get_row_num() { + for (var i=0;imaxwidth) maxwidth=characters[i].width + if (characters[i].height>maxheight) maxheight=characters[i].height + } +} + +function find_direction() { + if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1 + else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2 + else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3 + else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4 + else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5 + else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6 + else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7 + else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8 + else direction=0 +} + +function keydown(e) { + var keycode=getkeycode(e) + + if (keycode==38 && !key_up) { + key_up=true + key_order.splice(0,0,1) + key_order.splice(3,1) + } + else if (keycode==39 && !key_right) { + key_right=true + key_order.splice(0,0,2) + key_order.splice(3,1) + } + else if (keycode==40 && !key_down) { + key_down=true + key_order.splice(0,0,3) + key_order.splice(3,1) + } + else if (keycode==37 && !key_left) { + key_left=true + key_order.splice(0,0,4) + key_order.splice(3,1) + } + else if (keycode==16) key_shift=true + else if (keycode==17) key_control=true + + if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function keyup(e) { + var keycode=getkeycode(e) + + if (keycode==38 && key_up) { + key_up=false + for (var i=0;i<4;i++) { + if (key_order[i]==1) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==39 && key_right) { + key_right=false + for (var i=0;i<4;i++) { + if (key_order[i]==2) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==40 && key_down) { + key_down=false + for (var i=0;i<4;i++) { + if (key_order[i]==3) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==37 && key_left) { + key_left=false + for (var i=0;i<4;i++) { + if (key_order[i]==4) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==16) key_shift=false + else if (keycode==17) key_control=false + + if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function exchange_characters(a,b) { + var temp=characters[a] + characters[a]=characters[b] + characters[b]=temp +} + +function give_life(cha) { + col_num[characters.length]=0 + cha.visible=true + cha.elem.style.display="block" + get_col_length() + get_maxs() +} + +function take_life(cha) { + cha.visible=false + cha.elem.style.display="none" + get_maxs() +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/general.css b/subsites/projects/eonaton/game/general.css new file mode 100644 index 0000000..4fb8b52 --- /dev/null +++ b/subsites/projects/eonaton/game/general.css @@ -0,0 +1,34 @@ +* { + margin:0; + padding:0; + } + +body { + font:normal 11px arial; + } + +#visgamebox { + position:absolute; + top:50%; + left:50%; + overflow:hidden; + } + +#gamebox { + position:absolute; + top:0; + left:0; + } + +#characters { + position:absolute; + top:0; + left:0; + } + +#characters div { + position:absolute; + top:0; + left:0; + display:none; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/game/index.htm b/subsites/projects/eonaton/game/index.htm new file mode 100644 index 0000000..7c7ba98 --- /dev/null +++ b/subsites/projects/eonaton/game/index.htm @@ -0,0 +1,11 @@ + + + +Eon Aton + + + + + + + \ No newline at end of file diff --git a/subsites/projects/eonaton/game/info.xml b/subsites/projects/eonaton/game/info.xml new file mode 100644 index 0000000..01147aa --- /dev/null +++ b/subsites/projects/eonaton/game/info.xml @@ -0,0 +1,175 @@ + + + + + + + document.title+="..." + + + + + + A box + It is nothing but a.. box. + + + 60 + 50 + +
objs/box1.png
+ + + 100 + 70 + + + + +
+
+ + + + Simple arrows + Simple arrows explaining how character movement works. + + + 64 + 48 + +
char/simplearrows.png
+ + + 10 + + + 1 + 1-2 + 3-6 + 7-10 + + + 2 + 1-2 + 3-6 + 7-10 + + + 3 + 1-2 + 3-6 + 7-10 + + + 4 + 1-2 + 3-6 + 7-10 + + + 5 + 1-2 + 3-6 + 7-10 + + + 6 + 1-2 + 3-6 + 7-10 + + + 7 + 1-2 + 3-6 + 7-10 + + + 8 + 1-2 + 3-6 + 7-10 + + + +
+
+ + + + The Sun + The great star + + + 640 + 400 + 640 + 400 + +
maps/sun.png
+ + + + +
+
+ +
+ + + + + + alert("Hmm...") + + + + + + + + A small box + Aha! A small box! + + + 30 + 25 + +
objs/box2.png
+ + + 200 + 100 + + + + +
+
+ + + + + + Wiz the Wizard + A poorly drawn wizard, fighting against all evil. + +
char/wizard.png
+ +
+
+ + + + + + The valley of Sunshine + Beams of light break through the sky. + +
maps/sunshine.png
+ +
+
+ +
\ No newline at end of file diff --git a/subsites/projects/eonaton/game/load.js b/subsites/projects/eonaton/game/load.js new file mode 100644 index 0000000..bd76325 --- /dev/null +++ b/subsites/projects/eonaton/game/load.js @@ -0,0 +1,103 @@ +/* + Eon Aton: a RPG-like game system in JavaScript + Copyright (C) 2008-2009 Niels Serup + + This file is part of Eon Aton. + + Eon Aton is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Eon Aton is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Eon Aton. If not, see . +*/ + +/* + This file creates the game on page load. +*/ +window.onload=function(){ + characters=new Array() + START_systems() + + current_screen=new screen() + current_screen.name="The Sun" + current_screen.description="The great star" + current_screen.background="maps/sun.png" + current_screen.bbackground="#000" + current_screen.width=1920 + current_screen.height=1200 + current_screen.viswidth=640 + current_screen.visheight=400 + current_screen.create() + + characters[0]=new character() + characters[0].name="Wiz the Wizard" + characters[0].description="A poorly drawn wizard, fighting against all evil." + characters[0].src="char/wizard.png" + characters[0].width=48 + characters[0].height=64 + characters[0].posX=285 + characters[0].posY=140 + + characters[0].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[0].create() + current_screen.add(characters[0]) + + + characters[1]=new character() + characters[1].name="Wiz the Wizard" + characters[1].description="A poorly drawn wizard, fighting against all evil." + characters[1].src="char/simplearrows.png" + characters[1].width=48 + characters[1].height=64 + characters[1].posX=335 + characters[1].posY=140 + + characters[1].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[1].create() + current_screen.add(characters[1]) + + + characters[2]=new character() + characters[2].name="Wiz the Wizard" + characters[2].description="A poorly drawn wizard, fighting against all evil." + characters[2].src="char/wizard.png" + characters[2].width=48 + characters[2].height=64 + characters[2].posX=385 + characters[2].posY=140 + + characters[2].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[2].create() + current_screen.add(characters[2]) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/maps/sun.png b/subsites/projects/eonaton/game/maps/sun.png new file mode 100644 index 0000000..6906179 Binary files /dev/null and b/subsites/projects/eonaton/game/maps/sun.png differ diff --git a/subsites/projects/eonaton/game/maps/sunshine.png b/subsites/projects/eonaton/game/maps/sunshine.png new file mode 100644 index 0000000..0310f48 Binary files /dev/null and b/subsites/projects/eonaton/game/maps/sunshine.png differ diff --git a/subsites/projects/eonaton/game/objs/box1.png b/subsites/projects/eonaton/game/objs/box1.png new file mode 100644 index 0000000..9be09bb Binary files /dev/null and b/subsites/projects/eonaton/game/objs/box1.png differ diff --git a/subsites/projects/eonaton/game/objs/box2.png b/subsites/projects/eonaton/game/objs/box2.png new file mode 100644 index 0000000..84e4170 Binary files /dev/null and b/subsites/projects/eonaton/game/objs/box2.png differ diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/classes.js b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/classes.js new file mode 100644 index 0000000..b88c440 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/classes.js @@ -0,0 +1,73 @@ +// Screen +function screen() { + var type, name, description, background, bbackground, width, height, viswidth, visheight, elem + this.type="screen" +} + +screen.prototype.create=function() { + document.body.style.background=style_bg_img(this.bbackground) + this.elem=document.createElement("div") + this.elem.style.background=style_bg_img(this.background) + this.elem.id="gamebox" + this.elem.style.width=(this.viswidth)+"px" + this.elem.style.height=(this.visheight)+"px" + this.elem.style.marginLeft=(-this.viswidth/2)+"px" + this.elem.style.marginTop=(-this.visheight/2)+"px" + document.body.appendChild(this.elem) + characters_container=document.createElement("div") + characters_container.id="characters" + this.elem.appendChild(characters_container) +} + +screen.prototype.add=function(obj) { + eval(obj.type+"s_container").appendChild(obj.elem) + if (obj.type=="character") bring_to_life(obj) +} + +screen.prototype.remove=function() { + document.body.style.background="" + document.body.removeChild(this.elem) +} + +// Character +function character() { + var type, name, description, src, width, height, dirs, elem, elems + this.type="character" + this.dirs=new Array(8) +} + +character.prototype.dir=function(dir) { +this.dirs[dir[0]]=new Array() +this.dirs[dir[0]][0]=dir[1] +for (var i=1;i<4;i++) { + this.dirs[dir[0]][i]=new Array() +} +for (i=2;i + + +Eon Aton + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/info.xml b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/info.xml new file mode 100644 index 0000000..01147aa --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/info.xml @@ -0,0 +1,175 @@ + + + + + + + document.title+="..." + + + + + + A box + It is nothing but a.. box. + + + 60 + 50 + +
objs/box1.png
+ + + 100 + 70 + + + + +
+
+ + + + Simple arrows + Simple arrows explaining how character movement works. + + + 64 + 48 + +
char/simplearrows.png
+ + + 10 + + + 1 + 1-2 + 3-6 + 7-10 + + + 2 + 1-2 + 3-6 + 7-10 + + + 3 + 1-2 + 3-6 + 7-10 + + + 4 + 1-2 + 3-6 + 7-10 + + + 5 + 1-2 + 3-6 + 7-10 + + + 6 + 1-2 + 3-6 + 7-10 + + + 7 + 1-2 + 3-6 + 7-10 + + + 8 + 1-2 + 3-6 + 7-10 + + + +
+
+ + + + The Sun + The great star + + + 640 + 400 + 640 + 400 + +
maps/sun.png
+ + + + +
+
+ +
+ + + + + + alert("Hmm...") + + + + + + + + A small box + Aha! A small box! + + + 30 + 25 + +
objs/box2.png
+ + + 200 + 100 + + + + +
+
+ + + + + + Wiz the Wizard + A poorly drawn wizard, fighting against all evil. + +
char/wizard.png
+ +
+
+ + + + + + The valley of Sunshine + Beams of light break through the sky. + +
maps/sunshine.png
+ +
+
+ +
\ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/load.js b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/load.js new file mode 100644 index 0000000..a2cff28 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-17.54/load.js @@ -0,0 +1,51 @@ +window.onload=function(){ + key_up=false + key_right=false + key_down=false + key_left=false + key_shift=false + key_control=false + + key_order=new Array() + for (var i=0;i<4;i++) { + key_order[i]=0 + } + + direction=0 + + document.onkeydown=keydown + document.onkeyup=keyup + + START__movement_detection_system() + + scr=new screen() + scr.name="The Sun" + scr.description="The great star" + scr.background="maps/sun.png" + scr.bbackground="#000" + scr.width=640 + scr.height=400 + scr.viswidth=scr.width + scr.visheight=scr.height + scr.create() + //remove(scr) + + cha=new character() + cha.name="Wiz the Wizard" + cha.description="A poorly drawn wizard, fighting against all evil." + cha.src="char/simplearrows.png" + cha.width=48 + cha.height=64 + cha.dir([0,0,1,1,2,2,2,2,3,3,3,3]) + cha.dir([1,1,1,1,2,2,2,2,3,3,3,3]) + cha.dir([2,2,1,1,2,2,2,2,3,3,3,3]) + cha.dir([3,3,1,1,2,2,2,2,3,3,3,3]) + cha.dir([4,4,1,1,2,2,2,2,3,3,3,3]) + cha.dir([5,5,1,1,2,2,2,2,3,3,3,3]) + cha.dir([6,6,1,1,2,2,2,2,3,3,3,3]) + cha.dir([7,7,1,1,2,2,2,2,3,3,3,3]) + cha.create() + scr.add(cha) + //take_life(cha) + //remove(cha) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/classes.js b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/classes.js new file mode 100644 index 0000000..6014591 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/classes.js @@ -0,0 +1,59 @@ +// Screen +function screen() { + var type, name, description, background, bbackground, width, height, viswidth, visheight, elem + this.type="screen" +} + +screen.prototype.create=function() { + document.body.style.background=style_bg_img(this.bbackground) + this.elem=document.createElement("div") + this.elem.style.background=style_bg_img(this.background) + this.elem.id="gamebox" + this.elem.style.width=(this.viswidth)+"px" + this.elem.style.height=(this.visheight)+"px" + this.elem.style.marginLeft=(-this.viswidth/2)+"px" + this.elem.style.marginTop=(-this.visheight/2)+"px" + document.body.appendChild(this.elem) + characters_container=document.createElement("div") + characters_container.id="characters" + this.elem.appendChild(characters_container) +} + +screen.prototype.add=function(obj) { + eval(obj.type+"s_container").appendChild(obj.elem) + if (obj.type=="character") give_life(obj) +} + +screen.prototype.remove=function() { + document.body.style.background="" + document.body.removeChild(this.elem) +} + +// Character +function character() { + var type, name, description, src, width, height, dirs, elem, posX, posY + this.type="character" + this.dirs=new Array(8) + this.posX=0 + this.posY=0 +} + +character.prototype.dir=function(dir,row,stand,walk,run) { +this.dirs[dir]=new Array() +this.dirs[dir][0]=row +this.dirs[dir][1]=stand +this.dirs[dir][2]=walk +this.dirs[dir][3]=run +} + +character.prototype.create=function() { + this.elem=document.createElement("div") + this.elem=document.createElement("div") + this.elem.style.background="url("+this.src+")" + this.elem.style.width=(this.width)+"px" + this.elem.style.height=(this.height)+"px" +} + +character.prototype.remove=function() { + characters_container.removeChild(this.elem) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/functions.js b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/functions.js new file mode 100644 index 0000000..dcd5a6d --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/functions.js @@ -0,0 +1,260 @@ +function style_bg_img(background) { + var cssurl + if (background.indexOf(".")!=-1) cssurl=["url(",")"] + else cssurl=["",""] + return cssurl[0]+background+cssurl[1] +} + +function create(scr) { + scr.create() + link(scr) +} + +function remove(obj) { + if (obj.type="character") take_life(obj) + obj.remove() + delete obj +} + +function getkeycode(e) { + var keycode + if (window.event) keycode=window.event.keyCode + else if (e) keycode=e.which + else keycode=0 + return keycode +} + +function START_systems() { + key_up=false + key_right=false + key_down=false + key_left=false + key_shift=false + key_control=false + + key_order=new Array() + for (var i=0;i<4;i++) { + key_order[i]=0 + } + + direction=7 + character_state=1 + + document.onkeydown=keydown + document.onkeyup=keyup + + characters=new Array() + row_num=new Array() + col_num=new Array() + col_length=new Array() + + define_pixel_movement(3,5) + + frame_showing_speed=150 + character_movement_speed=50 + frame_showing() + character_movement() + + //setInterval(debugging,100) +} + +function debugging() { + document.title=direction+" | "+col_length[0]+" | "+col_num[0]+" | "+character_state +} + +function define_pixel_movement(walk,run) { + pixel_movement=[0,walk,run] + diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)] +} + +function show_frame(cha_num,row,col) { + characters[cha_num].elem.style.backgroundPosition="-"+(col*(cha.width+1)+1)+"px -"+(cha.dirs[row][0]*(cha.height+1)+1)+"px" +} + +function frame_showing() { + for (var i=0;i-1) characters[i].posY=y + break; + case 2: + y=characters[i].posY-dia_pixmove + x=characters[i].posX+dia_pixmove + if (y>-1) characters[i].posY=y + if (x-1) characters[i].posX=x + break; + case 7: + x=characters[i].posX-pixmove + if (x>-1) characters[i].posX=x + break; + case 8: + x=characters[i].posX-dia_pixmove + y=characters[i].posY-dia_pixmove + if (x>-1) characters[i].posX=x + if (y>-1) characters[i].posY=y + break; + } + characters[i].elem.style.left=characters[i].posX+"px" + characters[i].elem.style.top=characters[i].posY+"px" + } + setTimeout(character_movement,character_movement_speed) +} + +function get_character_state() { + if (key_order[0]==0) character_state=1 + else if (!key_shift && key_order[0]>0) character_state=2 + else if (key_shift && key_order[0]>0) character_state=3 +} + +function get_row_num() { + for (var i=0;i0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function link(scr) { + current_screen=scr +} + +function give_life(cha) { + col_num[characters.length]=0 + characters[characters.length]=cha + get_col_length() +} + +function take_life(cha) { + for (var i=0;i + + +Eon Aton + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/info.xml b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/info.xml new file mode 100644 index 0000000..01147aa --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/info.xml @@ -0,0 +1,175 @@ + + + + + + + document.title+="..." + + + + + + A box + It is nothing but a.. box. + + + 60 + 50 + +
objs/box1.png
+ + + 100 + 70 + + + + +
+
+ + + + Simple arrows + Simple arrows explaining how character movement works. + + + 64 + 48 + +
char/simplearrows.png
+ + + 10 + + + 1 + 1-2 + 3-6 + 7-10 + + + 2 + 1-2 + 3-6 + 7-10 + + + 3 + 1-2 + 3-6 + 7-10 + + + 4 + 1-2 + 3-6 + 7-10 + + + 5 + 1-2 + 3-6 + 7-10 + + + 6 + 1-2 + 3-6 + 7-10 + + + 7 + 1-2 + 3-6 + 7-10 + + + 8 + 1-2 + 3-6 + 7-10 + + + +
+
+ + + + The Sun + The great star + + + 640 + 400 + 640 + 400 + +
maps/sun.png
+ + + + +
+
+ +
+ + + + + + alert("Hmm...") + + + + + + + + A small box + Aha! A small box! + + + 30 + 25 + +
objs/box2.png
+ + + 200 + 100 + + + + +
+
+ + + + + + Wiz the Wizard + A poorly drawn wizard, fighting against all evil. + +
char/wizard.png
+ +
+
+ + + + + + The valley of Sunshine + Beams of light break through the sky. + +
maps/sunshine.png
+ +
+
+ +
\ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/load.js b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/load.js new file mode 100644 index 0000000..761886a --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.20-12-08-23.12/load.js @@ -0,0 +1,56 @@ +window.onload=function(){ + START_systems() + + scr=new screen() + scr.name="The Sun" + scr.description="The great star" + scr.background="maps/sun.png" + scr.bbackground="#000" + scr.width=640 + scr.height=400 + scr.viswidth=scr.width + scr.visheight=scr.height + create(scr) + + cha=new character() + cha.name="Wiz the Wizard" + cha.description="A poorly drawn wizard, fighting against all evil." + cha.src="char/wizard.png" + cha.width=48 + cha.height=64 + cha.posX=285 + cha.posY=140 + + cha.dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + cha.dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + cha.create() + scr.add(cha) + + chab=new character() + chab.name="test" + chab.description="test" + chab.src="char/simplearrows.png" + chab.width=48 + chab.height=64 + chab.posX=50 + chab.posY=160 + + chab.dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + chab.dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + chab.create() + scr.add(chab) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/classes.js b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/classes.js new file mode 100644 index 0000000..caef470 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/classes.js @@ -0,0 +1,71 @@ +// Screen +function screen() { + var type, name, description, background, bbackground, width, height, viswidth, visheight, viselem, elem + this.type="screen" +} + +screen.prototype.create=function() { + document.body.style.background=style_bg_img(this.bbackground) + this.viselem=document.createElement("div") + this.viselem.id="visgamebox" + if (this.viswidth>this.width) this.viswidth=this.width + if (this.visheight>this.height) this.visheight=this.height + this.viselem.style.width=(this.viswidth)+"px" + this.viselem.style.height=(this.visheight)+"px" + this.viselem.style.marginLeft=(-this.viswidth/2)+"px" + this.viselem.style.marginTop=(-this.visheight/2)+"px" + + this.elem=document.createElement("div") + this.elem.style.background=style_bg_img(this.background) + this.elem.id="gamebox" + this.elem.style.width=(this.width)+"px" + this.elem.style.height=(this.height)+"px" + + this.viselem.appendChild(this.elem) + document.body.appendChild(this.viselem) + + characters_container=document.createElement("div") + characters_container.id="characters" + this.elem.appendChild(characters_container) +} + +screen.prototype.add=function(obj) { + eval(obj.type+"s_container").appendChild(obj.elem) + if (obj.type=="character") give_life(obj) +} + +screen.prototype.remove=function() { + document.body.style.background="" + document.body.removeChild(this.elem) +} + +// Character +function character() { + var type, visible, name, description, src, width, height, dirs, elem, posX, posY + this.type="character" + + this.visible=false + this.dirs=new Array(8) + this.posX=0 + this.posY=0 +} + +character.prototype.dir=function(dir,row,stand,walk,run) { +this.dirs[dir]=new Array() +this.dirs[dir][0]=row +this.dirs[dir][1]=stand +this.dirs[dir][2]=walk +this.dirs[dir][3]=run +} + +character.prototype.create=function() { + this.elem=document.createElement("div") + this.elem=document.createElement("div") + this.elem.style.background="url("+this.src+")" + this.elem.style.width=(this.width)+"px" + this.elem.style.height=(this.height)+"px" +} + +character.prototype.remove=function() { + characters_container.removeChild(this.elem) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/functions.js b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/functions.js new file mode 100644 index 0000000..3c26132 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/functions.js @@ -0,0 +1,337 @@ +function style_bg_img(background) { + var cssurl + if (background.indexOf(".")!=-1) cssurl=["url(",")"] + else cssurl=["",""] + return cssurl[0]+background+cssurl[1] +} + +function remove(obj) { + if (obj.type="character") take_life(obj) + obj.remove() + delete obj +} + +function getkeycode(e) { + var keycode + if (window.event) keycode=window.event.keyCode + else if (e) keycode=e.which + else keycode=0 + return keycode +} + +function START_systems() { + key_up=false + key_right=false + key_down=false + key_left=false + key_shift=false + key_control=false + + key_order=new Array() + for (var i=0;i<4;i++) { + key_order[i]=0 + } + + direction=7 + character_state=1 + + document.onkeydown=keydown + document.onkeyup=keyup + + row_num=new Array() + col_num=new Array() + col_length=new Array() + + maxwidth=0 + maxheight=0 + + define_pixel_movement(5,10) + define_character_distance(-5) + + direction_changing_speed=3 + + frame_showing_speed=150 + movement_speed=50 + frame_showing() + movement() +} + +function define_pixel_movement(walk,run) { + pixel_movement=[0,walk,run] + diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)] +} + +function define_character_distance(dist) { + character_distance=dist + diagonal_character_distance=Math.sqrt(dist*dist*2) + if (dist<0) diagonal_character_distance=-diagonal_character_distance +} + +function show_frame(cha_num,row,col) { + characters[cha_num].elem.style.backgroundPosition="-"+(col*(characters[cha_num].width+1)+1)+"px -"+(characters[cha_num].dirs[row][0]*(characters[cha_num].height+1)+1)+"px" +} + +function frame_showing() { + for (var i=0;i-1 && x-1 && ycharacters[i].posY) cy-- + } + characters[i].elem.style.zIndex=cy + li=i + } + + if (characters.length>0) { + if (characters[0].posX>(current_screen.viswidth-characters[0].width)/2 && characters[0].posX(current_screen.visheight-characters[0].height)/2 && characters[0].posY0) character_state=2 + else if (key_shift && key_order[0]>0) character_state=3 +} + +function get_row_num() { + for (var i=0;imaxwidth) maxwidth=characters[i].width + if (characters[i].height>maxheight) maxheight=characters[i].height + } +} + +function find_direction() { + if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1 + else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2 + else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3 + else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4 + else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5 + else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6 + else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7 + else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8 + else direction=0 +} + +function keydown(e) { + var keycode=getkeycode(e) + + if (keycode==38 && !key_up) { + key_up=true + key_order.splice(0,0,1) + key_order.splice(3,1) + } + else if (keycode==39 && !key_right) { + key_right=true + key_order.splice(0,0,2) + key_order.splice(3,1) + } + else if (keycode==40 && !key_down) { + key_down=true + key_order.splice(0,0,3) + key_order.splice(3,1) + } + else if (keycode==37 && !key_left) { + key_left=true + key_order.splice(0,0,4) + key_order.splice(3,1) + } + else if (keycode==16) key_shift=true + else if (keycode==17) key_control=true + + if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function keyup(e) { + var keycode=getkeycode(e) + + if (keycode==38 && key_up) { + key_up=false + for (var i=0;i<4;i++) { + if (key_order[i]==1) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==39 && key_right) { + key_right=false + for (var i=0;i<4;i++) { + if (key_order[i]==2) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==40 && key_down) { + key_down=false + for (var i=0;i<4;i++) { + if (key_order[i]==3) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==37 && key_left) { + key_left=false + for (var i=0;i<4;i++) { + if (key_order[i]==4) key_order.splice(i,1) + } + key_order.splice(3,0,0) + } + else if (keycode==16) key_shift=false + else if (keycode==17) key_control=false + + if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction() + if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length() +} + +function exchange_characters(a,b) { + var temp=characters[a] + characters[a]=characters[b] + characters[b]=temp +} + +function give_life(cha) { + col_num[characters.length]=0 + cha.visible=true + cha.elem.style.display="block" + get_col_length() + get_maxs() +} + +function take_life(cha) { + cha.visible=false + cha.elem.style.display="none" + get_maxs() +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/general.css b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/general.css new file mode 100644 index 0000000..4fb8b52 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/general.css @@ -0,0 +1,34 @@ +* { + margin:0; + padding:0; + } + +body { + font:normal 11px arial; + } + +#visgamebox { + position:absolute; + top:50%; + left:50%; + overflow:hidden; + } + +#gamebox { + position:absolute; + top:0; + left:0; + } + +#characters { + position:absolute; + top:0; + left:0; + } + +#characters div { + position:absolute; + top:0; + left:0; + display:none; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/index.htm b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/index.htm new file mode 100644 index 0000000..d43a401 --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/index.htm @@ -0,0 +1,11 @@ + + + +Eon Aton + + + + + + + \ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/info.xml b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/info.xml new file mode 100644 index 0000000..01147aa --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/info.xml @@ -0,0 +1,175 @@ + + + + + + + document.title+="..." + + + + + + A box + It is nothing but a.. box. + + + 60 + 50 + +
objs/box1.png
+ + + 100 + 70 + + + + +
+
+ + + + Simple arrows + Simple arrows explaining how character movement works. + + + 64 + 48 + +
char/simplearrows.png
+ + + 10 + + + 1 + 1-2 + 3-6 + 7-10 + + + 2 + 1-2 + 3-6 + 7-10 + + + 3 + 1-2 + 3-6 + 7-10 + + + 4 + 1-2 + 3-6 + 7-10 + + + 5 + 1-2 + 3-6 + 7-10 + + + 6 + 1-2 + 3-6 + 7-10 + + + 7 + 1-2 + 3-6 + 7-10 + + + 8 + 1-2 + 3-6 + 7-10 + + + +
+
+ + + + The Sun + The great star + + + 640 + 400 + 640 + 400 + +
maps/sun.png
+ + + + +
+
+ +
+ + + + + + alert("Hmm...") + + + + + + + + A small box + Aha! A small box! + + + 30 + 25 + +
objs/box2.png
+ + + 200 + 100 + + + + +
+
+ + + + + + Wiz the Wizard + A poorly drawn wizard, fighting against all evil. + +
char/wizard.png
+ +
+
+ + + + + + The valley of Sunshine + Beams of light break through the sky. + +
maps/sunshine.png
+ +
+
+ +
\ No newline at end of file diff --git a/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/load.js b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/load.js new file mode 100644 index 0000000..04120cc --- /dev/null +++ b/subsites/projects/eonaton/game/stuff/backup.23-12-08-00.05/load.js @@ -0,0 +1,80 @@ +window.onload=function(){ + characters=new Array() + START_systems() + + current_screen=new screen() + current_screen.name="The Sun" + current_screen.description="The great star" + current_screen.background="maps/sun.png" + current_screen.bbackground="#000" + current_screen.width=640 + current_screen.height=400 + current_screen.viswidth=640 + current_screen.visheight=400 + current_screen.create() + + characters[0]=new character() + characters[0].name="Wiz the Wizard" + characters[0].description="A poorly drawn wizard, fighting against all evil." + characters[0].src="char/wizard.png" + characters[0].width=48 + characters[0].height=64 + characters[0].posX=285 + characters[0].posY=140 + + characters[0].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[0].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[0].create() + current_screen.add(characters[0]) + + + characters[1]=new character() + characters[1].name="Wiz the Wizard" + characters[1].description="A poorly drawn wizard, fighting against all evil." + characters[1].src="char/simplearrows.png" + characters[1].width=48 + characters[1].height=64 + characters[1].posX=335 + characters[1].posY=140 + + characters[1].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[1].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[1].create() + current_screen.add(characters[1]) + + + characters[2]=new character() + characters[2].name="Wiz the Wizard" + characters[2].description="A poorly drawn wizard, fighting against all evil." + characters[2].src="char/wizard.png" + characters[2].width=48 + characters[2].height=64 + characters[2].posX=385 + characters[2].posY=140 + + characters[2].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9]) + characters[2].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9]) + + characters[2].create() + current_screen.add(characters[2]) +} \ No newline at end of file diff --git a/subsites/projects/eonaton/game/todo.txt b/subsites/projects/eonaton/game/todo.txt new file mode 100644 index 0000000..dfc616c --- /dev/null +++ b/subsites/projects/eonaton/game/todo.txt @@ -0,0 +1,2 @@ +0. comment code +1. develop \ No newline at end of file diff --git a/subsites/projects/eonaton/general.css b/subsites/projects/eonaton/general.css new file mode 100644 index 0000000..aab8ac9 --- /dev/null +++ b/subsites/projects/eonaton/general.css @@ -0,0 +1,64 @@ +* { + font-weight:normal; + } + +h1 { + font-size:50px; + } + +h2 { + font-size:41px; + } + +h3 { + font-size:33px; + } + +h4 { + font-size:26px; + } + +h5 { + font-size:20px; + } + +h6 { + font-size:15px; + } + +p { + font-size:12px; + } + +.center { + text-align:center; + } + +.left { + float:left; + margin:5px; + } + +.right { + float:right; + margin:5px; + } + +.inline { + display:inline; + } + +#site a:link,#site a:visited { + text-decoration:none; + color:#4965ff; + display:inline; + } + +#site a:hover { + color:#49bfff; + } + +img { + border:1px solid #fff; + display:block; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/iefix.css b/subsites/projects/eonaton/iefix.css new file mode 100644 index 0000000..71d4315 --- /dev/null +++ b/subsites/projects/eonaton/iefix.css @@ -0,0 +1,3 @@ +#footer #current { + margin-right:3px; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/img/bg.png b/subsites/projects/eonaton/img/bg.png new file mode 100644 index 0000000..4674abc Binary files /dev/null and b/subsites/projects/eonaton/img/bg.png differ diff --git a/subsites/projects/eonaton/img/cc-by-sa.png b/subsites/projects/eonaton/img/cc-by-sa.png new file mode 100644 index 0000000..f0a944e Binary files /dev/null and b/subsites/projects/eonaton/img/cc-by-sa.png differ diff --git a/subsites/projects/eonaton/img/contentbg.png b/subsites/projects/eonaton/img/contentbg.png new file mode 100644 index 0000000..251f5e5 Binary files /dev/null and b/subsites/projects/eonaton/img/contentbg.png differ diff --git a/subsites/projects/eonaton/img/dllogo.png b/subsites/projects/eonaton/img/dllogo.png new file mode 100644 index 0000000..56f7e6e Binary files /dev/null and b/subsites/projects/eonaton/img/dllogo.png differ diff --git a/subsites/projects/eonaton/img/headerlogo.png b/subsites/projects/eonaton/img/headerlogo.png new file mode 100644 index 0000000..1c7a9b2 Binary files /dev/null and b/subsites/projects/eonaton/img/headerlogo.png differ diff --git a/subsites/projects/eonaton/img/menuentrybg.png b/subsites/projects/eonaton/img/menuentrybg.png new file mode 100644 index 0000000..a76cd01 Binary files /dev/null and b/subsites/projects/eonaton/img/menuentrybg.png differ diff --git a/subsites/projects/eonaton/img/originaldrawing-small.jpg b/subsites/projects/eonaton/img/originaldrawing-small.jpg new file mode 100644 index 0000000..0369437 Binary files /dev/null and b/subsites/projects/eonaton/img/originaldrawing-small.jpg differ diff --git a/subsites/projects/eonaton/img/quote.png b/subsites/projects/eonaton/img/quote.png new file mode 100644 index 0000000..696e1c0 Binary files /dev/null and b/subsites/projects/eonaton/img/quote.png differ diff --git a/subsites/projects/eonaton/img/wiz-remake-small.jpg b/subsites/projects/eonaton/img/wiz-remake-small.jpg new file mode 100644 index 0000000..ca861f5 Binary files /dev/null and b/subsites/projects/eonaton/img/wiz-remake-small.jpg differ diff --git a/subsites/projects/eonaton/img/wiz-remake-tiny.jpg b/subsites/projects/eonaton/img/wiz-remake-tiny.jpg new file mode 100644 index 0000000..b299a93 Binary files /dev/null and b/subsites/projects/eonaton/img/wiz-remake-tiny.jpg differ diff --git a/subsites/projects/eonaton/img/wiz-small.jpg b/subsites/projects/eonaton/img/wiz-small.jpg new file mode 100644 index 0000000..eb4b1be Binary files /dev/null and b/subsites/projects/eonaton/img/wiz-small.jpg differ diff --git a/subsites/projects/eonaton/img/wiz-transparent-small.png b/subsites/projects/eonaton/img/wiz-transparent-small.png new file mode 100644 index 0000000..d702c36 Binary files /dev/null and b/subsites/projects/eonaton/img/wiz-transparent-small.png differ diff --git a/subsites/projects/eonaton/index.css b/subsites/projects/eonaton/index.css new file mode 100644 index 0000000..6714394 --- /dev/null +++ b/subsites/projects/eonaton/index.css @@ -0,0 +1,142 @@ +* { + margin:0; + padding:0; + font-size:12px; + font-family:arial,freesans,'nimbus sans l'; + } + +body { + background:#b5b5b5 url(img/bg.png) repeat-x fixed; + } + +#wrapper { + width:700px; + margin:0 auto; + border-width:0 5px; + border-color:#ddd; + border-style:solid; + } + +#header { + height:175px; + background:#ff6600 url(img/headerlogo.png) no-repeat; + position:relative; + border-bottom:1px solid #2c3f00; + } + +#header a { + display:block; + position:absolute; + top:30px; + left:40px; + height:120px; + width:340px; + } + +#header #headerbox { + position:absolute; + top:40px; + left:450px; + width:200px; + height:60px; + padding-top:30px; + background:url(img/quote.png) no-repeat 2px 5px; + } + +#header #headerbox p { + color:#fff; + } + +#header #headerbox p#who { + color:#000; + } + +#content { + background:#172100 url(img/contentbg.png) repeat-y; + border-width:0 5px 5px 5px; + border-color:#ddd; + border-style:solid; + margin-left:-5px; + float:left; + } + +#menu { + width:158px; + padding-bottom:50px; + float:left; + } + +#menu div,#menu a { + border-bottom:1px solid #2c3f00; + background-image:url(img/menuentrybg.png); + background-repeat:repeat-y; + width:138px; + padding:2px 17px 2px 3px; + } + +#menu div.cat { + background-position:0 0; + color:#ddd; + font-size:14px; + font-weight:bold; + font-family:verdana,'bitstream vera sans','dejavu sans'; + } + +#menu a:link,a:visited { + display:block; + text-decoration:none; + background-position:0 -50px; + color:#002f51; + } + +#menu a:hover { + background-position:0 -100px; + color:#e8f5ff; + } + +#menu #current { + background-position:0 -150px; + color:#eee; + } + +#site { + width:532px; + padding:5px 0 5px 5px; + float:left; + color:#ddd; + } + +#footer { + width:694px; + padding:2px 3px; + background:#ff6600; + color:#fff; + float:left; + text-align:center; + border-top:1px solid #2c3f00; + } + +#footer div,#footer a { + display:inline; + padding:2px 5px; + } + +#footer a:link,#footer a:visited { + text-decoration:none; + color:#142991; + } + +#footer a:hover { + color:#050C28; + } + +#footer #current { + color:#fff; + background-color:#000; + } + +#space { + width:100%; + height:10px; + float:left; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/index.php b/subsites/projects/eonaton/index.php new file mode 100644 index 0000000..1a7fa7f --- /dev/null +++ b/subsites/projects/eonaton/index.php @@ -0,0 +1,74 @@ +$type-1 || ($pagetype==0 && $pagesite>$menu->size()-1) || ($pagetype==1 && $pagesite>$footer->size()-1) || $pagetype<0 || $pagesite<0) { + $pagetype=-1; + $pagesite=-1; +} + +?> + + +Eon Aton :: <?php echo $title; ?> + + + + + + +
+ + + + +
+ + + +
+ + +
+ + + +
+ +
+ +
+ + \ No newline at end of file diff --git a/subsites/projects/eonaton/info.php b/subsites/projects/eonaton/info.php new file mode 100644 index 0000000..b3ef32a --- /dev/null +++ b/subsites/projects/eonaton/info.php @@ -0,0 +1,45 @@ +add("Eon Aton is the best game I've played in ages!","Yooichi Wada, president of Square Enix"); +$quotes->add("Eon Aton is the best story I've ever read!","The ghost of H. G. Wells, author of \"The Time Machine\""); +$quotes->add("I used to be bored. Now I'm not!","Anonymous"); +$quotes->add("Th15 5h17 r0xx0rz!","1337 p3r50n"); +$quotes->add("Eon Aton's JavaScript code rules!","Brendan Eich, creator of the JavaScript programming language"); + +// MENU +$menu=new linksarray(); + +$menu->add("Home"); +//HEADER\\ +$menu->cat("The game"); +$menu->add("Play the game"); +$menu->add("Instructions"); +$menu->add("Screenshots"); +$menu->add("Technical info"); +//HEADER\\ +$menu->cat("The story"); +$menu->add("Read the story"); +$menu->add("About the story"); +//HEADER\\ +$menu->cat("Other"); +$menu->add("The creator"); +$menu->add("Images"); +$menu->add("Contact"); + +// FOOTER +$footer=new linksarray(); + +$footer->add("Terms of Use"); +$footer->add("Privacy Policy"); +$footer->add("Copyright"); +$footer->add("Time machines"); +$footer->add("Lizards"); +$footer->add("May the source be with you"); + +// OUTPUT +$quotes_output=$quotes->random(); +$menu_output=$menu->generate(); +$footer_output=$footer->generate("- "); +?> \ No newline at end of file diff --git a/subsites/projects/eonaton/special.css b/subsites/projects/eonaton/special.css new file mode 100644 index 0000000..c956d6a --- /dev/null +++ b/subsites/projects/eonaton/special.css @@ -0,0 +1,50 @@ +a#play:link,a#play:visited { + display:block; + width:300px; + margin:0 auto; + border:2px solid #fff; + background:#00e516; + color:#222; + font-size:30px; + font-family:verdana,'bitstream vera sans','dejavu sans'; + text-align:center; + padding:10px 0; + margin-top:50px; + } + +a#play:hover { + background:#00990c; + color:#ddd; + } + +.imglinks div { + display:inline; + background:#ff6666; + padding:3px 5px 1px 5px; + border-width:1px 1px 0 1px; + border-style:solid; + border-color:#fff; + position:relative; + left:10px; + z-index:2; + color:#000; + } + +.imglinks a img { + display:inline; + border-width:1px; + border-style:solid; + border-color:#fff; + } + +.imglinks p { + margin-bottom:25px; + } + +#use { + width:500px; + background:#fff; + border:1px solid #999; + color:#000; + padding:5px; + } \ No newline at end of file diff --git a/subsites/projects/eonaton/story/LICENSE b/subsites/projects/eonaton/story/LICENSE new file mode 100644 index 0000000..90d824b --- /dev/null +++ b/subsites/projects/eonaton/story/LICENSE @@ -0,0 +1,3 @@ +Eon Aton (the story) is released under the +Creative Commons Attribution-ShareAlike 3.0 license. +Author: Niels Serup \ No newline at end of file diff --git a/subsites/projects/eonaton/story/eonaton.odt b/subsites/projects/eonaton/story/eonaton.odt new file mode 100644 index 0000000..1daa633 Binary files /dev/null and b/subsites/projects/eonaton/story/eonaton.odt differ diff --git a/subsites/projects/eonaton/story/eonaton.pdf b/subsites/projects/eonaton/story/eonaton.pdf new file mode 100644 index 0000000..04ca17c Binary files /dev/null and b/subsites/projects/eonaton/story/eonaton.pdf differ diff --git a/subsites/projects/eonaton/story/eonaton.txt b/subsites/projects/eonaton/story/eonaton.txt new file mode 100644 index 0000000..bb83895 --- /dev/null +++ b/subsites/projects/eonaton/story/eonaton.txt @@ -0,0 +1,138 @@ + Eon Aton + By Niels Serup + +"Sidus! Sidus!" Mirie yelled. Sidus had been asleep for almost a day, but he still wanted to sleep more. Mirie, on the other hand, had got up right after hearing what had happened to their city. After a lot of yelling and shouting on Mirie's part, Sidus finally woke up, and Mirie was now able to tell him the terrible truth: Their city was gone. + +It had now been two days since the unbearable truth was revealed to Mirie and Sidus. They were the only people who on that fateful night were outside the city, and now they wanted to find out what excactly had happened. Sidus and Mirie had been living in the city of Aton for all their 16-year old life, and they had never been away for more than 3 days at a time and not more than 50 miles away. Aton had it all: Shops, activities, schools, just everything a normal middle-sized city would have. But now there was nothing. There were no marks after explosions, and there was not any debris either. It was like the city had been conjured away, but both Mirie and Sidus knew that was not the case. About a day ago they had seen a terrifying light in the sky that did not look like something natural. They thought it to be odd that they were the only two who had noticed it, and they still did not understand it. "It has to have something to do with the disapperance of the city. It has to," Sidus told Mirie, "why else would we've been the only ones who could see the light AND be the only ones to not disappear? It HAS to have something to do with each other." Mirie agreed, and together they decided to find the city. But to do that, they first had to find out whether their city was the only city that had disappeared, or if all cities in all of Orb, their country, were victims. "We'll have to get some proviant," Mirie exclaimed, "and some warm clothes. It's going to be cold outside in the night." Their first travel had begun. + +Having decided to head north, Sidus now understood what Mirie meant with "cold". However, it was not cold, it was freezing. There were no living animals, nor any plants. Everything was frozen. The temperature did not vary at all. At night it was far below 0 degrees, and it was the same at daytime. Sidus and Mirie barely managed to breathe. They walked for a week, only seeing ice wherever they looked, before finally reaching a small city. Sidus and Mirie instantly fainted in front of an old house. The inhibitants heard them faint and dragged them inside. The life savers put the two wanderers in bed, trying to get some warmth into them. Mirie and Sidus were in a very bad condition. + +Mirie finally awoke. "Where am I?" she said out loud, looking around. She couldn't spot Sidus. Suddenly a female voice appeared behind her. "How are you?" it said. Mirie looked at the person but was confused and did not answer instantly. Thoughts kept circling her mind. "Where is Sidus? Where is this? Who is this person?" At last she made a reply. "I'm fine," she said, but it was more of a standard response than anything. +"No, really, how are you?" the voice reanswered. +"Well.. Who are you? And.. And.. WHERE IS SIDUS?!?" Mirie yelled all of a sudden. +"I'm Asitera. My husband, Maes, is treating your friend in the next room. He -" the person told Mirie, with Mirie interrupting her in the end, shouting: "SIDUS? How is he? Is he alright? Does he have any wounds? Did he -" +"Calm down," Asitera said, "He's fine. It's just that he had a few wounds. Nothing serious, really. Both of you were really lucky. Where were you headed?" Mirie ignored the question and hurried into the next room. Sidus was lying in a bed, wrapped in a couple of bandages. Mirie didn't think he looked too bad and started to relax. "I'm not really a doctor, but he should be alright," Maes told her, "just a few scratches here and there. It's actually a bit weird you were completely unhurt." Mirie looked at herself and did not see any wounds. She wondered about it for a moment but let it go. She walked back to the other room, thanked Asitera and went to sleep again. + +Three days had passed. Sidus had now completely recovered from his wounds, and both him and Mirie began to refocus on their plan about finding cities. This small outskirt did not qualify as a city in Sidus and Mirie's eyes. They told Asitera and Maes about what had happened and what their plan was, and to their surprise both Asitera and Maes knew about the disappearance of cities. "We don't know about who is behind all of this," Maes started, "but we're aware that every city with more than 100 citizens is gone." Mirie was confused. "Why do you two know that?" she asked. Sidus was also a bit confused, but he had an idea: "The citizens of this small town probably used to live in the different cities, and they all ended up here. Is this correct, Maes?" Maes nodded, saying: "20 persons inhabit this village. They come from 15 different cities. They all say their city was suddenly gone, and that they were the only ones who didn't disappear. They all somehow ended up here. We were actually a bit surprised when we got here. It would've been natural if it was a ruin, but when we got here, it looked as if it had been restored recently. Everything was fixed. We thought about it-" +Asitera broke in, setting a stop to the random chitchat. "I suppose your situation is the same, right?" she asked Sidus and Mirie. They both nodded. +"Now the only thing left is to find out who or what did all this. Let's try to find some leads," Sidus suggested with a determined mind. Maes and Asitera began to gather the people of the village and told them about the plan. They all agreed on trying to find clues, and after distributing some proviant and something equivalent to walkie talkies, they began looking in different directions. No one knew what to look for, but they all knew that the future of the world very much depended on them. Destiny lay in their hands. + +"Shit." +Sidus eyes had suddenly become focused on a giant creature about a mile away moving very fast towards him and Mirie. Mirie noticed it too, but when she did, it was only half a mile away. Soon after, it had fully catched up with the two. Mirie and Sidus felt like they had been stunned. A giant sandworm, about 100 feet wide and several 100 feet long, had appeared before them. Mirie thought it had an odd, eerie glow that would make it visible even in total darkness. Sidus noticed that the giant sandworm seemed to be launching an attack, and he quickly regained his senses. However, both him and Mirie were useless. The sandworm was larger than them, faster than them, and they did not have any weapons at all. Seconds later the giant sandworm swallowed them. They were doomed. + +The walkie talkie beeped again and again. Finally Sidus heard it, and he got up, noticing that he was still somehow alive. Then he thought of Mirie. He called after her, but no one answered. "She must be near me," Sidus thought, and he began looking. However, it was completely dark. He could not even see his own feet. Despite of that, Sidus tried walking forward, hoping to find a torch or something similar. Not long time went before he tripped and fell, and apparently someome heard that, as a couple of lamps above Sidus were suddenly turned on. Then he found out. He was trapped inside a large cage, and Mirie was nowhere to be seen. He grabbed the walkie talkie and tried to communicate with the other groups. No signal. Apparently all it could do was beep. "Probably the batteries," Sidus thought, putting it in his pocket. Then he started to look around. He was amazed to see the size of the room his cage was in. His cage was the same. It was probably ten times the size of what it needed to be to keep him trapped. The cage he was in had large steel bars keeping him from escaping. The floor, walls and roof were all in a dark brown color, and there were many doors but no windows. Judging by the inventory, Sidus had the idea that he was in some kind of laboratory. However, he did not get more time to observe. A short, dark-haired man entered through one of the many doors. He walked slowly towards Sidus, taking heavy but short steps. When the man was only a couple of inches in front of the cage, he looked at Sidus and started talking. Sidus was scared. +"You are the one." the short man told sidus. Sidus was surprised and gathered enough courage to answer. "What do you mean?" Sidus replied. +"You are the one." +"But why? How? And where's Mirie?" +"Mirie is safe. The point is, several thousands years ago, you was chosen to become the leader of the group called Radical Believers. We consist of thousands of people trying to save the world from misery. And you will be our leader." +"But WHY? I'm just Sidus, an ordinary boy from the city of Aton! What could I help with at all? I don't get it!" +The short man sighed and turned around. Then he told Sidus in a quiet voice: "Your father." + +Sidus' father had died when Sidus was only 3 years old. Sidus had very few memories of him and did not want to think too much about him. He did not, to this day, even know anything about his father's background. He had never asked his mother about it. And now this dwarf-like person mentioned him! Sidus suddenly felt like he desperately needed an answer. Before he could say anything, though, the short man started talking again: "I'm Ibaxo. Your father was our former leader, but unfortunately he passed away 13 years ago. If I remember correctly, his name was.. Liwe?" Sidus nodded. Ibaxo continued: "For 15 years he led our group to great victories over evil. But then he was defeated. And now -" +"Who defeated my father?" Sidus yelled all of a sudden, interrupting Ibaxo's explanation. He had almost completely forgotten about Mirie. He just wanted to know who defeated his father -- badly. Ibaxo did not seem surprised, and Sidus thought Ibaxo might have foreseen this. A few seconds of silence went by, and Ibaxo continued as if nothing had happened: "- and now you will be our new leader. This is no easy feat. You must control thousands of people in their effort to save the world. And of course... You must be able to use the CHRONO CHANGER." Sidus looked troubled. He knew that "chronos" meant "time" in Latin, and he soon realized that "time changer" might mean what he would call a time machine. "Is this thing we're talking about a time machine?" Sidus asked Ibaxo, trying to speak calmly. Ibaxo took a deep breath before quietly nodding. "It's difficult to use. But it's powerful and very useful in some situations. But beware! It might.. backfire." Ibaxo told Sidus. +Sidus felt he was prepared, though he did not completely understand the last part. But he knew he would someday. Sidus was given the Chrono Changer, and he was surprised to see that it was in fact a fairly small machine. + +Sidus had been reunited with Mirie, and they had been freed on a location near the small town. They were now able to communicate via the walkie talkie. All teams were fine and heading back to the town. Sidus told them that he and Mirie were also heading back, keeping the secret about the Chrono Changer to himself. Back in the town, though, he decided to tell the citizens about his newly aquired time machine. He felt he had to tell them as a "thank you" for helping him. Also, he did not know how to use it, and he hoped one of the citizens could help him. +"So that's how it is, right?" one of the citizens said. It was a dark-haired, tall male, probably about 90 years old. Sidus had just told him and the others about the Chrono Changer, and how he forgot to ask Ibaxo how to use it. They were sitting around a small fire, and the old man was the only one who seemed to know something. +"I thought it was just a legend," the old man continued, "but apparently it's not. This must be fate. You see, years ago my grandmother told me about 'a machinery that will alter human history'. I thought it sounded funny, but one day I met this young man - he might've been your greatgrandfather or something - who told me about it in details. I still didn't really believe it, and I quickly forgot about it. But it seems it's true. If I remember correctly, one of the things he told me was how to use this little piece of machinery. Now, what did he say? Oh, yes, you just think of the date you want to travel to and put a bit of your blood and the blood of a person close to you into this container to confirm that you are in fact you and that you will not use the machine for evil purposes. Anyone who touches the Chrono Changer when it's starting will travel in time together with the owner." +Sidus and Mirie were thrilled and tried it without thought. Sidus thought of two weeks ago and put a little drop of his blood into a container in the machine. Mirie subsequently put a drop of her blood into the container, making the Chrono Changer emit a multi-colored beam. Mirie was surprised and let go of the machine. Sidus still had it in his hands when a great, blue light appeared. +He was gone. + +Sidus was standing in the middle of the desert. He was surrounded by a circle of small houses. It looked like the houses had been left a long time ago. Sidus immediately recognized the place as the small town that he had been in just a couple of seconds ago, though this time it looked more like ruins than anything else. "Is this.. two weeks ago?" Sidus thought. He walked into Asitera and Maes' house, but no one was there. And on the contrary to when Sidus last visited their house, this time it was full of dust and webs. It was then that he understood how true the Chrono Changer was. Sidus had no intentions of staying in the time frame two weeks ago, and so he desperately tried to get back to the future. All of his attempts were futile. He did not have the blood of a person close to him. He sat down, looked into the sky and thought of his possibilities. He soon realized that there was no way he would be able to return to in two week's time. It was then he remembered what Maes had told them about how the village did not look like ruins when they had arrived. "Maybe.." Sidus thought, "maybe, I was the one who restored the buildings!" He did not completely understand the situation, but nonetheless, he slowly began restoring the houses. A week passed, and he noticed a couple of people in the distance. He quickly hid behind one of the houses. After a short amount of time, he heard two familiar voices. +"We should stay here, Maes" +"Yep, Asitera. But I wonder why it looks this well. It doesn't seem like anyone would want to live out here. Odd." +Sidus knew he had to hide until the Sidus from the future had gone to the past. He simply did not want to cause a paradox. +During the two weeks of hiding, occasionally Sidus was able to get proviant. When the inhibitants of the village had wandered off to find clues, Sidus was finally able to sleep in a bed. He spent most of his time thinking about the meaning of life. Was time travelling really that great? What if humans were simply destined to be exterminated? Sidus was not sure of what to do anymore, and he fell asleep. + +The great, blue light appeared once again. The oldest Sidus looked intensily at himself disappearing into the past. "Did another Sidus also look at me when I disappeared?" Sidus thought, "Did he think the same thoughts that I'm thinking in this very moment?" Sidus did not want to worry about it anymore, and he showed himself to Maes, Asitera and the rest. One of the first responses was about the Chrono Changer only being a teleporter. Soon everyone was talking about the Chrono Changer and its attributes. Sidus had to yell "STOP!" to make them quit talking. Sidus then told them everything -- his time travel, what he had done in the past two weeks, simply everything. The villagers were stunned. Some of them looked like they were not able to comprehend the situation, Sidus observed. One kept talking about not understanding a thing, while another kept coming with theories that were supposed to point out the current Sidus as a traitor. After some time, Asitera broke in. +"Take it easy," she said calmly, looking at the old man who had told Sidus how the Chrono Changer works, "Sidus is right -- he is, isn't he?" +The old man nodded. The villagers slowly walked away, still thinking about what they had witnessed. The old man turned to look at Sidus, telling him quietly: "We need to talk." + +Sidus, Mirie and the old man were sitting around a table inside what seemed to be the old man's house. Mirie had insisted on joining the two, and the old man had agreed in the end. The old man had just walked into the kitchen, and Sidus took a look at the house from the inside. It was a fairly large house, though it did not seem that the old man was the only one living here. From where he was sitting he could see several beds, none of which looked unused. +The old man had just reentered. He sat down by the table. +"How are you?" the old man asked Sidus and Mirie. +"Not to well," Mirie said. +"Could've been better," Sidus remarked. +The old man seemed to understand and started talking. +"I'm Jonathan. What I told you about the Chrono Changer was indeed true, but there is more to it. The Chrono Changer has a long history." +Sidus and Mirie yawned. "How long?" Mirie asked. Jonathan seemed to completely ignore this as he started to talk. +"A long time ago, a very advanced race inhabited the mountains of Hujy. They were called Sphyxes, had wings and were able to teleport to different places in a nanosecond. They were able to do this because of their infinite energy resource -- the Zidtron. They lived in harmony and peace, only eating animals that had died of natural causes and plants. They were happy. But they were also powerful. And with power comes the lust to rule." +Sidus and Mirie started to get interested. +"You see," Jonathan continued, "about 4000 years ago, the Sphyxes invented the Chrono Changer. They wanted to be able to travel in time and not just be able to teleport. Most Sphyxes believed this to be a great invention, and within a short period of time it was decided that the Chrono Changer should be used to change the course of history -- in favour of the Sphyxhes, naturally. Fortunately for the rest of the world, there was one Sphyx who did not want to use the Chrono Changer for such things. He hid it within a sealed barrier that only humans, animals and plants - in fact, anything that wasn't a Sphyx - could enter. The Chrono Changer was later picked up by an adventurer. The Sphyx who put up the barrier was eventually killed by his own race. Before getting killed, he managed to put up another barrier, this time restraining all access to the Zidtron. Because they did not have access to the Zidtron, they gradually grew weaker, and in the end they died. Or so I thought." +"What do you mean by that?" Mirie and Sidus almost synchronously asked. +"The disappearing cities might have something to do with them. I've thought up a theory, which would explain it. You see, the barrier that stopped the Sphyxes getting into contact with the Zidtron relies not on species recogniton, but on energy level recognition. In short, that means that only a creature with an energy level below a certain point can enter the barrier. A Sphyx has a very high energy level, which is why they can't enter. However, the Sphyxes have been drained for energy during these thousands years, so there's a risk they might be able to enter the barrier by now. If that's the case, they might want to take revenge on the human race for stealing the Chrono Changer." +Sidus looked at Jonathan, then at Mirie. He had made up his mind. "We must go back to our town and travel back to the day it disappeared. Maybe we can catch a glimpse of some Sphyxes," he said determined. Mirie seemed to agree, but Jonathan did not. "What if it is the Sphyxes? What will you do in that case? And what if it isn't the Sphyxes?" he told the two, "You have to make a fairly bulletproof plan to be able to get the cities back all over the world. And I'll gladly help you." +Mirie and Sidus nodded. + +A few days had passes. Sidus and Mirie had been helping with various tasks in the small village, while in the meantime Jonathan had tried coming up with a plan on how to get the cities back with the help of the Chrono Changer. Sidus had just finished eating dinner with the rest of the village, when he heard Jonathan call for him and Mirie. The three gathered in Jonathan's house -- which Sidus now had learnt was also inhabited by some of the other villagers -- and sat down by the table. Jonathan started talking. +"It has been a difficult task to make a plan. But I've succeeded. We know that cities have been disappearing, and we know that the Chrono Changer has once again become active. We think that the Sphyxes might have regained their powers. The point here is, even if the Sphyxes has got their powers back, why would they want to make cities disappear? If they are indeed back, they would surely want to kill the inhibitants of the cities. And somebody would have to protect the inhibitants of those cities. You, that is." +Sidus looked at Mirie, and Mirie looked back at him. A few seconds went by, when they almost simultaneously exclaimed: +"THE CHRONO CHANGER!" +Jonathan nodded, continuing explaining his plan: "Yes, that's right. At some point you'll travel back in time and somehow make the cities disappear. That way, the Sphyxes will not be able to kill any humans. The problem is, it's actually pretty diffcult to make cities disappear. And this is where my plan comes into action." +"Just tell us already!" Sidus shouted impatiently. Jonathan did not seem to notice and continued as if nothing had happened: "Back in the days when I was merely a student in the art of planning, my master told me a secret - the secret of the Mass Uniter. It's a device that can merge a lot of things into one thing. I don't know the details, but you should be able to use it to make the cities time-transferable. You see, the Chrono Changer is only able to travel in time with one object at a time. However, if more than one object touches it, the Chrono Changer will detect it as only one object. If you used the Chrono Changer at a city, only part of it would travel in time, and that's why you need to get the Mass Uniter. As far as I remember, it's located in a city north of here named Neythity. You must go there and ask for a person called Finn Frenzy. I don't know how he got that name, but everybody calls him that. You know, he was actually my old master." +"But if he's your master, he must be relatively older than you. You are old, so your master must either be very old or just dead, right?" Mirie asked. +Jonathan nodded. "My master is indeed very dead. But with the help of the Chrono Changer he'll once again be alive. Your task is to go about twenty years back in time and visit my now-dead but then-alive master Frenzy. After that you must go forward in time to the date the cities started disappearing, use the Mass Uniter to merge you with the cities and take the cities to the future. I'm sorry if my plan isn't very detailed, but I simply don't know that much." +"We'll do it!" Sidus said in a determined voice. "Let's go!" Mirie yelled. + +Mirie and Sidus stood in the middle of the village with the inhibitants gathered around them. Jonathan had given them a compass and provisions to hold out for a week. Sidus put a drop of his blood into the Chrono Changer, held Mirie's hand and thought of a date 20 years ago. Like the last time, a great, blue light appeared. A second or so passed, and Sidus was gone together with Mirie. +Sidus couldn't see a thing. Neither could Mirie. It seemed as if they had landed in the middle of a sandstorm. Sidus tried looking in all directions to see where the storm was coming from, and he noticed that the sandstorm was coming from everywhere. Then he and Mirie started being pulled downwards by a mysterious force. They tried fighting the force, but with no luck. They were, once again, doomed. + +It was dark. Sidus had just awaken. In the distance he could hear footsteps, though he was unable to determine if it came from one or more persons. Suddenly the light was turned on, and before Sidus stood none other than Ibaxo. Sidus suddenly remembered his promise about being the leader of the group called Radical Believers and felt bad about completely having forgotten it. He then had a slight dejavu, sitting in the same cage as the last time he was captured by Ibaxo, looking at the same room as the last time he was captured. Ibaxo started talking, but Sidus barely noticed what he said. He had just noticed that Ibaxo was not alone in the room. In the back of the room two people - a man and a woman - was walking. Sidus was unable to completely grasp how they looked, but they seemed very familiar to him. +This time Mirie had not been removed from the cage. As she woke up, Sidus regained focus and started listening to what Ibaxo had to say. Ibaxo, however, had stopped talking. Instead he held up two identical Chrono Changers. Sidus and Mirie could not find Sidus' Chrono Changer and quickly realised what had gone wrong. Ibaxo's facial expression changed from being angry to being confused, and as soon as the two people walking in the back of the room had exited the room, he started talking again. +"You posses a Chrono Changer identical to the one my leader has. You are a stranger, and yet you resemble my leader very much. Who are you?" Ibaxo looked closely at Sidus. Sidus did not fully understand what Ibaxo meant, but as he thought of the two people that he has seen a moment ago, he suddenly got it and could not help but yell. "FATHER!" Sidus had just remembered that Liwe, his father, had been the leader of Radical Believers until his death 13 years ago -- no, in 7 years time. "You.. You're from the future?" Ibaxo asked. He did not look very well. Mirie and Sidus looked at each other, then at Ibaxo, and nodded. Ibaxo tried to act calm and asked about Sidus and Mirie's reason for going back in time. They explained to him about the towns disappearing, obtaining the Chrono Changer, the Sphyxes and the Mass Uniter. +After a short amount of time of thinking, Ibaxo agreed to let the two go free. "I see no other way out of this mess," he said. Sidus and Mirie then left, once again looking for the city of Neythity. + +It had been several days before Sidus and Mirie had left for Neythity. They had met a bunch of wild animals and were low on provisions. They were walking, low on hope, when they finally saw a city in the distance. They hurried towards the city, and within minutes they stood in front of a great gate. It was open, and they walked straight into it. The next step was for them to find Finn Frenzy. They asked the first person they saw, but it seemed the person did not know. After having asked a lot of people with no result, Sidus and Mirie decided to get something to eat. They found a place called "The Qwizzor's Diner" and entered. They got a table and ordered something to eat. While waiting for their food to come, they took a look at the diner. It was full of drunk men talking nonsense in an odd language. It was not the type of people you would want to ask something, and Sidus and Mirie quickly decided to just sit still. That, however, did not seem to be an option. Within a few seconds, the men had already noticed Mirie, the only female in the room who was not a waitress, and Sidus, who probably seemed a bit odd compared to the rest of the customers. The two adventurers were a bit scared, though they did not take long to realise that there was nothing to fear. It did not take long for the men to start asking. +"Heyy ya oddity," one in a large, red handkerchief said, "what ya doin' here?" Sidus thought he both sounded and looked like a pirate, but he did not comment it. +Another man, this one wearing a oversized blue shirt and a cap that seemed to cover his eyes, then looked closely at Sidus and Mirie. "You lookin' for something.. or someone?" he asked, "We'll help you for free." +Sidus and Mirie did not have any second thought about strange men saying they would help, and instantly said that they were looking for Finn Frenzy. The men's faces stiffened, and within moments they had gone back to their tables and started talking about something else. Sidus and Mirie's food arrived, and they could not see any other solution than simply start eating it. When they had finished they left, but as they went through the exit, a voice called them. The voice seemed strangely familiar, and they followed it. It was dark outside, and they were not able to clearly see the owner of the voice. They made it to a small house and went inside. A light was turned on, and the voice revealed itself. It was Jonathan. + +"How are you?" Jonathan asked. Mirie and Sidus thought that somehow revealing they knew him in the future was be a bad idea, and they did not. +"We're fine," they answered, not thinking too much. +"I heard you were talking about Finn Frenzy," Jonathan continued, "Do you have any business with him?" +"Well.. Eh.." Sidus had no idea to what he should say. +"We have to deliver a personal message to him!" Mirie then said. Jonathan seemed to accept that purpose, and he asked Sidus and Mirie to sit down. +"I will lead you to master Frenzy the first thing in the morning. But for now, you must sleep," he said. Mirie and Sidus nodded and went to sleep. + +Sidus and Mirie had been woken by Jonathan as the sun was starting to rise. They hurried out of town and made it to a small hut located in the middle of nowhere. "This is here," Jonathan said. He turned around and left. Sidus and Mirie slowly walked towards the hut. They thought of what to say when they met what they thought of as a "frenzy fellow", but they were unable to come up with something very clever. As they came closer to the hut, the main door seemed to be opening. An old man appeared from inside the hut and seemed to be waiting for the two adventurers. When Sidus and Mirie had reached the hut, he welcomed them. "I am Finn Frenzy. Welcome." he said in an almost solemn tone. Sidus and Mirie followed him into his hut and sat down by a table. Finn told them to wait a couple of minutes and then went into a room. While waiting, Mirie and Sidus thought about what they had seen. They had originally believed that Finn Frenzy was an insanely powerful and wise man, but when they looked at Finn, it seemed to them that he was simply an old, powerless man. Finn then reentered with a small, black object. +"This.." Finn started, "..is the Mass Uniter. This is what you're looking for, right?" +"It is!" Mirie shouted, "but how did you know that?" +Finn then turned away from Mirie and Sidus, leaving them to their own thoughts. "The world is in your hands. Don't waste the Mass Uniter on unneccessary things." Then he left. And then Sidus and Mirie left too. + +Sidus and Mirie had decided to get something to eat before travelling forward in time. They weren't sure as to how the Mass Uniter was supposed to work, and they decided that they would try to merge themselves with a couple of random objects lying unconnected on the ground before travelling in time. But for now they were in need of food. And sleep. Outside it had already turned dark. They found somewhere to spend the night, and the next morning they were ready to leave. They then found three small rocks, placed them so they didn't touch them, and looked at the Mass Uniter. They noticed a button and clicked it. The moment they touched it, a great, green light erupted from it, and then a voice appeared out of nowhere. "Do not use me for simple rocks," it said, "do not waste the Mass Uniter!" And then it disappeared as quickly as it had appeared. Mirie and Sidus were surprised but decided they had to believe the strange voice. They then used the Chrono Changer to travel forward in time to the date when the cities started disappearing. They had earlier come to a conclusion that the disappearance must have started a three weeks or so before the city that Sidus and Mirie used to live in disappeared. After all, they had been the last to arrive at the small village. +With the date in mind, they held onto the Chrono Changer. Sidus and Mirie placed some of their blood in the small container on the Chrono Changer, and the usual blue light once again appeared, bringing the two to the future. + +"Look!" Mirie had noticed a city in the distance. Mirie had always been good at geography, and she immediately recognised it. "Let's start with that one," she then said. With limited proviant the two wandereded in the desert for hours, finally making it to the city. They agreed to enter and examine the city before sending it to the future. On their way into the city, they noticed Maes and Asitera leaving the town. "Then we'll be going!", Maes said, leaving the entire population of the city to what would seem to be total destruction but was in fact nothing more than a tiny time travel. Mirie and Sidus decided to wait for about an hour or so before they made the city disappear. That way Maes and Asitera would not be able to see who did it but they would still notice it. Mirie and Sidus looked at each other. They were sure this was the best solution. +After having waited for about an hour, Sidus and Mirie positioned themselves about 100 metres away from the city. Sidus took the Mass Uniter out and clicked the button they had clicked earlier. The same voice as last time appeared. +"I see you've found quite a task for me!" the voice said, "But don't worry, I'll handle it." +All of a sudden, the city was surrounded by a barrier covered in the colors of the rainbow. Sidus hurriedly took his Chrono Changer out and put a drop of his blood and a drop of Mirie's blood into the container. He and Mirie then thought of the date ten years from now. They believed that to be enough. The usual blue light appeared, sending both the city, Sidus and Mirie into the future. + +The first city transfer had succeeded. Ten years into the future, Sidus, Mirie and the city stood as if nothing had happened. Both the surroundings and the weather was unchanged, leaving behind an impression that no time travel had ever taken place. +"I guess we must do this with all the cities in this area. I'm glad we have a month to do it in!" Mirie said. +Sidus then looked away, starting to mumble. "Well, eh.. The truth is, we only have one day to do it. I miscalculated the date," he said quietly. He expected Mirie to become mad, but as he looked at her, it seemed as if she had suddenly got an idea. "Why not simply travel a day back in time whenever we're in need of that?" she said. Sidus immediately understood. When travelling back in time now, they would not travel back to a couple of seconds after they had gone to the future. Rather, they would travel back 10 years plus a couple of days. This way all the cities could disappear at the same time. +"The only problem with this plan," Sidus started, "is that our city was the last one to disappear. If we must make all cities disappear within a day, our city is going to disappear sooner than it really did. And then we're going to start our wandering earlier! That'll screw up the entire time-space continuum!" +Mirie looked thoughtful for a moment. Then she looked up at the sky. "We must poison ourselves," she said. Sidus looked stunned, but Mirie continued: "Nothing serious - it's just to make sure we'll sleep for another week. That way, we'll arrive at the time that we originally arrived at. I don't like the idea, but I don't see any other solution. Argh." Sidus nodded. It was indeed very neccesary, though it was not something he looked forward to. There was however one thing that he was not able to find an answer to, and he said out loud: "How do we get sleeping pills that'll make us sleep for a week but not kill us? I mean, sleeping for a week means not drinking anything for a week and not eating anything for a week. That can easily result in what we know as death. And that's not very nice!" +Mirie spaced out for a while, looking into the endless desert. "I know.." she started, looking like she didn't feel very well, "a way." +Sidus looked at her, as she continued. +"A long time ago, a secret was passed down to me by my grandmother. She told me that -" Mirie hesitated, clearly doubting that she should tell Sidus the secret. Nevertheless, after taking a deep breath, she started talking again: "- that a spell that can put people into a type of hibernation exists. I've never thought it to be true, but I suppose it's our only solution. My grandmother told me of a woman that used to live south of our city. Apparently she could do magic." +"MAGIC?!?" Sidus yelled. Sidus had never liked the occult. He simply did not believe in witches or the likes. He told that to Mirie, but she did not react. Instead, she kept talking. +"She used to live just outside our city. If we travel, say, 20 years back in time, I'm sure we'll be able to find her. We'll make sure none of the people we know sees us." +Sidus still clearly did not like it, but he nodded. He was able to do it. "Let's take care of the other cities before we handle our own, though. It'll be easier that way," Sidus said. Then they traveled 10 years and one day back in time and went to the next city engraved on Mirie's inner map. + +They kept doing the cycle of travelling back and forth in time for a month or so. Though it did not take more than one day, timetravelling all the time was quite exhausting. Sidus and Mirie needed a break before they were to poison themselves. However, that was impossible, and they kept on wandering. +At last they were able to see their city in the distance. The sight of it brought back memories. Sidus and Mirie kept walking in spite of the nostalgia starting to kick in, and within an hour they were standing not far away from what used to be the city they lived in. It was however still not dark, and they were fully aware that they themselves were inside the city right know. They had to wait. +It was now dark. Sidus and Mirie had been calculating for some time now, and they had reached the conclusion that putting themselves to sleep tonight would keep the time cycle the way it was supposed to be. The poisoning was done in a matter of seconds. Sidus and Mirie -- the ones not poisoned -- then traveled back to the future, to right after the time in which they had first traveled back in time. They walked through desert and icy areas for a week, consuming all proviant. They barely made it. Back in the village, the inhibitants greeted the two time travelers. Sidus and Mirie were however very tired and went to sleep. + +Sidus and Mirie had slept for a couple of days before they woke up. They then used a lot of time telling Jonathan, Asitera, Maes and the others about what had happened, before going to sleep once again. The next day Jonathan woke Sidus and Mirie. They sat down by a table, and what seemed would turn into a long talk was starting. +"So, how are you? Are you alright?" Jonathan started. Mirie and Sidus nodded, although they did not feel entirely well. +Jonathan then continued: "To us it seems that it was only a week since you left. But I'm sure you've spent much time travelling in time, right? Let me see the Chrono Changer." +Sidus handed over the Changer in disbelief. +"Hmhmm.. Let's see - oh..!" Jonathan's facial expression suddenly stiffened. +"What's wrong?" Sidus asked. +Jonathan apparently tried to calm down. He was still shocked, but he kept on talking: +"This is.. serious. While you were away I found a couple of old books describing how the Chrono Changer works. I was surprised to find out that there is a well-preserved secret regarding the Changer. Apparently, one who travels in time is subject to forces unknown to man. Those forces are dangerous and can mean that one obtains mysterious powers. However, those powers have only been obtained if the Chono Changer has a mark. That's what the book said. And the Changer -- it has the mark." +"A... mark?" Mirie was troubled. +"A mark, yes," Jonathan continued, "a mark that tells us that the distortion of time has increased to a level above the accepted. In other words, you have overused the Chrono Changer." +Jonathan then turned the Changer, making the mark visible to Sidus and Mirie. Sidus took a good look at it. It was the mark of a unicorn. And it seemed as if it was bleeding. "What does this mean?" Sidus asked, looking at the mark. Jonathan turned his back to Sidus and took a couple of steps. +"It's a curse." +Sidus and Mirie then fell, followed by the mumble of Jonathan: "It's the curse." \ No newline at end of file diff --git a/subsites/projects/eonaton/story/eonaton.txt.gz b/subsites/projects/eonaton/story/eonaton.txt.gz new file mode 100644 index 0000000..2170982 Binary files /dev/null and b/subsites/projects/eonaton/story/eonaton.txt.gz differ diff --git a/subsites/projects/eonaton/story/eonaton80w.txt b/subsites/projects/eonaton/story/eonaton80w.txt new file mode 100644 index 0000000..f2f6b92 --- /dev/null +++ b/subsites/projects/eonaton/story/eonaton80w.txt @@ -0,0 +1,595 @@ + Eon Aton + By Niels Serup + +"Sidus! Sidus!" Mirie yelled. Sidus had been asleep for almost a day, but he +still wanted to sleep more. Mirie, on the other hand, had got up right after +hearing what had happened to their city. After a lot of yelling and shouting on +Mirie's part, Sidus finally woke up, and Mirie was now able to tell him the +terrible truth: Their city was gone. + +It had now been two days since the unbearable truth was revealed to Mirie and +Sidus. They were the only people who on that fateful night were outside the +city, and now they wanted to find out what excactly had happened. Sidus and +Mirie had been living in the city of Aton for all their 16-year old life, and +they had never been away for more than 3 days at a time and not more than 50 +miles away. Aton had it all: Shops, activities, schools, just everything a +normal middle-sized city would have. But now there was nothing. There were no +marks after explosions, and there was not any debris either. It was like the +city had been conjured away, but both Mirie and Sidus knew that was not the +case. About a day ago they had seen a terrifying light in the sky that did not +look like something natural. They thought it to be odd that they were the only +two who had noticed it, and they still did not understand it. "It has to have +something to do with the disapperance of the city. It has to," Sidus told Mirie, +"why else would we've been the only ones who could see the light AND be the only +ones to not disappear? It HAS to have something to do with each other." Mirie +agreed, and together they decided to find the city. But to do that, they first +had to find out whether their city was the only city that had disappeared, or if +all cities in all of Orb, their country, were victims. "We'll have to get some +proviant," Mirie exclaimed, "and some warm clothes. It's going to be cold +outside in the night." Their first travel had begun. + +Having decided to head north, Sidus now understood what Mirie meant with "cold". +However, it was not cold, it was freezing. There were no living animals, nor any +plants. Everything was frozen. The temperature did not vary at all. At night it +was far below 0 degrees, and it was the same at daytime. Sidus and Mirie barely +managed to breathe. They walked for a week, only seeing ice wherever they +looked, before finally reaching a small city. Sidus and Mirie instantly fainted +in front of an old house. The inhibitants heard them faint and dragged them +inside. The life savers put the two wanderers in bed, trying to get some warmth +into them. Mirie and Sidus were in a very bad condition. + +Mirie finally awoke. "Where am I?" she said out loud, looking around. She +couldn't spot Sidus. Suddenly a female voice appeared behind her. "How are you?" +it said. Mirie looked at the person but was confused and did not answer +instantly. Thoughts kept circling her mind. "Where is Sidus? Where is this? Who +is this person?" At last she made a reply. "I'm fine," she said, but it was more +of a standard response than anything. +"No, really, how are you?" the voice reanswered. +"Well.. Who are you? And.. And.. WHERE IS SIDUS?!?" Mirie yelled all of a +sudden. +"I'm Asitera. My husband, Maes, is treating your friend in the next room. He -" +the person told Mirie, with Mirie interrupting her in the end, shouting: "SIDUS? +How is he? Is he alright? Does he have any wounds? Did he -" +"Calm down," Asitera said, "He's fine. It's just that he had a few wounds. +Nothing serious, really. Both of you were really lucky. Where were you headed?" +Mirie ignored the question and hurried into the next room. Sidus was lying in a +bed, wrapped in a couple of bandages. Mirie didn't think he looked too bad and +started to relax. "I'm not really a doctor, but he should be alright," Maes told +her, "just a few scratches here and there. It's actually a bit weird you were +completely unhurt." Mirie looked at herself and did not see any wounds. She +wondered about it for a moment but let it go. She walked back to the other room, +thanked Asitera and went to sleep again. + +Three days had passed. Sidus had now completely recovered from his wounds, and +both him and Mirie began to refocus on their plan about finding cities. This +small outskirt did not qualify as a city in Sidus and Mirie's eyes. They told +Asitera and Maes about what had happened and what their plan was, and to their +surprise both Asitera and Maes knew about the disappearance of cities. "We don't +know about who is behind all of this," Maes started, "but we're aware that every +city with more than 100 citizens is gone." Mirie was confused. "Why do you two +know that?" she asked. Sidus was also a bit confused, but he had an idea: "The +citizens of this small town probably used to live in the different cities, and +they all ended up here. Is this correct, Maes?" Maes nodded, saying: "20 persons +inhabit this village. They come from 15 different cities. They all say their +city was suddenly gone, and that they were the only ones who didn't disappear. +They all somehow ended up here. We were actually a bit surprised when we got +here. It would've been natural if it was a ruin, but when we got here, it looked +as if it had been restored recently. Everything was fixed. We thought about it-" +Asitera broke in, setting a stop to the random chitchat. "I suppose your +situation is the same, right?" she asked Sidus and Mirie. They both nodded. +"Now the only thing left is to find out who or what did all this. Let's try to +find some leads," Sidus suggested with a determined mind. Maes and Asitera began +to gather the people of the village and told them about the plan. They all +agreed on trying to find clues, and after distributing some proviant and +something equivalent to walkie talkies, they began looking in different +directions. No one knew what to look for, but they all knew that the future of +the world very much depended on them. Destiny lay in their hands. + +"Shit." +Sidus eyes had suddenly become focused on a giant creature about a mile away +moving very fast towards him and Mirie. Mirie noticed it too, but when she did, +it was only half a mile away. Soon after, it had fully catched up with the two. +Mirie and Sidus felt like they had been stunned. A giant sandworm, about 100 +feet wide and several 100 feet long, had appeared before them. Mirie thought it +had an odd, eerie glow that would make it visible even in total darkness. Sidus +noticed that the giant sandworm seemed to be launching an attack, and he quickly +regained his senses. However, both him and Mirie were useless. The sandworm was +larger than them, faster than them, and they did not have any weapons at all. +Seconds later the giant sandworm swallowed them. They were doomed. + +The walkie talkie beeped again and again. Finally Sidus heard it, and he got up, +noticing that he was still somehow alive. Then he thought of Mirie. He called +after her, but no one answered. "She must be near me," Sidus thought, and he +began looking. However, it was completely dark. He could not even see his own +feet. Despite of that, Sidus tried walking forward, hoping to find a torch or +something similar. Not long time went before he tripped and fell, and apparently +someome heard that, as a couple of lamps above Sidus were suddenly turned on. +Then he found out. He was trapped inside a large cage, and Mirie was nowhere to +be seen. He grabbed the walkie talkie and tried to communicate with the other +groups. No signal. Apparently all it could do was beep. "Probably the +batteries," Sidus thought, putting it in his pocket. Then he started to look +around. He was amazed to see the size of the room his cage was in. His cage was +the same. It was probably ten times the size of what it needed to be to keep him +trapped. The cage he was in had large steel bars keeping him from escaping. The +floor, walls and roof were all in a dark brown color, and there were many doors +but no windows. Judging by the inventory, Sidus had the idea that he was in some +kind of laboratory. However, he did not get more time to observe. A short, +dark-haired man entered through one of the many doors. He walked slowly towards +Sidus, taking heavy but short steps. When the man was only a couple of inches in +front of the cage, he looked at Sidus and started talking. Sidus was scared. +"You are the one." the short man told sidus. Sidus was surprised and gathered +enough courage to answer. "What do you mean?" Sidus replied. +"You are the one." +"But why? How? And where's Mirie?" +"Mirie is safe. The point is, several thousands years ago, you was chosen to +become the leader of the group called Radical Believers. We consist of thousands +of people trying to save the world from misery. And you will be our leader." +"But WHY? I'm just Sidus, an ordinary boy from the city of Aton! What could I +help with at all? I don't get it!" +The short man sighed and turned around. Then he told Sidus in a quiet voice: +"Your father." + +Sidus' father had died when Sidus was only 3 years old. Sidus had very few +memories of him and did not want to think too much about him. He did not, to +this day, even know anything about his father's background. He had never asked +his mother about it. And now this dwarf-like person mentioned him! Sidus +suddenly felt like he desperately needed an answer. Before he could say +anything, though, the short man started talking again: "I'm Ibaxo. Your father +was our former leader, but unfortunately he passed away 13 years ago. If I +remember correctly, his name was.. Liwe?" Sidus nodded. Ibaxo continued: "For 15 +years he led our group to great victories over evil. But then he was defeated. +And now -" +"Who defeated my father?" Sidus yelled all of a sudden, interrupting Ibaxo's +explanation. He had almost completely forgotten about Mirie. He just wanted to +know who defeated his father -- badly. Ibaxo did not seem surprised, and Sidus +thought Ibaxo might have foreseen this. A few seconds of silence went by, and +Ibaxo continued as if nothing had happened: "- and now you will be our new +leader. This is no easy feat. You must control thousands of people in their +effort to save the world. And of course... You must be able to use the CHRONO +CHANGER." Sidus looked troubled. He knew that "chronos" meant "time" in Latin, +and he soon realized that "time changer" might mean what he would call a time +machine. "Is this thing we're talking about a time machine?" Sidus asked Ibaxo, +trying to speak calmly. Ibaxo took a deep breath before quietly nodding. "It's +difficult to use. But it's powerful and very useful in some situations. But +beware! It might.. backfire." Ibaxo told Sidus. +Sidus felt he was prepared, though he did not completely understand the last +part. But he knew he would someday. Sidus was given the Chrono Changer, and he +was surprised to see that it was in fact a fairly small machine. + +Sidus had been reunited with Mirie, and they had been freed on a location near +the small town. They were now able to communicate via the walkie talkie. All +teams were fine and heading back to the town. Sidus told them that he and Mirie +were also heading back, keeping the secret about the Chrono Changer to himself. +Back in the town, though, he decided to tell the citizens about his newly +aquired time machine. He felt he had to tell them as a "thank you" for helping +him. Also, he did not know how to use it, and he hoped one of the citizens could +help him. +"So that's how it is, right?" one of the citizens said. It was a dark-haired, +tall male, probably about 90 years old. Sidus had just told him and the others +about the Chrono Changer, and how he forgot to ask Ibaxo how to use it. They +were sitting around a small fire, and the old man was the only one who seemed to +know something. +"I thought it was just a legend," the old man continued, "but apparently it's +not. This must be fate. You see, years ago my grandmother told me about 'a +machinery that will alter human history'. I thought it sounded funny, but one +day I met this young man - he might've been your greatgrandfather or something - +who told me about it in details. I still didn't really believe it, and I quickly +forgot about it. But it seems it's true. If I remember correctly, one of the +things he told me was how to use this little piece of machinery. Now, what did +he say? Oh, yes, you just think of the date you want to travel to and put a bit +of your blood and the blood of a person close to you into this container to +confirm that you are in fact you and that you will not use the machine for evil +purposes. Anyone who touches the Chrono Changer when it's starting will travel +in time together with the owner." +Sidus and Mirie were thrilled and tried it without thought. Sidus thought of two +weeks ago and put a little drop of his blood into a container in the machine. +Mirie subsequently put a drop of her blood into the container, making the Chrono +Changer emit a multi-colored beam. Mirie was surprised and let go of the +machine. Sidus still had it in his hands when a great, blue light appeared. +He was gone. + +Sidus was standing in the middle of the desert. He was surrounded by a circle of +small houses. It looked like the houses had been left a long time ago. Sidus +immediately recognized the place as the small town that he had been in just a +couple of seconds ago, though this time it looked more like ruins than anything +else. "Is this.. two weeks ago?" Sidus thought. He walked into Asitera and Maes' +house, but no one was there. And on the contrary to when Sidus last visited +their house, this time it was full of dust and webs. It was then that he +understood how true the Chrono Changer was. Sidus had no intentions of staying +in the time frame two weeks ago, and so he desperately tried to get back to the +future. All of his attempts were futile. He did not have the blood of a person +close to him. He sat down, looked into the sky and thought of his possibilities. +He soon realized that there was no way he would be able to return to in two +week's time. It was then he remembered what Maes had told them about how the +village did not look like ruins when they had arrived. "Maybe.." Sidus thought, +"maybe, I was the one who restored the buildings!" He did not completely +understand the situation, but nonetheless, he slowly began restoring the houses. +A week passed, and he noticed a couple of people in the distance. He quickly hid +behind one of the houses. After a short amount of time, he heard two familiar +voices. +"We should stay here, Maes" +"Yep, Asitera. But I wonder why it looks this well. It doesn't seem like anyone +would want to live out here. Odd." +Sidus knew he had to hide until the Sidus from the future had gone to the past. +He simply did not want to cause a paradox. +During the two weeks of hiding, occasionally Sidus was able to get proviant. +When the inhibitants of the village had wandered off to find clues, Sidus was +finally able to sleep in a bed. He spent most of his time thinking about the +meaning of life. Was time travelling really that great? What if humans were +simply destined to be exterminated? Sidus was not sure of what to do anymore, +and he fell asleep. + +The great, blue light appeared once again. The oldest Sidus looked intensily at +himself disappearing into the past. "Did another Sidus also look at me when I +disappeared?" Sidus thought, "Did he think the same thoughts that I'm thinking +in this very moment?" Sidus did not want to worry about it anymore, and he +showed himself to Maes, Asitera and the rest. One of the first responses was +about the Chrono Changer only being a teleporter. Soon everyone was talking +about the Chrono Changer and its attributes. Sidus had to yell "STOP!" to make +them quit talking. Sidus then told them everything -- his time travel, what he +had done in the past two weeks, simply everything. The villagers were stunned. +Some of them looked like they were not able to comprehend the situation, Sidus +observed. One kept talking about not understanding a thing, while another kept +coming with theories that were supposed to point out the current Sidus as a +traitor. After some time, Asitera broke in. +"Take it easy," she said calmly, looking at the old man who had told Sidus how +the Chrono Changer works, "Sidus is right -- he is, isn't he?" +The old man nodded. The villagers slowly walked away, still thinking about what +they had witnessed. The old man turned to look at Sidus, telling him quietly: +"We need to talk." + +Sidus, Mirie and the old man were sitting around a table inside what seemed to +be the old man's house. Mirie had insisted on joining the two, and the old man +had agreed in the end. The old man had just walked into the kitchen, and Sidus +took a look at the house from the inside. It was a fairly large house, though it +did not seem that the old man was the only one living here. From where he was +sitting he could see several beds, none of which looked unused. +The old man had just reentered. He sat down by the table. +"How are you?" the old man asked Sidus and Mirie. +"Not to well," Mirie said. +"Could've been better," Sidus remarked. +The old man seemed to understand and started talking. +"I'm Jonathan. What I told you about the Chrono Changer was indeed true, but +there is more to it. The Chrono Changer has a long history." +Sidus and Mirie yawned. "How long?" Mirie asked. Jonathan seemed to completely +ignore this as he started to talk. +"A long time ago, a very advanced race inhabited the mountains of Hujy. They +were called Sphyxes, had wings and were able to teleport to different places in +a nanosecond. They were able to do this because of their infinite energy +resource -- the Zidtron. They lived in harmony and peace, only eating animals +that had died of natural causes and plants. They were happy. But they were also +powerful. And with power comes the lust to rule." +Sidus and Mirie started to get interested. +"You see," Jonathan continued, "about 4000 years ago, the Sphyxes invented the +Chrono Changer. They wanted to be able to travel in time and not just be able to +teleport. Most Sphyxes believed this to be a great invention, and within a short +period of time it was decided that the Chrono Changer should be used to change +the course of history -- in favour of the Sphyxhes, naturally. Fortunately for +the rest of the world, there was one Sphyx who did not want to use the Chrono +Changer for such things. He hid it within a sealed barrier that only humans, +animals and plants - in fact, anything that wasn't a Sphyx - could enter. The +Chrono Changer was later picked up by an adventurer. The Sphyx who put up the +barrier was eventually killed by his own race. Before getting killed, he managed +to put up another barrier, this time restraining all access to the Zidtron. +Because they did not have access to the Zidtron, they gradually grew weaker, and +in the end they died. Or so I thought." +"What do you mean by that?" Mirie and Sidus almost synchronously asked. +"The disappearing cities might have something to do with them. I've thought up a +theory, which would explain it. You see, the barrier that stopped the Sphyxes +getting into contact with the Zidtron relies not on species recogniton, but on +energy level recognition. In short, that means that only a creature with an +energy level below a certain point can enter the barrier. A Sphyx has a very +high energy level, which is why they can't enter. However, the Sphyxes have been +drained for energy during these thousands years, so there's a risk they might be +able to enter the barrier by now. If that's the case, they might want to take +revenge on the human race for stealing the Chrono Changer." +Sidus looked at Jonathan, then at Mirie. He had made up his mind. "We must go +back to our town and travel back to the day it disappeared. Maybe we can catch a +glimpse of some Sphyxes," he said determined. Mirie seemed to agree, but +Jonathan did not. "What if it is the Sphyxes? What will you do in that case? And +what if it isn't the Sphyxes?" he told the two, "You have to make a fairly +bulletproof plan to be able to get the cities back all over the world. And I'll +gladly help you." +Mirie and Sidus nodded. + +A few days had passes. Sidus and Mirie had been helping with various tasks in +the small village, while in the meantime Jonathan had tried coming up with a +plan on how to get the cities back with the help of the Chrono Changer. Sidus +had just finished eating dinner with the rest of the village, when he heard +Jonathan call for him and Mirie. The three gathered in Jonathan's house -- which +Sidus now had learnt was also inhabited by some of the other villagers -- and +sat down by the table. Jonathan started talking. +"It has been a difficult task to make a plan. But I've succeeded. We know that +cities have been disappearing, and we know that the Chrono Changer has once +again become active. We think that the Sphyxes might have regained their powers. +The point here is, even if the Sphyxes has got their powers back, why would they +want to make cities disappear? If they are indeed back, they would surely want +to kill the inhibitants of the cities. And somebody would have to protect the +inhibitants of those cities. You, that is." +Sidus looked at Mirie, and Mirie looked back at him. A few seconds went by, when +they almost simultaneously exclaimed: +"THE CHRONO CHANGER!" +Jonathan nodded, continuing explaining his plan: "Yes, that's right. At some +point you'll travel back in time and somehow make the cities disappear. That +way, the Sphyxes will not be able to kill any humans. The problem is, it's +actually pretty diffcult to make cities disappear. And this is where my plan +comes into action." +"Just tell us already!" Sidus shouted impatiently. Jonathan did not seem to +notice and continued as if nothing had happened: "Back in the days when I was +merely a student in the art of planning, my master told me a secret - the secret +of the Mass Uniter. It's a device that can merge a lot of things into one thing. +I don't know the details, but you should be able to use it to make the cities +time-transferable. You see, the Chrono Changer is only able to travel in time +with one object at a time. However, if more than one object touches it, the +Chrono Changer will detect it as only one object. If you used the Chrono Changer +at a city, only part of it would travel in time, and that's why you need to get +the Mass Uniter. As far as I remember, it's located in a city north of here +named Neythity. You must go there and ask for a person called Finn Frenzy. I +don't know how he got that name, but everybody calls him that. You know, he was +actually my old master." +"But if he's your master, he must be relatively older than you. You are old, so +your master must either be very old or just dead, right?" Mirie asked. +Jonathan nodded. "My master is indeed very dead. But with the help of the Chrono +Changer he'll once again be alive. Your task is to go about twenty years back in +time and visit my now-dead but then-alive master Frenzy. After that you must go +forward in time to the date the cities started disappearing, use the Mass Uniter +to merge you with the cities and take the cities to the future. I'm sorry if my +plan isn't very detailed, but I simply don't know that much." +"We'll do it!" Sidus said in a determined voice. "Let's go!" Mirie yelled. + +Mirie and Sidus stood in the middle of the village with the inhibitants gathered +around them. Jonathan had given them a compass and provisions to hold out for a +week. Sidus put a drop of his blood into the Chrono Changer, held Mirie's hand +and thought of a date 20 years ago. Like the last time, a great, blue light +appeared. A second or so passed, and Sidus was gone together with Mirie. +Sidus couldn't see a thing. Neither could Mirie. It seemed as if they had landed +in the middle of a sandstorm. Sidus tried looking in all directions to see where +the storm was coming from, and he noticed that the sandstorm was coming from +everywhere. Then he and Mirie started being pulled downwards by a mysterious +force. They tried fighting the force, but with no luck. They were, once again, +doomed. + +It was dark. Sidus had just awaken. In the distance he could hear footsteps, +though he was unable to determine if it came from one or more persons. Suddenly +the light was turned on, and before Sidus stood none other than Ibaxo. Sidus +suddenly remembered his promise about being the leader of the group called +Radical Believers and felt bad about completely having forgotten it. He then had +a slight dejavu, sitting in the same cage as the last time he was captured by +Ibaxo, looking at the same room as the last time he was captured. Ibaxo started +talking, but Sidus barely noticed what he said. He had just noticed that Ibaxo +was not alone in the room. In the back of the room two people - a man and a +woman - was walking. Sidus was unable to completely grasp how they looked, but +they seemed very familiar to him. +This time Mirie had not been removed from the cage. As she woke up, Sidus +regained focus and started listening to what Ibaxo had to say. Ibaxo, however, +had stopped talking. Instead he held up two identical Chrono Changers. Sidus and +Mirie could not find Sidus' Chrono Changer and quickly realised what had gone +wrong. Ibaxo's facial expression changed from being angry to being confused, and +as soon as the two people walking in the back of the room had exited the room, +he started talking again. +"You posses a Chrono Changer identical to the one my leader has. You are a +stranger, and yet you resemble my leader very much. Who are you?" Ibaxo looked +closely at Sidus. Sidus did not fully understand what Ibaxo meant, but as he +thought of the two people that he has seen a moment ago, he suddenly got it and +could not help but yell. "FATHER!" Sidus had just remembered that Liwe, his +father, had been the leader of Radical Believers until his death 13 years ago -- +no, in 7 years time. "You.. You're from the future?" Ibaxo asked. He did not +look very well. Mirie and Sidus looked at each other, then at Ibaxo, and nodded. +Ibaxo tried to act calm and asked about Sidus and Mirie's reason for going back +in time. They explained to him about the towns disappearing, obtaining the +Chrono Changer, the Sphyxes and the Mass Uniter. +After a short amount of time of thinking, Ibaxo agreed to let the two go free. +"I see no other way out of this mess," he said. Sidus and Mirie then left, once +again looking for the city of Neythity. + +It had been several days before Sidus and Mirie had left for Neythity. They had +met a bunch of wild animals and were low on provisions. They were walking, low +on hope, when they finally saw a city in the distance. They hurried towards the +city, and within minutes they stood in front of a great gate. It was open, and +they walked straight into it. The next step was for them to find Finn Frenzy. +They asked the first person they saw, but it seemed the person did not know. +After having asked a lot of people with no result, Sidus and Mirie decided to +get something to eat. They found a place called "The Qwizzor's Diner" and +entered. They got a table and ordered something to eat. While waiting for their +food to come, they took a look at the diner. It was full of drunk men talking +nonsense in an odd language. It was not the type of people you would want to ask +something, and Sidus and Mirie quickly decided to just sit still. That, however, +did not seem to be an option. Within a few seconds, the men had already noticed +Mirie, the only female in the room who was not a waitress, and Sidus, who +probably seemed a bit odd compared to the rest of the customers. The two +adventurers were a bit scared, though they did not take long to realise that +there was nothing to fear. It did not take long for the men to start asking. +"Heyy ya oddity," one in a large, red handkerchief said, "what ya doin' here?" +Sidus thought he both sounded and looked like a pirate, but he did not comment +it. +Another man, this one wearing a oversized blue shirt and a cap that seemed to +cover his eyes, then looked closely at Sidus and Mirie. "You lookin' for +something.. or someone?" he asked, "We'll help you for free." +Sidus and Mirie did not have any second thought about strange men saying they +would help, and instantly said that they were looking for Finn Frenzy. The men's +faces stiffened, and within moments they had gone back to their tables and +started talking about something else. Sidus and Mirie's food arrived, and they +could not see any other solution than simply start eating it. When they had +finished they left, but as they went through the exit, a voice called them. The +voice seemed strangely familiar, and they followed it. It was dark outside, and +they were not able to clearly see the owner of the voice. They made it to a +small house and went inside. A light was turned on, and the voice revealed +itself. It was Jonathan. + +"How are you?" Jonathan asked. Mirie and Sidus thought that somehow revealing +they knew him in the future was be a bad idea, and they did not. +"We're fine," they answered, not thinking too much. +"I heard you were talking about Finn Frenzy," Jonathan continued, "Do you have +any business with him?" +"Well.. Eh.." Sidus had no idea to what he should say. +"We have to deliver a personal message to him!" Mirie then said. Jonathan seemed +to accept that purpose, and he asked Sidus and Mirie to sit down. +"I will lead you to master Frenzy the first thing in the morning. But for now, +you must sleep," he said. Mirie and Sidus nodded and went to sleep. + +Sidus and Mirie had been woken by Jonathan as the sun was starting to rise. They +hurried out of town and made it to a small hut located in the middle of nowhere. +"This is here," Jonathan said. He turned around and left. Sidus and Mirie slowly +walked towards the hut. They thought of what to say when they met what they +thought of as a "frenzy fellow", but they were unable to come up with something +very clever. As they came closer to the hut, the main door seemed to be opening. +An old man appeared from inside the hut and seemed to be waiting for the two +adventurers. When Sidus and Mirie had reached the hut, he welcomed them. "I am +Finn Frenzy. Welcome." he said in an almost solemn tone. Sidus and Mirie +followed him into his hut and sat down by a table. Finn told them to wait a +couple of minutes and then went into a room. While waiting, Mirie and Sidus +thought about what they had seen. They had originally believed that Finn Frenzy +was an insanely powerful and wise man, but when they looked at Finn, it seemed +to them that he was simply an old, powerless man. Finn then reentered with a +small, black object. +"This.." Finn started, "..is the Mass Uniter. This is what you're looking for, +right?" +"It is!" Mirie shouted, "but how did you know that?" +Finn then turned away from Mirie and Sidus, leaving them to their own thoughts. +"The world is in your hands. Don't waste the Mass Uniter on unneccessary +things." Then he left. And then Sidus and Mirie left too. + +Sidus and Mirie had decided to get something to eat before travelling forward in +time. They weren't sure as to how the Mass Uniter was supposed to work, and they +decided that they would try to merge themselves with a couple of random objects +lying unconnected on the ground before travelling in time. But for now they were +in need of food. And sleep. Outside it had already turned dark. They found +somewhere to spend the night, and the next morning they were ready to leave. +They then found three small rocks, placed them so they didn't touch them, and +looked at the Mass Uniter. They noticed a button and clicked it. The moment they +touched it, a great, green light erupted from it, and then a voice appeared out +of nowhere. "Do not use me for simple rocks," it said, "do not waste the Mass +Uniter!" And then it disappeared as quickly as it had appeared. Mirie and Sidus +were surprised but decided they had to believe the strange voice. They then used +the Chrono Changer to travel forward in time to the date when the cities started +disappearing. They had earlier come to a conclusion that the disappearance must +have started a three weeks or so before the city that Sidus and Mirie used to +live in disappeared. After all, they had been the last to arrive at the small +village. +With the date in mind, they held onto the Chrono Changer. Sidus and Mirie placed +some of their blood in the small container on the Chrono Changer, and the usual +blue light once again appeared, bringing the two to the future. + +"Look!" Mirie had noticed a city in the distance. Mirie had always been good at +geography, and she immediately recognised it. "Let's start with that one," she +then said. With limited proviant the two wandereded in the desert for hours, +finally making it to the city. They agreed to enter and examine the city before +sending it to the future. On their way into the city, they noticed Maes and +Asitera leaving the town. "Then we'll be going!", Maes said, leaving the entire +population of the city to what would seem to be total destruction but was in +fact nothing more than a tiny time travel. Mirie and Sidus decided to wait for +about an hour or so before they made the city disappear. That way Maes and +Asitera would not be able to see who did it but they would still notice it. +Mirie and Sidus looked at each other. They were sure this was the best solution. +After having waited for about an hour, Sidus and Mirie positioned themselves +about 100 metres away from the city. Sidus took the Mass Uniter out and clicked +the button they had clicked earlier. The same voice as last time appeared. +"I see you've found quite a task for me!" the voice said, "But don't worry, I'll +handle it." +All of a sudden, the city was surrounded by a barrier covered in the colors of +the rainbow. Sidus hurriedly took his Chrono Changer out and put a drop of his +blood and a drop of Mirie's blood into the container. He and Mirie then thought +of the date ten years from now. They believed that to be enough. The usual blue +light appeared, sending both the city, Sidus and Mirie into the future. + +The first city transfer had succeeded. Ten years into the future, Sidus, Mirie +and the city stood as if nothing had happened. Both the surroundings and the +weather was unchanged, leaving behind an impression that no time travel had ever +taken place. +"I guess we must do this with all the cities in this area. I'm glad we have a +month to do it in!" Mirie said. +Sidus then looked away, starting to mumble. "Well, eh.. The truth is, we only +have one day to do it. I miscalculated the date," he said quietly. He expected +Mirie to become mad, but as he looked at her, it seemed as if she had suddenly +got an idea. "Why not simply travel a day back in time whenever we're in need of +that?" she said. Sidus immediately understood. When travelling back in time now, +they would not travel back to a couple of seconds after they had gone to the +future. Rather, they would travel back 10 years plus a couple of days. This way +all the cities could disappear at the same time. +"The only problem with this plan," Sidus started, "is that our city was the last +one to disappear. If we must make all cities disappear within a day, our city is +going to disappear sooner than it really did. And then we're going to start our +wandering earlier! That'll screw up the entire time-space continuum!" +Mirie looked thoughtful for a moment. Then she looked up at the sky. "We must +poison ourselves," she said. Sidus looked stunned, but Mirie continued: "Nothing +serious - it's just to make sure we'll sleep for another week. That way, we'll +arrive at the time that we originally arrived at. I don't like the idea, but I +don't see any other solution. Argh." Sidus nodded. It was indeed very neccesary, +though it was not something he looked forward to. There was however one thing +that he was not able to find an answer to, and he said out loud: "How do we get +sleeping pills that'll make us sleep for a week but not kill us? I mean, +sleeping for a week means not drinking anything for a week and not eating +anything for a week. That can easily result in what we know as death. And that's +not very nice!" +Mirie spaced out for a while, looking into the endless desert. "I know.." she +started, looking like she didn't feel very well, "a way." +Sidus looked at her, as she continued. +"A long time ago, a secret was passed down to me by my grandmother. She told me +that -" Mirie hesitated, clearly doubting that she should tell Sidus the secret. +Nevertheless, after taking a deep breath, she started talking again: "- that a +spell that can put people into a type of hibernation exists. I've never thought +it to be true, but I suppose it's our only solution. My grandmother told me of a +woman that used to live south of our city. Apparently she could do magic." +"MAGIC?!?" Sidus yelled. Sidus had never liked the occult. He simply did not +believe in witches or the likes. He told that to Mirie, but she did not react. +Instead, she kept talking. +"She used to live just outside our city. If we travel, say, 20 years back in +time, I'm sure we'll be able to find her. We'll make sure none of the people we +know sees us." +Sidus still clearly did not like it, but he nodded. He was able to do it. "Let's +take care of the other cities before we handle our own, though. It'll be easier +that way," Sidus said. Then they traveled 10 years and one day back in time and +went to the next city engraved on Mirie's inner map. + +They kept doing the cycle of travelling back and forth in time for a month or +so. Though it did not take more than one day, timetravelling all the time was +quite exhausting. Sidus and Mirie needed a break before they were to poison +themselves. However, that was impossible, and they kept on wandering. +At last they were able to see their city in the distance. The sight of it +brought back memories. Sidus and Mirie kept walking in spite of the nostalgia +starting to kick in, and within an hour they were standing not far away from +what used to be the city they lived in. It was however still not dark, and they +were fully aware that they themselves were inside the city right know. They had +to wait. +It was now dark. Sidus and Mirie had been calculating for some time now, and +they had reached the conclusion that putting themselves to sleep tonight would +keep the time cycle the way it was supposed to be. The poisoning was done in a +matter of seconds. Sidus and Mirie -- the ones not poisoned -- then traveled +back to the future, to right after the time in which they had first traveled +back in time. They walked through desert and icy areas for a week, consuming all +proviant. They barely made it. Back in the village, the inhibitants greeted the +two time travelers. Sidus and Mirie were however very tired and went to sleep. + +Sidus and Mirie had slept for a couple of days before they woke up. They then +used a lot of time telling Jonathan, Asitera, Maes and the others about what had +happened, before going to sleep once again. The next day Jonathan woke Sidus and +Mirie. They sat down by a table, and what seemed would turn into a long talk was +starting. +"So, how are you? Are you alright?" Jonathan started. Mirie and Sidus nodded, +although they did not feel entirely well. +Jonathan then continued: "To us it seems that it was only a week since you left. +But I'm sure you've spent much time travelling in time, right? Let me see the +Chrono Changer." +Sidus handed over the Changer in disbelief. +"Hmhmm.. Let's see - oh..!" Jonathan's facial expression suddenly stiffened. +"What's wrong?" Sidus asked. +Jonathan apparently tried to calm down. He was still shocked, but he kept on +talking: +"This is.. serious. While you were away I found a couple of old books describing +how the Chrono Changer works. I was surprised to find out that there is a +well-preserved secret regarding the Changer. Apparently, one who travels in time +is subject to forces unknown to man. Those forces are dangerous and can mean +that one obtains mysterious powers. However, those powers have only been +obtained if the Chono Changer has a mark. That's what the book said. And the +Changer -- it has the mark." +"A... mark?" Mirie was troubled. +"A mark, yes," Jonathan continued, "a mark that tells us that the distortion of +time has increased to a level above the accepted. In other words, you have +overused the Chrono Changer." +Jonathan then turned the Changer, making the mark visible to Sidus and Mirie. +Sidus took a good look at it. It was the mark of a unicorn. And it seemed as if +it was bleeding. "What does this mean?" Sidus asked, looking at the mark. +Jonathan turned his back to Sidus and took a couple of steps. +"It's a curse." +Sidus and Mirie then fell, followed by the mumble of Jonathan: "It's the curse." + diff --git a/subsites/projects/eonaton/story/eonaton80w.txt.gz b/subsites/projects/eonaton/story/eonaton80w.txt.gz new file mode 100644 index 0000000..256ffdc Binary files /dev/null and b/subsites/projects/eonaton/story/eonaton80w.txt.gz differ diff --git a/subsites/projects/eonaton/story/sys b/subsites/projects/eonaton/story/sys new file mode 100644 index 0000000..b1a5ee5 --- /dev/null +++ b/subsites/projects/eonaton/story/sys @@ -0,0 +1,2840 @@ +%!PS-Adobe-3.0 +%%Creator: (ImageMagick) +%%Title: (sys) +%%CreationDate: (Tue Jul 21 13:19:03 2009) +%%BoundingBox: 0 0 1280 24 +%%HiResBoundingBox: 0 0 1280 24 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Orientation: Portrait +%%PageOrder: Ascend +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore + showpage +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 1280 24 +DisplayImage +0 0 +1280 24 +12.000000 +1280 24 +0 +0 +95A89395A89399AB949FAF96A3B497A6B9999FB292A1B294A5B495A8B896A7B896A2B495 +A3B596A4B796A4B998A5BC9DA4C1A39FBDA398B69C94AE9695AB9499AE959CB296A4BFA0 +A6C2A39EB899A2B897BAD0AFB7D3B3AECFAFA9CBA8A9CBA7A8C9A3AFD0AAABCDA9A1C09F +9FB998A5BA97ABBF9BAABE9BA7BC99A6BD9AA7C09EA3BF9DA2BF9E9DBB9A9EB999A2BC9B +A3BD9AA4BE9AA8BF9CADC4A2B4CCABBAD4B2B9D4B2A8C4A49BB79A9BB7999BB7989CB798 +9EB89A9FB89A9EB698A5BD9AA6BE98A7BF96AFC69CB6CAA0B7C79FC4D4ADCCE2BEC7E3C1 +ADCAA8A9C39FBAD4ADC3E0BAB2CEA9B8CCA8C7D7B4CBDEBECBE2C3CDE7C6D0EBCAC1DDBC +B8D0AEBED3AEC0DAB4C0E0BBA3C7A39FC29DA4C69DB3D3A8C7E5BACCE8C0C3DCB6B0C7A1 +BED5AED1EAC4C8E3BECAE5C1CDE6C3BCD5B2C5E0BCC8E6C1B8D9B3AFD1ADA3C2A1A5BC9E +A7BA9DACBCA0ADBCA0CADABEC4D6BDB5C7AFBFD0B8BECCB5BCC7B0C5D0B9BECAB2B0BFA7 +A6B39BB5BDA5C2C6AEBBC0AAADB6A2A2B09CA5B5A1A1B19BADBDA4BCCFB3ADC1A6BECEB8 +B5C4B1BCCCB8C1CDBAC6D0BDD2DDCAC6D4BEBFCEB5C3D0B7C6D4BBCEDDC5C7D7BFBAC6AF +C1C8B2CDD1BDCFD4C0CED6BFCEDAC1CBDCC3B0C3ABB1C4ACAEC3A6AEC5A5B9CCAEC1D0B6 +D4E2CBDAEAD4CDDEC6BCCFB4C8DCBED0E5C7C1D8BDAEC6ADADC6AAA9C2A3A7C09DA8C29D +A5BF9AA5C09CA6C29DA7C39CAFC9A2B2C8A4B4C6A8C4D8BEB5CEB5A3BCA4A3B7A0B8C4AF +CDD5C1CACFBDC7CEBBD0DBC8BECDB8ADC0A8ACC0A4ADC1A4B0C4A7AABDA3B3C5ACC1D2B8 +C8DBBFC9DCBEC9DFBFC4DEBBCEEBC4C5E6BBB9DDAEB0D5A4ADD19FA4C494A6C396B7D1A9 +B9D3AFABC7A2A2BE97A4BE98A9BF9EABBCA3B0C0ABB0C0ADAAB9A6AEC0A8B4C9AAA9C09D +ACC29EB2C8A3B4CCA5AAC19FAFC1A7BCCBB5C1D1BBB5C7B0AABAA7A6B4A2A7B2A2ADB5A4 +B6BEABBAC4ADA9B89E9DAC939AA99399A69299A59299A5939CA8969FAC999FAD9A9FAD9B +9FAD9AA5B39FB3C2ADB2C3ACAABDA4A1B99C9EB798A3BC9DACC6A4ABC5A2A7C0A0A6BDA0 +A2B89D9FB499A1B698A6BD9DACC5A3A8C0A1A6BCA0A6BAA0ABBDA5A4B79F9FB1989EAF97 +9FB09A9BAC979CAC989FAF9BA0B39BA4B99DA3BA9E9EB3999FB39C9DB09B9EB19CA1B69F +A0B59E9BAD979BAC95A0B297AEBFA0B3C3A1B5C3A4B8C5A8B2BFA5A7B59E9FAD979FAC97 +9FAD9BA3B19FB1C0ADB9C9B3B1C6ACA9BFA3AAC1A3A4BB9F9FB3989DAF969DAD979CAC97 +9CAD979CAF9799AD9496A99297AA949CAD98A6B7A0B3C3AEB1C1ADA9BBA59FB39A9FB59A +9FB4999DB3989FB59B9FB59A9FB49B9FB29B9EAF9A9BAD979AAA959DAC97A2B49EA8BDA5 +A9BEA7A0B49F9EAD9C9FAE9B9FB19A9CB2979FB79AA2BA9EA4BBA09FB79D9FB69CA0B89D +A2BA9EA7BEA29FB59A9BAD969AAC969DAD9A9FAE9CA0B09D9EAD9A9CAC989DAC9A9FAF9C +9DAD9A9BAB999CAB999BAA999CAB999FAF9A9FB1989FB199A1B29EA3B1A2A5B2A8A7B2AB +ACB4AEADB4ADB2B7AEC3C7BDD1D6C9D4DCCDD8E3D3D9E7D5D8E8D5D7E7D3D0DFC9D2E1CA +D3E1CAD1DFC9D8E6D2D0DEC9D5E3CFD6E4CFC9D6C1CDD9C4C6D2BCB4C0AACEDAC4D1E0C7 +C6D5BCB4C4AAA9B99FB1C1A6BBCBB1ADBCA3A9B79FAAB69FA9B49FABB6A1ACB9A4B3C0AC +C2CEBABCC7B3CFDAC5D3DFC9D1DEC8D2E0CBD5E4CDCFE1C6BBCFB09FB5969DAF95A1B199 +A0AF97A2B29AA8B9A1AABCA3ABBBA1ABBBA1A5B59C9EAE9699A99498A89399A8949BAA96 +9CAB979DAC979FAE9997A79396A69398A79599A89697A7949AA896A1AF9CA5B2A1A0AD9B +ABB9A6A9B8A49DAB979DAB97A1AF9AA8B6A09DAC969EAD98A5B39DAFBCA8ABB9A6A7B6A2 +AFBEA8A6B59DA2B299A2B299A2B199A1B099A0B099A1B199A2B198A4B299A5B39AA6B39A +A7B49BA7B49AA6B499A6B599A7B69AA7B69AA5B499A4B499A3B398A3B298A0AF96A1B098 +A2B199A3B399A5B499A4B399A2B298A1B198A2B299A3B39BA3B29AA2B199A2B199A2B099 +A3B199A4B299A2B198A1B198A1B199A2B19AA3B19BA6B49DABBAA3AEBEA7B3C3ACB9C9B0 +BBCAAFBBCAAEBACAACB9C9ABB7C6A9B8C8ABB4C5A9B3C5AAB5C6ACB3C4A9B7C6ABBBC9AE +BECCB0C2CEB3C4D0B4C6D2B5C8D5B6C4D2B2C5D2B2CDD9BACBD7B8CDD8BAD1DDBDD3DEBE +D3DFBED4E0BED4E1BFD3DFBED2DEBDD3DDBED4DDBFD8E1C3D8E3C4D9E3C4D8E1C3DAE4C7 +DCE6CADCE6CADCE7CBDDE8CDDCE8CCDCE7CBDBE7CADBE6C9DAE6C7DAE6C6DAE7C5D9E7C1 +C6D7AEB5C5A1ACBC9EA1AE96A2AD98A1AB989FAB969FAB979FAE99A2B39BA8B99EAEBFA2 +B1C1A5B2C3A8B3C3ACB0C1ABAEBEAAADBCA9ADBCA8ABBAA5ACBBA4B0BFA4B6C4A7BFCCAF +BDCAAFAEBDA49DAE9897A89699AA979AAB999AAB999AAB989AAB979BAC989BAB979BAB96 +9EAC98A0AE9BA3B09BAFBCA6A9B7A0A1AF99A2B09AA2AF99A7B49DADBAA2BCC7AFC5D0B6 +C8D3B8C6D2B7BFCDB4B1C0AAB6C5B2BBCAB8B9C8B6B8C8B5B9C9B6B6C5B4AEBDACA3B3A2 +9AAA9996A69597A69598A7959AA9979DAB98A1B19CA7B79FAABAA0ADBCA1B9C7ABC6D2B7 +BDC7B0B2BCA7AAB49FB2BBA5BEC7AFBEC9AFAFBBA3A8B6A0ADBBA5AFBDA7B1BFA8BCC9B2 +C8D4BFCDD8C6BECBBAA2B1A19EAD9E99A89896A69496A79397A7939AAA959CAC969CAC96 +9CAB969BAA959AA99499A89399A89398A89398A89397A69296A69396A59396A59297A492 +96A59296A59397A59397A49397A59497A59496A59496A59497A59397A49398A59399A694 +99A6949BA7959CA896A1AB9BB3BAA9BBC1ADBCC3AABDC4A8BBC3A7B7C0A3B8C1A5BAC3A7 +BBC6A9BBC5A7BBC4A8BCC5AABDC6ADBEC6AFBDC6AFBCC6B0BDC6B2BEC7B4BFC7B7C2CABB +C4CDC0C4CDC3C5CEC6C7D2C9CAD6CDCBD8CECDDAD0CBD8CECDDBD0D6E4D6D7E5D6CCDACB +C3D1C3C4D1C3C2D0C1C9D5C7D4E0D1D3E0CEC7D5C1C7D4BDCAD7BFCDDAC3C7D5BEC1D0BA +C1D1BACDDCC8D8E7D6D9E9D9D9E9D9D8E8D8D8E8D8D8E7D8D8E8D8D9E9D9D9E9D9D5E5D3 +C7D7BEC6D6BACCDBC2D5E3CDD6E5CED4E2CACDDCC4D1DFC8D8E7D2D7E6D1D1E0C7C7D5BC +C9D6BFD2DFCAD6E3D0D7E6D1D4E2CBD4E2CAD4E1C9D4E1CBD8E7D1D4E2C9C9D7BACBD8B9 +C9D5B6C9D5B7CBD6BAD3DFC6D5E2CAD4E1CAD8E6CDD5E2C6D4E0BED1DCB7C7D2ADCCD4B2 +CBD2B4CBD1B3C7CCAEC6CBAEC4CAADC2C9ADC1C7AFC1C7B0C4C9B1C4C8AFBDC1AABABEA9 +BABEABB6BBA9ADB4A2A6AF9EA4AE9DA2AD9AA2AD9AA2AD99A1AC9AA2AD9AA3AD9BA4AE9B +A6B09BA5AF9AA5B09CA4AF9BA5B09DA3AF9CA3B09CA3B09AA4B09AA5B19AA6B29AA6B29A +A6B29AA7B39BA7B39BA6B29BA6B29BA5B19AA5B099A5B19AA5B19CA6B29CA7B29CA8B39C +A7B39CA7B39CA8B49BA9B59BABB79DADBA9EB0BC9FB0BF9FB5C6A3C5D9B3D5E8C5DAEECF +DEF1D7E0F2DCE1F2DFE1F2E0E0F2E0E0F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0 +E1F2E0E1F2DFE1F2DDE0F0D9DFEED4DDECD0DBE9CCD9E7CADBE9CCDDEACDDEEBCEDCE9CD +DCE8CCDDEACEDEEBCFDFEDCFDCEAC9D4E4C0CEDEB8CADAB4CDDCB7D1DFBDD1DDC0D4E0C6 +DAE8D1DFEEDCE1F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E1E1F2E1 +E0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0E1F2E0E0F2E0E0F1E0DFF0DEDDEDDADDEDD8 +DDEDD6DCECD3DAEACED1E2C2BED0ADA9BD9CA0B496A3B79CA4B79EA6B89EA8B99EACBEA0 +B2C1A4B2C0A3B2BEA3B2BDA2B2BDA1B4C0A3B5C1A4B3C0A2B2C0A0B1C0A0B3C1A1B5C3A3 +B5C3A3B5C3A3B6C4A2B6C3A1B7C5A3B8C4A3B7C3A2B0BF9EA8B897ADBE9BB3C29EB7C3A1 +B6C2A1B6C2A1B5C2A0B4C2A1B5C3A4B4C3A6AEBEA1A8B89CA6B69BA5B69AA6B79AA7B99B +A7B99DA3B59AA3B399ABBA9EADBC9FA3B4999FB298A2B59CA5B79FA6B8A0A7B9A0A9BCA0 +AABC9FAFC0A1B3C3A2B4C5A2B4C5A2B4C5A2B4C4A0B5C3A0B7C5A3B6C5A4B3C3A1B1C1A0 +B0BF9FADBD9FAABA9EA8B89DA6B89CA5B79AA6B99CA5B79BA4B699A8B99BAEBE9CB2C29F +B4C49FB4C59FB3C49FB4C5A0B2C39FB2C29FB0BF9EABBA9BA5B698A3B598A3B499A3B599 +A2B699A4B99BA6BA9CA6BB9BA6BA99A8BD9BACC09DB1C4A1B2C59FB4C7A0B4C69FB2C39E +B0C29DB2C29EB3C49FB3C39EB3C39FB3C39FB2C39EB2C29FAFC09DAEBF9CADBE9CADBE9C +ADBE9DACBD9CAABC9BA8BB9AA9BC9AA9BC9BA9BC9AA8BB9AA7BA99A7B999A7B899A7B99B +A5B79AA6B99BA6B89AA7B799A7B799A8B99BABBB9CADBD9CAEBF9CADBF9BADBE9BAFC09B +B0C09BB0C09BB0C09CAEBF9AADBE9BACBE9BA7BA99A0B4969EB2969EB1969EB0969DAF96 +9CAE969CB095A1B497A5B999AABC9BACBE9CAEBF9CADBF9CADBE9DACBD9CABBC9BAABB9C +ACBD9DABBD9CACBD9DABBD9DABBD9DA8BA9BA6B999A7BA99A7BB9AA8BB9CA8BA9BA8BA9B +AABA9BA9B999A6B699A1B398A1B2999FB1989FB1989EB1979EB296A2B698A3B799A5B89A +A4B79AA5B69BA5B69BA6B59AA5B499A5B499A5B59AA4B59BA2B4999FB3979EB3969FB396 +9EB1969EAF969EAE979EAE979FAE96A0AF98A0B099A1B099A1B199A0B198A1B198A1B198 +A2B197A3B197A4B197A6B499A8B59AAAB79BABB89BA9B89AA9B99AABBA9BABBA9BACBB9B +ACBD9CACBD9DACBD9BABBB99ADBC99AEBD99B2BF9BB3BF9BB4BF9CB6C09DB6C19EB5C29D +B5C39DDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC9AAD979DB0999DB0999DB0999EB09A9FB299 +A0B2999FB298A0B399A0B298A0B299A0B299A0B29AA2B49BA4B69CA4B69CA6B59CA5B29A +A3AF979FAE969DAE969EB0999FB19B9DAE999AAB9798AA9599B39799B1989DAB9CAAADAA +A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 +A6A6A6A6A6A6A6A6A6A7A7A7A9ACA998A8999AB197A1B99AA0BB99A5BF9EB0C8A8BBD5B5 +B5D2B2ABC8A7ADC8A4B1CCA6B0CDA7B0CEA8ACCDA89EBD9B9FB998A3BB98A7BE9AA3BB97 +A0B995A3BD99A2BB99A0BB99A0BB999EBA989FBA999FBA99A2BC99A4BD98AABF9ABED3AF +C6DFBDB8D3B2ABC6A6A0B79A9EB49A9EB69B9EB99B9DBA9BA2BFA0A6C2A59FBA9CA1BA99 +A2B995ACC49EB4CDA7A6BD99A6B796AEBB9BB8C6A5B7CAA8AFC6A1ACC49CC6DFB8C5E3BF +B6D5B2ADC4A1BAC8A5CFDAB9D7E6C6D1E3C1CADFBAC1D6B1B5CAA6ADC29CC4DDB5C5E4BB +B8DBB1C0DFB6C6E1B9C4DBB6BCD1AEACC09FA3B795ABBC98BBCBA5C3D5AFC4D7B2B7CBA5 +B5CAA4BCD3ACC4DEB7BCD9B3BFDEBBC6EACA9DBFA39CB59DA2B49CA5B09AB6BFAAD6E2CD +B6C6B0C4D2BEC3D0BDB6C4AFB8C6B0B8C5AFB2C1ABB4C3ACADBCA4A7B59DA6B199A9B29C +AAB39EB8C3AEBCC9B4A4B39CB6C5ACBED0B5AFC0A7B6C3ADC2CEBACAD6C2BFCAB6C3CDB9 +C3D0B9C3D5BCBCD0B5BDCFB4C8D6BCCEDAC2CBD9C2BFCCB5C0CAB5C1C8B4BEC5B1B4BDA8 +C8D7BEC9DDC2BFD5B8BDD3B7B8CEB0B2C6A8B9CAAED3DFC8D5DFCCC9D3C1BBC7B4C3D1BB +C5D5BCD1E1C7CBDDC3C4D7BDB8CCB1A9C0A2A6C09DA5C19CA3BF9BA3C09DA4C09CA5C09A +ABC19CB2C3A2BBC6AAC4CDB6D3E2CBC5D9C1B4C9B1C1D2BCB2BEAAAFB8A5C6CEBAC8D4C0 +B0C1ABB0C2ABAFC1A8BACCB2B7C9B0ACBDA6B3C3ADB5C4AEB2C1A9B4C3AABFD1B5C5DBBC +C2D9B6C8E3BCBFE0B3B2D6A7A8CA9CA4C196ACC49BB4C9A4B2C7A6B1C9A6A2BE96A2BE95 +A6BF9BA7BC9EA6B8A1A8B7A4A7B6A2AABCA2B0C5A5A8BE9CABC19FADC39EBBD3A8B2C8A3 +B1C2A8BAC6B5BBC9B8AEBDAB94A49E798A9A7080956F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F93708195798B988EA094A1B099A5B39EAEBCA8BECDB8 +B8C7B2B4C1AAABB9A19FAD9797A79396A79497A79498A7959AA9969FAE999EAD9897A793 +97A69398A79597A79696A69498A89599A8969EAC9AA1AF9BA2B19DA2B29E9DAD989CAC96 +9FAF99A5B49E9EAE989EAD98A5B39DB0BEA7B0BEA6A7B69DAABAA1A8B9A0A2B398A0B297 +A0B3999EB2969FB496A2B497A2B296A3B298A4B29AA6B39BA5B39BA6B49AA5B498A6B498 +A7B599A7B49AA7B49BA5B49AA4B399A2B199A1B098A0AF98A2B199A3B299A4B399A4B299 +A3B299A2B299A2B29AA3B29BA3B29BA1B099A2B199A2B199A2B199A2B199A2B198A2B198 +A3B29AA2B19AA3B29BA5B39CA8B59EAFBEA6B3C3ABB5C6ADB9C9AFBCCCB1BCCCAEBCCBAB +BAC9ABB9C9ABB7C8AAB7C7ABB6C6AAB6C6ABB7C6ACBAC8AEBCC9AFC0CDB2C4D0B4C5D1B4 +C6D3B4CBD8B8D0DDBECEDBBCC7D4B5C5D1B2CEDABCD1DDBFD2DFBFD3E0BED4E0BFD5E1C0 +D1DDBBD0DCBBD2DDBDD5E0C0D6E1C2D7E2C3D7E1C2D7E1C3D9E2C7DAE4C8DCE5C9DCE6C9 +DCE6C9DBE6C8DAE6C7DAE5C6DAE6C7DAE6C7DBE7C8DDE9C9D7E5C3BCCBA8A5B594A0AE94 +9FAB979EA9979DAA979DAA979FAE98A4B49DA9B9A1ABBBA4ADBBA5ACBAA5ABB8A4A8B6A3 +A6B4A1A6B59FA8B79EACBCA1B1BFA3B7C2A8BFC8AFBDC6AEBAC4ACB5C1AAA1AF9997A894 +98A99599AA969BAC989AAB989AAB979DAD999EAE999EAE99A0B09BA0AF9CA1AE9BA8B4A0 +ACB8A3A4B19BA0AD97A1AD97A9B59FB1BDA8B1BCA8C1CCB8C4CFBAC4CEB9C0CCB8B3C1AE +ADBBA9B4C1B0BECBB9BBCAB6B8C7B3B1C0AFA7B6A69DAB9B8D9B958494A37C8E9F7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7C8E9F8596A396A199 +A2AB99A3AE9AA2AE9AA2AE9AA3AF9AA5AF9BA7B29BAAB69CADB99DADB99CA9B69BA7B49A +A5B199A5B19AA4B09AA5B19BA5B19CA6B29DA7B29CA7B29CA6B39CA6B39BA7B39AA9B49B +A9B69AACB89CAFBB9FB1BFA1B4C3A4C3D2B5D7E6CDDFEFDBE1F2E0E1F2E0E1F2E1E1F2E1 +E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E1E1F2E1E1F2E0 +E1F2E0E1F1DEDFEFDADCEBD3DCECD2DBEBD0DBEACFDCEBCFDDECCFDEECD1DEEDD2DEEDD1 +DFEED2DEEDD0DDEDCDDEEECCDEEDCBDEEDCCDCEACAD8E7C7D8E7CAD9E8CEDAEAD3DCECD8 +DEEEDCDFF0DFE0F1E0E1F2E1E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E0F1E0E0F1E0E1F2E1E0F1E0E0F1E0DFF0DEDFEFDCDEEFDADDEDD7DCECD4 +D8E9CCD0E2C1BDD0ADADC29FAFC2A2B2C4A6B3C2A6B4C2A7B5C3A7B3C1A6AEBCA1AAB89D +ADBB9FB0BEA1B3C1A2B5C2A2B4C2A1B4C2A0B5C3A1B5C3A2B6C4A3B6C4A3B6C3A2B5C2A2 +B5C1A1B6C2A2B7C4A4B5C3A3B2C1A1B2C1A0B4C2A0B5C2A1B5C1A1B4C1A0B5C3A1B5C4A2 +B5C4A3B5C4A4B2C2A3ADBD9FABBC9EA8B89AA7B69AA8B99CACBC9FA9BA9DA3B498A3B497 +A8B99CA9BB9EA4B79AA3B79AA4B89CA6B99DA9BCA0ABBDA1AABA9DADBD9FB1C0A0B4C3A2 +B5C4A3B5C4A3B5C4A2B4C2A1B4C1A1B5C3A2B3C2A1B0BF9FADBC9EABBA9EA9B99EA7B89D +A5B79CA3B59BA2B59BA3B59DA4B59CA5B59AA9BA9CAFC09FB1C29FB3C3A0B3C2A0B3C2A1 +B2C1A0B0BF9FADBB9DA8B79CA3B59AA1B398A0B296A0B496A5B999A8BD9BACBF9EAEC09E +AEC09DAFC19DB2C39EB5C6A0B6C5A0B5C59FB4C49FB2C29EB1C19CB1C29CB2C29CB1C19C +B2C29DB3C39EB5C49FB3C39EB1C19EAFBF9CADBD9BACBC9BAEBE9DB1C19FB0BF9DAFBF9D +AEBE9CACBD9BADBE9CAEBE9CADBC9AAABA9AA9B89AAAB99CA8B89AA8B999ABBA9AAAB99B +A8B79AA8B79AA9B99CADBC9DAFBE9CB1C09CB0C09BB1C19BB0C09AAFBF9AB0BF9BAEBE9A +AEBF9AB0BF9AB0C09CAABC99A7B998A3B696A0B396A0B297A0B397A1B497A4B799A8BB9A +ABBD9AAEBF9BB0C09CB0C09CAEBE9DADBD9DACBC9CABBB9DAABA9CAABB9CAABB9CAABC9D +A9BB9CA8BA9AA8BB9AA9BC9BA8BC9AA8BC9BA9BC9CA9BB9CAABB9BA9BA9AA9B99BA6B79A +A3B598A3B598A3B498A1B398A0B397A2B598A3B698A5B799A5B799A5B799A5B79AA4B69A +A3B599A4B599A5B69AA6B69AA6B79AA5B89AA5B89AA3B799A2B598A1B4989FB1989CAE96 +9DAE969DAE979DAE989DAE989DAF989DAF979EB0989EAF969EAF969EAE95A1B196A5B599 +A9B89BAAB89BACBA9BADBC9AADBC9AADBC9BAEBC99AFBD99AFBD9AB1BF9EB1BF9DB1C09C +AFBE9BB0BF9CB0BE9CAFBC9AADB999ADB899AFBA9AB1BD9BB3BF9CDEDEDC9D9D99222222 +222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222 +222222DEDEDC426695FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC98AB959BAC979CAF989DB0999FB29AA1B49BA2B59CA4B69DA1B3997B8777 +8B928988948495A58FA2B39AA2B39998A78FA1AE95A2AF969EAC959BAB939AAB949AAA95 +9BAB979CAC979AAA9698A995A1C09DA1B6A0AFB0AFE7E7E7FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +E7E7E7AFB0B099B09CA1C2A3ACCEADB3D3B4B8D5B7B9D4B8AAC4A8A7BD9EA8BF9BAAC39C +A9C59DADCDA5A6C7A29CB997A0B898A1B897A4BB9AA1BA98A0BB999FBA989EB8979EB897 +9EB9979FB9989FBA999EB998A1BA98A5BB97B0C39CC0D3AABED4ABB4CDA7A4BD9C9FB599 +A1B69BA1B99E9CB79BA2C0A3B0CFB3A2C2A79ABA9F9EC0A19EC09EA5C5A29FBE9D97B294 +9DB397A3B79AA6B798A9BA97B0C29AB3C79EC6DCB4C2DCB8B9D7B3B5D0ABBDCFA9C6D4AF +C9D5B1C4D3ADBFD0A8BBD0A6B8D1A7B0CBA0BCD5A9BDD6A9B3CBA0ACC19AA6B796A3B396 +A2B096A2B297A7B99BA9BC9AAABE98ACC298ABC397ADC49AB1C69EBACFA8C1D9B2BED6B2 +C5DBBBC8DFC3A9C2A8ADC1AAB6C7AFAEBCA5C7D4BECDDDC8C2D4BECBDBC6B1C0ABBBCAB4 +C7D9C3C2D7C2BBD1BCA8BBA7ABBFA9A9BCA6A3B6A0A7B7A1AFBBA5B4BEA9A7B19CA7B29C +C0CEB6C0D0B7ABBCA3BBC8B1C0CFB9BAC8B4B3C0ACBAC8B1BDCEB3C0D5B7C1D7B9C4D9BD +C0D1B5CFDDC4CDDCC5B8C6AFBCC9B2BFCBB6B4C1ABA9B8A1BECFB6C4D6BABED2B5BDD4B6 +B6CFB0AEC4A6C6DBBDD1E2C9BAC6B1BFC8B5CBD6C3C6D6C0BECFB7C7D9BEBCCEB2BCCFB1 +B6CBADADC5A4AAC4A0A8C29DA7C19EA9C3A3A5C09FA1BC9A9FB596A7B89BADB79EBDC2AD +CED3BFD2DDC6CBDCC4B9CBB4A6B7A2B3C2ACC9D7C2C8D6C1C3D3BDC0D0B9BFCEB7C5D6BF +BACCB6AFC2ACAEC0AAB4C3ADB1C0A9B0BFA8BDCDB5BCCFB3B5CAA9B7CFA9C4E0B5B7D9AB +A6C89B9EBD93A5BF97AEC39FB0C3A4ADC3A2A4C098A0BD94A4BF99A8BF9EA1B59CA1B29E +A3B39EABBEA4ACC2A3A9BFA0ABC0A2AEC5A1B8D1A6B3CCA3A7BA9DACB9A6B6C3B296A39C +75869B8DA8CB98B7DE99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E099B8E0 +99B8E098B7DE8DA8CB75869B91A293A3B39CACB9A7B0BCABACB8A7ADB9A5A9B7A0A1AF98 +98A89396A79396A69397A79497A6949CAB989EAD9998A89496A79497A79498A89597A794 +96A79399A9949DAC97A3B19CA7B6A0A8B8A29DAF979CAE969DAF97A2B39BA1B298A1B398 +A4B59AAABB9EAFBFA2ABBB9EAABB9FACBEA2B2C5A7B0C4A3ADC19EB6CAA7BDD1AFB6CAA9 +AFC2A4A4B59AA4B399A5B49AA5B399A5B499A6B599A6B599A7B69AA8B69BA7B49AA6B49A +A5B499A3B298A1B097A1B097A3B298A3B298A4B298A4B29AA2B199A1B098A2B199A3B19A +A1B098A0AF98A0B099A1B099A2B098A2B199A1B098A2B199A3B29AA3B29AA3B29BA4B29B +A6B39CAAB8A0B0C0A8B5C6ADB8C8AFBBCAB0BFCDB0BFCDADBECDACBDCDACBCCBABBBCAAB +BBCAADBAC9ACB9C7ACBAC8AEBCC9AFBECCB0C2CFB2C3D1B3C5D3B4C9D6B7CCD9BBCDD9BC +CCD8B9CBD7B7CBD7B8CFDBBBD2DEBFD2DEBFD1DDBED1DDBED1DDBDD3DEBED3DEBDD4E0BE +D5E1C1D6E2C2D4DEC0D0DABDD2DBBFD4DDC1D9E1C4DBE4C8D9E4C8DAE5C7DAE5C6D9E4C5 +DAE5C6DBE6C8DAE5C8DAE4C6D9E5C5CDDBB9AAB9999CAC919CAA959AA8959BA9969CAA96 +9EAD99A1AF9BA2B19CA3B29EA3B29EA4B29EA4B29EA4B29DA4B19BACB9A0B6C3A8BCC8AD +BBC6ADB7C1ABB5C0ABB7C0ABBAC2AEB7C1ADA2B19C99AA9599AB9599AA959CAD999EAF9B +9CAD9A9CAD999EAF9A9FB09A9FB09AA0B09BA1B09BA3B29DA8B6A1A4B19CA0AE98A2B29A +A4B49CA4B39DA6B3A0AFBBA9B6C1B0B5C1AEB4C1AEAFBDAAA9B7A5ACB9A8B6C2B2C3D0BF +BDCAB8ABBAA8A2B19F909F978395A7B6C9DECADFF5CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7 +CCE1F7CCE1F7CCE1F7CCE1F7CCE1F7CADFF5B6C9DE8395A796A298A2AE9AA2AE9AA1AF9A +A2AF9AA3AF9AA4B099ACB69DB1BB9EB2BC9EAFBB9CACB89BA8B499A5B299A4B09AA4B09B +A5B19CA5B19BA5B19BA6B29CA6B39CA6B39BA6B299A8B49BAAB69CAAB89CADBB9EB2C1A3 +B4C5A5BDCDAECDDCC2D5E3CEDAE9D8E0F1E0E0F2E0E0F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0 +E1F2DFE1F2DFE0F1DEDFF0DBDEEFD8DEEED7DEEED6DEEED6DFEFD7E0F0D8DFEFD7DFEED6 +DFEFD6E1F0D8E0F0D8E0F0D8E0F1D9E0F0D9DEEFD8DDEDD6DBEBD4DAEAD4DAEAD6DCECD9 +DFF0DEE1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0 +E0F1E0E0F1E1E0F1E0DFF0DFE0F1E0E0F0DFDFF0DDE0EFDBDFEFD9DEEED5DAEACFD1E2C3 +C3D5B3B6C7A7B6C5A8B7C4A9B7C4AAB4C1A6AFBFA2B0C0A1B1C1A2B3C2A2B4C2A2B5C3A2 +B5C3A2B4C3A2B5C3A3B4C2A2B5C3A3B6C3A4B6C3A3B5C3A2B5C3A3B5C2A2B5C2A2B5C2A3 +B5C3A5B4C1A3B3C1A2B3C1A1B4C1A2B4C2A2B4C3A2B4C3A2B4C4A2B4C4A2B3C4A3B2C2A2 +AEBFA0AABC9EA6B79BA6B69AA8B89CA9BA9DA7B99AA5B899A5B899A7BA9BA9BC9DAABC9E +A8BB9DA8BB9DADBEA0B0C0A2B0BFA1ACBC9EADBD9EADBD9DB1C0A0B2C1A2B3C2A3B2C0A3 +B0BDA1B0BEA2B0BEA3ACBBA2A8B8A0A8B8A1A9B8A1A8B7A0A6B69FA4B49EA0B29CA1B29C +A2B29BA3B29AA3B399A7B89AABBC9CADBD9DADBC9EAEBB9FAFBC9FADBA9EA8B69BA4B49B +A2B49BA1B499A0B497A3B898A9BD9CADC09EAFC19FB1C19FB1C29FB1C19EB5C4A0B6C4A0 +B6C4A1B5C3A0B3C29EB1C39DB1C39CB2C29DB2C29CB2C29DB2C39DB3C39EB5C59FB4C39E +B3C19DB1C09DADBD9BAABA99ABBB9BADBD9CAEBD9CAFBE9DAFBD9CADBD9CADBC9CADBC9C +ACBA9BA9B79AA8B59AA8B79BA9B99BAABB9BAFBF9EACBB9CA7B699A3B397A5B59AAABA9B +ADBD9CB1C09CB1C19CB2C19CB2C09CB1BF9DB0BE9CAFBD9BAEBD9AAFBD9BAFBD9BADBC9A +ABBB9AA7B998A4B696A3B696A5B898A6BA99A8BB9AAABB9BADBD9CAEBE9DB0BF9DB1C09E +AFBF9DADBD9CACBC9BABBB9BA9B99AA8B99BA8B89BA8B99CA5B89AA6B99AA8BB9BA9BC9B +A9BD9BAABD9BAABD9CAABD9BAABC9AA9BB9AA9BA9AA8B99BA6B89AA5B699A4B599A3B499 +A2B498A1B497A3B598A4B699A4B699A3B598A5B59AA4B59AA3B599A4B69AA5B69AA6B79A +A6B79AA5B89BA4B79AA4B799A4B89AA3B799A2B699A0B399A0B299A0B29A9FB29A9FB19A +9EB1999EB0979FB2989EB1979FB297A0B397A3B599A7B89AAABA9BACBB9BACBA9BADBC9B +ADBC9BADBC9AAEBC99AFBC9AAFBC9BB0BE9CB1BE9CB1BE9BB2BF9CB1BE9CB0BC9CADB89A +AAB69AA9B69BA8B59AA8B599A8B498DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D1 +6393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA2B8A09FB39B +9DAF989CAE989FB29BA1B69DA3B89E96AA91838C81EBEBEBE6E6E6EAEAEABEC1BF7E857B +7E8879AFB2AE80887B9FAD969DAC959AAA9499AA9498A99499A99699A99599A99598A895 +A7BF9EABAFA9E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9ABB0ABB8D5B6 +BDDDBCB7D7B7B7D6BAAAC7B09AB49F9EB39BA5B89AACC19EB3CDA6B0CDA8A6C4A09EBA98 +A0B898A3BB99A2BB98A1BB98A5C19E9FBC9A9CB9979CB7969DB897A0BA99A2BE9BA1BF9A +A2BF99A7C199AEC49BB3C79DB5CBA0ADC79EA1BD989FB899A3BA9AA8C09FB5D1B0BBDABB +B1D3B5A8CBADBADEBEC2EAC8B7E2BFACDBB6A4D4B099C7A39CC39F9FC09D98B3939EB392 +AABD98B2C59EB9CBA5BDD3AFB8D3AEAFCCA5ADC59DB4C79CB6C69CB5C69EB3C59CB9CCA2 +BCD4A8B9D6A8ADC99BA3BC90A4BA93A1B494A1B2979FAF989EAE979FAF97A4B598A7BB9A +ACC2A0AAC49DA8C598A8C296AAC197B5C9A2BDD1ABC9DDBAC7D8B9C9D9BEC5D5BCBCC8B1 +B8C3AAC4D3B9D7E7CFCADBC4C3D2BCBFCEB9B4C1ACC6D1BDD6E3CECCDCC8B0C1AEB1C1AD +B8C8B3C4D6C1BBD1BCB2C8B4A7BAA7A4B5A1A6B6A1A9B9A3B0C1AAB4C5ACB3C0A8C7D3BD +CCDCC6C8DDC6B9D1BAB6CEB5BDD4B8C0D7B8C0D7B7BCD1B1C0CFAFCFDBBFCFDBC4C2D0BB +C1D0BAB8C8B2B5C5AFB8C9B3B4C7AFB2C5AAB7CDAFBCD5B6B8D0B1BACEB0CDE2C5BED2B7 +A9BAA1C0CEB6C6D4BCC3D3BBCCDFC4C4D9BCBCD2B1B7CBAAB7CBABB6CAA9B0C7A4ACC39F +B1C6A5B5C9A9B3CBA9A2BE9A9CB894A2BA97A8BB9DBCCBB0C2CCB4CAD2BBC5CFB8BFCAB4 +C5D3BDCFDFC9CADBC5C2D1BDC5D5C0C6D6BFC8D7C1C7D5C0C3D2BDBBCBB6B8C9B4BDCEB9 +BACBB5B7C8B2B7CAB2B4CAAFB7CFB0B1CBA6BBD7ACBEDDAEA9C99A9CBB90A7C198ACC19E +AFC2A3ACC1A1A7C09AA1BE95A4BE98ACC3A0A7BCA0A2B79FA0B49DA4B99CA7BE9CADC5A4 +ADC6A6B3CDA9B1CCA3ABC49CA3B799A8B7A3A8B6A57889998DA9CD97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF +97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF97B6DF8DA9CD +7A8C98A3B597A5B59DA5B39FA2B09CA2B09BA8B6A0A2B09A9BA99598A79297A69397A794 +98A7959BAA979DAC999AAA9797A89597A79597A89597A99497AA9499AB949EAF98A6B79F +ADBEA5B0C2A9A9BB9FA9BB9EACBEA1AEC0A3B0C2A5B3C5A7B9CBADBCCDB0C2D1B7C3D2BA +BFCCB7C0CCB7C3CFB9C8D3BDCCD8C0C8D3BDC4D0BCB7C6B1ABBDA5A4B59CA4B39AA5B49B +A6B49BA6B59BA5B599A6B69AA5B69AA5B59AA5B49AA5B59AA4B498A3B298A2B197A1B097 +A3B297A4B398A4B399A3B29AA1B0999FAF97A1B198A1B198A0AF979FAE97A1B099A1B098 +A2B199A2B199A1B098A1B199A2B199A2B19AA2B19AA3B29AA4B29BA6B49DACBCA5B5C5AE +B8C9B0B8C8AEBDCCB0C1D0B1C2CFAFC2D0AEC1CFADBFCDACBECCADBDCBAEBCCAAEBBC9AE +BCCAAEBDCAAFBFCDB1C3D0B3C5D3B4C8D5B7CBD7BACCD8BCCCD8BACBD6B7CED9B9D0DCBC +D2DEBFD2DFC0CFDCBDCDDBBBC7D4B5CEDABBD4DEC0D5E0C0D5E1C1D5E1C1D3DFBFCBD7B8 +CBD6B9D1DBBED4DDC0D6E0C2D7E2C3D9E4C6D9E5C6D8E4C4D7E1C3D8E2C4D9E3C6D9E2C5 +D7E1C2D4E0BFB6C5A599A98F9AAA949AA9959BA9979BAA969CAB979CAC989DAC989EAC99 +9FAE9AA3B29DA7B59FA6B49DA4B19CAEBBA6B6C2AEB5C1AEAEBBA8ADB9A7AFBCA9B1BEAA +ADBAA6ABB8A4A3B39E9FB09B9CAE9899AB969CAE999FB19D9FB19C9FB09B9EAF9AA0B29B +A1B39BA1B49BA3B59CA5B69DA4B59DA2B399A3B69AAABEA0B3C6A9AEBFA5A3B39CA8B6A3 +AFBCAAB3C1AEB4C1AFB0BEACABB9A7A7B3A3ABB7A8B4C1B2B0BEAFA6B4A49CAB9A8495A2 +B6CBE0C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6C9DFF6 +C9DFF6C9DFF6C9DFF6B6CBE08595A19FAC97A1AF9AA2AF9BA3AF9BA3AE9AA3AF99A8B49B +AFBA9EB2BC9FB2BFA0B0BD9EADB99DA8B49BA5B19AA4B19AA4B19AA4B29BA4B19BA5B19B +A6B39BA7B49BA7B39AA8B49CAAB69DACB89EADBB9FB3C2A4C0D0AFC8D7B6CCD9BACEDAC1 +CAD6C2CCD9C9D6E4D5DCECDDE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E0E1F2E0E1F2E0E1F2E0E1F2E0E1F2E0E1F2E0E1F2E0E1F1E0E1F1E0E0F1E0E0F1E0 +E1F2E0E1F1E0E1F1E0E1F1E0E1F2E0E0F1DFE0F1DEDEEFDCDFEFDCDFEFDEDFF0DFE0F1E0 +E0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F2E1E0F1E0E0F1E0E0F1E0DFF0DF +E0F0E0DFF0DEDEEFDDDEEEDBDEEDD9DCEAD5DAE9D2DBEAD2DAEACFCCDDC0B8C8ABB4C3A7 +B6C3A8B5C3A8B4C3A6B4C3A5B4C2A3B5C3A3B5C3A1B4C2A1B4C2A2B5C3A3B4C3A3B5C3A3 +B6C3A4B5C3A3B5C3A3B5C3A2B5C3A1B4C3A1B3C2A1B2C1A1B3C1A3B5C2A6B1BFA3B0BEA1 +B1BFA0B2C0A0B3C1A0B1C19FB1C29EB2C3A0B3C4A2B7C7A7B8C8A8B1C3A2AABD9CA6B99A +A3B698A5B89AA8BA9BABBD9CABBD9BAEC09EB0C09FAFC09FADBF9EACBD9DAABA9BACBC9E +ACBC9FA9BA9DA9BA9CABBC9FAABB9FABBBA1ABBBA1ACBBA2ABBAA2AABAA0A9B99FA7B89F +A5B69FA5B5A0A6B6A0A6B69FA5B5A0A2B39D9FB09A9EAF99A0B099A2B19AA1B198A4B599 +A6B799A7B89AA7B79BA6B59BA7B69CA5B59BA3B59AA0B4989FB397A0B396A3B798A5B998 +ABBD9BAFC09EB0C19EB2C39FB2C39FB2C39FB3C3A0B5C4A3B5C4A2B4C3A0B3C39EB2C39E +B2C39DB2C29DB2C29DB2C39DB2C39DB1C29CB2C29CB3C29EB3C19FB0BD9DACBA9BA8B999 +A8B999AABB9BADBD9CAEBD9DADBB9BABBA9AAAB999A9B99AA8B89AA6B69AA5B59AA5B799 +A8BB99AABD99B0C19DB0C09DACBC9AA7B798A4B497A7B799ACBC9CB1C09EB5C3A0B3C09D +B2BE9CB1BE9CB0BD9CAFBD9CAEBB9BACBA9AADBB9AACB99AABBA9AAABA98A7B796A5B796 +A7BA98A9BC9AAABC9BACBC9CADBD9CADBD9DAFBF9DAFBF9DAFBF9EAEBE9CADBE9CACBC9C +AABA9BA8B99CA7B99BA5B89BA5B79AA8BB9CA9BC9DA9BC9DAABC9DAABB9CABBC9CABBC9B +ABBC9BABBC9BAABB9BA9B99AA8B99AA5B798A4B698A3B599A2B599A2B499A2B499A2B499 +A3B499A3B599A3B598A4B69AA5B79BA4B79AA5B89AA5B899A5B799A5B89BA5B89AA6B99B +A5B89BA6B99AA6B99BA4B79AA3B69BA4B69CA3B59AA4B69AA4B59AA3B49AA2B399A1B398 +A1B298A4B599A7B79AA9B99AAABA9AABBB9AABBB9AACBB9AACBA9AADBA9BACB99AACB999 +ACB999ADBA9AAEBA9BAEB99AADB899ACB799AAB499A7B298A6B299A6B39BA6B39BA5B29A +A3B098DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCCFD5D9A9BCD194AFCAA2B7CDC8CFD6DDDDDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6393D16393D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA5B8A0A3B79FA2B79EA2B69EA3B89F899985 +889185B4B6B3FFFFFFFFFFFFE9E9E9B4B4B48B8B8A8585859A9A99FEFDFDE3E5E37E847C +949D939EA79D818E7E98A99498AA9597A99598A89598A8969FB89AA7A7A7FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDA7A7A7B3CAAABDD8B5B8D7B4B4D4B7A9CCB3 +A1C5AC9AB69F9EB3999FB0959FB0939FB3949FB596A0B7989FB695A3BC98A7C19DA1BD99 +A1BC999EB8979CB697859C81768B71788C72798E727990727C91737C91727D91717F9273 +8294767F93767C9275788E738CA083ADC19DC4D9B6C0DAB7B9D5B2CAE6C4D0EECECBEDCD +C6EBC9C0E9C4BEEAC4B9E7BFAAD9AE9FCC9F9DC59AA1C59CA5C59DA3BF98A6BE99B3CAA6 +C1DCB6B4D4ACACCB9FAAC598ACC497ADC298AEC39AAFC49AB3C99DB3CDA0A9C79BA1C097 +A0BB979BB1939CAE969AAC979BAC979CAC95A2B297AABC9CA6BA98A8C19BA6C198A2BA93 +A7BD96B2C89FBBD0A8C4D4B2C7D2B4CFD7BBC1C8AFB7BDA4D0D8BEDCE9D1DBECD6C1D2BC +B7C6B1BDCAB5C8D5C0D3E0CCC9D5C1B6C4B0B8C8B3BBC9B4BDC6B2CBD4BFCBDAC5BACEBB +ABC3AFACC1ADB6CAB4BFD5BEBBD3BCB7CDB6BCCDB6C0CCB6D5E3CDD8E9D4D3E9D3C1DBC5 +BDD9C1BFDABEB6D0B0B7D0ABC1D6B0C5D3B4C1C9B2C9D1BBCBD5BFC5D3BCBFD0B7B7CAB1 +AABEA4B1C6A9BAD2B1BFD8B8C1D9BABED5B6C8E0C0BCD4B5BFD6B7C7DDBEC0D5B4C7DCBB +C5DABBBDD2B3AFC3A3B9CDABBFD3B0B4C9A5ACC29DAAC19CA9BF9DA8BC9CABC09FADC39F +BAD2ACBBD1ABB7C8A7C7D5BAC1CFB5B6C4AAB6C2A8BFC9B0CDD6C0D4DFCBCDDBC7C8D6C2 +CCD9C4D0DDC8C9D5C1C1CBB9BAC3B2BDC7B6C1CDBAC0CBB8C6D1BFCCD8C5CADAC5C5D8C0 +B8CFB2B8D1ADB7D2A8BEDCAEAECEA09DBA90AAC29CB0C5A4AEC2A5A2B798A5BE9AA4BF97 +A5BF96B0C6A3A4B89BA1B49CA5B99FA4BA9BABC29FB7D2ADBFDCB9BAD6B3A9C4A0A4BB9A +9EB298A3B2A09FAD9D6F809494B4DC95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE7F9ABC +7088A67088A67088A67088A67088A67088A67088A67088A67088A67088A67088A67088A6 +819CBF95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE +95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE95B5DE94B4DC708195B1C2A4A5B899A3B49B +A1B099A2B29BA8B7A19FAE9999A99598A89498A89497A89392A18E93A49194A49194A592 +96A79292A49094A69199AB939FB098A5B69EAABAA1AEBEA5BECDB5C5D4BDC2D0BAC1CEB7 +C0CDB7BECBB6BDCAB5BDCAB6BCC9B5BBC8B4B5C2B0ADBBAAADB9ABAFBAACB1BBADB4BDAF +B1BDAFA5B2A4A4B3A3AEBDAAAEBEA8A4B49BA4B39BA5B39BA7B49CA7B49BA7B59AA7B699 +A7B69AA5B49AA4B49AA4B49AA4B499A4B398A3B297A3B297A4B397A4B398A5B499A3B299 +A1B098A0AF98A1B098A1B098A0AF979FAE97A0B099A1B099A2B198A2B098A3B198A2B198 +A2B19AA2B199A1B099A1AF99A3B19BA5B39DABBAA2B5C4ACB8C8B0B8C8AFBECDB2C3D1B4 +C4D1B3C4D1B2C4D0B1C4D0B1C0CEAFBECDAFBDCCB0BCCBAFBDCBAFBDCBAFBFCDB0C2D0B2 +C4D2B4C7D4B5C9D5B8C7D3B7C8D4B8CCD8BACFDABBD3DEBED4DFC0D3DFC0D1DEBFCEDCBC +CDDBBBCEDABBD1DDBDD1DDBED5E0C1D5E1C2D3E0C0CEDCBBC8D5B5C8D3B5CFD9BCD5DFC2 +D7E2C4DAE5C8D9E4C7D8E3C4D7E2C3D5DFC2D3DDC0D4DEC0D4DDBFD4DFBFC3CFB09EAD91 +9AAA9499A99699A8969AA9979AAA969AAB969BAC979BAB979BAB98A0B09DA8B7A3ABBAA4 +A6B59EAAB8A4ABBAA7A9B8A5A7B5A3A5B4A1A6B5A2A7B6A3A3B19EA2B29DA5B6A1A4B49F +9CAD9998A8959DAE9BA5B6A2A7B7A2A5B59FA1B09AA0B199ABBDA2B3C4A9B3C4A9B1C1A6 +B1C2A5B0C2A4B0C3A3BACCAEC3D3B9B3C3ACA1B19C9EAD9CA5B3A3B7C5B6ACBBACA6B4A5 +A2B0A09DAB9B9EAB9CA2AFA0A1AFA09DAC9C97A7967C8D9EC4DBF3C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5B7D4F195BDE87FAEE28EB8E5B0CFEE +C5DCF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5 +C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C6DDF5C4DBF3 +7C8D9E9EAB97A2AF9AA3AF9CA4B09CA3AF9AA2AF99A5B199ADB99FB0BC9FB2BE9F9BA489 +878F78828B767E88737C85737B85737C86747B85747B85747C87757E88757E88757F8876 +939E8AABB89FAEBBA0B0BCA2BDC8AECFD9C0D5E0C7D5E0C9CAD6C1C0CCB6C3CEBAC4D0C0 +CDDACBD6E5D6DCECDCDFEFDFE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0DFF0DFDEEFDDDEEEDCE0F0DFE1F2E0E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0E0F1E0E0F0E0DFEFDEDDEEDBDCECD7 +DCEBD4DAE8D1D8E7D0DCEBD3DEEDD6DCECD3D0E0C4BBCBAEB2C2A4B4C2A5B5C2A6B5C2A5 +B3C1A2B4C3A2B4C2A2B4C1A1B3C1A1B4C1A1B4C2A2B5C2A2B4C1A1B4C1A1B4C2A1B3C2A1 +B3C3A0B4C4A0B4C3A0B3C2A0B1C0A0B0BEA1AEBCA2ACBB9FACBB9FAEBC9FAFBE9FB1C09F +B1C19FB3C3A0B1C19FB1C09FB3C1A2B8C7A7B8C7A7B3C3A2B0C1A1ADBE9FAABB9BADBE9D +ADBE9CAFBF9DB1C09EB0C19FADBE9CABBD9CABBE9CA9BB9BA8BA9CA6B89BA3B699A2B49A +A2B49CA3B49CA3B39BA2B29BA4B49DA4B59CA5B79DA6B79DA4B59CA2B39BA3B39CA3B49C +A5B79DA4B79DA1B59A9FB2999FB299A1B39AA4B79BA8B99CA9BB9CAABC9DAABB9EA5B69A +A2B499A2B699A4B99AA7BD9CA8BC9CABBF9DADC09DAFC19DB1C29FB1C29FB2C29EB4C39F +B5C4A0B5C4A0B3C3A0B4C3A1B4C4A1B4C5A0B2C49EB1C39EB2C3A0B2C29FB1C29EB2C39E +B2C39EB2C19DB1C09DB1BF9EAFBC9DABB99CA8B89BA5B799A3B698A8BA9BAABB9BAABA9A +A9B899A7B698A5B598A4B598A4B599A6B79AA6B899A9BB9AADBF9CAEBF9BB0C09BB1C09C +B1C09DAEBE9CA8B899A2B395A4B497A8B799ADBA9BAFBC9CADBB9AACBA99ABB999A8B797 +A6B697A8B899AAB99AA9B89AA8B79AA6B799A7B899A8BA99A9BB9AAABB9AABBC9AACBC9B +ADBD9CADBE9DADBE9CAEBE9CAFBE9DB0BF9FAEBE9EACBC9CAABB9BA8BA9BA6B89BA6B89C +A7B99CA8BA9CA9BA9DA9BA9DA9BA9DAABB9DABBB9CABBC9BABBC9BAABC9BAABB9BAABB9B +A8B99BA7B89AA5B799A3B599A2B49AA2B49AA1B399A0B299A1B398A1B497A3B698A4B89A +A6B99BA6B99AA7B99AA7B99AA5B79AA5B79AA4B69AA4B69BA4B79BA6B99CA7B99CA8BB9D +A6B99BA6B99AA5B799A6B89AA5B69BA4B49BA4B39BA4B39AA3B299A3B198A5B399A7B599 +8F9B837E88737E88727D88727D88727D88727D88727C87717C87707C87717C86727C8672 +7C85718D9A83A3B297A0B097A0B098A2B199A4B19AA3B099A2B099DEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDCDDDC9AB2CA3A74B41A65B50E5AAE +1259A8306CAE7D9DC0C1CCD8BBCBDADADBDBDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D15F89BF535960FFFFFFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +FFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCA4B69FA6BBA1A8BDA1ABBFA49EB0978D908CF9F8F8FFFFFFFCFBFCF5F4F4 +ECEBECCACAC9ADADAC9A9A99F0F0EFF5F4F5FFFFFFEFEFEFA8A19DD1CBC691979195A692 +98AA9597A99597A89497A894A9C7A6A6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFA6A6A6AFC1A3B8CEACB9D3B3B5D1B5ACCBB19BBEA496B89E95B29996AF96 +9AAF949CB0949FB395A1B696A1B794A5BD99A2BB99A2BD9B9FBA999DB7979DB7977C8C78 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +82947CACC19AB3C39DC4D6B0CCE2BDD1E8C6D2ECCDCFEBCECBEACBC5E8C6C2E7C3BEE6C0 +B6DCB3ABCD9FB4D1A1C3DFAEC4E4B6C0E1B7C1E2B9B1D1A8B5D5ABB1D2A6A4C396A7C496 +A6C093A8BF95AAC198A9C094ADC597B2CC9DB5D3A6A3C49C9BB99897B0959AAE989AAD98 +99AB969CAB969FB096A3B898A4BC96A7C19A9DB8939FB995ABC39CB0C99EB8D1A6BDD3AD +B5C4A5B9C1A8B9BEA5C1C5ADD9E0C8DFECD7D2E2CEB6C6B2BECDB7D3E1CBCAD6C1BAC3AF +BCC4B0CDD9C4C8D8C3C0CFBABAC3B1C3C8B6C3CAB7D3E1CDCDE1CDC5DAC4C6D8C2D2E2CB +D2E4CDC0D1BCC7D7C1D3E0CBDCE9D5DAE9D5D7EAD5C8DDC7CCE3CCCDE4CBCAE1C3C2D9B7 +CAE0BEC3D5B6BECAAFC5CDB5C5CCB4CCD7BFC9DAC1B3C9AFA7BFA3B4CDAEC7DFBEC7DDBE +C7DCBDC8DDBDC8DFBECAE1C3C6DCBDBDD2B0C1D7B1BDD4ACC2D9B5C2D8B6B7CBAABFD2B1 +B5CAA7A9C19DA7BF9CA2BC99A1B99AA1B89BA1B799A8BD9CB0C4A3AEC1A1ABBA9EABB69F +AFB9A4B4C0A8C2CFB6C4CFB9C4CDB9CDD6C3CDD8C5CAD5C3C9D3C2C4CEBDB7C2B1A8B4A3 +AFBBA8B1BEAAB1BFABBAC5B4BBC5B5B4BEADC4CDBCC9D5C1BECFB5BCD1B1BBD2ADBBD3AB +B3CDA49FB791AEC2A1B8CAADB7C9AEABC0A3A6BF9DA4BF97A5C095A9C29CA1B8989DB197 +A2B799A7BE9AB2CAA4BFD8B5B8D1B0AAC1A1A4B99BA5B89CA0B39BA0B29EA0B09E6F7F93 +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD7689A1FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD7689A393B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD93B3DD +93B3DD93B3DD93B3DD93B3DD6F7F93CBDAC0B0C2A4A1B395A6B69BABBAA2ABBAA29DAE97 +98AB9497AA938D9E895A5C59484848484848484848484848484948484948494948494948 +494948494949494949494949535453A1AA9FB3C0B2B3BFB1B2BEAFAEBBAAACB9AAABB8A9 +AAB7A9A7B3A5A4B0A2A4B1A1ABB9A8A6B4A2A2AF9EA5B2A0A7B5A1A8B7A3A8B6A2AEBCA8 +B3C1ACA5B39CA4B29AA5B39AA7B49AA8B59AA8B699A8B69AA8B599A5B399A5B39AA4B29A +A4B399A4B398A3B298A3B298A3B297A5B499A5B499A3B399A2B198A1B099A1B099A0B098 +9FAF979EAD96A0AF98A1B099A3B199A3B199A2B198A2B199A3B19AA1B099A0B099A0B099 +A1AF9AA2B19BA9B8A2B2C1A9B6C4ACB8C6ADBBCAB0C1CFB3C3D1B2C5D2B2C4D0B1C4CFB1 +C3CFB0C0CEAFBECEAFBECFB1BECEB1BFCEB1C1CFB2C2D0B2C4D2B4C6D4B5C6D2B5C4D0B2 +C7D2B5CDD8B9D1DBBCD3DCBED4DEBFD4E0C0D4E0C0D2DFBED2DEBED0DCBCD1DCBDD0DCBC +D1DCBDD1DDBDD2DDBED0DDBEC9D7B7C4D1B2C7D3B5C7D3B7CCD8BCD3DFC4D7E2C7D8E3C8 +D6E1C5D5DFC3D4DFC2D1DBBED2DCBFD0D9BDC7D1B6A3B0969AAA9398A99599A99599A996 +9AAA969BAB979BAC979BAC979CAD989FAE9BA3B2A0A7B6A3A8B7A3A7B5A1A6B4A0A3B19D +A1B19CA4B39EA5B49FA2B39E9DAE9AA0B19CA9B9A4A3B39E9CAC9898A9969BAA99A4B2A1 +ABB8A5A9B6A0A4B29BA4B29BB3C0A9BCC8B3B1BEA9ADBCA5AEBEA4B2C3A8B7C8ADC6D6BD +BECDB8ADBCA9A0B09E9BAB999DAD9DA4B4A69FAEA09CAB9B9CAB999BA9989BAA989BAA99 +9BAA9999A99897A7957B8C9EC3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C0DAF384B0E02C76C70C67C8045DC2085ABC236EC06A9DD4A9CBEDA2C9F1BFD8F2 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4 +C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C3DBF4C2DAF47B8C9E9FAB97A4B09BA3AF9A +A3B09AA2B09AA2B09AA2B099A6B29AACB79DAFB99C8A907DFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD848C7CACB89DAEBBA0B0BCA2 +B4BFA6B8C3ACBDC9B2BFCAB4C0CCB5BDCAAFBDCBADBDCCAFBDCDB1C4D5BBCDDEC7D4E5D0 +DAEBD8E0F1DFE1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E0E0F1DFDEEFDDDBECDADEEEDCE0F2E0E1F2E0E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E0F1E0E0F1E0E0F1E0E0F1DFDFF0DDDEEED9DBEAD3D7E6CDD6E5CDD9E8D0 +DCEBD3DCEBD4DCEBD2D2E1C6BBCAADB3C2A3B4C2A3B5C1A3B5C1A2B4C1A0B4C2A1B4C2A1 +B4C2A2B3C1A1B4C1A1B3C1A0B3C1A1B3C1A1B2C1A1B2C1A2B3C2A2B3C2A2B3C1A1B4C2A2 +B2C0A2B0BFA3ADBDA2ABBCA3AABAA1A8B89EA9BA9DADBD9EAFBF9EB1C19FB1C1A0AFBFA1 +AEBEA0AFBEA0B5C3A5B5C3A5B4C1A2B4C2A3B0C0A1ACBD9DABBC9BABBD9DABBC9BAEBF9E +B2C2A1B1C2A1AEC19FAABD9DADC0A1ACBFA1A8BB9EA3B79B9FB398A0B2999EB1989EB198 +A1B49BA4B89DA6B99DA6B79CA5B59CA2B29AA0B199A2B49AA5B89CA7BA9BA7BB9BA7BA9B +A6B99AA7BA9BA7B99AA8BA9AABBE9BACBF9CAEC09EABBD9CA5B899A5BA99AABF9CAFC2A0 +B1C3A1B1C3A1B2C29FB4C39FB2C39DB2C49DB2C39CB3C39DB4C49EB3C49EB3C49EB1C29C +B2C49EB4C59FB5C59FB4C5A1B4C5A2B4C4A1B3C3A0B3C29FB1C09EB0BF9EAFBD9EACBA9C +ABBB9DA8BB9CA8BB9CA7BA9BA5B89AA4B799A3B697A5B698A4B598A3B498A2B498A2B498 +A3B599A6B79BA8B89BA9B899ADBC9AB0BF9BB0C09CAFC09BB0C19CB0C19DADBF9DA7B998 +A2B596A3B597A6B798A8B999A8BB99A9BC9AAABD9BAABD9BA8BB99A6B999A6B799A5B499 +A2B298A4B599A7B99BA8BA9BAABB9BABBC9CACBC9CACBC9BADBE9DADBE9EADBD9DAFBD9D +ADBC9CADBC9CACBC9CABBB9BAABA9BA9B99BA6B69AA6B69AA8B79BA9B89CA7B79BA6B69B +A5B69AA7BA9CA7BA9BA9BB9AA9BC9AA9BC9AA9BB9BA9B99BA8B89BA8B89AA6B79BA3B59A +A4B59CA4B69CA4B79CA2B69AA2B699A2B699A3B89AA5B99BA7BA9BA7BA9BA8B99AA7B89B +A6B799A5B79AA5B69AA3B59AA4B79CA6B99EA8BA9DA8BA9BA8BA9AA8B99AA8B99AA7B89A +A5B69AA3B399A2B199A2B099A2B099A1B098A1B098A1B0977F8879FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD7E8A79A1B598A0B397 +9EAF979FAF97A0AF99A1AF99A1AF99DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDDDEDD95B7DB367FCD2572C32B7ACF2776CA2E81D83582D4729EC588B5DD +4288D26391C181ACD893BAE2DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16781A22E2E2EFFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA8B9A1A7B89F +A9B9A0ABB9A1889381D3D3D3F8F8F8F7F7F7F0EFEFE6E6E5DBDBDBADADAC9A9A99EAEAEA +EFF0EFF7F7F7FAFAFAFFFFFFDFDAD39B8F85ACAFAE8695849AAC9698AB9596A99496A993 +B7CEADA6A6A6FFFFFFFFFFFFFFFFFF8E8E8E8E8E8E8E8E8EBFBFBFBFBFBFBFBFBFBFBFBF +BFBFBFBFBFBFBFBFBFBFBFBF8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFCFCFCA6A6A6A2B297 +AFC2A5B6CCAFAFC9ADA1C0A4A7CCAEA9D4B6A0CCB098C0A596B69A99B2969BB1949FB496 +A3B999A5BC9AA5C09EABCAA99CBB9B9AB7969BB695869084FAFAFAF4F5F4F4F5F5F6F6F6 +F6F7F7F6F6F5F4F4F3F2F2F2EFEFF0EDEEEDEDEDEDFAFAFA849183A7C29DAFC59EBACBA5 +C1D2ADCDE1BDD5ECCAD0EAC9CCE9C6C9EAC6C4E9C4B8DEB9A2C29EA5BC97ABBB94B1C096 +B6C79AB9CC9FBCD2A4BAD5A6C4E3B6B3D6A99CBF91A5C496A5C195A2BC92A5BC94A5BC93 +AFC89BB0CB9CB0CEA2AACCA3A1C59F9BBD9B96B59895B29999B09A9BAE989FB098A1B398 +A6BB9AA5C09BAECBA5B0CBA4ABC39CACC09BB0C4A1BACFAFB4CAAEADC0A7B4C0A8CED8C0 +DEE8D1D8E5CFCEDEC8C9DBC5D5E7D0CBDDC4B9CAB3B4C2ABC4CFB9CDD6C1CBD5C2B9C3B1 +B2BBA9222222C3C4B2DBDFCDD9E0CED9E3D0D5E1CDD4E3CCCFDEC8C1CEB8D6E1CCDAE7D2 +DBE8D4DBEBD7D4E6D2CEE0CBD7E8D3D0E1C8C8D8BCCADABDC9DABBC4D7B5C3D7B4BDD1B0 +BED0B2C7D8BCCADFC4C9E1C6BFDABEC2DCBEBDD5B6B4C8ACB5C5A9BBC9ADC7D6BACBDEC2 +B9CEB1B4CAABBBD0AFBDD2AFC4DAB8C1D7B7B2C8A9B1C5A8AFC5A7A9C1A4A3BC9E9FB999 +9FB899A3B89CA2B69BA8BC9FA9C1A0B1C9A8A7BB9FADBBA4B7C2ACBCC7B0C3CEB7BBC7B1 +C3CDB9CAD5C2C7D1BFC3CBBABAC3B3B4BEADB3C1AEB5C6B1BED1BAC0D4BCB8CCB5B6C7B2 +AEBFABB4C3B0B0BDABACB9A6ADBCA4ADC0A1AAC19DA9C09AAAC19AA5BA95ADBF9EB4C2A6 +B9C7AEB7C8AFACC2A5A3BC99A2BD95A3BF979FBA979DB797ABC5A2AAC49EB2CBA5B3CAA8 +A5BA9CA1B397A4B599A5B89BA2B59B9DAF98A2B19E6F7F9391B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC90B1DA818E9DFAFAFAF4F5F4F4F5F5F6F6F6F6F7F7F6F6F5F4F4F3F2F2F2 +EFEFF0EDEEEDEDEDEDFAFAFA7D8B9C90B1DB91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC000000 +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC00000091B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC +91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC91B2DC85A8D5 +6F7F93CAD6C2CBDAC1ADBFA3ADBFA2B2C3A8AEBEA4A3B59BA8BCA1AFC2A6919B8C2E2E2E +6868683030302C2C2C2C2C2C7E7E7E2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C +2C2C2C787D78A5B2A5AAB7A8ADBAAAA4B1A0A2B19FA1B19FA0B09EA0AF9CA1B09CA0AF9B +A3B29EA4B29DA3B19BA5B39CA6B49EA8B59FA8B6A0A7B59FA4B29CA2B19AA3B19AA4B299 +A6B399A8B59AA8B599A8B599A6B498A5B298A5B39AA4B29AA4B299A3B298A4B299A3B198 +A3B298A4B398A6B59AA3B299A1B098A1B098A1B199A0B0999FAF979FAE96A1AF98A1AF98 +A2B099A3B19AA2B19AA2B099A2B099A2B099A0B098A0B098A0B098A1B099A6B49EABBAA3 +B1BFA7B6C4ACB9C6ADBECCB1C3CFB1C5D1B1C6D2B1C3CEAEC4CFB0C2CFAFC1D1B1C1D1B2 +C1D0B2C0CEB2C1CEB3C3D0B4C4D0B3C5D2B4C7D4B5C8D4B6CAD6B7CBD7B8CDD8BAD0DBBD +D2DDBFD4DFC0D4DFC0D2DEBFD0DCBCD0DCBCD2DDBED0DBBCCED9BACDD9BACEDABBCEDBBD +CBD9BAC3D2B2C4D3B1C8D5B4C7D5B5CCD9BCD0DCC0CCD7BCCFD9BECDD7BCCDD7BCD2DDC1 +D0DBC0C7D2B7BAC7ACA3B3999AAB9598AA9697A89499A8959AAA979DAD999DAD99A0AF9A +A0B09BA0AF9B9FAF9AA0AF9BA1B09DA0AE9CA0AE9CA0AD9AA2B09CA8B6A1A8B6A0A1B09B +9FAF9AA5B49FAEBDA8A8B7A39CAB989AAA979AAA989EAD9AA5B29FA7B49EA7B39CACB7A0 +B8C2ACB0BCA7A2B19CACBCA4AEBFA4B7C8ACC1D1B8C0CFBBB5C3B2A5B4A39FAE9C9AAA97 +99A9979AAA9999A99899A99799A89699A89599A89597A89598A99798A89696A6947B8C9E +BFD9F3C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C0DAF47FB6F02882E01875D6 +1E7DE31A79DD2084EC2885E76A9FCE7DB6EA348BE65190D46DACED7DB9F7C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4222222C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4222222C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4C1DAF4 +C1DAF4C1DAF4C1DAF4B1CFEF7B8C9EA1AC99A4B09AA3B099A3B09AA3B09AA3B19AA4B19A +A6B199A7B29AA9B49A8D9086FAFAFAF4F5F4F4F5F5F6F6F6F6F7F7F6F6F5F4F4F3F2F2F2 +EFEFF0EDEEEDEDEDEDFAFAFA888D82ACB89CAEBB9EB1BDA0B3BFA2B6C2A5BAC7A9C5D3B4 +C5D3B3BBCAAAB7CAA7BACFA9C4DAB5D2E7C7DCEFD5E0F1DCE1F2DFE1F2E0E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E0E0F1DFDDEDDCDCEDDBE0F0DF222222E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0 +E0F1E0E0F1E0E0F1E0DFF0DCDCECD5D7E6CDD7E7CCDAE9CFDCEBD3DDECD5DFEDD7DDECD4 +CCDBC1B6C5A7B4C3A3B4C3A2B4C2A1B4C2A1B4C2A1B3C2A1B2C1A1B3C1A1B2C1A0B2C1A0 +B2C2A1B2C2A1B1C1A0B2C1A1B2C1A1B2C1A1B4C2A1B3C2A1B2C1A1B1C1A3B0C0A4AEBFA4 +ACBDA4A8B9A0A7B89DA9B99DAEBDA0B1C1A4B0C1A5B0C1A4B0C1A3B0C1A3B3C3A4B3C3A4 +B2C1A3B3C1A3B4C2A4B3C1A1B0C09FACBD9EA9BA9CA8B99BACBD9DADBF9FACBF9FA9BC9D +A8BB9DAABD9FA9BD9EABBF9FABBF9FA7BA9CA3B699A2B79AA4B89AAABD9EADBF9FABBC9D +A6B79AA3B59AA0B299A2B49BA7B89DA9BB9EABBC9EAABB9DA8BA9AA7B999A8B999A9BB99 +ABBE9BADC09DB0C29FB0C1A0ABBE9CA8BC99ACC09DAFC2A0B2C4A2B2C4A1B2C3A0B4C39F +B4C49FB4C59FB5C6A0B4C5A0B4C7A1B4C8A1B4C7A0B4C69FB4C59FB4C59FB4C49FB4C49F +B5C5A0B5C4A0B4C3A0B3C19FAFBE9DADBC9CAEBD9EAEBF9FAEBF9EAEC09EAEC09CAFC09D +ADBF9DA9BB9BA4B797A4B898A4B999A5B99AA5B79AA4B69AA2B398A3B499A5B59AA6B79A +A8B99AACBE9BB0C19DB1C19CB2C19DB2C19DB4C39FB2C29FAFBF9EAABA9BA8B99AA9BA9B +ACBD9CAEBF9EAEBE9CAEBF9CADBF9DAABB9BA2B396A0B197A0B198A4B69AA8B99CAABB9C +AABB9CABBB9CACBB9CADBD9DACBC9DACBC9DACBC9DACBC9DACBB9DABBB9CAABB9BAABA9C +A9B89BA7B79AA4B499A2B399A1B299A1B298A1B399A0B399A0B599A3B99BA6BB9CA8BB9B +A8BB9AA9BB9AA9BA9AA8B99AA8B89BA6B89BA5B79BA5B89DA4B79CA4B79CA5B89BA5B99A +A5B89AA4B899A5B89AA5B89AA6B99BA7B99BA7B89AA7B89BA5B699A3B598A3B598A4B69A +A5B89CA6B99CA8BA9DA9BA9CA9B99BA8B89BA7B79AA7B79BA5B69BA4B49AA2B2999FAF98 +9EAF979FB198A0B3999FB297878E84FAFAFAF4F5F4F4F5F5F6F6F6F6F7F7F6F6F5F4F4F3 +F2F2F2EFEFF0EDEEEDEDEDEDFAFAFA848D80A3B698A5B79AA3B49A9FB0989EAE989EAD98 +9FAE97DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCBCD1E57CB6ED +67A0DD4174BC5187CD559AE24C96E45D9FE2B3CDDE9DC7EC74B1EE509EF058A0EC9EB9D4 +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6981A0323232FFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA9B69FA7B49EA8B49DA7B39D7B8575C4C5C5 +CCCDCDE5E5E5DEDDDED4D4D4ADADAC9A9A99DDDEDDE4E4E3EBECEBEEEEEEF2F1F1F3F3F3 +FCFEFDCECFCFBCBCBC76827499AB9698AA9698A99698A996B1BFA4A6A6A6FCFCFCFFFFFF +FFFFFF4E4E4E4E4E4EFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFF4E4E4E4E4E4EFFFFFFFFFFFFF8F8F8A6A6A6A8BFA6B0C8ABB2CAABB2CDACBEDCBA +BCDDBAB7DAB7B4D8B8A8CDAD9BBC9C9CB9999CB6969FB697A5BB9AA4BD99ACC6A4ACC9A8 +9BB9989AB79694AC8DA1A6A0FBFAFAEFEFEFF0F1F1F2F1F1F1F1F1F1F0F1F0F0F0EEEEEE +EDEDECEBEBEAE8E8E8F8F8F89EA8A0A2C8A8ADCFADADC8A7B5CCAAC3DAB9CBE6C5BBD7B6 +BEDAB8C7E5C1C6E7C4A7C9A79CBA9BA1BB9DA1B798A3B896A5BA96A7BC97ABBE96B3C49B +B6CBA0ABC599A6C595ABCB9AA5C496A1BC93A6BF97AAC299B2CBA1B7D2A8BEDCB2B5D6AF +AACCA6ACCFABB3DBBAA8D3B796BEA593B09A9BAF999FB197A6BA9BB8D2AFA8C4A2A4BC9B +A6B799AAB59BBBC3A9CFDAC0D5E6CCC9DCC4D4E4CDDCE8D1D5DFC9D7E4CFD7E5D1D6E6D1 +D3E2CCCCDAC4CFDEC7CDDFC8CFE2CCB3C1AD222222A8AF9CB5C0AB222222C6D0BDC3C9B6 +C4C4B2D0D0BDD2D7C4D7E2CDD3E1CBC8D4BEDCE6D1DAE5D2DDE9D6DAE8D5D0E0CCD2E4CF +C8DAC4B7C7ADBFCEAFBFD0AEB2C3A2B9CBA8C5DAB5CEE3C1CFE3C5D3E5CBD0E2CBC2D5BE +BED3BCC3DBC2C0DBC1B8D3B9A9BEA4B6C4A9C7D4B8CADBBECADDC2C5DABFB3C8ADB2C5A8 +C2D5B9B8CBB0B5C7ADB4C6ACB8CDB2B4C9AEA5BB9DA8BFA0A7BB9EA5B59BA9B69EB1BFA6 +AEBFA4C0D3B8ACBEA5B8C7B1BCC8B4C1CEB8C4D0BBC4D0BBC8D3BFC4CFBCBEC8B6B2BEAB +ABB8A6B1BFAABECCB6C7D6C0CBDBC5C9DAC4C2D2BCC7D6C1C4D5BFBBCDB6ADC1A9A5BAA1 +A9BEA2ADC4A5A4BE9CA0BA97A1B995A4BB98A7BA9AABB99EB6C1AAB8C5AFAFC1A8A3BA9B +A2BC98A3BF98A0BD97A9C6A1AFCBA7A8C39FABC3A0A3B89AA1B399A2B49AA3B799A1B799 +A1B69A9BAE95A0B09C6F7F9383A6D48FB0DB8FB0DB8FB0DB8FB0DB8FB0DB86A5CD9DA4AF +FBFAFAEFEFEFF0F1F1F2F1F1F1F1F1F1F0F1F0F0F0EEEEEEEDEDECEBEBEAE8E8E8F8F8F8 +969FAA88A7D08FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB0000008FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB0000008FB0DB8FB0DB0000008FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB +8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB8FB0DB749ACA6F7F93B7C3B3BBC9B6B8C7B2 +B9C8B1BAC9B1B6C4ADA8B6A1B5C3AEBAC8B492998F3232325B5B5BC4C4C4565656323232 +828282323232323232362D2B674640775A553E2C28333333333333767A74A2B09FA3B19F +A3B29EA5B39DA3B39BA2B39AA2B39AA2B39AA2B29AA2B19AA3B29BA3B19AA3B19AA2B19A +A1B09AA3B29CA7B59FA5B49DA1B099A2B199A3B29AA5B39AA6B499A8B59AA8B599A8B599 +A7B49AA4B298A4B399A4B29AA4B299A3B199A4B299A4B399A2B097A3B299A5B39AA3B199 +A1B098A1B0992222229FAF999EAE979EAE96A0AF97A1B099A2B099A2B19AA1B19AA2B199 +A2B099A2B099A1B099A0AF98A0AF98A0B098A3B39BA8B7A0ABB9A2B3C1AAB7C4ACBDCAAF +C2CEB1C5D0B2C7D2B3C4D1B0C4D0B0C4D1B1C3D1B1C4D3B4C3D2B4C0CFB3BFCEB2C1CFB3 +C3D0B3C5D2B4C5D2B3C8D4B6C8D5B5C8D5B6C8D5B6CDD8BBD0DBBDD2DDBFD3DFC0D3DFC0 +D1DEBDCFDCBBCFDBBCCCD9B9C4D1B2CAD7B8CBD8B9CDDABBCEDBBBC5D3B3C6D5B3CBD9B8 +CFDCBDCCD9BCCFDCBFCEDBBDC8D5B7CCD9BCC9D6B9C9D7B9C9D6B8C5D3B4BFCFAEA6B798 +9CAE959AAB9698A99599A89699A9969AAA979BAA979DAB989CAA979CAC979CAB969DAC98 +9EAD999EAC9A9EAB999EAB9AA1AE9CA5B2A0A2B19D9DAC989CAC98A2B19EA7B4A3A1AF9E +9CAA999CAB999BAA979FAE99A4B19CA7B39DA9B49CB0BBA2B5BFA8A6B39DA1B29AABBEA3 +B4C6AAC1D1B8C2D1BBB7C6B4A7B6A69DAD9C9CAB999BA9979AA9969AA99698A89599A896 +98A79598A79597A79598A99698A99799AA9796A6937B8C9EADCCEDBED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3A3CEF770B8FB5DA2EB3875CC4788DC499CF33F98F652A1F2 +AECEE296C8F56AB3FC43A1FF49A3FE88B7E9BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3222222BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3222222BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3 +BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BED8F3BDD7F298BDE6 +7B8C9EA0AA97A4AF9AA5B09AA4B09BA3AF9AA4B19AA5B19AA6B19BA6B29B9BA691A3A5A1 +FBFAFAEFEFEFF0F1F1F2F1F1F1F1F1F1F0F1F0F0F0EEEEEEEDEDECEBEBEAE8E8E8F8F8F8 +9EA19AA4B295AEBC9FB2BFA2B4C1A2B4C3A3B2C3A1BCCEABC9DCB8C3D9B2C4DDB6CFE5C4 +DBEED4E0F2DFE1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222 +E0F1E0DEEFDE222222DEEFDEE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1DF +DDEED9DBEBD4DCEBD3DDECD3DDECD5DDECD6DDEBD6DCEAD4D8E7CFC5D5B9B4C4A4B3C3A2 +B3C3A1B4C3A2B3C2A1B2C1A0B2C1A0B3C1A1B2C2A1B1C1A1B2C2A2B3C2A2B3C2A1B3C0A0 +B3C0A0B3C0A1B3C1A1B3C2A0B2C1A0B0C0A1B0BFA2AFBFA2AEBFA3ADBEA2AABB9EA8B89C +A8B89EA9B9A0ADBDA4B0C1A6B1C1A5B2C2A4B2C2A2B2C2A2B2C1A1B2C1A1B3C0A0B3C0A0 +B2BF9FB0BFA0ABBC9EA8BB9CAABE9CABBF9DAABF9DA8BC9BA9BD9DAABF9FAABFA0A8BC9B +ACBF9EB0C3A2ACC09FABBE9DB0C1A0B6C5A4B3C2A1B0C19FACBD9DA7B99CA2B499A1B398 +A4B69BA8B99CA9BB9DA9BB9DA8BA9BA8BB9CA8BB9AAABB9CACBD9DADBE9DAFBF9EB0C0A0 +AEC09EAABD9CACBF9EAFC1A1B1C2A3B1C4A3B1C3A1B2C3A0B2C39FB4C5A0B5C5A0B5C5A0 +B5C5A0B5C6A0B5C6A0B6C6A1B5C6A1B4C5A0B3C59FB3C59EB3C49DB3C29DB2C19DB0C09D +AFBF9CADBE9CAFBF9DB0C19EB1C19DB1C19CB1C19CB2C19DB1C09DB0C09EADBE9DAABC9B +A8BA9AA8B99BA8B99DA8B79DA4B49AA0B298A2B398A3B598A8BA9AADBF9CB1C39EB2C29D +B3C29DB3C19DB3C29DB5C29FB4C19FB1BE9EAAB79AA6B397A8B599ABB89BADBA9DAFBB9D +AFBC9DADBC9DA8B89BA2B497A2B598A6B89BA9BA9BAABB9CA9BB9BA9BB9BABBC9DADBD9D +ADBD9DABBB9CABBC9CACBD9DACBC9CAABB9BA9BA9BA9B99BA8B89AA4B59AA0B2999FB199 +9FB1999FB298A1B599A1B69AA2B79AA3B89BA5B99BA7BA9BA8BA9AA8BA9AA8BA9AA7B99A +A7B89AA5B89AA3B89AA5B99CA6BA9CA5B89BA6B99BA7B99AA7BA9AA6BA9BA6B99AA6B89B +A6B79AA7B79BA7B79AA5B699A5B69AA4B59AA3B599A3B69AA5B89CA7BA9DA7B99BA6B89B +A6B79AA6B799A6B69AA5B69AA5B69AA5B69BA4B59BA2B49AA1B499A1B599A1B59898AA8E +A2A6A0FBFAFAEFEFEFF0F1F1F2F1F1F1F1F1F1F0F1F0F0F0EEEEEEEDEDECEBEBEAE8E8E8 +F8F8F89DA19A9FB094A8B99CA8B89CA5B59AA1B2999DAE979BAC95DEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDDDEDDAECBE184A2BD223979031C781735907EA9DF +78B0EAA3C8EAB7CADAB3D4F198C8F679BBFF89B9E9D2D5D6DEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D16981A0393939FFFFFFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +FFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCA5B29AA4B19AA2B09AA0AF9882897FC1BCBA97979DCCCDCDC8C8C8ADADAC +9A9A99CACAC9D0D0CFD7D7D6DADADADEDDDEE0E1E0E3E3E3D1D0D1C7C6C6CBCAC97C857A +9AAD9799AC979AAC9799AB97AEB9A2A6A6A6F6F6F6FEFEFEFFFFFF0A0A0AFFFEFF7F7977 +83777186787188786F8C786D8E766B8B7062866A5B866657866657FFFEFF0A0A0AFFFFFF +F9F9F9F5F5F5A6A6A6A8C1A8AFC9ADB2CBADB5CEADB4CDABB0C8A6ABC3A1A5BD9CA0B899 +9DB6979EB7989DB6989EB698A1B899A5BD9CA8C2A19FBA999CB7979DB897869C81C2C6C1 +F9F8F8EDEEEDEFEFEFEFEFEFF0F0F0EFEFEFEFEEEEEDEDEDEBECEBE9EAE9E7E7E8F4F3F3 +C1C6C2A7C7ABC0E3C1BBDBB9C1DDBBC9E5C5C8E7C7C2E4C5C2E5C5C5E8C8BCDFC19FC1A3 +AACCA9B0D5AE9BC097A8CBA4BDE2BBB4DBB5222222A2C19B9EB990A8C194AEC997ABC796 +A5BF92A4BF94AEC99CB1CB9FB4CCA5BBD4AEBDD9B1BEDBB3C1DDB7CEEBC7D0EFCEC6ECCD +B7E4C79FCEB491B59E99B096B6C8ABC5DABDB7CEB4A4B9A2A2B39EACBAA4BBC5AECFD8C1 +D6E2CCD7E4CEDBE7D1D5E0CAD5DFC8DCE7D2D9E6D2D5E3CF222222222222222222222222 +222222A2B29FA3AE9AB8BFAACDD6C0222222BAC9B5B8C8B4B8C5B1BCC4B1C5CDB9D1DCC8 +CBD6C3C8D1BDD6DFCBDBE7D3D9E6D3D1DFCCCDDDC9D3E6D1222222222222222222222222 +2C2D2B555B51BCCAB0CFDDC2CAD5BECDD7C2CDD7C3C9D6C2D0E0CBD0E2CCCEE2CBC8DFC7 +A7BDA3B3C3A7C7D2B6CAD4BACCD7BEC4D2B9C0CFB5BECEB4BBCAB0B5C4ABB6C4ACC2D1B9 +C0D3BAA8BEA2A2B799A5B89BA6B89CA7B69CADBAA2B2BEA7B2C0A9BFD1B8B6C9AFBDCCB5 +CAD6C0CAD6C1C8D4BFC7D2BDC2CEB8B7C3AEB1BEA9B8C7B1C7D8C1C8DAC2C5D6C0C7D6C2 +C2D0BDBFCEBABCCBB6C0CDB7C7D5BDCEDCC3C7D6BCBCCBB2B6C6ADBDD1B5AAC2A39FBA98 +A0BB97A6C19DA5BE9CA5B89CAEBCA4B1BFA8ADBEA6ABC0A4A4BF9CA3C099A7C59DADCBA4 +A9C6A1A4BD9CA0B59A9FB199A4B49DA9BBA2A9BFA29FB798A1B898A6BA9DA5B69F6F7F93 +7096C889ABD78DAFDA8DAFDA8DAFDA8DAFDA7893B7C0C4C8F9F8F8EDEEEDEFEFEFEFEFEF +F0F0F0EFEFEFEFEEEEEDEDEDEBECEBE9EAE9E7E7E8F4F3F3BABEC47A97BB8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA0000008DAFDA +8DAFDA8DAFDA8DAFDA0000008DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA0000000000000000000000000000008DAFDA8DAFDA8DAFDA +8DAFDA0000008DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA000000000000000000000000090B0E2C37447B98BE8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA8DAFDA +8DAFDA8DAFDA7B9FCF6E94C66F7F93ABB7AAB0BDAEB0BDADB1BDACAFBAA9AAB6A5A4B09F +A7B4A4A8B4A58B928A39393980808045454539393939393986868639393948312DB43E2F +EEC7C1F0CDC8D06F635C2B23393939777D75A4B39DA3B29CA4B29CABB7A0B9C5ACB1BFA4 +A8B79CA5B49B222222222222222222222222222222222222222222A2B09BA6B39DA5B39C +A1AF98A1B099A3B29AA5B39AA6B499A7B599A8B59AA8B59BA6B59AA4B399A4B39AA3B299 +A2B098A3B199A4B39BA4B39AA2B198A3B299A4B299A3B199A1B098A1AF98A0B0989FAF98 +9EAE979EAE96A0B098A0B098A1B098A1B198A2B199A2B199A1B098A1B099A0AF98A1AF99 +A1AF98A1B098A2B29AA6B59DA7B59F222222B4C2A8BAC6ABBFCBAFC3CEB2C4D0B2C6D1B2 +C6D2B2C6D3B4C5D4B4C4D3B5C3D2B4C1D0B4C1CFB3C3D0B4C5D1B5C7D4B6C8D4B6C6D2B3 +C8D4B5C9D5B6CAD6B6CAD6B7CED9BBD2DCBDD5DFC0D7E1C1D4DFBFD1DCBDD0DCBDCDDABA +C6D4B4C7D4B4CAD7B7CEDBBCCFDCBDCAD9B8C7D6B5C6D4B5C9D6BACBD7BBCCD8BCCBD8BB +C5D2B5C4D1B4CCD9BBD0DCBECEDCBCCCDAB9D0DFBDB6C8A59FB1929BAC949AAB9799AA97 +98A89599A99699A9979BAA979BA9969CAA969CAB969EAC989EAC999BA9979CAA989CAA98 +9CAA989CAA989CAB9A9BAA989BAB999BAB9A9BAB9B9BAB9A9DAC999EAC989DAC97A2AF9A +A7B39DA9B49EABB69EACB7A0ABB7A1A8B7A0A8BAA0B3C5AABFCFB6C4D4BDBBCAB7AAB9A8 +9CAD9C99AA989AAA979AAA9799A99798A89697A89597A89497A89498A89598A89699AA97 +99AA979AAB9897A7957B8C9E91B9E3B6D3F1BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2B9D6F2 +9EC9EE7FA3C31D3985001B8A1034A276AAEB6EB2F79DC9F2B3CADEADD5F890CAFF6EBDFF +78B9FAB2CEEBBBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2222222BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2222222BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2ACC5DE626D7935393C +2525262C2E304D545C8FA2B6BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2222222BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2B2CBE664707C35393C +2424252C2E3051596293A7BBBBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2 +BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2BBD6F2A1C4E98EB7E27B8C9EA0AA97A4AF9AA4B09A +A4B09BA3B09AA3B09AA4B19BA6B19BA6B19C8A9583C3C4C1F9F8F8EDEEEDEFEFEFEFEFEF +F0F0F0EFEFEFEFEEEEEDEDEDEBECEBE9EAE9E7E7E8F4F3F3BEC0BC95A289AFBEA0AFC09F +B0C3A0B1C7A1B8D1A9C4DDB6D0E6C4DAEED2DFF1DBE0F2E0E0F2E0E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F1E1222222E1F2E1E1F2E1E0F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1222222222222222222222222222222E1F2E1E1F2E1E1F2E1E1F2E1222222DFEFDF +DCEDDCDDEEDCE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E12222222222222222222222222E2F2E5E635EC8D7C8E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1DFDFEFDCDFEEDADEEDD8 +DEEDD7DEECD7DCEBD5DDEBD5DCEAD3D8E7CDC3D3B6B4C5A4B3C4A2B3C2A1B4C2A1B3C2A0 +B3C1A0B3C1A1B2C1A1B2C1A1B2C1A1B2C2A2B3C1A1B2C1A0B2C09FB3C0A0B3C1A0B4C2A1 +B3C2A2B2C2A3B0C0A2B0C0A3AFBFA2AFBFA2ADBEA1ABBCA0A8B99EA7B89CABBB9EAFBFA1 +B1C1A3B1C1A3B1C0A1B2C1A0B2C1A0B3C1A1B2C0A0B0BE9EADBD9DAEBE9FAFC1A1AEC2A1 +AEC29FAEC29EAEC29DAFC39FAFC39FB0C3A1B1C4A2AFC29FADC09DAFC2A0B0C3A2B0C2A1 +AFBF9EB1C09EB1C09FB1C19FB0C19FADBF9EAABC9CA8BB9CA7BB9BA7BA9AA8BA9BA9BC9D +A9BB9CAABC9CAABB9CAABA9DABBB9DABBC9CABBC9BABBD9CAEBF9FADC09FAFC1A0B1C2A1 +B1C3A2B2C3A2B3C4A1B4C4A1B3C59FB4C6A0B5C6A0B5C59FB4C49FB4C69FB5C5A1B4C49F +B4C49FB4C5A0B5C5A0B7C7A0B6C69FB3C49CB1C29BAEC09BADBD9BAFBF9DB1C19EB1C19C +B2C29DB2C39DB3C29CB2C19DB2C19EB0C09EADBC9CABBB9CA8B99AA6B799A5B799A5B69A +A4B79BA3B69AA4B79AA3B597A8BA9AB0C19EB3C29EB4C29DB4C29DB4C29EB4C19EB4C19F +B4C09FB3BF9FACB99DA5B298A1AF97A2B098A4B199A7B39AA8B49AA8B499A9B89BA8B99C +A7B99AA8BA9BAABA9CAABA9CAABB9DA9BB9CACBD9FACBD9FADBD9FABBC9CABBC9BAABB9A +ACBD9CAABB9CA9BA9CA8B99CA7B89CA5B79BA3B69AA2B599A1B499A1B398A2B598A4B79A +A5B89BA6B99BA6B99AA6B99AA6B89AA6B89BA7B89BA7B89AA6B99BA5B99AA5B99AA7BB9C +A8BC9DA7BB9BA8BB9BA8BA9AA8BB9AA7BB9AA6B999A6B799A5B69AA5B59BA5B49BA5B49A +A3B399A3B69BA4B79BA3B59AA4B69AA5B79BA6B79BA4B699A3B498A3B499A3B499A3B499 +A5B59AA4B699A4B69AA4B799A5B899A5B899A6B7998E9A81C3C5C0F9F8F8EDEEEDEFEFEF +EFEFEFF0F0F0EFEFEFEFEEEEEDEDEDEBECEBE9EAE9E7E7E8F4F3F3BEC0BC92A086AABA9C +ABBA9CAAB99AA8B899A4B598A0B298DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCD9DCDCA9C4D76987AC00226200257200287F6C93CBD0E6F699ADC6335489AAC8E6 +AED1F39EC9F4A9C3DEDBDBD9DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16981A0404040FFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA4B39DA2B19B +A1B09B90A08CCED2D1F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8 +F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8F7F7F8CCCFCE8999859DB19A9EB29B9CAF99 +B8BDA6A6A6A6F4F4F4F6F6F6FEFEFEBFBFBFFFFEFF7D706B9482789982779C83769F8272 +A3816EA079659D725D9B6D54927163FFFEFFBFBFBFF9F9F9F4F4F4F4F4F4A6A6A6A9C5AC +AFCBB0B0CBADB0CDADB7B7B4B7B7B4B7B7B4B7B7B49CAE969BAC949DB0979EB59A9FB99B +A3BD9EA4BE9E9FB9999DB7979DB6979EB7977B8B75E1E1E1EFEFEFEBECECEDEDEDEDEDED +EEEEEDEDEDEDECECECECEBEBEAEAEAE9E8E8E6E6E7EBEBEBDEDFDE8D9D87B6CCABBAD0AE +C2D7B3C6DBB8CBE2C2CEE9CBCCEACDC8E9CDB8DEC0ADD1B0C0E0BAC3E5BBBEE2B6C3E6B9 +C8EABEBBDEB5222222B1D4ABADCEA5A7C59BA8C196A5BD92A5BE94ABC598AFC999B5CEA0 +B6CDA4BBD3ACC3DBB7C2DBB9C6DEBCCDE3C1D4EBCBD2EDD1CEEDD2C5EBD0B4DDC2AFD1B4 +BCD2B5B8C9ADACBDA2A8B9A1BBCCB6CADBC6CADAC5D3E1CCD9E6D2D8E4CFD6E2CCD4E0CA +DAE6D1D0DCC7D2DDC8D1DDC8222222CDD9C5CEDAC5C9D8C2BACDB8A7BCA6B0C1ABC1CAB5 +C7CDB9222222D3E0CCCFDFCAC8D9C2D1E2CCD3E4CFD2E4CFCFDFCBC7D5C1D9E6D1D4E3CE +CEDDC9CADAC6CBDCC7CBDDC8222222ADC0A7B2C5A7C3D7B5BED0B1717A6B3E413BADB99F +B7BFA9C3CAB6C6CDBBCDD6C4CCD8C5C6D3BFCAD7C3CADBC5B4C7B0AEBDA3BBC6ACC6D1B9 +C1CDB6B9C4ACBCC6ADC3CCB2BDC5AABDC5ABBAC4ADC2D0BAB5C7B0A4B99FA6BA9EA9BDA0 +B2C4A9BACDB4AFC2AAAEBEA6B8C8AFC5D8BDC2D5BABFCEB6C2CEB7C2CFB7B7C4ADBAC6AD +BECDB4BDCDB5C3D3BCCADAC4CBD9C4CAD7C2C9D5C2C4D0BDC3D0BDC5D5C0C6D6C0C5D4BD +C0CCB6BCC6B1B7C0ABB5BEAAAEB9A4B8C7AFB4CAADA3BF9D9EBB97AAC7A1B3CEAAA8BFA0 +AEC0A6B1BEA8B1C0A9ADBFA6A4BB9BA6C19CABC7A0A9C5A0A6BF9EA0B69AA0B29BA1B39D +A1B29CA7B9A1A8BDA3A2B89BA5BA9CA9BBA0A5B39F6F7F936C93C57298C886AAD68BADD9 +8BADD98BADD96B819EE1E1E2EFEFEFEBECECEDEDEDEDEDEDEEEEEDEDEDEDECECECECEBEB +EAEAEAE9E8E8E6E6E7EBEBEBDDDEDE6C83A08BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD90000008BADD98BADD98BADD98BADD9000000 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +0000008BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD90000008BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +0000008BADD98BADD98AACD87F9EC64353681B222B8BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD9 +8BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD98BADD97B9FCF6C93C56C93C5 +6F7F939CA99A9EAE9B9EAF9C9FAF9C9EAE9A9EAF9A9FAF9B9FAF9A9FAE9B868E85404040 +4A47404D49404D49404D494071716F404040962B1AD65D46E8B0A2E8B3A6DF7C66B72D19 +433C3A787D75A5B29DA0AE99A3B19CA7B19EB0B9A7B5BFADA9B5A0A4B19BA2B09AA2B099 +A2B099222222A0AF98A0AF99A1AF99A2B09AA4B29BA4B29BA0AF98A1B099A3B29AA4B399 +A5B499A6B599A4B397A5B499A6B599A5B399A4B399A3B199A0B098A2B199A3B39AA3B299 +A2B198A4B29AA3B29AA2B199A1AF99A0AF99A0AF98A0AF979FAF979FAF98A0B098A0B098 +A1B098A3B299A4B29AA3B299A1B098A1B199A0B099A0AF98A1B099A1B098A2B299A4B39B +A4B39C222222B0BEA4B6C3A9B9C5ABC0CBB0C4CFB2C6D2B2C7D2B3C7D4B5C6D4B6C6D3B6 +C6D4B7C5D3B6C3D2B4C2CFB3C3D0B4C8D3B7C9D4B7C8D3B6C7D4B5C8D5B6C9D5B6CAD6B7 +CDD8BACFD9BDD1DBBED2DBBED3DCBED0D9BBD1DCBDCDD9B9CAD8B7CEDCBBCCD9B9CDDABA +D1DDBED2DEBECFDDBBCCDBB9C7D5B4C2CFB0BECBACC2D0B1CBD8B8C7D4B3C5D2B2CFDBBD +D2DEC0D3DFC0D5E2C2CCDBB9A8BA989EB0949CAD989BAC9799AA9699AA969CAC999CAC98 +9BAA969BA9959BAA969AAA969AAA9898A8969BAA989DAC9A9BAA979AA8969AA9979CAC99 +9CAC999BAB999AAB999CAD99A1B09BA3B29CA0AE999FAD99A4B19CA9B59FAAB7A0A5B29B +A5B49DABBCA3AEC1A6BDCEB5C6D5BFBDCCB8ACBCAAA0AF9F9BAA9999A9979AAA979AAA96 +98A89698A89698A89597A89497A89598A89699A9979AAB989AAB999BAC9999A8977B8C9E +8CB5E193BAE4B2D0EFB8D4F1B8D4F1B8D4F1B8D4F1B5D3F09CC3E06388B400226F002582 +0028916594D7CCE7FA95ADCB2D5594A5C9EDA8D2FB97CAFE94C0EDB6D2EEB8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1222222B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1222222B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1A9C2DB35393C6D7B8AA5BDD7B5D1EDADC7E28B9FB34C545C +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1222222B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F14C545C606C78A4BDD6B6D2EEACC6E08598AB474E56 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1B8D4F1 +B8D3F1A1C4E88CB5E18CB5E17B8C9EA0AA97A4AF99A4B09AA3AF9AA4B09AA3B09AA4B09B +A5B19BA5B19B7B8475E1E1E1EFEFEFEBECECEDEDEDEDEDEDEEEEEDEDEDEDECECECECEBEB +EAEAEAE9E8E8E6E6E7EBEBEBDEDEDE838F7AACC09DADC69DB8D4A8CAE4BED9EED2E0F2DD +E0F2E0E1F2E1E1F2E1E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F1E1DDEDDD222222DBEADB +DFEFDFE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E0E0F1E0DEEEDDDAEAD9DAEBDA +DEEFDDE0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1 +E0F1E0D1E0D17E867E474A47E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E0E1F2E0E0F2E1E0F1E0DFF0DDDFEFDBDFEFDADFEED9DDECD5DCEBD3 +DCEAD3DCEBD2D8E7CCC3D3B4B4C3A3B4C2A2B4C3A3B3C1A1B3C2A2B3C1A1B3C1A1B3C1A2 +B2C1A1B1C1A1B1C1A0B2C1A1B2C1A1B3C1A1B4C2A1B5C4A3B5C4A3B3C3A3B2C2A5B2C2A7 +B3C3A7B3C2A6B0C0A3AFBFA2AEBEA1ADBD9EACBC9CACBC9DADBD9FAFBEA1B0BFA1B1C1A0 +B3C1A0B3C1A1B0C0A0AFBFA0ADBEA0ADBEA0B0C0A2B1C3A3B2C4A2B3C5A0B1C39CAFC29A +B3C69FB5C8A2B4C7A2B3C6A1B3C5A0B2C4A0B3C5A2B3C5A2B1C19FB0C19EAEC19EAEC19F +B0C3A0B1C3A0B0C19FADBE9DADBE9DAEC09FACBE9DACBD9EADBE9EADBD9DAABC9CA9BC9B +A9BC9BAABC9BAABC9BA9BC9AADBF9DAFC29FB1C39FB2C4A0B4C5A0B6C7A2B4C4A0B6C4A1 +B6C5A1B6C6A1B7C7A1B5C6A0B4C5A0B4C6A0B5C6A0B5C5A0B5C5A0B5C4A0B6C5A1B7C5A1 +B7C4A0B5C39EB2C29DAEBF9CAEC09DAFC19EB0C19DB1C29CB2C29CB3C49EB3C49EB2C29E +B2C19FAFBF9EACBD9BA9BB9AA9BC9CABBF9DACBF9DABBE9DA9BC9CA9BA9AA9BA9AA8B898 +A9BA99AFC09DB2C29DB2C19CB3C29DB4C39FB3C29EB2C09DB1BF9DB0BE9EADBB9DA5B49A +9FB0979DAE979DAE979DAE969FB096A1B297A5B79AA8B99BA8BA9BAABA9CAAB99DAABA9D +AABB9DAABC9DABBC9DACBD9EADBD9EABBB9CAABB9BACBC9CACBD9DABBC9CAABB9CA8B99B +A7B99BA7BB9BA8BC9BA7BA9AA6B99BA5B79AA4B799A4B798A5B89AA7BA9BA7BA9BA6B99B +A5B89AA4B79BA4B79BA5B89BA5B89BA6BA9CA7BA9BA8BC9CA9BC9CA9BD9BA9BC9CA9BC9C +A8BB9AA8BB99A7B999A4B697A4B599A3B499A3B49AA3B399A3B599A3B79BA5B89CA3B699 +A3B599A2B498A2B399A0B2989FB1979EAF969EAE96A0AF97A2B299A5B59AA5B699A6B799 +A7B89AA8B899A9B8987F8874E1E1E1EFEFEFEBECECEDEDEDEDEDEDEEEEEDEDEDEDECECEC +ECEBEBEAEAEAE9E8E8E6E6E7EBEBEBDEDEDD818B76ABB99AAAB99AAAB999A9B999A9B899 +A8B699DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCCFD4D692B8DF5C89B7 +002B5D00306B0031746C91BEEBF4F96D89A9002D654C70929AB4C99CB4CCCDD1D4DEDEDC +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6981A06E5E43FFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA1B39DA0B19C9FB19A869783AAA7A2D1BEB0 +CDC0B6CBBFB6CCBEB5CBBDB3CBBCB2CBBCB1CBBCB1CBBCB2CBBDB2CBBDB3CBBDB3CBBDB4 +CBBEB5CDC0B8D1BFB2A8A7A27D8A799BAC979BAD979EB09AACB099A6A6A6F3F3F3F3F3F3 +F4F4F4BBBBBBFFFEFF817169FFFFFFFFFFFF8D7367B28C77BB8F75AC8068A5745BA06D51 +967667FFFEFFB8B8B8F3F3F3F3F3F3F3F3F3A6A6A6B5D3B5B3D2B4A8C2A5B1CAABB4CEAE +A4C0A0A1BB9F99B09897AA9598AA949DB097A0B89AA3BD9DA0BC9A9EBA989DB7979CB696 +9EB796A2BA997B8576EBEBEBE9E9E9E8E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E8E9E8 +E7E7E7E6E6E6E5E5E5E5E5E5E9E9E97A8072B9C7ABB6C6A8B2C4A2BBCCA8C3D3B0C7DBB9 +CEE6C4C8E7C5BDE2C08DA88E3B413A252524363A3484987BB9D9AC222222222222222222 +2222229FC19B9FBD989EB792566050292B28292B285B6453ABC298BACFA8C7DDBA222222 +7D8B793437332323234D524C97A896D1ECD1CEECD0C7E7CBA3BFA5303330A7BA9FC0D1B5 +CBD9C0CFDBC6D7E3D0DBE8D5D8E4D2DAE6D3D2DDC8D8E3CFDEEAD6CBD8C3CCD7C2D1DBC6 +222222CFDBC6D2DEC8D6E5CDD1E4CBCBE2CA222222B5C2ACC2C8B3222222CDD7C2CFDBC5 +CEDAC5777D733132312929295D625BC3D0BBDDEAD5D9E9D3D3E6D0C3D7C2C7DAC5BECFBA +222222BCCEB5C3D5B9C6D7BABACCABB6C9A8262625AFC2A6B5C6AE222222737A6F333432 +232323C4D3BFBAC8B460665E2A2B2A292A295C6358B7C6ACB3C2A9353734A1AD96BECCB0 +B5C1A77F8575C5D0B9C1CFBA95A391343632B2C3A88F9A883D3F3B2525253537347F897A +CDDCC3D5E5CBC5D6BE656D622E302D282927535A50ADBEA4BCCBB3C6D5BE22222280897D +343633232323BFCBB8BFC8B5CAD2BFCCD6C2C7D4C0C3D0BBBDCBB6B2C1ABAABBA3A9BBA2 +A4B79BADC1A3BDD4B5B7D1B2A0BB9BB3CEACBEDAB7AFCBAAA6BDA1A6B8A1A8B8A3AABBA3 +A8BFA0A9C3A0ABC6A2A5C09DA1B99AA1B69BA4B69FA2B59DA4BB9DAAC2A2A5BE9EA3B99B +A4B99BA9BEA0A3B69D6F7F936B91C46B91C46E93C67DA2D088ABD789ACD86D7E92EBEBEC +E9E9E9E8E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E8E9E8E7E7E7E6E6E6E5E5E5E5E5E5 +E9E9EA697A8E89ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD8000000 +4A5C740C0F1305070834415285A7D289ACD82129345A718D89ACD889ACD889ACD87998BF +0D111500000000000000000000000089ACD889ACD800000051668011151A0303041A2029 +6F8CAF89ACD889ACD885A7D136435508090C08090C36445685A7D189ACD889ACD8000000 +51668011151A0303041A20296F8CAF89ACD889ACD889ACD889ACD889ACD889ACD889ACD8 +89ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD800000089ACD889ACD889ACD8 +89ACD889ACD800000089ACD889ACD800000089ACD889ACD887AAD54051660B0E12050608 +2F3B4A82A3CD89ACD889ACD889ACD889ACD889ACD889ACD800000089ACD889ACD889ACD8 +89ACD885A7D104050689ACD889ACD80000004C60780F131801010189ACD885A7D1364355 +08090C08090C36445685A7D189ACD813181E728FB489ACD889ACD8566C8889ACD889ACD8 +728FB413181E89ACD8627B9A171D2403030411151A53698389ACD889ACD887AAD5405166 +0B0E120506082F3B4A82A3CD89ACD889ACD80000004C60780F131801010189ACD889ACD8 +89ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD889ACD8 +89ACD889ACD889ACD884A7D47498C96B91C46B91C46B91C46F7F939CB297A1B999A3BA9A +A2BA99A1B6979FB396A1B399A3B39CA3B29C8990856E5E43FA872CFC862CFC862CFC862C +AF7639444444B5351EE4B4AAEDCFC7EDD0C7E9C0B6CB5240583C34787D75A2B099A2AF99 +A5B29CA5B19CA5B19DA4B09DA5B29DA3B09AA1B099A1B098A1AF982222229FAE999FAF9A +9EAE985E655A2C2E2C2727264D524A9BA992A3B29AA5B39A2222226B746430322F232323 +A6B59A2222226F7769333532252525373A36858F7D727B6C3537332424243B3E398B9884 +A1B099A1B09A2222229FAE98A0AE982222226D76683133302424243B3D398A9682A2B198 +A1B098919E8A494D47282827252625454A4396A58FA2B19A222222222222222222222222 +B6C6AAB9C9ADB9C6AB61665A2B2B2A2B2C2A63685DC1CCB0C6D3B7C6D4B82222227B8373 +333431232323C5D1B5C6D2B5C6D3B6C7D4B7C7D3B5C7D3B5CAD5B8CBD5B9CDD7BACED9BA +CED8BACAD4B7CFD9BCCED8BBCCD8B9D2DDBED2DDBED4DEBFD4DFC0D4E0C0D3DFBFD4E0BF +D4E1C0D5E2C0CEDCB9CBD9B6CDDBB8D2DFBDD5E1C1D6E1C2D6E1C3D4DFC1D1DCBDD3E0BF +C4D4B1A4B5959BAD9399AB959BAC9899AA979DAD9A9EAE9C9BAB9899A99698A89698A896 +97A79597A79599A9979BAA989AAA9898A99598A9959BAB989CAC9A9CAB9A9BAB989FAD99 +A1AF9BA3B19DA1B09C9FAE99A1B099A6B59EA8B7A0A6B79DA7B99EACBEA3BACBB1C6D6BF +C2D0BEB1C0AFA0B0A09CAC9A9BAB979AA9959AAA959AAA9698A99598A89598A89599A995 +98A89599A8969AA9969DAD999EAF9A9DAF9A9BAB987B8C9E8AB4E08AB4E08DB6E1A4C6EA +B5D1F0B6D2F1B6D2F1AAC9EA86B8EA548AC2002C680031780032836592C8E9F4FA688AB0 +002E7146719A95B5CE92B3D4AAC7E7B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1 +B6D2F1B6D2F1B6D2F1B3CFED64707E2D2F322B2D2F738293B6D2F1B6D2F1222222B6D2F1 +363A3E9DB5CEB6D2F1B6D2F17F91A4B6D2F1B6D2F19DB5CE363A3EB6D2F1B1CCEA5C6774 +2A2C2D2A2C2D5D6874B1CCEAB6D2F1222222222222222222222222B6D2F1B6D2F1B6D2F1 +B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1 +5B66726F7E8EB6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B1CCEA5C6774 +2A2C2D2A2C2D5D6874B1CCEAB6D2F1B6D2F1B1CCEA5C67742A2C2D2A2C2D5D6874B1CCEA +B6D2F1B6D2F1B1CCE958626E28292A2F3235728191222222B6D2F1B6D2F1222222B6D2F1 +B6D2F1B4D0EE6875832E303327282A545E68AFC9E7B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1 +B6D2F1252627AFCAE8B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B4D0EE687583 +2E303327282A545E68AFC9E7B6D2F1B6D2F1A3BBD64F5761292A2B2627284B535CA9C3DF +B6D2F1B6D2F1222222748495323538232323B6D2F1B3CFED64707E2D2F322B2D2F738293 +B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1 +B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1B6D2F1ADCCEE96BDE58AB4E08AB4E08AB4E0 +7B8C9E9FAA96A4B09AA4B09AA3AF99A3AF9AA2AF99A3B09AA4B09AA4B0997B8076EBEBEB +E9E9E9E8E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E8E9E8E7E7E7E6E6E6E5E5E5E5E5E5 +E9E9E97A8573B3CEA4C4DFB7D7EED1E0F2DDE1F2E0E1F2E1E1F2E1E1F2E1E1F2E0222222 +939D93393B39252625464A46BDCABDE1F2E1E1F2E1222222E1F2E1E1F2E1DEEFDE7C847C +323332292A29636963D8E8D7E0F2E1E0F0E0222222CBDAC8D1DDCDA1A99F404240252625 +393B39959E95E0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222 +E1F2E1E1F2E1222222E1F2E1E1F2E1DEEFDE7B837B313331292929606660D2E2D0E0F1DF +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1DBEBDB272827 +E1F2E1E1F2E12222228C968C373937232323E1F2E1DBEBDB6D746D2C2D2C2C2D2C6E756E +DBEBDBE1F2E13C3E3CBFCDBEDFEEDADEECD897A092DBEAD1DBE9D1BDC8B43B3D3AD9E7CD +97A18D3A3D382525243436327A836FB3C1A1B2C1A1B1BF9F666D5E2E2F2C27282753584D +ACB99BB3C1A1B3C1A2222222747C6A323330232323B1C0A4AFBEA3AFBDA4ADBDA4ADBCA3 +ADBCA1ADBDA0A9BA9DA5B699A5B699A8BA9AADBF9EAFC19FB1C2A0B3C2A1B1C0A1AFBFA0 +AFC0A1AEBF9FAFC0A0B3C4A3B4C5A4B4C5A3B3C5A0B3C69EB2C79DB3C89FB4C8A1B4C7A2 +B4C6A2B4C5A1B3C5A0B3C5A0B3C4A0B0C29EB0C2A0B0C1A0AEBF9EABBD9BA9BC9AAABD9C +ABBF9EAABE9CA9BD9CA9BC9CAABC9CABBC9DADBE9EAEBF9FACBD9CAABB9BA9BB9BA9BC9B +ACBE9CAEC19FB0C29FB2C39FB5C6A1B6C7A2B6C5A1B5C49FB5C59FB5C5A0B6C6A0B6C6A0 +B4C6A0B4C5A0B6C6A2B8C6A3B7C6A3B6C5A1B5C5A0B5C4A0B4C39FB2C19EB0C09DAFC09D +AFC19DB0C19DB1C39EB2C39EB2C39EB1C39DB4C5A0B2C39FB0C19EAFC09FADBE9CAABD9B +ABBE9CAFC19EB1C29FB2C29FAFC09DAABB9AA6B897A8BB9AABBD9CAFC09EB2C29EB2C19D +B2C19DB3C29DB2C29DB2C19DB2C19EB1C09FAFBC9DA7B699A0B0969DAF969EB0979EB197 +9FB297A2B598A6B99AA9BA9BAABA9AAABA9BAAB99CA9BA9CAABB9CABBC9CACBD9CADBD9C +ACBC9CABBB9BABBB9BABBC9BABBC9BAABB9BAABA9CA8B99AA7B999A7BB99A8BC9AA9BC9B +A8BB9BA8BA9BA6B99AA5B898A6B999A6B99BA6B99CA6B89BA5B89BA4B79AA4B79BA4B69B +A6B89CA8B99CA9BA9BA9BA9BA9BC9BAABC9BABBC9CABBC9DAABB9BA9BA9BA8B99AA5B699 +A4B599A3B598A4B598A4B799A5B799A5B89AA5B89AA5B89AA4B79AA3B59AA2B39BA1B39A +A0B1999EAF979DAD969DAD969EAE96A1B097A3B399A4B499A5B599A6B598A6B5987B8274 +EBEBEBE9E9E9E8E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E8E9E8E7E7E7E6E6E6E5E5E5 +E5E5E5E9E9E9788071A9B999A9B999A9B999A9B898A9B699A8B599DEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCA6B1BB28547E5588BB2F5D890A417507427A7AA5D1 +F2F8FD88A6C1023868002F59093358365470CFD2D4DEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D16981A054504AFFFFFFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +FFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCA5B9A2A5BAA3A5BAA399AD976B6A58CC6E28CB6923CA6923CA6923CA6924 +CA6C28CB6F2ECB7130CB702ECB6F2ECB702ECB6F2DCB6E2BCB6C28CB6922CD6E28666554 +8D9D8999AB969AAC979AAD989FA993A6A6A6F2F2F2F2F2F2F2F2F2B5B5B5FFFEFF86746A +FFFFFFF6F6F5CCC8C4CE9668BB7B51A0603994512B934C256D4B39FFFEFFB5B5B5F2F2F2 +F2F2F2F2F2F2A6A6A6B7D1B0B1CFAEA9C5A6ABC3A5A4BB9BA0B8999DB49999AE979AAD97 +9CAF999EB49AA4BD9FA4C1A19FBC9B9DB9989CB7979DB6979FB798A2BA9B768670F4F4F4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +EFEFEF828E78ABBB9CB0C4A3B9D3AFACC9A4AEC8A4B5CBA7BBD1ADC6E1BEC5E4C32E312E +91A78FC8E7C2B4D0AD5B6656B7D2AAC2DCB5222222BDDFB9B9DEB9B2D8B4ACD1AC5D6B5A +474F4498AF8BA4BB97495045646D5CBDD0AAC4D7B32222225C645ABED3B8CDE3C6A1B09C +3F423ED3E9CCD4ECD0CFECD0606C60738373BFD8BBCADBC1CED8C0D1D8C4D8E1CEDAE5D2 +DAE7D3D6E1CED1DBC7DCE5D0D1DDC7CAD7C2D0DDC9D3E0CB222222CDD7C2D4DDC8D5DFC9 +D5E2C9D0E0C8222222C4D2BAC7D0B9222222D7E1CAD7E2CC7F857A535751C4D1BFCEDDCA +626860686D63DEE8D3DFEBD7D7E8D3C4D7C2BFD4BEB3C6AF222222BBCEB2B1C2A5AABB9E +A3B499697363484D45C1D0B6B6C4AD2222225A6159BDD0BBCADDC8CCDFC9656E634C514A +A0B49A99AD90494F46636B5EB4C6AA636A5F828B7BCAD8BEB0BDA7292A28B3C1ABB3C2AB +717B6D5B6157B8C2AB2E2F2D9BA294CEDBC5B9C3B0666A61D3DDC7CCDAC2727C6E484E47 +A4B9A0A7BEA15860555D655AB7C4AFD1DDC92222225C615ABFCFBBC9DCC4B7CAB4AABAA6 +B8BEACC7CCB9C9D2BEC7D3BFC1D0BABDD0B5B7CFAEBAD3B0BFD9B4BDD7B3B6CEACB0C7A8 +A9C0A3BCD3B5C4DEBDC1DEBBB6D7B3A3C3A19DB89BACC3A7AFC5A7A8C3A0A9C4A0A8C19F +A2B899A2B69CA8BBA2A7BCA0AFC9A5B2D0A4ACCAA0A1BC98A2B999A7BC9DA4B89B6F7F93 +6990C36990C36990C36990C36C92C5769BCB5D799BF4F4F4FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF657FA187AAD787AAD7 +87AAD787AAD787AAD787AAD787AAD787AAD787AAD700000028323F7B9BC47B9BC427313E +3E4F6387AAD7617B9B161B2386A9D587AAD787AAD7344253485B7387AAD700000087AAD7 +87AAD787AAD787AAD70000002E3A497998C081A3CE44566D1C232D87AAD787AAD73D4D61 +27313E7B9BC47B9BC4262F3C3D4D6287AAD787AAD70000002E3A497998C081A3CE44566D +1C232D87AAD787AAD787AAD787AAD787AAD787AAD787AAD787AAD787AAD787AAD787AAD7 +87AAD787AAD787AAD787AAD700000087AAD787AAD787AAD787AAD787AAD700000087AAD7 +87AAD700000087AAD787AAD745576E252E3A7897BF80A1CC33405138465987AAD787AAD7 +87AAD787AAD787AAD787AAD700000087AAD787AAD787AAD77C9CC5425369212A3587AAD7 +87AAD70000002E3A497C9CC587AAD787AAD73D4D6127313E7B9BC47B9BC4262F3C3D4D62 +87AAD73847594F647E87AAD77897BF07090B80A1CC87AAD74F637E39475A87AAD70B0D11 +5B739183A5D17796BE34425387AAD787AAD745576E252E3A7897BF80A1CC334051384659 +87AAD787AAD70000002E3A497C9CC587AAD787AAD787AAD787AAD787AAD787AAD787AAD7 +87AAD787AAD787AAD787AAD787AAD787AAD786A9D784A7D580A5D3799ECE7197C86A90C3 +6990C36990C36990C36990C36F7F93C2D4B6D3E4C3D4E6C5D1E3C3CFE2C1AABD9DA0B196 +A7B69FA4B29D868E8454504A976C3BA0703AA0703A9F6F3A695942484848AA3B24D25D3C +DD9378DE987CD76945C54127483C38787D75A4B29AA6B39BA7B49DA3B09AA3B19BA1B09A +A3B29CA3B29BA1B098A1B098A1B098222222A1AF99A1B099636A5F45494296A28D9EAA94 +52574F565C53A3B299A5B3992222224E544A9AA88EA5B599A6B5992222224C514995A38C +9CAA93646C5F2829284D524A95A18CA0AC96656D603F423DA1B099A0AF99222222A0AE99 +A0AF982222224D524A93A08B9AA891636B5E3D403BA1B099A0AF98373935818C7C9CAC96 +9AA9925960564F554DA1B199A4B39A222222B0C1A4BCCDAFBBCCAEBDCDAF6970634F544B +B4C0A5B5C1A550534B6D7365C5D2B6C5D2B7222222595D54B5C1A7C1CEB1C3CFB1C4D0B1 +C6D2B4C6D2B5C6D2B4C6D2B4C8D2B6C7D2B6CAD5B8CCD7B9CED9BACED9BBCBD6B9C9D3B6 +CFD9BAD1DBBCD3DCBED3DDBFD3DEBFD3DEBFD4DFC0D6E1C2D6E2C4D6E2C5D6E2C5D4E0C2 +D5E1C1D3E0BFD2DEBFD3DFC1D5E1C4D3DFC2D0DCBDD0DDBCD2E0BEBDCCAB9DAE8F9AAB93 +9BAB9899AA989AAA989DAC9A9BAA9999A99699A89598A89597A89497A89498A99599AA96 +9AAB9799AB969AAC979BAD989BAB989BAB989CAB999DAC989EAD9B9EAC9BA1B09EA0AF9B +A0AE99A5B49CA9B99FB0C2A6B4C7A9BACCAFC5D5BCC4D3BEB7C6B4A4B4A39CAC9A9BAA97 +9AAA9699A9949AAA959BAB9699A99598A79499A89599A99598A89598A89699AB979EAF9B +9FB29D9FB29C9CAE9B7B8C9E88B2DF88B2DF88B2DF88B2DF8CB5E099BEE6A3C5E980A4C9 +1E53884C8AC7275E9301438100448773A6DBF1F8FE83A7C7003A7300316302346129527B +A8C6E6B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0687685 +4A525BA3BDDAAAC5E3626E7CB3D0F0B3D0F0222222B3D0F05E6A7877889BB3D0F0A3BDDA +292B2CACC7E6B3D0F077889A5F6B79B3D0F064717F4C545EA7C1DEA6C0DD4B535C647280 +B3D0F0B3D0F0222222B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0 +B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0313337A4BEDBB3D0F0B3D0F0 +B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F064717F4C545EA7C1DEA6C0DD4B535C647280 +B3D0F0B3D0F064717F4C545EA7C1DEA6C0DD4B535C647280B3D0F0B3D0F064717F4E5761 +A7C2DFA7C2DF4E5760222222B3D0F0B3D0F0222222B3D0F0B3D0F06C7B8B49515AA3BDDA +ACC7E658636F5E6A77B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0474E56545F6A93AAC2 +AECAE9B3D0F0B3D0F0B3D0F0B3D0F0B3D0F06C7B8B49515AA3BDDAACC7E658636F5E6A77 +B3D0F0B3D0F0393E448EA3BBAECAE9AAC6E4616E7B56606CB3D0F0B3D0F0222222535D68 +A7C2DFB3D0F0B3D0F06876854A525BA3BDDAAAC5E3626E7CB3D0F0B3D0F0B3D0F0B3D0F0 +B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B3D0F0B1CFF0AECCEE +AAC9EC9FC2E994BAE488B2DF88B2DF88B2DF88B2DF88B2DF7B8C9E9FAA97A3B09AA2B09A +A2AF9AA2B09AA2AF9AA3B09AA3B09AA4B09A7D8675F4F4F4FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF95A889D7EDCDDFF1DC +E0F2DFE1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222636963CDDCCDD8E9D8838B83 +4A4D4AE1F2E1E1F2E1222222E1F2E1E1F2E1848C84565A56CCDBCCD8E8D86A706A717870 +E1F2E0E1F2E1222222C9D9C2CBD7BE2F302E939A8CC6D1C3B8C2B8656965CEDBCFD2DFD3 +D5E3D7D6E5DAD7E7DBD8E8DBDDEDDEE0F0E0E0F0E0E0F0E0E0F1E0E1F2E1E1F2E0E1F2E0 +E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1222222E1F2E1 +E1F2E1848C84565A56CCDBCBD8E8D86970696F766FDCECDADFF0DFE1F2E1E1F1E0E0F1E0 +E0F1E0222222E0F1E0E0F1DFE0F1E0D1E1D17F887F525651E1F2E1E1F2E1222222636963 +D1E1D1E1F2E1E1F2E1788078595E59D1E0D1D0DFD0585C57798179E1F2E1717871919B90 +DEEEDACAD7C42B2C2BD3E1CADBEAD18E96886F756BDBE8D030312F8A9380AEBDA0A3AF94 +5A6054B2C1A2B3C1A26C7464494D45A3B194ACBA9C585E525D6357B2C2A2B1C0A0222222 +53584DA8B599B5C3A5B2C0A2ACBB9FA9BA9FA8B9A0A8B89EA9B89EACBBA0ACBC9FACBC9F +A9BB9CABBE9CAFC09FB2C2A1B2C1A1B0BEA0AFBC9FB0BFA0B2C2A2AEBF9FAFC09FB2C3A3 +B5C5A6B5C5A5B3C3A2B2C49FB4C7A0B6C9A2B6C9A3B6C8A2B7C9A3B5C7A1B3C49EB4C69F +B5C79FB3C59FB2C3A0B2C2A0AFC09EA9BC9AA5B898A6BA9BAABF9FA9BE9EA8BD9CA8BD9C +A9BC9CA9BC9DABBD9DAEC1A0ACBF9DAABD9DA9BB9BA9BB9BAABC9BADBF9EB0C19FB2C39F +B5C5A1B6C6A1B6C5A1B5C4A0B5C49FB6C5A0B7C6A1B8C6A2B7C5A1B6C4A1B7C5A1B8C5A2 +B7C4A2B5C3A0B3C19EB3C19FB1BF9FAFBE9DADBD9DAFC09EB0C39DB2C59EB2C59EB4C59F +B4C5A1B3C4A0B3C4A0B3C4A1B0C1A0AEBF9EAEBF9DAFC09EB0C19EB2C19EB4C29EB3C29D +B1C29DAEC09CACBE9BAEC09CB1C19EB3C29EB3C29EB3C29DB2C19CB3C39DB3C29EB4C29E +B3C19EB3C09EB0BD9DA9B89AA1B2979EB1979EB197A1B498A4B79AA7B99AAABB9BABBB9B +ABBB9BABBB9DAABA9DA9B99BA9BA9AA9BA99ABBC9BADBD9CADBD9DABBA9BABB99AAAB999 +A9BA99A8B999A8B89AA8B99AA6B899A6B99AA7BA9AA8BB9AA8BA9AA7B999A7B899A7B999 +A8B99AA8B89BA7B79AA6B79AA5B69AA4B59BA4B59BA2B49BA3B49AA5B69AA7B89AA9BA9A +A9BB9AAABB9BABBB9BAABB9AABBB9BAABB9AAABB9BA9BA9AA6B899A4B697A3B698A4B798 +A5B898A5B899A5B899A5B79AA5B79BA4B69BA4B69BA3B59BA3B59BA2B39AA0B2999EB098 +9CAE969BAC949CAD959DAF979EAF97A0B097A0B097788571F4F4F4FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7E8A73A7B799 +A8B799A7B798A7B697A6B698A6B799DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDC8998A800244F6B88A6A0B6CD2B5F933477BB73AFEEE8F3FFB8CEE4144A7F002F5E +002A561A3C61C1C7CBDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16981A0515151FFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA3B69FA5B8A1 +A7BAA2A7BAA37C826DF48837FD964DFA944AFA9349FA9348FA9245FB9851FCA15FFCA160 +FC9851FB9145FA9042FA8B3AFA842FFB7A1DF475166F746297A89597AA959AAD989AAF99 +99A794A6A6A6F2F2F2F2F2F2F2F2F2B5B5B5FFFEFF6F5648FFFFFFFFFFFFFFFFFFA46132 +9B53279B512494471C96461A704B37FFFEFFB5B5B5F2F2F2F2F2F2F2F2F2A6A6A6A8BE9C +AAC4A4A9C6A8A1BEA0B7B7B4B7B7B4B7B7B4B7B7B4A0B299A2B49AA3B99CA7C3A4A4C4A4 +9CBD9D9CB9989CB7969CB6969EB7989AB396778B76E5E5E5B8B8B8B8B8B8B8B8B8B8B8B8 +B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8E5E5E5758D73A8C29EB2CBA4 +BDD9B0C0E0B7C0E1BAC2DEBAC0D8B5CBE3C0CCE6C4353834849480B2CBACAEC8A6AFC8A3 +B5CCA5B2C69F222222BCD0ABBBD1AEB8D0ADB0CAA730322F91A88BADCAA8ABCBA997B193 +30332FB0C6A1BCCDA9222222B9CAAFCEE2C5CFE3C6C9DCC04447418F9A87D6EACEB8CBB3 +333633CBE3C6CEE5CABECDB6C2C9B3D2D7C2D7DFCBDAE6D2D9E6D3CDD8C5D2DCC9D0DBC6 +CEDAC5D2DECAD3DFCBD5E2CE222222222222222222222222222222D0DEC5222222C7D6BB +C3CBB1222222D9E2C8D4DFC7383937BCC6B3DBE8D4DBEAD6BFCDBA313230D6DDC8D0D8C4 +C8D4C0C1D1BCB8CDB4BAD1B42222222222222222222222222222222C2D2C99A692AEB9A2 +B4BBA7222222C0C9B8DEEBD9D4E2D0C4D3C03233319BAA93ABC1A0A8BE9B96A88B31322F +BBC5AA9AA18F595C54C0C9B46F766B2E2F2D778274A8B9A24F544C7F8778B7BDA8343532 +888C81BFC8B7C8D2BFC7CEBBC4CDB8C2D1B7353834A3B69DB3C9ADC0D5BBB5C8B12F312F +BBC8B4D3DFCC222222BDC9B6CCDEC4CFE7C9C3E1C0ADCFAEA3BEA2AEBDA7C1C7B6B9C1AF +BDCAB4BFD0B5B8CEACB6CEA9BDD6AFB6CFA8B5CDA8B6CDAAB6CCACB4C9ABBED2B3C6DDBB +CAE4C0C6E5BFBEDEB9B8D7B3ADCAA8A7C29FABC3A0ADC4A1A1B798A4B89EAABCA3B0C3A6 +B1C8A3B2CEA0B0CEA1AECAA6A8C1A0A4BB9CA5B99D6F7F936990C36990C36990C36990C3 +6990C36990C34F6C92E5E5E5B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8 +B8B8B8B8B8B8B8B8B8B8B8B8E5E5E54F6C926990C36990C36990C36990C36990C36990C3 +6990C36990C36990C30000005A7CA76990C36990C35A7BA70C10156990C36990C3161E29 +445D7E6990C35A7BA70C1015658ABB6990C30000006990C36990C36990C36990C3000000 +6286B56990C36990C3658ABB0202036990C36990C30B0F145A7BA76990C36990C3597BA6 +0B0F156990C36990C30000006286B56990C36990C3658ABB0202036990C36990C36990C3 +6990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C3 +0000000000000000000000000000006990C30000006990C36990C30000006990C36990C3 +0D1218597AA56990C36990C36083B1090D126990C36990C36990C36990C36990C36990C3 +000000000000000000000000000000070A0D5778A26990C36990C30000005E81AF6990C3 +6990C36990C30B0F145A7BA76990C36990C3597BA60B0F156990C34964872431436990C3 +384D68090C104058776990C32331424965886990C30C10163D53705D80AE6990C36990C3 +6990C36990C30D1218597AA56990C36990C36083B1090D126990C36990C30000005E81AF +6990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C3 +6990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C36990C3 +6F7F93CFDAC6DAE7D1DCEAD4D4E3CCD7E7CDBCCEB399AB92A0B09AA4B19E858C83515151 +5552505151514E4E4E4C4C4C785741494949653F34D05132D8785ED87C61D85A3A833C2B +3F3F3F7B8077AEBDA3ACB99FA7B39AA4B298A7B69CA7B69CA5B49BA5B49BA2B199A0AF98 +A1B099222222A2B098A2B098323431909B86A4B299A2B19895A28D2E2F2DA4B299A5B499 +22222297A58CA4B398A5B499A6B5992222229EAA92A6B399A2B0979CA99322222299A691 +A5B29BA4B29B9EAC95242423A1B099A0AF992222229FAE98A0AF9822222297A58FA0AF98 +A1B0989DAA93242423A2B099A1AF99A1B099A1B19AA1B199A0B1999CAB942C2E2CA0B199 +A4B49A222222B8C7ABBFCFB2C0D0B3BFCFB2333532ADBBA2C3D2B4C5D4B4AFBB9F333431 +C3D0B2C2D0B3222222B2BEA4C4D0B3C3CFB2C2CEB0C4CFB2C7D2B6C7D3B6C3CFB0C3CEB0 +C6D0B4C5D0B5C6D0B4C8D3B6CAD4B8CBD5BACCD7BBCCD6BACDD7BACED7BBCFD7BCD0D9BD +D0DABED2DDC0D4DEC2D5DFC3D4DFC4D5E0C4D5E0C4D6E1C4D7E2C3D6E2C3D6E2C4D7E2C5 +D8E3C7D6E3C5D5E1C2D4E0C0D2DFBECFDDBAB1C19E9CAD909BAC969AAA9899A9979BAA98 +9CAB999AA99799A89598A89597A89598A9969BAC989EAE999EAE9A9EAE9AA1B19CA2B39D +9FAF9A9CAC979DAC98A0AE9A9FAE9A9DAB989EAE9B9DAD9AA0B099A7B79DAEBFA2B7C9AC +C1D2B6C8D8BFC6D5C0BCCBB9ACBBAA9FAF9D9AAB9799AA9699A99698A99598A9969BAB97 +9AA99799A89599A89599A89598A89598A8969AAB99A0B19EA2B5A1A3B6A29FB19F7B8C9E +87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF527FAD0025596689AD9CB7D222619F +2979CB69B1FDE6F3FFB4CFE90B4C8B003069002B600D386976A1CF87B2DF87B2DF87B2DF +87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF2D3236789CC387B2DF87B2DF87B2DF +87B2DF87B2DF22222287B2DF6886A544536287B2DF586F872A2E315F799587B2DF455362 +6886A687B2DF2D3136789DC487B2DF87B2DF789CC32C313687B2DF87B2DF22222287B2DF +87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF +87B2DF87B2DF87B2DF87B2DF23242486B0DD87B2DF87B2DF87B2DF222222222222222222 +87B2DF87B2DF2D3136789DC487B2DF87B2DF789CC32C313687B2DF87B2DF2D3136789DC4 +87B2DF87B2DF789CC32C313687B2DF87B2DF2C31367A9FC687B2DF87B2DF799EC5222222 +87B2DF87B2DF22222287B2DF87B2DF2E3439779CC287B2DF87B2DF7EA5CE2B2F3387B2DF +87B2DF87B2DF87B2DF87B2DF87B2DF81A9D352667B333A422527282E33384E607480A8D2 +87B2DF87B2DF2E3439779CC287B2DF87B2DF7EA5CE2B2F3387B2DF87B2DF87B2DF87B2DF +87B2DF87B2DF83ACD72A2E3187B2DF87B2DF2222227CA3CB87B2DF87B2DF87B2DF2D3236 +789CC387B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF +87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF87B2DF +87B2DF87B2DF87B2DF87B2DF7B8C9E9EAB98A1AF9BA2B09BA2B09AA2B19BA3B19BA3B19B +A4B19BA5B19B7D8575E5E5E5B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8 +B8B8B8B8B8B8B8B8B8B8B8B8E5E5E5A8B5A3E1F2DFE1F2E0E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1222222D3E3D3E1F2E1E1F2E1D9EAD9252525E1F2E1E1F2E1222222 +E1F2E1E1F2E1393B39C4D2C4E1F2E1E1F2E1D0DFD0333533E1F2E1E1F2E1222222D1E1CC +C4D1B8353633818677B4BCA5C5CFB6C4CEB8C6D0BBC7D1BDC6D1C1C4D0C3C5D3C6C8D6C9 +CDDBCCD3E1D2D3E0D3D0DED1D4E2D5DBEADCDEEDDEDEEEDEDEEFDF222222222222222222 +222222222222E1F2E1222222E1F2E1E1F2E1222222E1F2E1E1F2E1393B39C4D2C4E1F2E1 +E1F2E1D0DFD0333533E1F2E1E0F1E0E0F1E0DEEEDDD8E8D5D5E4D1222222222222222222 +2222222222222F302FC0CEC0E1F2E1E1F2E1222222CDDCCDE1F2E1E1F2E1E1F2E1363836 +C5D4C5E1F2E1E1F2E1C4D3C4363836E1F2E1A5B1A5626862DEEEDA878F84313331959E90 +DDEDD661665EA2AD9CDAE8D0373836848C7CA6B298B4C2A3B3C1A3B2C1A2B2C1A1343632 +9DA98DB2C1A0B2C1A2A5B3982F302EB1C1A1B1C1A1222222A4B295B4C3A4B4C4A5B3C2A4 +B0C0A3ACBCA0ACBDA0ABBB9EA8B79BA5B59AA7B89BA8B99CAABB9EADBD9FB0BFA1B2C1A2 +B2C0A2AEBCA0A8B79CABBCA1B0C1A5B0C0A4AEBEA1B1C1A1B3C3A3B5C5A5B3C3A2B0C19E +B1C29EB4C5A0B6C6A2B6C6A2B7C7A2B7C8A2B6C8A1B3C69EB4C79FB5C8A0B2C59FB4C6A1 +B3C5A0B0C39EACC09BA7BB99A5BA99A9BE9FABBFA0AABE9EAABD9EABBF9FAFC3A1B2C5A3 +B4C5A5B2C3A4AFC0A1ABBD9DA8BA99A7BA98AFC19EB2C39FB5C4A0B6C5A1B4C3A0B4C2A0 +B4C29FB6C3A0B7C4A1B7C5A2B6C3A0B5C39FB5C39FB5C29FB4C19EB3C09EB0BE9DADBC9C +ACBB9DABBB9DADBE9DAFC19CB1C39BB4C59DB5C69FB5C5A1B5C5A2B4C4A1B4C5A1B3C4A1 +B2C2A1AEBE9DAFC09EB1C19EB3C19DB4C29DB4C29DB5C39EB2C19DB0C09BB1C19CB2C19D +B3C29EB4C39FB4C39EB3C39DB3C39DB4C49EB4C29EB4C19EB3C19DB3C19EB0BF9CACBC9C +A5B79AA2B59AA1B498A5B79AA8BA9BABBA9AABBA9AACBC9CABBB9CAABA9CAABA9BAABA9A +A9BA99A8B898A8B899AABA9BABBA9CABBA9DAAB99BA8B89AA7B899A6B899A6B899A5B899 +A6B89AA7BA9BA7BA9AA7BA9AA6B998A6B999A6B999A7B99AA8B99BA7B79AA5B699A3B498 +A2B399A2B39AA2B39BA1B29A9FB0989EAF96A0B297A5B599A8B89BA9BA9CAABA9CA9BA9A +A9B999AABB9AABBB9AAABB9AA8BA99A7B899A4B799A2B597A4B698A5B799A6B699A6B79A +A5B79AA5B799A4B799A3B599A2B59AA3B59BA3B59AA2B4999FB1979BAE959AAF959BB096 +9CB1969FB2979FB198778572E5E5E5B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8 +B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8E5E5E57E8973A8B79AA7B699A5B598A4B697A5B799 +A6B79ADEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDC8998AA0024534E6C90 +A9BDD3567CA83881D1408BDCA0C8F3E7EFF8325C8D00295D0027571A3A64C1C7CCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6981A0565656FFFFFFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFFFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA5B7A1A4B69FA4B69EA5B69F7D8470E58842 +FCA05FF79D5CF79C5AF79752F8B17CFDE2CFFCDFC9FEF2E8FDE3D0F8A86EF6954FF68F44 +F68939FA812AE57521717A6797AB9698AE989BB19A9DB39B96A592A6A6A6F3F3F3F3F3F3 +F3F3F3B6B6B6FFFEFF4F322566544A7F71696B554A74381884421C93492094461B984519 +724A37FFFEFFB6B6B6F3F3F3F3F3F3F3F3F3A6A6A6A5BB9DAEC9A9A8C7A89FC0A09EBD9D +9CB6989AB2969DB297A1B397A5B699A7BA9AA8BF9EA7C2A19EBB9A9CB8979DB7969EB798 +9EB497A5BA9D889983E5E5E57F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F80 +7F7F807F7F807F7F807F7F80E5E5E588A98DB6DCB7A9C5A1B3C7A0B9CBA3BBCFA7B9CBA6 +B6C5A4C4D4B2CCDFBDA8BA9F535B512C2F2C3438348A9D83B0C7A2ABBD99222222B2C3A3 +ACBC9EAABA9DA4B495242424BFD6B6C5E2C1B2D1B0BDDDBB242424B1CCA9B7CDA9222222 +C9DABCC3D4B9C3D3B9C8D9C08E98873B3D39C6D1B75B6157838E7CD5E9CDCFE4CABBCBB4 +C2C9B4D2D7C3D7E0CB222222222222222222D2DCC9D6E0CDD7E1CFC9D3C1CAD2C0D4DDCA +222222D2DDC8CFD9C5CBD3BFC9CFB8CCD5BC222222CFE1C4CDDCBD222222D7E1C5CDD9BE +242524222222222222222222222222232323C8D1BBC1CBB6BBCAB3B9CDB4BED5B9C8DFC1 +222222A5B79EAEBFA8C6D8C0ACBEA76B7368474B46BACAB5BCC9B6222222C8CDBDD4DCCC +C0CCBAB1BEA9242424B6C7ADABBFA2AABDA0A8B89D242423B5BAA3BBC0AC353633BDCBB5 +3D403C8F998B40443FA3B69D313330A3B19AAEB8A29DA1925759532F2F2E373936889384 +B3C3ABB8CAAE242424222222222222222222222222232323C2CDBBD5E0CE222222C9D8C1 +CFE2C6D4ECCCCEEBC8CCEDC9C3E6C3A8C6A79BB098A3B09DAFBDA6AFC1A3AFC6A2AEC49F +B4CAA4B5CCA7B8CFAABBD2ADB8CEAAABBF9EB5C8A9BACBAEBBCEAEC0D5B3C3DAB7C7E1BD +BDDBB7ABC8A5A5BE9CA8C09DA4BA99A5B99FAABDA4ACBFA4B1C6A4B5CEA4B9D4ABB2CFA8 +AAC7A2A3BD9CA6BA9E6F7F936B91C46B91C46B91C46B91C46B91C46B91C4506D93E5E5E5 +7F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F80 +E5E5E5506D936B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C4000000 +6A8FC26B91C46B91C4698FC10202036B91C46B91C44A648710161E6A8FC22533443D5370 +6B91C46B91C40000006B91C46B91C46B91C46B91C40000006B91C46B91C46B91C46B91C4 +0000006B91C46B91C40102026A8FC26B91C46B91C4698FC10202036B91C46B91C4000000 +6B91C46B91C46B91C46B91C40000006B91C46B91C46B91C46B91C46B91C46B91C4000000 +0000000000006B91C46B91C46B91C46B91C46B91C46B91C40000006B91C46B91C46B91C4 +6B91C46B91C40000006B91C46B91C40000006B91C46B91C4020203000000000000000000 +0000000001016B91C46B91C46B91C46B91C46B91C46B91C40000006B91C46B91C46B91C4 +6487B73649631C26336B91C46B91C40000006B91C46B91C46B91C46B91C40102026A8FC2 +6B91C46B91C4698FC10202036B91C4668ABB0D11176B91C4131A234C668A18212D6B91C4 +0D1117668BBC6B91C455739B202C3B080B0F0E131A4B65896B91C46B91C4020203000000 +0000000000000000000001016B91C46B91C40000006B91C46B91C46B91C46B91C46B91C4 +6B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C4 +6B91C46B91C46B91C46B91C46B91C46B91C46B91C46B91C46F7F93C5CCBFD7E2D0D7E4D1 +D3E1CDCEDDC7CEDEC5A2B39A9BAB95A2B09D868D8356565694613F9A613B6252474A4A4A +8E5D3C4747474646465A3F3693442E96452D6D3E303D3D3D3E3E3E7B7F77BDC9B2B0BDA6 +A0AC95A6B29AADB9A0B0BBA0B0BCA1AAB89EA3B299A0B098A0B098222222A2B198A4B198 +242423222222222222222222222222232323A4B19AA6B39B222222A6B59BA5B49AA5B39A +A6B399222222A8B49AA7B39AA4B198A2B098222222A2B098A5B29AA4B29AA2B199222222 +A0AF989FAE982222229FAE97A0AF982222229FAE97A0AF98A0AF98A0AF98222222A2B19A +A1AF9985907E40443E282928222222222222232323A2B29CA4B39C222222B7C5ACC0CFB5 +C4D3B9C2D0B5242424C5D2B8C7D6B9C7D5B6C5D3B3242424BECCADC3D0B2222222C2CFB1 +C3CEB2C4CFB3C0CCB0C1CEB1C4D1B4C4D2B4C3D1B1C3CFB0C4D0B4BDC8ADC2CDB2C5D0B4 +C7D2B6C9D4B8C9D3B8CAD5BAC6D0B5C7D1B7CAD3B8CCD5BACDD7BCCFDABFD1DBBFD2DCC0 +D3DEC2D4DEC2D4DEC3D4E0C3D4E0C3D5E0C4D5E0C4D6E1C4D7E2C6D7E2C5D6E2C4D5E1C1 +D4E0BFD4E1BEC8D8B3A6B6959CAC929AAB969AA9969BAA989DAC9A9CAB989BAA9798A895 +98A89599A9969DAC9AA2B19FA1B19D9FAF9B9FAF9C9EAF9A9FAF9A9FAF9BA0AF9BA2AF9D +A2AE9C9FAC99A1B09D9FB09AA4B49BB0C1A5B2C3A6BCCDB1C9D9C1C6D6C1BBCBB9ACBBAB +A0AF9F9BAB9898A99698A89597A79597A89698A9969BAB9999A99799A99798A99698A996 +99A89599A8969AAA989FB09DA3B4A1A5B7A4A2B2A17B8C9E8AB4E08AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E05581B100255D496D98A5BDD84F7DB22C83E3338DEF99C9FDE5EFFA +2B5D98002A680028620E376D78A3D18AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E024242589B2DD8AB4E08AB4E08AB4E08AB4E08AB4E02222228AB4E0 +86AED72E33388AB4E0343C446B89A839434D8AB4E02E333885ADD78AB4E024242588B2DD +8AB4E08AB4E089B2DD2324258AB4E08AB4E02222228AB4E08AB4E08AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E02222222222222222228AB4E08AB4E08AB4E08AB4E08AB4E08AB4E0 +2C30347FA5CC8AB4E08AB4E08AB4E08AB4E08AB4E02222228AB4E08AB4E024242588B2DD +8AB4E08AB4E089B2DD2324258AB4E08AB4E024242588B2DD8AB4E08AB4E089B2DD232425 +8AB4E08AB4E024242588B2DD8AB4E08AB4E089B2DD2222228AB4E08AB4E02222228AB4E0 +8AB4E02324252222222222222222222222222323238AB4E08AB4E08AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E08AB4E089B3DF799DC24B5C6D3E49558AB4E08AB4E0232425222222 +2222222222222222222323238AB4E08AB4E07393B53A444F27292B222222222222232323 +8AB4E08AB4E02222228AB4E08AB4E08AB4E08AB4E024242589B2DD8AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E0 +8AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E08AB4E0 +7B8C9E9FAC98A4B19CA5B19BA4B09AA4B19AA5B29BA5B29BA5B19AA6B19B7D8574E5E5E5 +7F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F80 +E5E5E5A9B5A8E1F2E1E1F2E1E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222 +E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1222222E1F2E1E1F2E1252525222222 +222222222222222222232323E1F2E1E1F2E1222222DEEEDDC5D4BEA1AA9653564E2E2E2C +3738348F9683C1CBAFC3CCB1C3CDB3C3CFB5C4D1B8C7D3BB222222222222222222CEDAC8 +C6D1C1C7D1C4C8D3C8C7D3C9C7D3CB222222D8E6D9DEEEDEE0F1E0E1F2E1E1F2E1222222 +E1F2E1E1F2E1222222E1F2E1E1F2E1252525222222222222222222222222232323E1F2E1 +E1F2E1E1F2E0E1F2E0DFEFDDD8E7D1222222CEDDC5D6E4CED9E6D2C9D4C27A81784E524E +D2E0D1D5E3D4222222D8E7D8E0F0E0E1F2E1E0F2E1252525DEEFDEE1F2E1E1F2E1DEEFDD +252525E1F2E1D8E9D8383A38DFEFDD434643A7B3A54D504CDDECD8383A37D3E2CDDBEAD3 +B3BDAA585C542E2F2C35373386917CB3C2A4B3C2A4242424222222222222222222222222 +232323B3C2A2B3C2A0222222B2C2A0B4C4A3B7C7A8B7C6AAB3C2A6B0BEA2AEBCA0ABBA9E +ABB99FAAB99EA9B99DA7B79CA8B89DA8B79DA9B79DABBA9DADBDA0ABBDA0A7B89DA7B89F +AABAA4AFBFA9B0C0A7B1C1A2B2C1A1B3C3A1B3C4A2B2C3A1AEBF9DB0C09DB1C1A0B3C3A2 +B3C3A1B4C5A0B5C7A0B5C7A0B5C6A0B6C8A1B6C9A2B5C8A1B4C7A0B5C7A0B3C69FB0C39D +A9BD9AA9BC9DABBD9FABBC9FA9BB9DAABC9FADBFA1B0C2A1B3C3A2B4C4A4B2C2A4AEBF9F +ADBF9DADC19DB0C19DB0C09CB1C09EB0C09EAEBE9DAEBE9CAEBE9CB1BF9CB2C09CB3C19D +B2C19DB2C09DB2C09EAFBE9CADBC9CACBA9CAABA9CA8BA9CA9BC9DACBD9DAEBF9CB0C19B +B3C39DB4C39EB5C49FB6C5A1B6C5A1B5C5A2B5C5A1B4C4A1B3C2A1B2C19FB1C19FB0C19E +B2C29DB3C29DB3C29EB2C19DB3C19EB2C19DB2C19CB3C19DB4C29FB5C3A0B5C3A0B4C29E +B4C29FB4C19EB4C19EB5C19EB4C19EB4C19EB2C09DAEBE9CAABA9AA8B99AA6B799A8B99A +AABB9CABBB9BAABB9BAABA9BABBB9CAABB9BA9BB9AA9BB99A8BA99A7B899A7B89AA7B79A +A7B79BA7B69BA7B69AA5B599A4B599A4B698A6B999A7BA99A8BA99A9BC9BA9BC9BA8BB9A +A8BB99A8BB9AA8BB9AA8BB9AA8BB9AA7B99AA4B699A1B2989FB1989EB0989FB0989EAF98 +9CAD969BAC969AAC969CAD96A0B198A4B59AA7B89CA9B99CAABA9BABBB9BAABA9AAABA99 +A9BA9AA9B99BA7B89AA4B699A4B699A3B598A4B499A5B59AA4B699A4B799A4B699A4B69A +A4B69AA4B69AA4B69AA4B69AA3B59AA0B2989FB297A0B397A1B497A2B597A3B5987A8773 +E5E5E57F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F807F7F80 +7F7F80E5E5E57C8873A7B79BA7B79BA4B699A4B79AA6B89BA7B89BDEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCA6B1BD0728562D4D778CA6C286A4C7194A85053B7A +3D84CBCFE2F4627C9B002357002455324E73D1D4D5DEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D1677F9F555555FFFFFFA2C4EF +A2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EFA2C4EF +FFFFFF6393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCA7B9A3A8BAA4A5B6A0A4B39E818A77D67F3CFE9D57F79954F79650F7934B +FDE8D8FFFFFFFBCAA7FCDAC0FFFFFFFAC6A0F58432F5802CF5771DFA700CD56916788574 +9AB09A9BB29A9EB59DA2B89E97A893A6A6A6F4F4F4F4F4F4F4F4F4B7B7B7FFFEFF44291B +592F1A65341A6C361975371687401894451B9A4518A34717714731FFFEFFB7B7B7F4F4F4 +F4F4F4F4F4F4A6A6A6A9C1A6ACC9AAA8C8A8A0BF9F9BB8989AB3969BB2969CB1969FB297 +A2B497A4B496A2B4969FB5969DB7979DB8979EB897A1B798A3B799A8B99C7E8B76E5E5E5 +7F7F80B8B8B8B8B8B8B8B8B87F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80 +E5E5E590AA8FACCCABA2BC9CA7BB99A9BB96A8B893A8B593B4BD9DBFC5A7C6D0B0C9D7B7 +B8CCAEBDD6B88EA28B30322FA9BE9CAEB898222222BACCAEA5B99F9FB096A5B596333531 +B5CAADBEDAB9BBD8B6A9BFA2323431C0D4B1C7DBB6222222C5D4B2C5D0B4CDD7BEC7D5BD +BCCAB43C3E3A64675B363734C8D4B9CADABEC0D0B5B6C3A9C4CCB3CED6C0DBE6D1D2DECA +CCD6C4D6E0CCD1DCC8D3DECAD0DCC8C7D2BED0D9C6D5DDCA222222CED9C7C4CDBABFC4B0 +CACFBAC7CBB5222222DDEACED1E0C0222222D4E1C2C5D5B5363734B3C1A7B5C2A9B8C4AB +BBC9AEB9C6ABB8C5ABBBCDB1B8CDB1BBD1B5C7E0C2A9C2A5222222A8BBA4BDCFB9BACCB6 +B2C2ACB8C5AF272727C2D0B9BECDB8222222B4C1AEB7C5B2ADBEAAACBEA7323431A2B39D +A5BA9FA1B39A919F8B313230ADB5A1B5B9A64D4E4993998C444642B2C1AC3E413C7F8B79 +454942ADBCA3B0BDA6B8C1ACC5C9B8CCD3C19EA798313331C0D2B9C0D2B7333532BCC4B1 +D2DBC6BFC9B5C2CDB8C1CCB9B8C1B0C6CEBD222222CBD8C3CDDDC4D3E5C8D3E8C9D1E9C8 +BCD8B6A4C3A1A2C3A29CBB9A9EB996AAC39CA9C199ADC3A0ACC0A0AABE9FA7BB9CADC1A1 +B3C5A6A9BB9ABACDADC4D9B9B8CDAEB8CBAEB5C8AABBCEB0BDD1B2AEC3A4ABC09FA9BE9C +B4CAA8B1C5A8AABEA3A7BB9EAEC5A3B5CDA7BCD7AFB6D5ABAFCEA5B0CAA6ABBFA26F7F93 +6C93C56C93C56C93C56C93C56C93C56C93C5516E94E5E5E57F7F80B8B8B8B8B8B8B8B8B8 +7F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80E5E5E5516E946C93C56C93C5 +6C93C56C93C56C93C56C93C56C93C56C93C56C93C50000005D7EA96C93C56C93C55D7EA9 +0B10156C93C56C93C56C92C4131A2332435A0E12196990C06C93C56C93C50000006C93C5 +6C93C56C93C56C93C50000006C93C56C93C56C93C56C93C50000006C93C56C93C50B0F14 +5D7EA96C93C56C93C55C7DA80B0F146C93C56C93C50000006C93C56C93C56C93C56C93C5 +0000006C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C5 +6C93C56C93C56C93C56C93C50000006C93C56C93C56C93C56C93C56C93C50000006C93C5 +6C93C50000006C93C56C93C50C11166183B06C93C56C93C56C93C56C93C56C93C56C93C5 +6C93C56C93C56C93C56C93C50000006C93C56C93C56C93C56C93C5698FC00305066C93C5 +6C93C50000006C93C56C93C56C93C56C93C50B0F145D7EA96C93C56C93C55C7DA80B0F14 +6C93C56C93C51B2531486183171F2A6C93C5171F2A4B65881C25326C93C56C93C56C93C5 +6C93C56C92C44D688C0A0E136C93C56C93C50C11166183B06C93C56C93C56C93C56C93C5 +6C93C56C93C50000006C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C5 +6C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C56C93C5 +6C93C56C93C56C93C56C93C56F7F93B7BFB3C8D2C3D0DCCAD2E0CBD1DFC9D2E1C9ABBCA4 +99A993A0B09B848C81555555965F3A885B3D524B474848488D5B3A454545444444424242 +4141413F3F3F3E3E3E3C3C3C3B3B3B7D8179B6C2ADBAC7B39DAC96A1AF98A4AF99ADB59E +B7BFA7ACB79EA1AF979FB0989FB099222222A2B198A3B19831323098A38EA2B198A0AF97 +A0AF98A2B099A4B19AA7B39A222222A8B69BA7B59AA5B399A4B398222222A5B399A5B39A +A3B299A2B097222222A3B298A4B299A3B198A2B098222222A1AF999FAD982222229FAE98 +9FAE982222229FAD989FAE999FAF98A0B098222222A2B199A0B0982F312E7781719BAA92 +A0B09799A892222222A2B29BA5B49D222222ABB9A3BBC9B2C3D2B9C3D3B8333431ACB9A1 +C8D6B9C9D7B9AFBAA0333531C4D1B0C6D3B3222222C5D1B2C5D1B2C6D2B2C5D0B1C4D0B1 +C4D0B2C5D2B5C5D2B4C4D0B1C4D0B2BCC8ABBECAADC4D0B2C6D1B4C5D0B4C4D0B4C7D3B7 +C5D1B5C4D0B3C8D4B7CAD4B8CCD6BACCD6BBCDD8BCCED9BDD0DBC0D1DBC1D2DCC1D2DDC0 +D4DFC2D4DFC3D5DFC4D5DFC3D6E1C5D7E1C5D7E1C4D7E2C3D8E4C4D7E3C2D6E3C1BECEAA +A0B1919BAD9499AA959BAA969EAC999EAD9A9BAA9799A99699A9969BAC989BAB989FAF9D +A1B19FA1B29EA0B29D9FB09BA3B29DA6B4A0A5B39FA4B09DA2AE9C9FAC9BA3B29FA5B5A0 +A8B9A1B1C2A7BACBAFC7D6BDCAD9C4BFCFBDAEBEAEA0AFA09AAA9997A79698A89698A896 +98A89698A89698A8969AAA989AAA9899AA9798A99799A99799A99699A99699AA979DAE9C +A2B5A2A6BAA5A6B8A57B8C9E8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E16A93C3 +042860274E8087A7C881A5CF104B92003D883186DCCBE2F85D7DA20024620025601C467C +84AEDB8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E12D3237 +7C9FC48CB5E18CB5E18CB5E18CB5E18CB5E12222228CB5E18CB5E13C46516883A039414B +8CB5E139414B6C88A63D47528CB5E18CB5E12D31367DA0C68CB5E18CB5E17C9FC42D3136 +8CB5E18CB5E12222228CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E1 +8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E1495869596E858CB5E18CB5E1 +8CB5E18CB5E18CB5E12222228CB5E18CB5E12D31367DA0C68CB5E18CB5E17C9FC42D3136 +8CB5E18CB5E12D31367DA0C68CB5E18CB5E17C9FC42D31368CB5E18CB5E12D31367EA2C8 +8CB5E18CB5E17DA0C62222228CB5E18CB5E12222228CB5E18CB5E12E333881A6CD8CB5E1 +8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E1 +8CB5E18CB5E188AFD92425268CB5E18CB5E12E333881A6CD8CB5E18CB5E18CB5E18CB5E1 +8CB5E18CB5E12D31366883A086ACD68BB4E086ADD72222228CB5E18CB5E12222228CB5E1 +8CB5E18CB5E18CB5E12D32377C9FC48CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E1 +8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E1 +8CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E18CB5E17B8C9EA4AE98A8B39CA7B29B +A6B19AA7B19AA8B39BA8B29BA6B19AA7B39B7E8775E5E5E57F7F80B8B8B8B8B8B8B8B8B8 +7F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80E5E5E5A9B5A9E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1 +222222E1F2E1E1F2E1222222E1F2E1E1F2E1383A38CDDCCDE1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1222222E1F2E0CDDECCB8C6B1BAC5AEBBC4AC8F978431322FBFC9ACBEC8AC +BFC9AEC1CDB1C2CFB3C5D1B5C7D2B8C4D0B9C8D4BECAD7C1C1CDB7BCC8B2BCC8B3BDC8B4 +C0CAB7222222C9D4C2D1DDCDD3E1D1D8E7D7DDEDDD222222E1F1E1E1F2E0222222E1F2E1 +E1F2E1383A38CDDCCCE1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0 +E0F0DE222222DBEAD0D8E7CBD6E4CACEDDC2C2D1B7272827C8D8BECEDEC4222222CDDCC4 +D5E3CFDDEBD9D9E8D7353635BDC9BCD9E7D8DCE9DAC0CCBF353735DBE9DADEECDC515551 +9FA99D4A4E4AE0EFDD4B4E4AA6AFA3525550DEEBD8DFECD7DCE9D3D7E3CCD0DDC3929B87 +30312EB3C1A5B2C1A4323431A4B198B3C1A3B3C1A2B2C1A2B3C1A2B3C1A1B3C2A1222222 +B3C2A0B2C1A0B3C2A4B5C4A8B4C3A7B2C1A4AEBDA1A9B99EA6B69CA5B69BA6B89CA8BB9E +A6B89CA4B59BA2B299A2B399A4B69CAABDA0A9BC9EA5B99CA4B79DAABCA4AFC1A8B1C0A5 +B2C1A2B3C1A1B3C2A2B3C3A2B2C2A0B0C19FAFBF9EB0C0A0B1C1A0B1C29FB3C49FB4C59F +B4C5A0B3C5A0B5C7A1B6C7A1B6C7A1B6C7A1B5C7A0B4C6A0B2C49FB0C29FAEC09FACBE9F +A9BC9DA9BD9EAABE9FADBFA0B0C0A1B4C3A4B4C3A4B1C1A2B0BFA0B1C1A0B0C19FAEBE9C +ADBE9CACBE9DACBE9DABBD9CABBD9CADBD9BAEBD9BAEBD9BAFBE9CAEBD9CAEBC9CACBB9D +A9B89CA5B699A5B799A6BA9CA8BC9DACBF9EAFC09EB2C29FB4C3A0B5C3A1B6C3A1B6C4A1 +B5C4A0B6C5A1B6C6A3B6C4A3B5C3A2B4C2A1B4C2A0B3C3A0B4C4A1B4C4A0B4C3A0B5C39F +B5C39FB4C29FB4C29EB3C29EB4C29FB3C29FB4C29FB2C19EB3C19FB3C09EB2BF9DB2C09C +B2C09CB3C19EB1BF9CB0BF9CABBB9AA9B999A9B99AAABA9BAABB9BABBC9BACBC9CABBC9B +AABC9BA9BA99A9BA99AABC9AAABB9AA8B99BA7B89BA6B69BA5B59AA5B49AA3B398A2B497 +A3B698A5B898A7BA99AABC9AAABC9AAABC9AAABC9BAABC9BA9BB9BAABB9BAABB9BAABB9B +A9BB9BA9BA9CA8B99BA6B79B9FB1989BAE969BAD979AAC979AAB9699AA9599AB9599AA95 +9AAB969CAD97A1B299A6B69AA8B89BAABA9BA9BA9AA9BA9AAABA9CA9BA9DA8B99CA7B89A +A6B799A4B699A4B699A2B498A2B599A3B499A3B59AA4B69AA4B699A5B799A5B89AA4B79A +A4B599A2B398A0B197A1B298A4B599A5B599A5B6987B8872E5E5E57F7F80B8B8B8B8B8B8 +B8B8B87F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80E5E5E57B8873A7B89B +A7B89BA7B99BA7B99BA7B89AA8B99BDEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCCED2D4324C720B2B5A5D7CA08BACD0547AA8082F6501306C45658E405B80002256 +08489B5880B1DADBDADEDEDCDEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D15B7FAE676868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA1B39DA6B6A0 +A6B5A0A5B39D889280C67739FF9B52F7944CF7A061FAC096FCD0B0FCD2B5F68D42F8A76C +FAC49CFABC8FF57E29F46B08F36906FB6800C8651680937F9FB69DA0B79EA2B79DA4B69D +98AA92A6A6A6F5F5F5F5F5F5F5F5F58E8E8EFDFCFF44291B4D33264F35274F3526523527 +5B3C2D5C3C2C5E3B2C5E3C2C714731FFFEFF8E8E8EF5F5F5F5F5F5F5F5F5A6A6A6A7C1A5 +AECBADA7C6A99CBC9EB7B7B4B7B7B4B7B7B4B7B7B49BB2969DB2969DB0949FB297A0B69A +9DB6989EB7989FB797A1B798A1B497A1B397768570E5E5E57F7F807F7F807F7F807F7F80 +5455565455565455565455567F7F807F7F807F7F807F7F80E5E5E57E8E78A1B69AA1B499 +A1B497A1B596A2B596A6B497ADB699B8BDA0BFC3A656584EA8B398C5D9BA8799812D2F2C +AFC8A6B1C1A02B2C2AA7B098ADBFA39EB094AEC09F6D7667525A50ACC7A8B3D0B24A5149 +5F665AAEB89AB1BC9A222222BCC9A5B9C4A5B9C1A8B6C0A8B1BFA67F8A762222227F8773 +BCC8A8B9C7A7B5C5A4B9C6A4C9D1B3DAE2C9D4DFCBC3CDBACACFBDD2D7C4D7DECAD4DDC8 +D1DCC6CED9C4CAD4C0CBD3C0222222BDC9B6B1BBA9B8BEACC5C8B6C5C6B3222222D0D5BB +CFD7BA222222CAD9BABED1B1737E6D4E544B9FB299B7CCAF9BAB9253594FBFD1B3C5DBBC +B6CDAEC0D7B9C2DDBDB4D4B3222222AFC8ACBAD0B6B4CAB0AABBA3727A6D41433FC7D1BB +B9C3AE222222C3CEBAC0CFBBB4C5AFB2C4AB636C5F4A50479AAE929EB2984A4F485F675D +A4B79FACBBA56D726830312F737A6EAABBA46C786831332F6C7464B0BFA3B4C3A9555A52 +999F8FB9BBA9999C8E2F302ED4E2CAC3D3BB6F766A50524DACB2A1B7C3AFA3B09E575D55 +B7C6B1C2CEBA222222BFC9B6C4D0BCC4D1BABBCAB0C7D8BBBFD5B4C4DFBACAEBC3C2E4BB +AED0A6A7C499ABC19CADBFA1B2C2A8BDCFB4B1C5AAAABDA2ACBDA1AABA9BBBCBA9C0D3B0 +B1C5A5AFC3A5B7CBADB8CBADADC1A2A7BB9CA6BA9AABBD9CBCCDAEBACBADB3C6A9BCD1B3 +B9D0AFB5CEABC0D9B5BCD7B2B0CAA5AEC5A2ABBDA06F7F936E94C66E94C66E94C66E94C6 +6E94C66E94C6526F94E5E5E57F7F807F7F807F7F807F7F80545556545556545556545556 +7F7F807F7F807F7F807F7F80E5E5E5526F946E94C66E94C66E94C66E94C66E94C66E94C6 +6E94C66E94C66E94C6000000212D3C6588B66588B6212C3B32445B6E94C66E94C66E94C6 +486282000000435B796E94C66E94C66E94C607090C5D7DA86E94C66E94C66E94C6000000 +6E94C66E94C66E94C66E94C60000006E94C66E94C6314258202C3A6587B56587B51F2A38 +3142596E94C66E94C60000006E94C66E94C66E94C66E94C60000006E94C66E94C66E94C6 +6E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C6 +0000006E94C66E94C66E94C66E94C66E94C60000006E94C66E94C60000006E94C66E94C6 +394D67202B395F80AB6C92C35B7AA32632446E94C66E94C66E94C66E94C66E94C66E94C6 +0000006E94C66E94C66E94C6688BBA394D66141B246E94C66E94C60000006E94C66E94C6 +6E94C66E94C6314258202C3A6587B56587B51F2A383142596E94C66E94C63B4F6A0C1015 +3F55716E94C63F54710C10163B506A6E94C66E94C62633445C7CA56B91C14E688C090C10 +6E94C66E94C6394D67202B395F80AB6C92C35B7AA32632446E94C66E94C60000006E94C6 +6E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C6 +6E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C66E94C6 +6F7F93A9B3A5C1C9B9D0DAC7D3DECBD3DFCBCBDAC5A4B4A098A8949DAC98879383686868 +5959595757575656565555559365465353535151515050504F4F4F4E4E4E4D4D4D4C4C4C +5B5B5B868D81AAB4A2BEC9B7A9B8A49CAB979FAD98A3AF9AADB8A2A4B09A9FAD979FAE99 +9FAE99222222A1B098A2B099656C60474B45919D8A9EAC978A95834D524AA4B199A6B29A +222222A8B59BA7B59BA4B49AA3B29A222222A2B298A2B299A3B299A2B098222222A5B29A +A4B29AA3B199A2B198222222A1AF98A0AF98222222A0AF999FAD982222229FAD999EAD99 +9FAE99A1B09A222222A1B199A0B0982B2C2B7B85759FAD97919E8A4D524A222222A1B199 +A2B29B2A2B2A95A28FB2C1ABBDCCB6C2D2BB6A726652564EB8C6ABBBC7AC51554C6C7364 +C8D6B5C9D7B6222222C7D3B3C8D3B3C8D3B4C7D2B3C6D3B4C4D1B2C5D2B4C7D3B5C3D0B0 +C2CEAFC1CEAFC2CEAFC5D1B1C6D1B3C6D1B4C6D1B5C6D2B4C6D2B5C6D2B5C8D4B7C8D5B8 +CAD6BACAD5BAC9D4B9CAD5BACCD6BBCDD7BDD0DABFD1DBC0D3DEC3D3DEC3D4DFC3D4DFC2 +D5DFC2D5DFC2D5DFC2D5E0C3D7E2C5D8E3C6D8E3C6D3DFC0B7C7A49DAE919AAB949AAA95 +9DAB98A0AE9B9EAD999CAC989CAC999AAB9899AA979DAD9BA1B29FA2B39FA3B49FA2B39E +A4B29FA8B5A1A8B3A0A5AF9CA3AD9CA2AE9DA1AF9EA4B4A2A7B9A3B1C2AAC0D0B8CBD9C4 +C5D3C2B4C2B3A3B1A29AAA9998A99796A79597A79598A89599A89698A89699A9969AA997 +9BAA9899A99799A99799AA9799AA9698A99699AA979BAD9AA4B6A3ABBDA8ABBAA87B8C9E +8EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E284AEDB1D457B052C64577DA885ADD8 +4D7BB20130710031793F66973B5C88002361004AAD3A77BD8CB5E08EB7E28EB7E28EB7E2 +8EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E2566A7F404B5782A7CD87AED6516376 +8EB7E28EB7E22222228EB7E28EB7E25C72892D31366078908EB7E26077902E32375C7289 +8EB7E28EB7E2526477424E5A85AAD285AAD2404C585265788EB7E28EB7E2292B2E7DA0C4 +8EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E2 +8EB7E28EB7E28EB7E28EB7E281A5CB2D3236586D8280A3C98DB5DF89B0D96F8DAC222222 +8EB7E28EB7E2526477424E5A85AAD285AAD2404C585265788EB7E28EB7E2526477424E5A +85AAD285AAD2404C585265788EB7E28EB7E252657844505E86ACD386ACD3434F5C222222 +8EB7E28EB7E22222228EB7E28EB7E25A6F86414D5A80A3C88DB5DF7B9DC04654638EB7E2 +8EB7E28EB7E28EB7E28EB7E28EB7E23D47526984A184A9D18CB5DF82A6CC5061743D4651 +8EB7E28EB7E25A6F86414D5A80A3C88DB5DF7B9DC04654638EB7E28EB7E22A2D306D89A7 +8BB3DD80A4C94654632222228EB7E28EB7E22222228EB7E28EB7E28EB7E28EB7E2566A7F +404B5782A7CD87AED65163768EB7E28EB7E28EB7E22222228EB7E28EB7E28EB7E2222222 +8EB7E28EB7E28EB7E22222228EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E28EB7E2 +8EB7E28EB7E28EB7E28EB7E27B8C9EA9B39AACB69CA9B59BA7B39AA6B29AA6B29BA7B39C +A6B39CA8B59C7F8976E5E5E57F7F807F7F807F7F807F7F80545556545556545556545556 +7F7F807F7F807F7F807F7F80E5E5E5A9B5A9E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1222222 +E1F2E1E1F2E1858E85595E59C7D6C7DEEFDEBFCDBF636963E1F2E1E1F2E1222222E1F2E0 +DAEBD9555B549DA894B5BFA68C94812E2E2CBDC7AABAC4A8BBC6A8BFCBACC0CDAEC1CDB1 +C2CDB3C0CBB2C0CAB3C2CCB4BFCBB2BDC9AFBCC8ADBAC7ABBBC7AB222222BDC9AFC9D5BC +D4E0C9D7E3CFDAE6D4222222D4E1D4D6E4D7222222DEEDDEE0F0E0858E85595E59C7D6C6 +DEEFDDBFCDBF636963E1F2E1E1F2E1E1F1E1DFEFDEDFEFDDDFEEDB222222DDEAD2DFEBD3 +E0ECD3D3DFC6808878444640D7E5C5D5E3C3222222D0DEBFD6E4C8DAE6D0D9E5D171766E +545752B9C2B6B9C2B750524F6A6E6AC1CAC0C5CDC27C817A343533838982CBD5C9858A82 +35363580857ED2DACBD6DECD61645DBBC1B0D2DAC49BA2912E2E2CB0BFA4B0C0A26C7564 +4C50479FAC92B1BFA099A58B53584DB3C1A2B3C1A1222222B3C1A0B3C2A0B4C2A1B4C3A4 +B4C3A4B2C2A2B2C2A3AABC9FA6B99CA6B99CAABD9FACC0A0ABBD9FA4B69A9EB1979EB097 +A1B499A7B99DACBFA1ADC0A2ACC0A2A9BCA1ADBFA6B1C1A7B1C0A3B2C1A1B1C09FB2C19F +B2C2A0B2C1A0B0C09FAFBE9EB1C09FB2C1A0B4C3A1B4C4A1B5C6A2B5C5A1B4C4A0B4C4A0 +B4C5A0B5C6A1B5C5A0B5C6A1B5C6A1B4C4A0B2C29FAEC09EACC09EA9BE9DAABF9EABBE9E +ADBF9FAFBFA0B0C0A0B0BF9FAEBE9FAFBFA1AFBFA1ACBC9EACBB9CACBC9DAEBE9FAEBD9F +ADBD9CADBE9CACBD9BABBC9BABBC9CABBC9CAAB99CA9B89BA8B89AA6B89BA8BC9DABC09F +B0C2A1B1C3A0B3C39FB4C39FB6C4A0B6C5A1B5C4A0B5C4A0B5C4A1B6C5A2B6C5A2B6C5A1 +B6C4A1B5C3A1B5C3A0B5C3A1B5C4A1B5C3A1B5C3A1B6C4A1B6C4A1B5C39FB4C39FB4C39F +B5C4A0B4C3A1B3C2A0B2C19FB3C1A0B3C09FB3C09DB1BF9CB2BF9CB2C09DB0BE9CAFBE9D +ADBC9CAABA9BAAB99CAABA9CABBB9CACBC9CACBC9BACBD9CABBC9BABBB9CAABA9CACBB9C +ACBB9DA9B99CA7B79CA5B59BA4B49AA3B398A0B297A0B397A2B798A7BA99AABB9AABBC9B +ABBC9BABBC9BAABC9BABBD9BAABC9BA9BB9BAABB9CA9BC9BA9BB9BAABB9CA9BB9DA8BA9C +A4B69A9CAE969AAB9599AB9699AA9699AB9699AB9699AC9699AB9699AB969BAC979EAE98 +A3B39AA7B79CA8B89BA9B99BA9BA9CAABA9DA9BA9BA8BA9AA8BA99A7BA9AA5B899A3B699 +A1B498A1B298A2B49AA4B59AA5B699A5B79AA5B799A4B699A4B499A2B2999FB098A0B098 +A2B298A4B399A6B5987C8872E5E5E57F7F807F7F807F7F807F7F80545556545556545556 +5455567F7F807F7F807F7F807F7F80E5E5E57C8973A7B89AA8B99BA8B99BA9BA9BA8B99A +A8B99BDEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC919FB00A3163 +22578B4E77A378A2D15686BA10478100387300447F0159A41C76E372A4DCD8D9D8DEDEDC +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6393D1597FB05F7EA6607FA6607FA65F7EA6454D574545454848483E40435F7DA5607FA6 +607FA6607FA6597DAB6393D16393D16393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA1B39DA3B5A0A4B59FA3B39E8E9C89B87036 +FF9A4EF69047F7A162FFFFFFFFFAF7F68433F25F00F25F00FAC39AFFFFFFFABA8BF36400 +F36A06FE6A00BA651C8E9F8AA4B79CA4B59CA3B29BA3AF999AAB94A6A6A6F6F6F6F6F6F6 +F6F6F64E4E4E4E4E4EFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFF4E4E4E4E4E4EF6F6F6F6F6F6F6F6F6A6A6A6B1CBAEA9C8A9A4C3A799B89B9AB59A +9AB3979AB3969AB2959AB0959AAD939DAE95A6B99FA4BC9F9DB7999EB8999EB6979FB698 +9EB6989DB698798E78E5E5E57F7F80B8B8B8B8B8B8B8B8B87F7F80FFFFFFFFFFFF7F7F80 +B8B8B8B8B8B8B8B8B87F7F80E5E5E57F8D77A5BA9D9FB4999CAF95A0B196A6B79BAABA9F +A9B79CAEB99EB0B89C8186733B3D38242424393E3882957DABC5A2B2C8A66B7262282928 +222222A6B697BDCFADC7DDBC5F695C2A2B2A2A2B2A545F5598AD97A5B49CAAB69A222222 +B2C19FB5C6A6B1C4A7A9BFA5A6BAA1778471353833AABF9EB3C7A5B8CDA9B4CAA5B6C7A3 +C6D2B1CBD6BBBECAB3C2CEB9BFC6B2CED4C1CFD6C3C9D1BECAD3C0C6CFBBC4CEBAC3CDB8 +222222C8D8C2C1D4BEB2C5AFB1BEAAB6BCA6222222C6CAAFCED6B9222222C2D1B3BED0B0 +BDCFB17984743639352525253A3E3886927CC9DCBDB9D0B0B1C7A9BFD4B6C1D8B8C0DAB8 +222222222222222222222222292A294D524B99A38EADB59EAEB89F222222B6C1A9AFBDA5 +AEBFA5AABFA2A3B99C555E51292A282A2B295E655AB5C8AFB7CEB3AEC5AA8D9E89242424 +A0B39AA6BEA29DB69B2424238D9E85ABBB9EB4C5A985917F373A352424233C3D399AA18E +CFDCC1C5D5BCAEBEA76F756A35363425252540423F929B8DC6D1BDC4CDB9222222C7D3C0 +BECBB7B3C2ADB2C0A8B8C5ACBFCDB2C4D4B7C1D5B5B6CEA9AAC59CA9C399ACC19EAEBDA2 +B7C2ACC1CDB7B6C4ADADBDA4AFC0A6AEC0A1B1C3A0B5CAA4B4CAA4B6CEA9BFD4B2B9CDAC +C5D8B9BCD1B2AFC3A4ADC1A0BBCDADAFC1A2B0C3A5C3D9B9BED6B6B2CAA9BCD3B4B5CDAD +AFC8A6B2C9A7B4C8AC6F7F936F95C76F95C76F95C76F95C76F95C76F95C7537095E5E5E5 +7F7F80B8B8B8B8B8B8B8B8B87F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80 +E5E5E55370956F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C7000000 +3C506B0A0D1104060829384A6C90C16F95C76F95C76F95C74A648510161D6D93C46F95C7 +6F95C76F95C7394D670507090000006F95C76F95C70000006F95C76F95C76F95C76F95C7 +0000006F95C76F95C76B90C02B394C06080A06080A2B394C6B90C06F95C76F95C7000000 +6F95C76F95C76F95C76F95C70000006F95C76F95C76F95C76F95C76F95C76F95C76F95C7 +6F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C70000006F95C76F95C76F95C7 +6F95C76F95C70000006F95C76F95C70000006F95C76F95C76E94C53A4E690D1218020304 +131A224962836F95C76F95C76F95C76F95C76F95C76F95C7000000000000000000000000 +0506091F29375E7EA96F95C76F95C70000006F95C76F95C76F95C76F95C76B90C02B394C +06080A06080A2B394C6B90C06F95C76F95C75A79A20202036689B76F95C76588B6020203 +5B7AA26F95C76F95C749628211171E020203131922506C906F95C76F95C76E94C53A4E69 +0D1218020304131A224962836F95C76F95C70000006F95C76F95C76F95C76F95C76F95C7 +6F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C7 +6F95C76F95C76F95C76F95C76F95C76F95C76F95C76F95C76F7F93A3AE9DB7C2B0C1CBB9 +C6D0BECCD8C5B8C6B39EAE9A9AAC9699AB959DAE98889585849081828E80838D81828C80 +4E514D454545484848414140808B7F828C80828B80868F828D9587A8B39FA4AE9DABB6A6 +AEBCAB99A8979AAA979EAD99A3B09C9FAD989EAD979EAE989FAE99222222A0AF98A1B099 +A0AE99646B60313331242424373A36767F71A3B19AA6B29B222222A8B59BA6B49AA4B399 +A4B39A222222A3B29AA2B299A2B298A2B198222222A5B19BA4B19BA3B19AA2B199222222 +A0AF98A0AF98222222A1AF99A0AE992222229EAD999EAE99A0AE9AA1AF99222222A0AF98 +A0AF977984743334312424243133306B7366222222A0B199A3B29C656D61282928222222 +B4C1AEBAC8B5BECCB861675E2A2B2A2A2B2961675CC5D2B5CCDBBBCCDAB9222222C9D6B6 +C8D5B5C9D5B6C8D4B5C7D4B5C5D3B3C5D2B2C5D2B2C3D0B0C0CEAEC1CEAEC4D1B1C5D2B2 +C5D2B2C7D2B4C7D3B4C6D2B2C7D2B2C8D4B5C7D4B6C5D2B5C6D3B6C7D4B8C8D4B8C8D4B8 +C9D4B9CBD6BBCDD8BDCFDABFD0DCC0D2DEC1D3DFC1D2DEBFD3DEBFD4DEC1D3DEC1D4DEC2 +D5DFC3D6E0C4D6E0C4D8E3C5D1DFBDABBD9B9BAE919BAC959BAB989DAC989FAE9AA0AF9B +9FAF9B9EAE9B9BAC999EAF9BA2B2A0A5B5A3A5B5A3A3B4A1A1B19DA3B19DA4B09DA2AE9B +A0AC9B9EAC9B9CAC9B9FAF9EA8B9A4B6C6B0C4D2C0C5D3C3B4C2B5A2B1A49BAA9C98A896 +97A79597A79597A79597A89597A89698A89699A99798A99799AA9799A99799A9969AA996 +9AAA9699AA979AAC989DAE9AA8B8A4B3C2B0AFBDAD7B8C9E90B8E390B8E390B8E390B8E3 +90B8E390B8E390B8E390B8E35E87B806306E1959974778AD71A3DC4E87C607498E003A81 +00468D005CB60D79FC549CE98DB5DF90B8E390B8E390B8E390B8E390B8E390B8E390B8E3 +90B8E390B8E390B8E38EB5E05263762A2D302A2C2F5F758D90B8E390B8E322222290B8E3 +90B8E37B9BBE23242587ACD390B8E387ABD22324257B9CBF90B8E390B8E38CB3DC4C5C6C +27292C27292C4C5C6C8CB3DC90B8E390B8E35B6F8627292B22222290B8E390B8E390B8E3 +90B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E3 +90B8E383A6CC4C5C6C2E32362324252A2D30434F5C728FAF90B8E390B8E38CB3DC4C5C6C +27292C27292C4C5C6C8CB3DC90B8E390B8E38CB3DC4C5C6C27292C27292C4C5C6C8CB3DC +90B8E390B8E38BB2DB4A58682627292B2F335B708624252590B8E390B8E322222290B8E3 +90B8E38FB7E15C718730343A242525353C436B85A290B8E390B8E390B8E390B8E390B8E3 +90B8E37491B145515F2A2C2F2424252E32374C5C6C86AAD290B8E390B8E38FB7E15C7187 +30343A242525353C436B85A290B8E390B8E36E89A730363B2424252F3439617891222222 +90B8E390B8E322222290B8E390B8E390B8E390B8E38EB5E05263762A2D302A2C2F5F758D +90B8E390B8E390B8E322222290B8E390B8E390B8E322222290B8E390B8E390B8E3222222 +90B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E390B8E3 +7B8C9EACB59CADB99EA9B69DA8B69EA6B49CA6B49CA7B49DA8B69DA8B89D7F8D76E5E5E5 +7F7F80B8B8B8B8B8B8B8B8B87F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B87F7F80 +E5E5E5A9B5A9E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1222222 +E1F2E1E1F2E1E1F2E1E1F2E1222222E1F2E1E1F2E1222222E1F2E1E1F2E1DFF0DF868F86 +393B39252625434643A0ABA0E1F2E1E1F2E1222222E1F2E1E0F1E0909A8E383A37242424 +3B3C388D9481B9C1A7B8C1A7BAC3A8BDC8AABFC9ABBEC8ACBCC7ACB9C4AAB7C2A8BAC5AB +BAC5ABBBC6ACBBC6ACBBC6AABAC6A8222222BAC6A8BCC6AAC1CBB3C3CCB8C5CEBC222222 +C6D1BFC3CEBE222222C6D1C5CBD7CCCEDBD0818882393A39252625424543A0ABA0E1F2E1 +E1F2E0E0F1DFDDECD9D9E6D1DAE6D02222222222222222222222222A2B2A575A53C2CBB5 +E0EAD0DFE8CE222222D9E2C6D8E1C8D9E0CBD8DFCBCCD2C162655F2A2A29292A295B605A +B2BCADB5C1AFB5C1AF9BA396242424A9B4A8B5C1B4A7B2A62424249CA498BCC5B6BFC6B7 +888D833A3B382424243D3F3B939B8AB4C1A7B2C1A2B0BF9F6C75653435322425243B3D38 +828B77B2C0A2B3C1A2222222B3C1A1B3C1A1B2C1A1B3C2A2B4C3A3B3C3A3B2C2A2B0C0A2 +ACBDA1ACBCA0ACBCA0ACBC9FA9BA9DA6B89DA0B498A0B498A4B79AA8BB9DADBEA1AEC0A3 +B0C2A6B0C2A6ACBEA2ACBDA0AEBFA0B0C09FB1C19FB2C2A0B1C2A0B1C1A1B0C19FAFBF9E +AFBE9DAFBF9EB1C0A0B3C2A1B3C2A0B3C3A0B3C3A1B5C5A3B5C5A3B6C6A2B6C6A1B6C5A1 +B5C6A2B5C5A3B3C3A2AFC09FADC09EADC19DAFC29FB2C5A2AFC29EAEC19CAEC19CAEC19D +ACBE9DABBD9DACBC9DAABA9CA8B79AA7B698A6B699A8B89BA8B89AA9B99AAABA9BABBC9D +A9BC9CA8BA9BA8B99BA8B99AA9BB9BAABE9CAFC2A0B1C3A1B3C4A3B4C4A2B5C4A1B5C4A0 +B6C5A1B6C6A2B6C5A1B6C4A1B6C5A2B5C4A2B5C4A1B6C5A1B6C4A1B6C4A1B6C3A2B6C3A1 +B6C4A1B6C4A1B6C3A2B5C3A2B5C3A3B5C3A2B5C3A1B4C3A0B4C3A0B4C3A0B4C3A0B4C39F +B4C29EB4C29FB3C19EB1BF9CB0BE9CB1BD9DB0BD9DAFBD9DADBB9DACBA9EAABA9DAABA9B +ABBA9BABBB9BADBD9CADBD9CADBD9CACBC9BACBC9CACBB9DACBB9DA9B89CA6B69CA5B69C +A4B69BA3B599A2B599A3B89AA6BA9BA8BB9AAABC9AABBC9BABBC9CABBD9CACBD9CABBC9B +ABBC9CABBD9DAABC9DA9BC9BA9BC9BAABC9BABBB9BA9BA9BA7B89BA2B4999CAF969BAD96 +9BAD979AAC9698AB9599AC969AAD979AAC9799AB9699AA959AAB969CAD96A3B299A7B69B +A8B89CA9B99BA9BA9AA9BB9AA8BB9AA8BA99A8BA9BA7B89BA6B79AA3B59AA1B398A3B49A +A4B49AA5B69AA5B69AA4B599A4B49AA1B1999DAE969CAC969DAC96A0AE97A1B0977A8571 +E5E5E57F7F80B8B8B8B8B8B8B8B8B87F7F80FFFFFFFFFFFF7F7F80B8B8B8B8B8B8B8B8B8 +7F7F80E5E5E57E8A73A9B89AAAB99BAAB99BA8B89AA9B89AA8B79ADEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCD9DADA798EA70C5594227ABC508CC46399D2 +5B9ADA3383C91DA1E125A2FA4698F698B9D9DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D16393D1608ECA5881B6415772 +313A45282A2C292A2A5555555E5E5E2C2D2D2728293037413F5169557CAE5F8CC76393D1 +6393D16393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9FB19CA1B29DA1B19DA1B19D93A390AE6D36FF9343F47920F58331FFFCFA +FAB889F47720F26000F3690AF68F44FEF4EDF9B07DF25F00F36500FF6B00B2621E95A28C +A4B099A3AF99A0AD989EAC989AAB95A6A6A6F7F7F7F7F7F7F7F7F70A0A0A0A0A0A4E4E4E +B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B94E4E4E0A0A0A0A0A0AF7F7F7 +F7F7F7F7F7F7A6A6A6A1B296A9C1A3A6C2A698B4999AB3999BB0969AAE9599AD9498AB93 +9BAB94A2B098A7B89CA4BB9BA0BA9A9EB8999DB798A0B99BA4BE9FADCAAA829982E5E5E5 +7F7F807F7F807F7F807F7F805455565455565455565455567F7F807F7F807F7F807F7F80 +E5E5E57A8D77A4BEA0A1B99CA2B599A4B297A8B49AA8B59CA6B29BA8B29BACB49CB0B79C +B6C0A2B9CBAAB8D3B2B5D4B3B0CEACA8C1A0A5B899A8B699A9B699AEBE9ECADDBCC7DDBD +BACFB0B7C9ADAFC0A7ACC1AAA9C2ABA8C1A99FB69EA0B29AABBA9FB5C4A8BBCDB1B3CBAE +ADC8A94F564D899986C0DABCB7D0B0B6CEABB4CAA6BBD0ADBFD2B1C0D1B4CADCC2BCCCB4 +C0CDB7CCD9C4CDDCC7C6D5C1C1D0BDC3D0BCC5D1BCC9D4BED4DFC9D3E2CBC2D3BCC8DDC6 +C1D8C2A9B9A3BDC4ACBEC2A8C0C7ABC5D0B2C2D0B2C3D3B5C2D2B5C5D8BACEE4C6AFC7A8 +A8BD9AC0D2ADCEE1BEBACFAFB5C8ADB9CAB1B1C1A7B5C7A9B6C9AABBD0B0C5DCBABBD3AF +B5CCABACC2A4A8BEA2AEC3A8B0C3A9AEC1A6ADBFA5A9BBA0B0C3A6BCD3B4ACC6A7A5C09F +A7BF9DAAC09FB1C4A6B3C4A8B0C3A7ADC1A4A7BA9DB1C3A7BACCB0BED2B6B4CBADB1CBAC +A1BA9CA5BB9DACBFA2A9BFA2A5BE9FA5BD9CB0C3A1BDCEAEC3D4B6C6D8BEB0C0A9BFCAB5 +C5CCB8CAD0BDC7CDBCBDC4B2B0B8A6AFB4A2B5B7A6BDC0AFBEC6B4B3C1ACA9B8A2AAB7A1 +B5BFA9B9C4ADB6C6AAABC29EAAC499ADC69BB0C6A2B4C5AAB1C1A8B4C2AAB2C0A9B2C1A9 +B4C4ABAEC0A3ADC09EB4C8A4B2C8A1B9D1A8B4CAA3BBCEABC0D0B1B7C8ABADC1A1AEC3A1 +B0C6A1B1C7A2AEC5A3C2D9BABDD4B6B3C9ADBDD3BAB3C9AEB3CAADB9D0B1B2C7AB6F7F93 +7196C87196C87196C87196C87196C87196C8557096E5E5E57F7F807F7F807F7F807F7F80 +5455565455565455565455567F7F807F7F807F7F807F7F80E5E5E55570967196C87196C8 +7196C87196C87196C87196C87196C87196C87196C80000007196C87196C87196C87196C8 +7196C87196C87196C87196C8232E3D4A62827196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C87196C8 +7196C87196C87196C87196C86F7F93A4B29EACBBA7B5C4AEBDCDB6B7C9B1A9BEA3A0B799 +9FB7969DB4949BB19399AD928A9B855A62573B3F3A2A2A2A2A2A2A5555555E5E5E2D2D2D +282828383B38535952848F7F9DA895A7B39EA0AD99A1AF9C9FAF9C98A89698A8969BAA97 +9EAC999FAE999EAD979DAD979FAE99A1AF99A1B098A2B099A1AF999FAC96A0AE98A0AE98 +A0AE98A1AF9AA3B19BA4B29AA6B39AA7B49AA5B39AA3B299A3B29AA4B29AA3B198A3B299 +A2B299A2B198A4B29AA4B29AA4B19AA4B29AA4B29AA3B199A0B098A0AF98A0AF99A0AF99 +9FAE989EAD979DAD979DAE979FAF98A0AF98A0AF979FAE979FAE97A1AF98A1B099A1B09A +A1AF99A0B0989FB099A0B19AA2B19BA3B29DA7B6A0A9B8A2AAB8A4ADBBA8B6C4B2C1CDBB +C5D3BDC7D6BEC2D1B6C0CFB2CDDBBCD0DDBDCFDDBBCDDAB9CCD8B9CAD6B8C8D3B5C7D3B4 +C7D4B4C7D3B4C6D3B3C6D3B3C5D3B3C6D2B3C6D2B3C5D1B2C5D2B3C6D3B3C8D4B3C9D5B4 +C9D5B4C8D5B4C8D5B5C7D3B6C6D3B6C6D2B6C6D2B6C6D3B6C7D3B7C9D5B9CBD7BCCCD9BD +CEDABFD1DDC1D3DFC2D2DEC1D2DEC0D2DEC0D1DDBFD2DDC0D3DEC0D3DEC0D5DFC1D5E0C2 +D8E3C3C8D6B4A5B5939DAD949CAC979DAC97A1B09BA2B29DA1B19CA1B29EA1B29FA1B39F +A1B2A0A3B3A2A4B4A2A5B4A1A4B39FA4B39FA2B19E9FAD9B9EAD9A9CAC9A9BAD9AA1B39E +AFC0AAB9C7B5BBC8BAAFBEB2A0B0A599A99C98A89898A79797A79598A79598A89698A896 +98A99698A99798A89699A9979AAA979BAA979AAA969AAB979AAB979AAC969CAE99A1B19D +A9B8A5B1BFAEA3B1A17B8C9E92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +8FB7E24E7DB10757A4147ECD468ED15A9BDF509CE92686DA09A7F411A7FF389BFF6BA7E5 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE480A2C531363C92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE4 +92BAE492BAE492BAE492BAE492BAE492BAE492BAE492BAE47B8C9EADB59DAFB9A0ABB79F +A9B79FA8B79DA9B89DAABA9DAABC9DAABF9B859576E5E5E57F7F807F7F807F7F807F7F80 +5455565455565455565455567F7F807F7F807F7F807F7F80E5E5E5A9B5A9E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1D9EAD8B5C3B0B4BFA9B4BEA6B2BCA3B3BCA3B2BBA3 +B3BCA2B8C1A6BAC3A8BBC4A9BBC5A9B8C4A8B6C2A5B6C2A6B7C2A7B8C2A8B8C2A8B9C3A8 +B7C2A6B8C2A6B7C1A5B7C1A6B8C2A9BBC5ADBEC8AFBFC9AFBFCAB0BEC8AFBEC9B1BCC7B0 +BCC6B2BFC9B7C1CBBBC4CDC1C4CEC4C6D0C6CBD7CBD7E4D5DEEBD9DFEDD9E0EED8E0EED6 +DFECD3DDEAD1DAE6CCDBE6CBDAE6CADBE7CCDBE7CDD7E2C9D6E0C6D8E1C8D2DBC2C8D1B9 +C2C9B5C1C8B6C0C7B7B9C3B3B5C0B0B1BDABAFBBA8AFBCA7AFBBA5AEBAA3AEBAA3AFBCA5 +AEBCA4ADBBA3ADBCA4ADBDA5AFBFA7AEBDA4ACBBA3AEBCA4B0BDA6B0BEA7B1BEA8B0BEA7 +B5C2A9B5C2A7B2C1A2B2C1A0B1C1A1B1C0A1B1BFA0B2C0A1B2C1A0B2C1A1B2C0A1B2C0A1 +B2C1A0B2C1A1B3C2A4B4C4A6B5C5A7B4C4A5B3C2A5B1C0A4ADBCA1AABA9FA9B99EAABA9F +A9B99FA5B69CA4B79BA5B99BA6BA9CAABD9FADBEA1ADBEA1AEBFA2B0C2A4B0C1A3ACBFA0 +ACBF9FAEC09FB0C19EB0C19EB0C19FB0C1A0B0C19FB0C19FAFC09EADBF9DAFC09FB2C2A2 +B4C4A3B3C5A3B1C3A1B0C1A0B3C3A2B4C4A3B4C4A2B4C39FB4C4A0B5C4A3B3C3A4AFC0A0 +AEBF9EAFC09DAEBF9BB1C29DB3C49FB3C59FB4C5A0B3C5A1B2C3A1B2C2A1B0C1A0ACBE9D +A8B998A5B897A3B797A3B798A4B798A4B698A5B799A4B698A6B899A8BA9AAABC9BACBE9D +AEC19EB0C29EB2C4A0B3C4A1B3C4A2B3C3A2B4C4A1B4C39FB4C3A0B5C4A1B5C3A2B6C4A2 +B5C4A2B5C3A2B4C3A1B5C3A1B5C2A1B5C1A1B4C1A1B4C2A1B6C3A2B5C2A1B5C3A1B4C2A0 +B5C3A2B6C3A3B6C3A3B5C4A2B5C3A1B5C4A1B5C3A0B5C39FB5C39EB3C29DB3C29DB2C19E +AEBD9BAAB999ABB899ABB89AA8B79AAABA9DA8BA9CA9BA9AA9BA9AAABA9BABBB9CABBB9B +ABBA9AABBB9AACBD9BACBD9CACBC9DAABA9DA8B99CA6B89CA5B89CA5B89BA6B99BA6B99A +A8BA9AAABC9AABBC9BABBC9BACBC9BACBD99ADBE9BABBD9CABBC9DAABC9DAABC9CAABC9C +AABC9BAABC9BABBC9CABBB9BA9BA9BA7B89BA1B3989FB1989FB1999DAF989AAD9699AD97 +99AC979AAD979AAC9699AB9598AA959AAB969BAB959EAF97A3B49AA7B79BA8B89BA9B99A +A9BA9AA8B999A9B99AA9B99BA8B89BA5B699A3B598A1B398A1B399A2B59AA2B499A3B499 +A3B49AA1B1989DAF979BAC9699AA9599AA959BAB96768271E5E5E57F7F807F7F807F7F80 +7F7F805455565455565455565455567F7F807F7F807F7F807F7F80E5E5E57D8873A9B79A +A9B89BAAB99BA9B89BA7B79AA6B699DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDBDCDA9DAFC14388B82788C62B7AB5427DBA5A9BDD468FD7559AE3 +7BA7D6D2D6D8DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16393D15A85BB4F729F525C685758585B5C5C575757525252 +5353535656565E5F5F5B5B5C595F684F6F975881B66392D06393D16393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9FB29E9EB09D +A0B29E9FB39E94A694A06631FF740DF36500F36400F9B683FBD1B2FBD0B3F8AE76FAC49B +F9BA8BFBD5B6F68F38F5801CF47F1BFF6D01A55F23939F8B9FAB979CAA969AA9969AA996 +9CAC96A6A6A6F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9A6A6A69DAB94 +ACC0A4A5C0A598B39996AD9697AA9496A9939AAD969CAF979DB097A0B399A3B79AA4BA9A +A1B99BA3BEA3A7C2A9A9C4A9AAC4A7B1CBAC859A82E5E5E5D7D7D7D7D7D7D7D7D7D7D7D7 +ACACACACACACACACACACACACD7D7D7D7D7D7D7D7D7D7D7D7E5E5E590A795AACAB1A0BDA2 +9FB59AA0B096A5B39AA2B19AA1AF98A2AF9AA3AE99A6AF99AAB39AAFBBA0B6C6A9B1C3A7 +ABBDA0A7B89CA4B499A4B197A6B296BDCCAEC6D9BBB1C5A8AABCA1ABB69EB4BDA5BECAB2 +C1D2B9B8CEB6B0C9B1B2C9B2A8B9A4A7B59DAFC0A2BED3B27F8C773D403BCDE0BFC5DCBC +B6CFAFB6CDADB9CDACC4D7B7C2D3B7CAD7BEC1CDB5C4D1BAD0DDC5D3DFC9D4E2CDCBDCC6 +C5D7C2C9D8C3CCD8C2CDD7C1CED8C1CAD5BFD0DDC7D7E8D2C0D5C0AEC3ADAFBDA6AEB49C +B4B89FBEC5AAC4D0B4C5D2B7C0CEB2BACCADC0D7B7B1CDAAA9C29DB5CBA5B0C4A1ACC0A0 +B4C8AAB2C4A8ABBDA2B2C3A8B6C9AEBACDB1B7CBAEABC0A3A8BC9EB8CCAFC3D8BDC1D6BC +AEC2A8AEBEA6AFBEA7BAC9B2B8C7AFB9CAB1ABBFA4A5BA9CBCD1B3C1D6B9B4C8AEB2C6AD +AABEA4A8BCA1AABEA2ACC1A5BFD7B9B5CEB0ACC4A8AEC6AAA5BEA3A1BA9FA4BA9EB2C8AA +B0CAACACC7A7AEC7A5B6CEABBED5B5B6C9AEB1C1AAB8C6B0B2BEA8AEB8A4ABB2A1AAB3A1 +ABB6A4A9B5A3A7B19FABB1A1ACB2A0AEB6A4B1BDA8AAB8A1ABB7A0B3BDA6B1BFA2ADC49B +ADC798B3CA9FBACBAABBCAB0B3C2A9B2C1A8B1C0A8B1C0A8B1C1A8AAB99EB1BFA3BBCBAB +AEC39DABC599B1CB9EB2CBA2B3CBA6AEC5A4A9C09FADC4A3AAC19CB0C69FB4CBA6BDD5B4 +B3C8ACBACEB4BED1BAB3C8B0B2C7AEA9BEA6A4B49F6F7F937298CA7298CA7298CA7298CA +7298CA7298CA557297E5E5E5D7D7D7D7D7D7D7D7D7D7D7D7ACACACACACACACACACACACAC +D7D7D7D7D7D7D7D7D7D7D7D7E5E5E55572977298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA0000007298CA7298CA7298CA7298CA7298CA7298CA7197C8455C7A +1319217197C87298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA7298CA +6F7F939FAE9BABBAA6B4C3AACEDDC0D3E4C2CFE3BDCAE0B6C9DFB4C6DDB1BDD5AAA1B993 +8397795F645C5858585C5C5C5757575252525353535656565F5F5F5B5B5B606260758072 +8E9B88A4B19CA1B099A4B49CAABCA29BAC9398A99398A8959AA9959FAD98A0AE99A0AE99 +9FAE98A0AF98A2B098A1B099A1B09A9EAD989FAD989FAE989FAD97A0AE98A2B199A4B299 +A5B399A7B39AA5B29AA3B299A2B198A3B199A2B198A2B198A3B198A3B198A3B199A3B29A +A4B29BA4B29AA4B29AA3B299A2B199A0AF999FAE999FAF999EAE989DAD969DAE969DAE96 +9FAF97A0AF98A0AF98A0AF98A0AF98A0AF98A0B099A1B098A1B097A1B097A0B098A0B199 +A1B19AA3B29BA5B49DA8B79FACBBA3ABBAA3AEBCA7B7C4B0BFCEB8C3D3BBC5D6BDC1D0B5 +C3D1B4D0DDBFD1DEBECFDDBCCEDABBCCD8B8C9D5B5C8D4B5C6D3B4C5D2B3C7D4B5C7D3B5 +C6D2B3C5D2B3C6D2B3C6D2B3C7D3B3C8D3B4C9D5B5CAD5B6C9D5B6C9D6B7C8D5B7C5D2B5 +C5D3B5C5D2B5C5D2B6C5D2B6C6D2B6C6D3B7C8D5B9CAD7BCCDD9BFCFDBC0D2DDC3D2DDC2 +D3DEC1D2DDBFD1DCBED1DCBED2DDBFD3DEBFD3DEBFD4DFBFD4DFBFD4E1BFBDCDA99EAF91 +9BAC959CAC97A1B09CA1B19D9FB09CA4B5A2A9BBA8A9BBA7A6B9A3A4B6A2A2B2A0A2B1A0 +A2B2A0A2B1A0A1B0A09EAE9E9DAE9C9CAE9A9FB19CA9BCA4B9C9B4B9C8B6ADBCADA2B2A4 +9AAB9B98A99797A79597A89597A79598A89699A99699A99699A99699A99699A9979AAA97 +9BAB979BAC979BAC969CAD979CAE989EAF98A0B299A2B59AA2B59BA1B49B9EAE967B8C9E +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE492B9E36899CB2980C7 +118AD81B7CC3357ECA499AED3590E93E98F55299E48CB5DF94BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE45465778CB1D789ACD2434E5A556678 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE494BBE4 +94BBE494BBE494BBE494BBE47B8C9EADB49CADB79DABB89EAAB99DAABA9BABBF9AAEC49B +B3CB9FBFD7A69CAC88E5E5E5D7D7D7D7D7D7D7D7D7D7D7D7ACACACACACACACACACACACAC +D7D7D7D7D7D7D7D7D7D7D7D7E5E5E5A9B5A9E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1DEEFDEBBCAB9B2BFAAB3BEA7B0BBA4AFBAA2AFBAA1AEBAA0AFBAA0B2BCA2B3BEA3 +B4BEA3B5C1A5B5C0A4B5C0A5B6C0A5B5BFA5B3BEA4B4BFA4B5BFA3B5BEA3B3BCA1B2BCA1 +B2BDA3B5C0A5B9C3A7BBC5A7BBC6A9BCC6AABAC4A9BAC3A8BBC4A9BBC5ABBAC4ABBAC4AC +BAC4AEB9C3B0B8C3B1BDC6B5CDD6C3DDE7D3E1EEDAE0EED8DDEAD4E0ECD6DAE6CEDAE6CC +DAE5CBD7E3C8DBE6CCDAE5CAD3DFC4D2DDC2CFDABFC6D1B6B9C4ACB2C0A8AEBEA7AEBEA6 +ADBDA6AAB9A2ABB9A2AAB9A1AAB8A1ABB8A0AAB89FABBAA0AABA9EAABC9EABBEA0AEC1A2 +B2C5A5B5C7A6B9CBAAB4C5A5B0C1A2B0C0A3ADBDA2AFBEA4B2C1A5B4C2A4B4C3A3B2C1A1 +B1C0A0B1C09FB1C09FB2C0A0B2C1A1B2C1A2B2C1A2B2C1A1B1C1A0B1C1A1B2C1A3B4C3A7 +B5C5A9B6C6ABB7C7ADB3C2A8ACBDA3A8B99FA8B99FA8BAA1A8BAA2A6B8A0A6B89EA9BB9F +ABBDA0ACBDA1ACBCA1ACBCA1ADBFA1B2C3A3B4C5A5B1C3A2AEC19FAFC29FB0C29EB1C29E +B0C19EB0C09FAFC09FB0C1A1B0C0A0AFC09EB0C1A0B3C2A2B5C4A5B5C5A5B4C5A4B1C2A1 +B2C2A2B3C2A2B3C2A3B2C0A0B1BF9FB1BE9FB0BFA0AEBFA0AEBF9EAFC09EADBE9BAEBF9B +B2C29EB3C39EB6C4A1B6C5A2B5C3A2B4C2A1B3C1A0B3C3A0B2C39FB0C29DAEC19CADC19C +ABBF9AA9BD98A8BD99A8BD9AA8BC9AAABD9BAEBF9CB0C09EB3C3A1B4C4A2B4C4A2B4C4A2 +B3C4A2B3C4A2B3C3A0B4C4A0B4C3A0B4C3A0B4C3A0B4C2A0B4C2A1B5C3A2B4C2A2B5C2A2 +B5C2A2B4C1A1B3C1A0B1BF9FB3C1A0B4C19FB4C39EB4C49EB5C39FB6C3A1B6C4A2B6C4A2 +B5C4A1B5C4A0B5C39FB4C39FB4C3A0B4C29EB5C39FB4C2A0B2C19FAFBF9DA9BA99A7B797 +A6B899A7BA9BA8BB9BA9BB9CAABA9CABBA9CABBA9DABB99CA9B89BA9B99AABBD9DACBD9D +ABBC9DA8B99BA6B89AA5B89BA6B89BA7BA9BA8BB9BA9BB9AAABC9AABBB9AABBB9AABBB9A +ABBB99ACBB99ACBC9BACBC9CACBC9CABBC9CABBC9CAABC9DAABC9CAABC9BAABC9BABBC9A +AABC99A9BA9AA5B79AA2B399A0B29A9FB1999DB0989CB0999CB0989BAF979AAD9799AC96 +99AC9698AA9599AA959AAB959CAD96A1B198A5B49AA8B79BA9B89BA8B89AA9B99AA9B99B +A8B89AA7B699A6B598A4B599A2B398A2B499A1B399A1B499A2B49AA3B49BA1B29A9DAF97 +9AAC9599AB969AAC96748271E5E5E5D7D7D7D7D7D7D7D7D7D7D7D7ACACACACACACACACAC +ACACACD7D7D7D7D7D7D7D7D7D7D7D7E5E5E5798472A3B199A6B49AA7B59BA8B69AA7B69A +A6B599DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCD5D7D7B6C3CCA1B7C8A8B7C6BAC7D4B3C1CFC6CED5DADBDADEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF6393D16393D16393D16393D1 +6393D16393D16393D16393D1628FC96186B76081AC6484AD6685AE6182AC6085B4628EC6 +6393D16393D16393D16393D16393D16393D16393D16393D1FFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCA7BBA6A5BAA5A2B8A2A6BCA59FB49F916234 +FF6D01F36903F36C05F4710CFDDBC0FFFFFFFDE1C9FEF8F2FFFFFFFBCD9EF6932DF69E3C +F69B39FF7207965D2A929E8C9BA89599A89598A89598A9969AA993A6A6A6F8F8F8FAFAFA +FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA +FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF8F8F8A6A6A69DAF97AAC1A4A2BEA19CB89D98B197 +96AA9398AB949DB097A0B599A1B899A1B796A2B897A5BA99ADC1A2BBD1B8BBD4BEB1CBB6 +AEC7B0B0C9AF91A58E7380717581727A87777B87797C857A7C8578737B6E747C6F757D6F +767E707F8879868F82889184889285A4B8A4ADCAB1A0C0A69AB79D9BB59D9DB69F98B09A +99AF9A9CAF9AA0B29DA3B39EA6B49EADB9A3A8B59EA3AF97A4AF98A4AE97A1AB95A3AD96 +A9B39AB5C1A6AFC1A3B1C4A6ACBCA0B3BEA3C0C7ADC8D0B8C8D2BACBD8C0BFD0B8A7BBA4 +ADC1ACA9BCA5ACC0A1222222353833A1B293C4DAB4C0DAB6BFDBB9C1DCBCBDD3B4BFD2B4 +C2D2B5B9C6A9BEC6ABD4D8BFD3D8C0D1D6BFD5DCC6D6E0CCCFDDC8CFDDC8C8D3BEC8D1BB +CFDAC3D4E0CAD8E4CED2DFCAC3D4C0B4C9B5A8BEA8A4B5A0A8B59DB6C6ABC0D1B5B5C6AA +AFC0A1BED4B1C3DDB9B2CFA9A7C39BAAC69DAEC9A2A9C2A0AEC5A6B1C6A8AFC3A7B4C6AC +C6D9C0C3D7BFB8CDB5C3D7C1BED0B9C8D8C1D2E2CAC0D3BAA9BBA4AFBEA7B4C1AAB9C5AE +B7C4ADB2C1AAAFBEA6ADB99FC7CEB6CAD1BBC4D0BAB6C6AFBCCDB5B7C9B0B5C9AFB2C7AB +C8E0C1C3DDBEB1CCADB2CDB1ABC5AAAFC7ACBCD0B5C5D7BCC8DCBFB6CCADB3CCABB7CFAE +BCD4B4AFC6AABDD1B9BBCEB6B5C8AFACC0A8A2B6A0A2B6A0A0B49E9BAF9A99AB989CAD9A +9EAD9AA2B19BAABAA3ADBFA7A8B9A19FAF96A6BB98ADC799B1CB9BB6CBA4B6C6AAB6C2AA +B0BCA6B0BEA7B3C2AAB1C2A9B0C2A8ADBEA1ADBC9EB1C2A2B9CFAAB9D6ACADCDA1AAC89E +AFCBA3A8C39EA8C0A0ADC1A3ADC1A2ACBF9EB6CAA7B6CAA9AFC0A5B7C5B0B6C3B1ADBCAA +A9BAA6A6B8A3A5B5A17080947498C97499CB7499CB7499CB7499CB7499CB607EA6546780 +556881596C855A6C875A6B875A6D86556881556881556881556881556881546780556881 +546780607EA67499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB000000 +7499CB7499CB7499CB7499CB7499CB7499CB0000000F13195B79A07499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB7499CB +7499CB7499CB7499CB7499CB7499CB7499CB7499CB7498C97080949CAB97A8B5A0BAC3AE +CFD6C1DBE6CDE0EDD3DFEED2DDECD0DFEFD1DDEFCFDCEFCCD9EDC7D4EAC3C5DDB6A8BC9B +91A48A8C9E878B9C878797838B9B8696A6909EAF98A1B19AA4B39CA2B09AA5B39CABB79F +C6D3BAB4C2AA9DAE9796A89397A7959BAA979EAC9A9EAC999DAB979FAD97A1AF99A0AF99 +A0AE98A0AE99A0AE99A0AE99A0AE98A0AE99A3B19AA4B29BA5B39BA6B49BA6B39BA4B29A +A3B29AA1B199A1B198A2B198A3B299A2B199A2B199A2B29AA4B39BA3B29AA3B29AA2B299 +A1B1999EAF989EAE989EAE979EAF989EAE979EAE979DAD969FAF98A0B099A0AF98A0AF98 +A0AF98A0AF98A0AE979FAF97A1B098A1B098A1B099A2B19AA2B19AA1B099A3B29BA4B29B +A9B8A0ABB9A2ACBAA5AFBDA8B8C5B2C0CEB9C5D4BDC9D9C0C5D4BACCDBBED3E0C2D2DEC0 +D2DEBFCED9B9CCD8B8CCD7B7C9D5B6C8D5B5C8D4B6C7D2B4C5D1B2C4D0B1C6D2B3C8D4B6 +C8D4B6C9D4B6CBD5B7CAD5B6C9D5B6C8D5B6C7D4B5C4D2B4C5D4B5C6D4B6C7D5B8C6D3B7 +C5D2B6C3D0B5C5D2B7C6D4B9C9D6BCCCD8BFCED9C1CFDAC2D0DBC1D0DCBFD0DCBDD0DBBC +D0DBBCD1DCBED4DEC0D4DDBFD3DDBED3DFBECEDDBBAEBF9C9AAC909CAD97A1B19DA3B39F +9FAE9CA1B0A0A9B8A8AEBEADAEBFADABBCAAA5B6A4A2B2A09EAE9C9CAD9C9DAE9D9CAD9B +9BAD999EB09BA7B7A1B2C1ACB9C6B5B1BFAFA4B3A4A0B0A09DAD9C98A99697A89597A895 +98A89598A99598A99599AA9699AA969AAB979BAC989BAD979DAF97A1B399A4B69BA3B69B +A3B699A6BA9AAEC19EB4C7A3B9CBA6BACCA7B3C4A27C8D9E95BCE496BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE590B7E07AA8D66BA1D372A0D080AEDE +79A7D987B2DE93BAE396BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE5647A902B2E3127292B4B596791B6DC96BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE5 +96BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE596BDE595BCE4 +7C8D9EACB59CABB99CA8BB9AA8BF99AEC59BB8D1A2C7DFAED5EABDDEF0CBB8C5AE8C9488 +8B948A909990919992919892919A918C958C8D958D8D958D8D958D8D958D8C948C8C948C +8C948CB8C5B8E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1CBDBCAB2C0AD +B3BEA8B2BCA5AFBAA2ACB99FADBAA0AEBAA0AEBA9FAEBA9EAFBA9FB0BBA0B2BDA1B4BEA2 +B3BEA2B3BEA2B2BDA1B2BEA1B2BEA1B1BEA1AEBB9FADBAA0AEBAA1B1BCA2B4BEA4B4BDA3 +B7C0A4B9C2A7B9C2A6B7C1A4B7C2A4B7C1A4B7C1A5B6C1A5B6C1A5B4C1A5B3C1A6B3C0A8 +B5C0A9BEC6B3C9D0BFD0D8C6D8E1CFDEE9D6DFEBD6DEE9D2DCE7CFD8E4CAD5E2C7D4E1C5 +D4E1C4D3E0C2D0DDBEC6D4B5BAC9AAB6C8A7B9CCA8BBCDABB9C9A9B4C3A7AEBDA3AABAA0 +AAB9A1AAB9A1ABBBA1AABB9FABBD9FAEC1A0B2C3A2B8C8A9BECDAEC1CFAFC0CDAEC1CEAF +C1CEAFBCCBABB6C7A7B7C7AAB7C6A9B4C2A4B3C1A1B2C1A1B1C1A0B1C1A0B2C1A1B3C1A1 +B3C1A1B3C1A1B1C1A2B1C1A2B0C0A1B1C0A1B1C1A2B2C1A3B2C1A4B2C1A6B3C1A9B3C1AB +ADBCA7A7B8A1A6B89EA7BAA0AABDA2ABBCA2ACBCA2AEBDA2B0BFA4AFBFA4ACBDA0A9BB9D +ACBF9FB0C2A1B4C6A5B3C4A4B0C2A1B0C3A1B2C5A1B2C5A1B1C2A0B0C1A0AFC1A0AFC0A0 +AFC0A0AFC09FAFC0A0AFBFA1B2C2A4B1C1A2B2C2A2B3C2A2B2C1A2B2C0A2B1BFA1AFBC9F +ADBA9CAAB89AAABB9CACBE9EAEC1A0AFC19FAFC19EB1C19EB2C29EB1C19CB2C19DB4C3A0 +B4C3A0B3C2A0B2C19FB2C19EB2C29EB2C39EB4C59EB4C6A0B4C5A0B3C49FB3C49FB3C49F +B4C4A0B4C3A0B3C3A0B4C4A1B5C5A2B5C5A4B5C6A5B5C6A5B5C6A6B5C6A6B5C6A5B5C5A5 +B5C4A5B4C3A3B4C3A2B4C2A0B3C1A1B3C1A1B4C2A2B4C2A1B5C2A1B5C2A1B5C2A1B3C1A0 +B4C1A1B5C2A0B4C29FB4C4A0B5C4A0B5C3A0B5C2A1B6C3A1B5C3A1B5C3A0B5C3A0B5C3A1 +B5C3A1B4C2A0B4C2A1B4C1A1B4C2A2B4C3A2B3C3A0B1C19FADBD9CACBD9BABBC9BAABA9A +A9B89BAAB89DAAB89CA8B79CA8B89BA9B99BAABA9BAABB9CAABB9DA8B99CA5B89AA2B698 +A3B798A6B99AA9BC9BACBE9BACBE9BACBD9BACBC9BABBC9BABBB9AABBB9BABBB9DACBB9D +ABBB9BAABB9BAABB9BA9BB9CA9BB9BA9BB9AA9BB9AAABC9AAABC99A9BA9AA7B89AA4B59B +A1B39BA0B29AA0B39B9EB1999DB0989CAF979BAE979BAE979AAD9699AA9498AA949AAB95 +9BAC959CAC969EAE97A0B098A5B49AA9B89CA8B89AA7B799A6B598A5B397A5B399A3B398 +A2B298A2B398A2B498A2B599A2B498A3B498A4B599A3B4999FB1979CAE979CAE97808E7C +6971656A72666F776B70786D6F776D6F796B6B74666C75676D75676D75676D74676B7366 +6A73676971657F8C7A9CAC969EAE979FAE97A1B097A3B198A3B198DEDEDC9D9D99222222 +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +222222DEDEDC426695FFFFFF6393D16393D16393D16393D16393D16393D16393D16393D1 +6393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D1 +6393D16393D16393D16393D1FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCA7BBA4ABC0A8AABFA7AABEA5A7B9A3886741FF7005F36904F46E08F47008 +F58124F8A764F79946F9BC83F9B778F69635F69633F69D3BF69F3EFF7C128A5D3393A28F +97A79497A89597A89698A9969EA991A9ABA5E6E6E6FBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBE6E6E6A5A8A3A1B499ACC3A3A1BA9E99B19795A99298AA949AAC969BAC959EB097 +A0B597A0B796A4B897AAB999B9C4A6C4D1B6C2D3BCBDD2BBBAD1BBB4CCB6B0C9B1AFC9AF +B0C9AEB2C9ACB3CAADB3CBAEB2C8ACB1C5A8B9C9ACC9D7B9D5E2C4DEEACEDFEBD1DAE7CD +CCDBC1C3D6BAC1DABEC1DDC3C0DDC2BCD8BDB2CEB3B9D8BFADCCB79AB5A1ADC6B1AAC1AB +A0B19DA1B09BA1AF9AA7B7A29EAF9A9AA9969BA8969DA996A2AE99A8B49BABB89EACB89D +B2BCA0B9C0A4BCC0A6C2C7AEC7CEB6C2C9B3B7C0A8C7D3BAC1D0B7B8C9B0B7C9AFBDCFB1 +BACCA9C4D6B1C6DAB4C4DBB7C7DEBDC4DDBCB5CCACB8CEAEB9D1B0BBD1B1BAC9ACB9C1A8 +BEC1ABC0BEAAC7C4B0D2D3BFD9E1CCD3E0CCC1CCB9C8CEBADCE2CDDCE4D0D3DDC8C9D3BE +C1CDB7C1D1BBC2D5BEABBFA8AABFA4CAE1C3CCE8C9AFCBACACC1A2C6D9B7BCD2AFAFC8A5 +A8C19CACC69FB2CDA7A8C2A0AFC6A6B7CBADB7C8ADBAC8B0CEDCC4CDDDC5C6D5C0C8D3C0 +D6E0CBD4DEC9C9D5C0B4C2ACAEBDA6BBCBB2BAC9B1B7C5AFB2C0A9AFBFA7ACBFA5AFC1A6 +B2BEA3B9C0A8B9C1AAB7C4ABB5C2A8B9C9AEC0D4B8BFD5B8B3C9ACB3C7AAAFC4A6B1C7A9 +B3C9ADB2C5ACBCCDB7C4D5BEBED0B7B5C9ADB0C6A8BFD5B5BCD0B0BFD0B5C3D1BABCCAB4 +BACBB3B4C7B0B2C7B0B6CDB6B7CEB8B6CCB7B4CBB6AEC6B0AFC7AFAEC4ABB7CBB2B6CAB2 +A7BAA2A0B498A9C09CB2CB9EBAD3A9B8CEADACBEA5A5B29CAAB59FB4C0A8BDCBB2BBCBB3 +B5C6ADA8B99DAABA9CB0C1A1B5C9A6BBD5AEAECDA4ABCBA2A9C8A0A3BD99AAC1A0B4C6A8 +AEC1A2A9BB9CAEC2A0ACC09FA9B99DA9B49FA9B29FABB4A2AFB9A6BAC5B2B6C3B07C8D99 +7494BE759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC759ACC +759ACC759ACC759ACC7494BE7A8A95A1AF9AA6B29FB6C0AFC0C8B8D1DBC9E0EEDAE0F0DA +DCEAD4E0F0DCE1F2DFE0F2DFE1F2DFE1F2E0E1F2DFE0F1DCD9EDD2CEE4C5C0DAB7B3CFA9 +AAC5A0A6C19C9FB8969DB296A1B39BA0B098A9B79FB8C5ADBBC8B2A8B5A0A8B6A39BAA98 +96A69597A7959AA9979BAB979CAA969EAC979FAE98A0AE98A0AF98A0AE99A0AE9AA0AE9A +A0AE999FAD98A2B09AA4B29AA4B29AA5B39AA5B39AA4B299A2B199A1B099A2B19AA2B19A +A3B19AA2B199A1B198A3B299A4B29AA4B29AA4B29AA3B199A1B0999FAF989FAF97A0B098 +9FAF989EAE979EAE989EAE989FAF99A0AF98A0AF98A0B098A0AF989FAF98A0AF989FAF97 +9FB0979FAF97A1B099A2B19AA2B099A1B099A1B099A1B09AA2B19BA5B49DA7B69FACBBA4 +B2C1AABCCAB5C5D3BEC9D9C2C8D7BFCCDABED3DFC2D2DEC1D3DEBFD0DBBBCED9B9CDD7B7 +CCD6B6CAD6B6C8D4B4C5D1B2C4D0B1C6D2B2C5D0B2C6D1B4C8D3B6C9D5B7CAD5B7CBD6B7 +CAD5B7CAD6B8C8D5B6C5D3B4C6D5B7C6D3B7C5D3B6C5D2B6C5D2B7C4D2B6C4D2B6C5D3B6 +C9D6BACBD7BDCCD8BFCCD9BFCCD9BFCDDABECFDBBED0DBBDCED9BACED9BAD2DCBED2DDBF +D2DEBFD3DFBFD4E1C0C8D7B3A6B6949DAE93A1B19BA4B49FA1B19D9EAF9CA0B0A0A6B6A7 +ADBDADABBCABA8B9A7A7B9A6A1B29F9CAE9B9EAF9C9EB09BA0B29BA4B69DAFBFA7B3C2AC +B1BEACA8B6A59EAE9D9CAC9C9CAD9C9AAB989AAB9799AA9699AB979AAC979AAC979AAD96 +9BAE979CAF989FB19AA3B59BAABB9EB3C2A5B6C5A8B3C3A6B1C2A3B7C8A6BECCAAC2D0B0 +C2D0B0BFCEB0B7C5AB8798A191B2D498BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE698BEE6 +98BEE698BEE698BEE698BEE698BEE698BEE698BEE691B2D485959FA8B99AADC39DB5CEA4 +C1DBAECEE5B8D9EDC5E0F1D3E1F2DAE0F1DDE0F1DFE0F1E0E0F1E0E0F1E0E0F1E0E0F1E1 +E0F1E0E1F2E0E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1D9E9D8B4C3B0B3BFA9B3BDA5B1BCA2AFBBA0 +AEB99EAFBAA0B0BBA0AFBB9FAFBB9EB0BB9EB1BCA0B3BEA1B2BEA1B1BDA1B1BEA1B2C0A2 +B5C5A6B8C9AAAEC0A2ACBC9FACBA9EAEBB9FB0BBA0B0BA9FB1BBA0B3BEA1B4C0A1B5C0A1 +B5C0A2B5BEA2B3BDA1B4BEA1B6C1A3BCC7A9BEC8ACBCC6ACB5C0A6B3BFA6B9C5AEC1CCB7 +C2CCB9C2CABACAD1C2D0D7C6D5DDCADCE5D0E0ECD5DEECD3DAE5CCDAE4CADCE5CADAE3C9 +D4DEC4D1DDC0D3DFC0D0DBBCC8D3B7C0CBB1B4C1A8A8B69EAAB9A1ABB9A1ACBBA2AFBFA4 +B7C6AAB9C7AAB8C5A8BAC5AABBC6AAC1CDB0C3D0B2C0CEAEC4D0B1C7D3B4C5D1B3C1CEB1 +C1CEB2B9C6A9B3C1A2B3C1A1B3C2A2B2C2A1B2C2A1B3C3A1B3C2A2B2C2A2B0C0A0B0C0A1 +AFBFA1B0C1A2B1C1A3B0C1A1B1C2A1B2C2A2B3C1A5B1C0A6ADBDA5A9BBA2A8BCA2ADC1A6 +ADBFA5ADBDA4ADBBA1AFBDA1B0BEA2B1BFA3AEBEA0ADBE9FAEBFA0B1C1A2B3C2A3B4C3A4 +B3C4A4B3C5A4B3C7A3B4C8A3B3C7A2B2C4A0B1C39FAFC39FAFC29FAFC1A0AEC0A0AEC0A1 +B0C1A3B0C1A2B1C1A2B3C1A4B2C0A3B0BDA1AEBB9FAAB69BA8B69BA6B79BA5B79BA7BA9D +ABBDA0AEBFA1AFBF9FB0BFA0B1C0A0B1C09FB2C2A0B2C29FB4C3A1B5C4A1B4C2A0B3C1A0 +B1C19FB0C29DB1C39DB3C49FB4C5A0B5C5A1B5C4A1B5C5A1B5C4A1B5C4A1B5C3A0B5C4A3 +B6C5A4B6C5A5B5C6A5B6C7A7B8C8A9B8C8AAB7C7ABB7C6AAB6C6A8B4C4A4B4C3A1B4C2A0 +B3C2A0B4C2A1B4C2A0B4C39FB4C39FB4C39FB4C49FB5C4A0B5C3A0B4C29FB3C29EB4C39E +B5C49FB5C39FB6C3A0B6C39FB5C29FB5C29FB5C2A0B6C3A2B5C2A1B4C2A1B4C2A2B4C2A2 +B4C2A3B4C2A3B4C2A1B3C19FB2BF9EB1BF9EAFBD9EAAB99BA8B79AA7B79BA8B79CA9B79D +A9B79BA8B79AA8B89AA8B89AA9B99CA8B99DA8BB9DA5B99AA5B999A8BD9BABBE9BADBF9B +AEBF9BAEBE9BADBE9BACBD9CABBC9BAABB9BABBB9DAABB9DAABB9BAABB9AABBB9BABBC9B +AABB9AAABC9BAABB9BA9BA9BA9BA9BA9B99BA7B79AA4B59BA2B39BA0B39AA1B39B9EB199 +9DB0989CAF979BAF979BAF979AAD9699AC9599AC9599AC959AAC9599AB9599AA959BAC97 +9DAD97A1B099A4B29AA4B299A2B198A2B198A2B299A2B39AA3B39AA2B399A2B398A2B297 +A4B498A4B599A4B598A4B598A4B599A1B398A0B2999EB1999DAF979BAD969CAE969EB098 +9EB1989EB1979EB0969FB097A0B0989FB0989FB0989FB0989EB0989CAE979AAC9699AA95 +9AAB969AAB959BAC969CAC969DAC96DEDEDC9D9D99222222DEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC222222DEDEDC426695FFFFFF +6393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D1 +6393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D16393D1 +FFFFFFDEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDCA5B9A3AABFA8 +AEC2AAACC0A7A9BBA37E694AFF7306F76902F86E07F8740DF7760EF7770DF88017F88924 +F98A21F9932EFA9A36FA9E3BFBA442FF871A7E5E3B95A69397A89697A89697A99698A997 +A0AD99A3A997ACACAAE4E4E4FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAE4E4E4AAACAA9CA797A3B499 +A8BEA09FB79D94AA9494A79396A89398A9949BAC969DAF979EB2969FB596A5B799AEBA9D +BAC1A6C0C7ADC1CAB0C0CEB3C1D2B9C0D4BBBBD3BBB4D0B8AEC8B2ACC6ACB0C8ACB1C9AB +B1C8AAB8CAACC2C9ABCDCEAFD7D6B8D7D6B9D1D2B5D5DABDD5DEC3D4E0C6D6E4C9CDDDC2 +C1D3B7BFD1B4CBDDC0D1E7CBBDD6BDBDD7C1B9D0BC9EB39F9DAE9A9FAC98A8B29DAAB7A1 +9FAF9A9CAD9899AA969BAA969FAD98A0AF999CAB969FAB96A8AF98B5B99FBDC3A7C0C7AD +B8C0A8B3BBA5C0C5AEBDC0A7B7BBA1C0C9AEB7C5AABBCDAFBED1B0BACAA8B8C5A4B8C4A7 +B7C5A9B0C0A4ACBEA0B5C8A7BCD3B0C6DFBEB5CAADB8CAB0BBCAB3B3BEA8B9BEA9C9C9B5 +CFD2BECBD1BEC7CEBAC8CDB9C8C9B6C3C5B0C4C9B4C0C9B3C4D2BCC0CFB9B8C6AFB9C6AF +BAC6AEC6D5BACAE0C3BBD6B8A9C1A0B4C7A4B4C7A3B7CBA8A9BF9CB3CAA6BAD2AEACC4A2 +ADC3A3ADBEA3B0BDA4C2CCB4CDD7C1D3DFC9B9C3AFBAC1AEC8CEBBBDC5B1B1BDA7B1BDA5 +B7C1A8C3CCB4C0CAB4B5C1AAB5C1A9B7C6ADB6C9AFAEC6A9A7BEA1A8BB9EB0C2A5B2C5A8 +B4C8AAB8CCAEC1D9B8C5E0BCB4D1ADA7C2A0B7CFAFACC1A4B6C7AEB3C1ABB9C8B2B6C7B0 +B5C9AEB8CDB2B7CDB1B8CCB0BBCEB2BBCBB2BAC7B0BBC5B0B4C0AAAFBEA7AEBFA8BFD0BB +B7C8B3B3C3AEB6C7B1BACCB4BCCDB6C5D4BDC8D6C0B9C9B1AFC2A9B5CBAFAFC8A6AFC6A1 +ABC19EB6CCACB1C7AAA8BCA1B0C0A6BFCFB5BACAB1ADBEA5A6B89FA0B298A7BA9CB2C7A6 +A9C19DB1CBA5B3D0A8AACBA1A4C59AA2BF94A9C19AB3C8A5B0C4A4ACC1A3A8BEA0A8C1A1 +A2B99AA1B197A4AF99A6AF9BAAB19EB2B7A4B9C0ADA6AFA87686997593BD779ACB779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD +779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779BCD779ACB7593BD748597 +93A196A6B49EA6B4A0A7B3A3ADB7AABDC3B7D3DBCFDEEADBD9E7D5D6E3D2DEEDDDE0F1E0 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0E0F2DFDFF1DCDBEFD8D5EACFC8DFBFB0C8A6 +A1B8989FB397ABBAA1C3CFB8B8C5AEAAB8A2A2B19D99AA9796A69496A69497A79599A996 +9BAB969DAC979EAD979FAE989FAD98A0AE999FAD99A0AE9A9EAD989FAD97A2B099A3B29A +A3B299A3B299A5B39AA4B299A1B098A1B09AA2B09BA2B09AA3B199A2B199A2B199A3B199 +A2B199A3B29AA2B199A2B098A1AF97A0AF97A0AF98A1AF9AA0AF9A9EAF989EAF989FAF99 +A0AF99A0AF98A0AE989FAE979FAE98A1B099A0AF989FAF97A0B098A0B098A1B098A2B098 +A2B099A1B099A0B0989FAF989FAF98A1B19AA4B29CA9B8A1B1BFA8B8C6B1C2D0BBC9D9C2 +C9D8C0CEDCC0D2DFC0D1DEBFCFDCBCCCD7B8CED8B9CED7B7CBD5B4CBD6B4CAD6B5C7D4B3 +C6D3B3C7D3B4C8D4B4C9D5B5C8D5B6C9D6B7CBD7B8CCD8B9CCD7B9CCD7B9CAD6B7C8D4B6 +C6D4B6C6D4B6C4D2B5C3D1B5C3D1B5C4D3B6C6D4B7C7D4B7C8D5B9CAD6BBCAD7BDCBD8BE +CBD9BDCBD9BECDDBBFCFDCBFD1DDBED1DDBED3DEBED2DEBFD2DDBFD2DEBFD4DFC0D5E1C1 +C3D2B0A7B797A2B499A5B69EA6B7A1A5B5A0A6B5A1A8B7A6ABBBABAEBEAEACBDABACBDAB +A6B7A5A1B39EA5B6A0A9BAA1ACBEA4AEBFA5B3C2ABB3C1ACA8B7A49FB09D9CAD9B9CAB9A +9BAB9A9CAD9A9FB19CA1B49CA2B69CA3B79BA4B99BA7BD9FA5BB9EABBFA4B2C3A9B5C5AB +B8C6ACBDC9B0B9C6ADB0BFA5BAC9ACC0CEB0C0CDB0C2CEB3C1CEB3BDCCB1B8C8ADA1B1A4 +8193A491B2D399BEE69AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E79AC0E7 +9AC0E799BEE691B2D38092A29BAF99B5CD9FC3DAAAD4E9C1DFF1D3E1F2DBE1F1DFE1F2E0 +E0F1E0E1F2E1E0F1E1E0F1E0E0F1E0E0F1E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1DFF0DFBCCCBAB1BFA9B4C0A7B4BFA5B3BEA4B2BDA1B3BDA2B4BFA4B3BEA2 +B1BC9FAFB99FB0B9A0B2BAA1B2BCA1B1BCA1B1BDA1B1BDA1B7C3A8CBD6BDCED9C1B7C3AC +ACBAA0ACBA9FABB99DADBA9DAFBC9EB1BF9FB3C0A0B2BD9FB2BCA0B1BBA0B1BB9FB0BBA0 +B1BBA1B8C0A7BDC4ACBAC1A8B5BFA5B1BCA1B2BEA4C2CEB5CAD5BFB8C3AEB8C2AFBAC2B0 +B9C1AFBDC4B2C9D0BED5DAC9D1D6C5C3C7B6C0C3B3C1C5B5BCC0AFBEC2B0C3C7B4C6CCB9 +C9D0BDBEC6B2B2BCA7A8B39EA8B59EA9B69FAAB79FAEB9A2B5BFA8B7C1AAB4BEA7B3BFA5 +B5C1A5BAC7A8C5D2B3C9D6B7CAD6B8C9D4B8C7D2B7C4CFB5C5CFB6BDC8AEB2BFA3B3C1A1 +B3C2A1B2C3A0B2C29FB4C3A0B4C3A1B3C2A1B2C1A1B0C1A0B1C1A1B2C2A1B2C2A1B2C4A3 +B2C4A4B2C3A5B2C2A4B2C1A4B0BFA4AEBEA3AEC0A4B0C2A6B0C2A7AFC0A5ADBEA3ABBC9F +ADBD9FAEBE9FAEBFA0AEBFA1AEBFA1AFBFA1AFBFA0B0C0A1B0C0A1B0C0A1B1C3A2B2C5A2 +B3C6A1B4C6A0B3C59FB2C59FB2C6A1B1C5A2B1C3A3AFC1A2AFC1A2B0C1A2B0C0A1AEBDA1 +ADBBA1ABB9A0A9B79DA8B79CA5B69BA4B69BA7B99EA7B99DA8BA9EAABC9FA9BB9DA9BA9C +AABA9DABBA9DAEBC9EAFBE9DB0BF9CAFBF9BB0C19DB1C29EB1C29EB2C39FB2C2A0B3C3A0 +B3C3A0B4C2A1B4C2A2B4C3A3B5C3A3B4C3A1B4C2A1B4C2A2B4C2A3B4C3A3B3C3A3B5C4A5 +B6C6A8B8C7AAB7C7ABB8C7ACB7C7AAB6C6A7B5C4A3B4C3A0B4C3A0B4C3A0B4C29FB4C39F +B4C39FB5C39FB5C39FB5C39FB6C39FB5C39FB4C29EB4C39EB4C39EB5C39FB6C4A1B6C3A0 +B5C2A0B5C29FB5C2A0B5C2A1B5C2A1B4C2A1B4C2A0B4C2A1B4C2A1B4C1A2B2C1A1B2C0A0 +B0BE9EAEBC9CAEBD9DADBD9DABBB9CA7B79AA5B499A6B49AA7B69BA6B599A5B499A6B59A +A6B59BA8B99EA7BA9DA6BA9BA7BB9AAABD9BADBE9CAFBF9DAEBF9CACBD9BACBD9CACBD9C +ACBD9BABBB9BAABA9BA9B99AA9BA9BAABB9BAABB9CABBC9CABBB9BABBB9AAABB9AAABB9B +AABB9CAABA9DA7B79BA4B59BA3B59CA2B59BA3B69BA2B69AA2B69AA0B499A0B4999FB399 +9EB3989EB3989DB2989DB1979CAF969BAE969AAD9599AB949AAC969CAD979DAD979EAE98 +9FB0989FB1989FB1989FB198A0B198A2B299A2B198A2B197A2B197A3B397A4B397A5B498 +A6B599A4B399A3B39AA1B29A9FB1999FB0989FB1989FB198A0B2999FB1999EAF979EAF95 +9EAE969DAE969DAF979EB098A0B299A0B2999FB1999EAF989BAD969AAC9699AA9598A994 +98A893DEDEDC9D9D99222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222DEDEDC426695FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D99DEDEDCAABEA8ABBEA8ADBEA8AFBFA8ADBDA671705B +DA670DEB6B0AEA6B0BEA6C0BEA6C0CEA6D0DEA6E0EEA6E0DEA6F0FEA7010EA7011EA7111 +EB7313DA691069634E98A99697A99697A99697A99798AA989EB3A1A1AF9BA3AA9DA6A8A4 +A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 +A6A6A6A6A6A6A6A6A6A6A7A6A4A8A49BA4989CAC94A0B197A6BA9E9FB69E95AB9695A996 +96A99599AB969DB0999EB2989EB498A0B697A4B89AAABA9EB0BAA0B4BBA1B6BCA1B6BCA2 +BBC1A8C2CBB0C2D0B5C0D2B9B6CAB3AABEA7A8BCA3ADC2A8B0C6AAB3C6A9BBC8AAC1C5A8 +BCB99EBAB297C3BB9FCDCCAED5D9BCD2D8BCC4C9ADC8CFB3D6E2C7DAE9D0D4E3CAD1E0C6 +CEE1C7C7DEC6A6BEA897AD999BAD9A9EAC98A1AC97A2AD98A0AD989DAD989AAC979DAD97 +A3B29BA9BBA2ACC2A99EB59F9EB19CA8B39CAEB49BB8BFA4C4CEB4BECAB0B0B9A0AAB096 +B6BCA2BBC5ABB5C5A9BDD1B2B2C8A8A7BC9CA8B89BAAB59CAEB9A1ADB9A1ACB99DB8C6A7 +CFDFBEBECEB0B8C6AAC5D4B9BCCBB0BBCAB1C5D1BABDC4AFBCBFABC0C0AEBEBDABB9B8A6 +B9B8A5C0BFAAC8C9B4D3D8C3D3DBC7BEC9B5B7C1ADB0B8A4B3BBA5B9C1A9BDC9B0B5C7AB +AAC09FACC29EB0C6A0B1C8A0ACC29BB1C59FB2C5A3ACC0A1ADC0A3AFC1A7B5C4ACC0CBB4 +C3CCB6BDC6B2B8C3AFB8C2AFB3BEAAB7C3ADBAC8B0B7C5ACB4C0A7BBC3ADB3BAA5B0B7A0 +B4BBA3BBC4ACC0CFB7B1C6ABA7BFA1ACC5A5ADC5A4B2C9A8BFD6B7BFD5B6BDD2B2B9CEAD +BFD8B4C2DCB8C2D9B9AFC1A6A9B89FAEBAA2BBC8AEB4C4A9ADC1A2B0C4A7B4C8ACB7CBB0 +B9CDB2B7C9AFB5C4A9AFBCA1B5C1A8B9C6AEBBCAB3C2D1BAB6C4AEB4C2ABB8C7ADB7C6AB +B5C3A9BBC5ADB6BFA8B6BFA7C0CBB3C2D1B7BECFB4BDD2B4B7CDAFB9D1B2B5CDAEBDD3B5 +BCCFB2BDCEB3BACCB1B3C8AEB0C6ACADC2A8A7BC9EB6CDAAAFC9A3AEC9A1B6D3AAAFCFA4 +A9CA9DA2C193A7C295AEC79CAEC59EADC4A3A8C0A2A8C2A3A5C0A0A1B7999EAD94A1AC95 +A4AE99A8B09CB2B7A4BAC0AF9EA9A27D8D997080946F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F936F7F93 +6F7F936F7F936F7F936F7F936F7F9370809479899593A197ADBCA2A8BA9DA4B79BA6BAA0 +A7B9A3A9B6A7B5BDB3C3CAC0D2DDCED4E2CFD5E4D1DAEBD9DFF0DFE1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E0E1F2E0E1F2E0E1F2E0E1F2E0E0F1DFD9ECD5CEE4C7B5CBA9ABBE9FB7C6AB +B5C1AAB7C4ADA3B29B9DAE9996A79496A79496A69397A7949AA9969DAB979EAC989FAD98 +9FAD989FAD989FAD999FAE999EAD979DAD96A1B19AA3B29AA3B299A3B298A4B299A4B29A +A2B19AA2B19AA1B09AA2B09AA2B19AA2B199A2B19AA2B19AA1B099A3B199A2B199A1B097 +A0AF97A0AF97A1AF9AA1AE9A9FAE999EAE989FAF98A0AF9AA0AE999FAE989FAE989FAE98 +9FAE989FAE98A0AF99A0AF99A1AF99A0AE98A0AE98A1AF98A1AF99A1AF99A0AF999FAF99 +9FAE99A0AF9AA2B09BA7B59FACBAA3B7C5AEC0CEB8C7D6BFC8D6BDCEDAC0D5E1C3D4E1C0 +D0DDBBC8D5B3CBD6B3CFDAB7CFDBB8CFDBB8CFDBB7CCD9B5C8D4B1C9D5B5C8D4B6C8D5B5 +C9D5B5C7D4B3CBD8B7CED9B9CED9BACED9B9CDD8B7CBD7B6CAD6B7C8D6B8C6D4B7C4D3B6 +C4D3B6C4D2B5C6D4B7C7D5B8C8D5B9C9D6BACAD6BBCCD8BDCCD9BDCCD9BECCD9BDCDDABD +CFDBBED2DDBFD4DEC1D4DEC1D2DDBFD1DDBED4DFC0D6E1C2D4E1C1BDCDAAA9BC9BABBDA2 +ABBBA5A7B7A3A8B6A4A9B8A8ABBAABADBDAEADBDADADBDACAABAA8A9BAA4ABBDA4B1C2A7 +B5C6ACB2C2ABAFBEA8ADBCA7A5B6A19DAF999BAD989AAB989AAB989EAF9AA6B7A1B0C2A9 +B6C8AFBACBB2C0D1B6C0D1B7BBCCB3B5C6AFB8C8B3B8C8B3B5C5B0B2C2ADB1C2ACB3C3AC +BECDB4C3D0B7BDCAB2BAC7B0BBCAB2BACAB1B9CAB0B5C4AA9FAEA38696A27C8E9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E +7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7B8C9E7C8D9E84969E9FB19B +CADEB2DBEDC5DFF1D2E1F2DBE1F2DFE0F2E0E1F2E0E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E0F1E0C8D8C6 +B0C0ABB2BFA8B6C1A9B3BDA5B3BDA4B2BCA4B1BDA4B0BDA4B0BCA3AEB99FADB79EADB79F +AFB89FAFB89FB0BA9FB1BC9FB3BEA2B5BEA5B9C1ACB7C1ADB0BCA6AEBBA3ABB99FACB99F +AFBEA1B4C2A4B3C1A3AFBCA0ADB99FACB89FABB89FACB89FACB79FAEB7A0B1B9A3B4BBA5 +B2BBA2B1BBA1B0BAA1AFB9A2B9C2ACBBC4ADBCC4ADB8C1AAB3BDA8B2BCA7B2BBA8B4BCAB +B4BCACB1B9AAADB6A6ABB6A5ADB6A6ACB5A5AEB6A6AFB7A6AFB7A5AFB8A5ACB5A1A8B39D +A7B29BA6B29AA7B29BA7B19BA8B29CA9B39DAAB59FABB79EAFBBA0B5C0A5C1CAB1C6CEB4 +C7CEB5C7CEB7C7CDB7C3CAB4BFC8B1BAC5ADB2C0A4B1C1A1B2C2A1B2C2A1B2C19FB4C2A0 +B4C2A1B5C2A2B5C2A1B3C29FB2C29FB3C3A0B4C3A2B6C4A6B7C6ABB9C9B2B6C5AEB1C0A7 +B1C0A5B0BFA2B0C0A4B2C1A5B2C2A6B2C2A6B2C2A4B2C3A4B2C3A2B1C3A1B2C3A1B0C1A0 +B0C1A1AFC0A1AEC0A0ACBFA0AEBFA1AEBEA1ADBDA0AFC0A1B1C2A0B4C5A1B4C6A0B4C7A0 +B3C6A0B4C6A1B4C5A2B3C4A2B0C1A0B1C1A1AEBFA0ABBC9FA9BB9FA8BA9EA8BA9DA7BA9D +A6BA9EA7BA9EA8BB9EA9BB9EA9BC9EA8BC9EA6B99CA5B89BA5B79AA5B699A6B799A8BB9A +ACBF9BAEC29CAFC29BB1C39DB3C39FB4C3A1B3C3A1B3C3A1B4C3A0B4C29FB4C2A0B3C2A1 +B3C2A1B3C2A0B3C1A0B3C1A0B3C1A0B3C2A1B2C2A1B3C3A3B4C3A5B5C4A7B5C4A8B6C5AA +B7C5A9B7C4A8B5C3A4B5C3A1B4C3A0B4C39FB3C29EB3C29FB3C29FB4C2A0B4C3A1B5C3A0 +B5C3A0B5C29FB5C29FB3C19FB3C19FB4C2A0B4C39FB4C39FB4C3A0B4C2A0B4C2A0B4C2A1 +B4C2A0B3C19FB3C19FB3C19FB3C1A0B2C1A0B2C0A0B2BFA0B1BE9FB0BE9EAEBC9CAEBD9D +AFBE9DABBB9CA6B79AA3B398A2B298A2B198A1B198A1B198A2B199A5B49BA7B69DA6B79B +A8BA9BA9BC9BABBD9BADBE9CADBE9CADBD9CACBD9CADBE9CACBD9CABBC9BAABA99A9B998 +AABB9AABBC9CABBB9CACBB9CACBC9CABBB9BABBB9AABBB9BABBA9CAAB89DA7B59BA5B59A +A5B69BA5B79BA7B89BA6B99AA7B99BA6B99BA5B89BA6B89CA5B79BA4B69AA3B599A3B499 +A2B498A2B599A0B498A0B4989FB2989FB2999FB2999EB1979FB197A1B39AA0B39AA0B299 +9FB1979FB0979FAF979FAE969EAE979FAE97A0AE97A0AE97A1AF97A2B098A2B298A3B399 +A2B299A1B298A0B098A0B0979FAF989FAF989EAF979DAE969DAE969DAF979FB198A0B198 +A1B298A2B298A3B399A2B198A0B0979DAD969BAA9598A99497A894DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDC426695426695426695426695426695426695426695426695426695426695 +426695426695426695426695426695426695426695426695426695426695426695426695 +426695426695426695426695426695DEDEDC9D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99DEDEDC9D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D999D9D99 +9D9D99DEDEDCACBDA8ABBBA6ABBAA5ABB9A3ABB8A28E9C88666E5E616857626958636958 +636857636957646A576468576468566368576166555F64545C61525E685981917F9AAE99 +99AE9998AE999BB19D9DB4A19FB4A1A2B29E9DAD9998A89698A79495A49095A59297A693 +97A3909FA894A5AF9BA3B19BA0B19C9DAF9C9AA9969FAF9AA6B8A3A8BBA8A1B6A499AE9C +96A8969AAA979DAD99A1B19AA3B79F9FB59E98AE9998AD9899AE979CB0999DB29A9EB39A +9EB499A1B69AA4B99DA6BA9FA9BBA0AABAA0ACB89FAFB9A0B6BDA4B6BCA3B1B69EAAB29A +A5B098A6B39BA9B8A0B3C4ABB4C7ADACBFA5AABAA0AAB69EABB39DB4B9A1BFC0A7C0BFA6 +BCBAA1B6B29ABFBBA2D2CFB5D4D5B9D4DABECFD6BBCED6BCD3DFC5C4D7BFA5BEA89AB3A0 +99AE9B9AAC9799AB969BAC979DAD999DAC979DAD99A3B09AABB39BB7BFA2C0CCAFC3D7BB +B6D1B7A4BCA5A3B29CB3BCA4B2BAA1B1BCA0B1BEA3B5C2A8BCC8AEB4C2A7B9CEB1BBD7B7 +B1D3B3ABCBAE9DB69CA8B9A2AAB8A3AAB7A0A8B49BB7C5A8BCCBACB6C2A6B8C0A7BCC4AC +C0C9B3BAC5AEB5C0A9B0BAA4B3B9A5B1B5A1ADB19EB1B7A4B5BCA8B7BBA8C0C1AEBFBFAD +B2B4A2B1B5A4A8AF9DA8B09DAAB39FAAB49FA8B39CA8B69BADC1A1AEC4A2ABC29CA7C098 +A8C199A9C19AAABF9BABBC9DB9C8AEBCCBB3B9C9B1C3D4BCC3D4BDAFBDA9B1BDA8B3BFAA +B7C3ADB6C4ACB8C5ADB8C5AEB0BCA6AFBCA6A9B59FACB79FAFBAA1B8C4AAB7C6AAA9BC9D +ACC1A0B7CDAABDD4B1BFD8B5C7E0BEBCD4B4AFC5A8ADC0A2C1D2B3BCCDAFB3C5A9ACBDA3 +AABAA1AAB99EB6C5A9ADBFA0AABE9CB2C6A5B9CDADB5CBACACC4A7AFC7A9ADC4A6ABC0A1 +B2C6A8C4D8BCBFD3B8B5C7ADB1C2A8B0C0A4B4C2A6B3C3A6B1C2A5AABD9FABBC9DB3C1A3 +BAC6AAB2BDA3B2BDA4B9C6ADBED0B5C2DABCB9D4B4B6CFB0ABC0A2B2C3A7BCCDB1B6C8AD +AEC3A6B2C7A8A9C19CADC69FB0C9A1B3CDA5B3CEA7B3CFA7B1CEA6A9C59CA9C49AABC59B +ACC69EA7C19DA4BE9FA7C1A3A8C5A6A1BB9E97AB919CAA959FAB96A4AF98ABB69EABB8A0 +B2C2A8BBCFB1B6CBAFA1B89BA4BB9CA7BDA0B6CDB3B4CCB2ABC1A5ADC2A6A9C0A2A8C1A0 +A8C49FADC9A0A1BC93A3B896A5BA9BAFC5A7B0C8A9B3CBABBCD3B3B7CEAFAEC4A6BBCFB1 +B9CCADBFD5B4BBD1B2B8CEB1ACC1A5ACBFA4AFC0A4B3C4A9BECFB3CBDFC2BBD4B3A6C19E +A8C5A0A9C59FABC79CAAC696AAC795A3BF909EB98EA4BF93ACC99CAECCA1ACCBA2B1CEA7 +B3D0AAB6D0ABB6D0ABB3CDA9B3CEAAACC9A6A1BA9A9EB298A4B59DACBCA5A8B99FB3C5A8 +BED3B3B7CFAFA8C2A298B49297B3919BB6929DB7959CB293A4B89CC3D7BEC5DBC1BED7BC +9EBA9C98B3959EB89A98AE9495A89098A8929DAF99A1B49CA1B59BA8BBA0B2C3A9AFC1A7 +A8BDA1A3B99CA1B69CA6B8A0B3C4ADA8BAA49AAA9598A89398A79398A79397A79498A895 +9AA8969CAB989FAE99A1B19BA5B49DA4B39CA7B6A0A1B1999DAF949CAE959AA993A2B09B +ADBAA5AAB7A3ACBAA5AABAA3A6B69FA1B19B9FAE99A6B39EA6B39F9FAD9AA2AF9CA7B4A0 +A8B5A0ABB9A3ADBBA5AEBCA6AAB9A3B0BEA8B3C1ACABB9A5B3BFABB6C1AEB5C1ACC0CCB7 +C1CEB7BDCBB3C2D1B9C4D1BAC1CCB7CAD4BFD0DAC6D1DDC8CCD9C4CBD7C2B0BDA8A8B6A2 +ADBBA8B0BCA8AFBAA6C3CDBBD0DBC8B7C2AFB5C0AEB4BEACB3BEAAC7D5BFC2CFBAC1CDB7 +D2DDC5CAD7BCCAD7BCCDDABFD1DEC3BBC9ADAFBCA2BBC5AFC6D1BDB8C5B0ACBBA4B8C5B0 +B9C6B1B9C6B3A6B2A0ABB6A6ADB8A9ACB7A8A9B4A4B1BBAAB4BEADB9C3B1BAC4B1BAC5B0 +B5C2ACAFBDA7A9B8A1A4B199B2C0A5C5D5B7B9CCABB7CCABCEE2C2B7CAACA4B49FACB7A8 +CAD2C4E0EEDDE0F1DFDFF0DEDFF0DFE1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E0E1F2E1 +E1F2E1E1F2E1E1F2E0E1F2E0E1F2DFDDEFD7C4D8B9B8CBABB6C6ACB0C0A8A7B79FA4B39C +98A79397A79395A59396A69498A6959AA8969DAA989EAB989FAD98A0AD99A0AE999FAD99 +9DAD989DAD98A1B09AA3B29BA4B299A5B298A3B198A3B199A2B199A1B099A2B19AA1B09A +A2B09AA1B099A2B19AA2B199A0AF98A2B299A2B199A1B098A0AF98A0AF99A1AF99A0AE99 +A0AE999FAE989FAE979FAE989FAE989FAE989FAE989FAE98A0AD97A0AE98A0AF99A0AF99 +A0AE999FAE989FAF98A0AF99A1AF98A1AF98A0AF989FAE989FAE99A0AF9AA2B09AA6B49D +AAB99FB4C2AABDCBB5C5D4BDC8D6BEC5D2B9CEDABFD5E1C3D5E1C1D4E0BDD4DFBBD4DEBB +D4DEBCD4DEBCD4DEBAD3DEB9CED9B5CBD6B3CBD6B5CAD7B6CDD9B8CCD8B6CCD8B6CEDAB9 +D0DABAD0DBBACFDBB9CEDAB7CDD9B8CCD8B9C9D7B8C7D5B8C7D5B8C6D4B7C7D5B7C8D6B9 +C9D7BACAD7BBCBD8BCCCD8BDCCD9BECDD9BECDDABECEDABECFDABED1DCBFD4DDC1D4DDC2 +D3DDBFD3DDBFD5E0C2D5E1C2D6E2C3CFDDBCB3C4A3ACBDA2AEBFA9A9B9A7A4B3A2A6B5A5 +A8B6A8A9B8A9ACBBABACBCA9AABAA5AEBFA7B4C6ACB7C9B0BACAB3B1C1AAADBCA5ADBCA4 +A9B9A0A5B59DA1B29A9FB19A9FB19AA3B59FACBDA8B5C4B0BECCB9BFCDBBBECCBAC2D0BE +C2D1BEBBCBB8B3C4B0B7C9B4B9CBB5B8CBB5B9CCB5BDCFB8C2D0BBC6D4BFBCCBB4B7C6AF +B9C9B1B9CAB2B9C9B2B9C9B1B6C5AEB3C1ACB0BFAAAEBFA9AFBFA9B0BFA8B0BFA8AEBEA6 +ADBCA5AEBDA6AFBEA8AEBEA8ADBDA5ACBDA5AEBFA6B0C0A7B2C2A8B3C5ACB5C8AFB6CBB1 +B8CCB3B8CBB3B7CBB2B9CBB3B9CBB3BACCB4BBCDB5BBCEB7BDCEB8BDCEB9BECFBABFD1BC +C0D1BCC2D3BDC4D5BEC4D6BEC5D7BDC5D7BDC3D5BABECFB3BBCCB0B4C6A9AEBFA4ABBBA4 +B3C1AFB8C5B4B6C2B3B3BFAFB3C0AFAAB9A8A8B8A6ABBBA8AAB9A4ABB9A3ADBAA3ADBBA2 +AEBBA2A9B89EA4B39AA4B39CA3B39C9EB0989DAE989DAD989CAB959CA99598A89497A794 +96A69397A69496A69396A69396A69297A6939AA8959BA8959AA8949DAA979FAB979EAA97 +9CA8959BA8949AA79499A69398A69497A59398A69498A59399A69499A69499A6959AA695 +99A69499A79498A69499A6949AA6949AA7959AA7959AA7959AA7959BA8949BA8959CA895 +9CA8959CA8969CA9969CA9969EAA969EA995A0AA96A0AA96A1AC97A1AD97A1AD96A3AE96 +A4AE97A6AF98A6B099A6B098A6B197A7B298A8B399A9B49AAAB69BABB79BACB99CACB99C +AFBC9FB1BFA1B1C2A2B3C9A3C1D7B1D0E3C6D7E8D4D8E8D7D8E8D7D8E8D8D8E8D8D8E8D8 +D8E8D8D8E8D8D8E8D8D8E8D8D8E8D8D8E8D8D8E8D8D8E8D7D8E8D8D8E8D8D8E8D7D8E8D7 +D8E8D8D8E8D7D7E7D5CEDEC8C3D3B6C1CFAFBFCBAABFC9A8BFC6A7BEC4A7B3BC9FAFB79C +BFC7ABBAC1A7A8B29BAAB4A0ABB6A2A8B39EA6B29CA7B39CA7B39CA6B29CA8B39DA7B39C +A7B69EA7B69DA8B99CA8BB9AABC09BB3CB9FC2D8A8D3E6BADFF0D0E1F2DAE0F2DFE0F2E0 +E1F2E0E1F1E1E1F2E1E1F2E0E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1DEEFDFD9E9D9D8E8D8DCEBDCE0F0E0E1F2E1 +E1F2E1E1F2E1E1F2E1E1F2E1E1F2E1E1F2E0E1F2E1D2E3D1B0C0ACB1BEA8B3BEA6B1BCA4 +B0BBA2B0BBA2B0BCA2AFBCA1AEBBA0AEBB9FADB99DACB89DACB89DABB79DADB89DAFBA9D +B0BB9FB2BCA2B4BDA4B2BDA4B0BCA2B0BCA2AFBBA1AEBA9FB2BFA3B8C5A9B6C3A8B1BDA2 +ADBA9FABB89FAAB89FA9B79EABB89FACB8A0ADB8A0ADB69EADB69DAEB89EAEB99FACB89E +AFBAA0B1BBA1B1BAA2B0B9A2AEB9A1AFB9A1ADB8A0ACB7A1ACB7A3A9B4A1A8B39FA7B29E +A7B29EA8B39FA9B49FA9B59DA9B59EAAB59DA8B49CA7B29AA6B19AA6B19AA5B199A5B199 +A6B299A7B39AA8B49AA8B49BA8B39CAAB49EADB6A1B1BAA5B3BCA6B3BDA6B4BFA6B6C2A8 +B6C3A7B5C2A6B3C1A3B1C0A1B1C0A0B2C1A0B3C19FB3C29FB3C2A0B2C19FB2C19FB2C1A0 +B2C1A0B2C1A1B3C1A1B4C1A2B3C1A5B5C4AAB5C3ABB1BFA7ADBDA2AEBEA3B0BFA3B2C1A3 +B3C2A3B3C3A3B3C4A3B5C5A4B7C6A6B6C6A5B4C4A3B3C3A3B3C3A4B1C2A4AFC2A4B0C3A6 +B1C2A7ADBEA3A9B99EAABA9EACBC9EAFBF9EB0C19FB1C2A0B1C3A0B3C3A0B3C39FB2C29F +AFBF9EAFBFA0AEC0A1ACBFA0AABE9FABBF9FACBE9FADBFA1ACBFA2ADBFA3ADBEA2ADBDA0 +ADBEA0ACBEA0A8BB9CA8BB9DA8BB9CA6BA9AA7BB9AACC09EAFC2A0B0C3A0B1C29FB1C29E +B2C29EB3C3A0B4C3A2B4C4A3B4C3A1B5C4A1B4C39FB3C39FB2C29EB3C29EB3C19FB2C29F +B2C29EB2C29FB2C19FB2C1A0B3C1A2B3C1A3B3C1A4B1BFA3B1BEA2B2BFA3B1C0A2B3C2A2 +B4C3A2B4C2A1B3C1A0B2C1A0B3C2A1B3C3A1B3C3A2B4C3A1B4C3A0B5C2A0B4C2A0B4C2A0 +B4C2A0B4C2A1B4C2A0B4C2A0B3C1A0B3C1A1B3C1A0B4C1A0B3C19FB3C09EB3C09FB3C09F +B2C0A0B0BF9EB1BF9FB1BF9EB1BE9EB0BE9EAFBC9DAFBC9DAEBC9DADBB9DABBA9CA6B699 +A2B398A0B2999EAF989EAF989FB099A0B199A0B198A2B399A6B89AA9BB9AAABB9AABBC9B +AABB9BACBD9CACBD9BACBD9CACBD9DABBC9DACBD9CAABB9AAABB9AABBC9BACBB9BACBC9B +ABBB9CAABB9CABBC9CABBC9CA9B99CA7B59CA4B39AA3B499A4B69AA6B79AA7B89AA8B89A +A8B89AA8B99AA8B99BA6B89AA6B79AA5B699A5B599A5B598A4B497A5B598A5B698A4B698 +A5B599A5B599A4B599A3B599A2B499A4B59AA3B59AA3B499A3B499A3B399A3B399A0B098 +9CAD969BAC969BAC969BAB969BAB959BAC959DAE96A1B299A2B299A2B198A0B0979FAF97 +9EAF989DAF979DAF979CAF979BAE969CAE979EAF979FB096A1B097A0AF97A1AF98A0AE97 +9EAD979DAC979BAA9599A99598A894DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDC +DEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCDEDEDCAFC1ABADBEA8 +ABBDA7A8B8A2A6B79FA7B89FA7BAA1ABBFA6AABEA5ADBFA7AEBFA7ADBFA6ADBFA5ADC0A5 +ADBFA5ADBFA6ACC0A6ACC0A6A9BEA4A4BAA0A0B79FA0B7A1A0B7A19DB39EA4BBA6A9C0AA + +%%PageTrailer +%%Trailer +%%EOF diff --git a/subsites/projects/eonaton/stuff/.gitignore b/subsites/projects/eonaton/stuff/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/eonaton/stuff/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/eonaton/stuff/grid-8x10.png b/subsites/projects/eonaton/stuff/grid-8x10.png new file mode 100644 index 0000000..161b6f0 Binary files /dev/null and b/subsites/projects/eonaton/stuff/grid-8x10.png differ diff --git a/subsites/projects/eonaton/stuff/logo.svg b/subsites/projects/eonaton/stuff/logo.svg new file mode 100644 index 0000000..a037327 --- /dev/null +++ b/subsites/projects/eonaton/stuff/logo.svg @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Eon Aton + + + + + + + + + + diff --git a/subsites/projects/eonaton/stuff/originaldrawing.jpg b/subsites/projects/eonaton/stuff/originaldrawing.jpg new file mode 100644 index 0000000..e16a48b Binary files /dev/null and b/subsites/projects/eonaton/stuff/originaldrawing.jpg differ diff --git a/subsites/projects/eonaton/stuff/originaldrawing.png b/subsites/projects/eonaton/stuff/originaldrawing.png new file mode 100644 index 0000000..65377fc Binary files /dev/null and b/subsites/projects/eonaton/stuff/originaldrawing.png differ diff --git a/subsites/projects/eonaton/stuff/wiz-remake.png b/subsites/projects/eonaton/stuff/wiz-remake.png new file mode 100644 index 0000000..931b2f5 Binary files /dev/null and b/subsites/projects/eonaton/stuff/wiz-remake.png differ diff --git a/subsites/projects/eonaton/stuff/wiz-transparent.png b/subsites/projects/eonaton/stuff/wiz-transparent.png new file mode 100644 index 0000000..25cf4fd Binary files /dev/null and b/subsites/projects/eonaton/stuff/wiz-transparent.png differ diff --git a/subsites/projects/eonaton/stuff/wiz.png b/subsites/projects/eonaton/stuff/wiz.png new file mode 100644 index 0000000..d09e245 Binary files /dev/null and b/subsites/projects/eonaton/stuff/wiz.png differ diff --git a/subsites/projects/evolution/.gitignore b/subsites/projects/evolution/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/evolution/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/evolution/img/apic.jpg b/subsites/projects/evolution/img/apic.jpg new file mode 100644 index 0000000..989c8d8 Binary files /dev/null and b/subsites/projects/evolution/img/apic.jpg differ diff --git a/subsites/projects/evolution/img/bg.png b/subsites/projects/evolution/img/bg.png new file mode 100644 index 0000000..745d5d2 Binary files /dev/null and b/subsites/projects/evolution/img/bg.png differ diff --git a/subsites/projects/evolution/img/gallery.jpg b/subsites/projects/evolution/img/gallery.jpg new file mode 100644 index 0000000..55b8ddd Binary files /dev/null and b/subsites/projects/evolution/img/gallery.jpg differ diff --git a/subsites/projects/evolution/img/gbg.png b/subsites/projects/evolution/img/gbg.png new file mode 100644 index 0000000..cdb3eb4 Binary files /dev/null and b/subsites/projects/evolution/img/gbg.png differ diff --git a/subsites/projects/evolution/img/header.png b/subsites/projects/evolution/img/header.png new file mode 100644 index 0000000..bfec1d3 Binary files /dev/null and b/subsites/projects/evolution/img/header.png differ diff --git a/subsites/projects/evolution/index.htm b/subsites/projects/evolution/index.htm new file mode 100644 index 0000000..11f3665 --- /dev/null +++ b/subsites/projects/evolution/index.htm @@ -0,0 +1,291 @@ + + + +Evolution + + + + +
+ +
+
Jump to gallery
+

A great discovery

+
+

A "humanato"

+
+

+Recently scientists made an amazing discovery while doing some research on how to make better french fries. They noticed that some of the potatoes had taken the form of humanlike creatures. Jack N. Erdbahn, head scientist of the "How To Make French Fries Even Tastier While Keeping The Fat Percent Low And Not Destroying The Original Potato Flavour" research group, explains:
+"It was a schockingly schocking schock. When I looked at Research Potato No. 542109, it looked back at me! Really! Then I tried talking to it, but it didn't answer. It's odd. I was sure it wanted to tell me something."
+Subsequently the research group ordered 1,000,000 potatoes from all over the world. 30 people used 1 month to examine all potatoes, and in the end only a few potatoes qualified as "humanatoes", a new term meaning "humanlike potatoes", invented by peeler Pedro P. E. Elertos after having peeled his 653rd potato.
+Later in a press release, Erdbahn stated that having found a few incredibly manlike potatoes was a great discovery for humanity, and that it would help scientists all over the world understand evolution better.
+The potatoes which didn't qualify as humanatoes are now being used as practice potatoes for chef students. "Obviously they [the potatoes] can't be eaten, but they serve as good practice for my students" chef Bill C. Ookland states. +


+

Minister laughs at humanatoes

+

When Minister Goodwill of the Catholic Church "Jesus loves you! Church" was confronted with a picture of a humanato, he thought it was a joke. "You know, this was almost as funny as when.. What was his name.. Darnwine..? suggested that humans were once apes. Oh, and those people who claim the Earth isn't flat.. Just how stupid are you allowed to be?" the minister explains, clearly having drunk too much of the altar wine.

+
+

A gallery with the most humanlike humanato, named "Potato Bob" after Bob Potato, team manager, can be found below. All photos are copyright © The Potato Research group (but the group have licensed them under CC-BY-SA).

+ +
+ + +

Now also on Uncyclopedia! That simply proves the truth. Click here.

+ +
+ +
+ + \ No newline at end of file diff --git a/subsites/projects/gt3000/.gitignore b/subsites/projects/gt3000/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/gt3000/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/gt3000/0.png b/subsites/projects/gt3000/0.png new file mode 100644 index 0000000..571afa4 Binary files /dev/null and b/subsites/projects/gt3000/0.png differ diff --git a/subsites/projects/gt3000/1.png b/subsites/projects/gt3000/1.png new file mode 100644 index 0000000..dfe4550 Binary files /dev/null and b/subsites/projects/gt3000/1.png differ diff --git a/subsites/projects/gt3000/index.htm b/subsites/projects/gt3000/index.htm new file mode 100644 index 0000000..707b40c --- /dev/null +++ b/subsites/projects/gt3000/index.htm @@ -0,0 +1,752 @@ + + + +GT 3000 + + + + + +
+

Instructions:

+
+

Press "P" to pause the game.

+

Control the (invisible) car with the arrow keys.

+

Press "Page Up" or "Page Down" to scroll the message box.

+
+
+
Loading track: 0%
+
Loading images: 0%
+
+
+
+
+ + \ No newline at end of file diff --git a/subsites/projects/gt3000/logo.png b/subsites/projects/gt3000/logo.png new file mode 100644 index 0000000..437a3bf Binary files /dev/null and b/subsites/projects/gt3000/logo.png differ diff --git a/subsites/projects/gt3000/msgs.png b/subsites/projects/gt3000/msgs.png new file mode 100644 index 0000000..f05b7ae Binary files /dev/null and b/subsites/projects/gt3000/msgs.png differ diff --git a/subsites/projects/gt3000/msgsbox.png b/subsites/projects/gt3000/msgsbox.png new file mode 100644 index 0000000..3177a91 Binary files /dev/null and b/subsites/projects/gt3000/msgsbox.png differ diff --git a/subsites/projects/gt3000/tire.png b/subsites/projects/gt3000/tire.png new file mode 100644 index 0000000..644ddc5 Binary files /dev/null and b/subsites/projects/gt3000/tire.png differ diff --git a/subsites/projects/index.php b/subsites/projects/index.php new file mode 100644 index 0000000..30c0fae --- /dev/null +++ b/subsites/projects/index.php @@ -0,0 +1,3 @@ + diff --git a/subsites/projects/jap/header.png b/subsites/projects/jap/header.png new file mode 100644 index 0000000..1b71247 Binary files /dev/null and b/subsites/projects/jap/header.png differ diff --git a/subsites/projects/jap/header.xcf b/subsites/projects/jap/header.xcf new file mode 100644 index 0000000..fe08e64 Binary files /dev/null and b/subsites/projects/jap/header.xcf differ diff --git a/subsites/projects/jap/index.php b/subsites/projects/jap/index.php new file mode 100644 index 0000000..7af9e28 --- /dev/null +++ b/subsites/projects/jap/index.php @@ -0,0 +1,140 @@ +",$fr); +$fr=explode("",$fr[1]); +$title=$fr[0]; +$sites.="".$title.""; +} +} +} +?> + + + +Japanese Section + + + +
+ +
+

Introduction

+Japanese is an odd language, yet a language spoken by 130 million people. While languages in Europe generally have some similarities, the only thing Japanese has in common with i.e. English is a few loan words. It doesn't have an alphabet like most languages do, but instead it uses a tremendous amount of signs, known as
kanji
,
hiragana
and
katakana
. It's pretty confusing if you don't know Japanese. Which I don't.

+Well, I've been fiddling with creating some "web apps" with focus on the Japanese language, and you can find those at this page. I've also put up some links to informative sites which in more detail explain the oddity that is Japanese. + +

Web apps

+
+ +
+

Links

+

Wikipedia's article on hiragana. Includes table with all hiragana signs.

+

Wikipedia's article on katakana. Includes table with all katakana signs.

+

Various Japanese learning ressources. Includes link to a great text editor / dictionary called "JWPce".

+

A hiragana table for people who doesn't have support for Japanese signs in their browser.

+

A katakana table for people who doesn't have support for Japanese signs in their browser.

+

If you're planning on taking a trip to Japan, the situational conversations on this site may be a good start.

+
+
+ + \ No newline at end of file diff --git a/subsites/projects/jap/kanaverter.png b/subsites/projects/jap/kanaverter.png new file mode 100644 index 0000000..82d81c5 Binary files /dev/null and b/subsites/projects/jap/kanaverter.png differ diff --git a/subsites/projects/jap/kanaverter/bak/logo.xcf b/subsites/projects/jap/kanaverter/bak/logo.xcf new file mode 100644 index 0000000..93f9a5c Binary files /dev/null and b/subsites/projects/jap/kanaverter/bak/logo.xcf differ diff --git a/subsites/projects/jap/kanaverter/bak/t.txt b/subsites/projects/jap/kanaverter/bak/t.txt new file mode 100644 index 0000000..64d4d93 --- /dev/null +++ b/subsites/projects/jap/kanaverter/bak/t.txt @@ -0,0 +1,30 @@ +function convert_value(str,from,to) { +strlen=str.length +cstart=0 +ftxt="" +for (i=0;icstart) ftxt+=ctxt +ftxt=html_entity_decode(ftxt) +return ftxt +} \ No newline at end of file diff --git a/subsites/projects/jap/kanaverter/index.htm b/subsites/projects/jap/kanaverter/index.htm new file mode 100644 index 0000000..b0e6a46 --- /dev/null +++ b/subsites/projects/jap/kanaverter/index.htm @@ -0,0 +1,511 @@ + + + +kanaverter [JavaScript] + + + + + +
+ +
+Warning! +
+This isn't a very good kana-romaji converter. For one thing, it's in a web browser and relies on the power of the user's computer. Second, it's also not complete. It only translates basic kanas. Kanas consisting of 2 signs simply don't exist in this web app. Instead I recommend JWPce for use as a text editor. It's simple and works perfectly. +
+
+ + +
+

Romaji

+ +
+ +
+

Kana

+ +
+

Hiragana:

+ +

Katakana:

+ +
+
+ +
+ + diff --git a/subsites/projects/jap/kanaverter/logo.png b/subsites/projects/jap/kanaverter/logo.png new file mode 100644 index 0000000..c407ee0 Binary files /dev/null and b/subsites/projects/jap/kanaverter/logo.png differ diff --git a/subsites/projects/jap/kanaviewer.png b/subsites/projects/jap/kanaviewer.png new file mode 100644 index 0000000..0c43ac4 Binary files /dev/null and b/subsites/projects/jap/kanaviewer.png differ diff --git a/subsites/projects/jap/kanaviewer/bak/logo.xcf b/subsites/projects/jap/kanaviewer/bak/logo.xcf new file mode 100644 index 0000000..9a94a72 Binary files /dev/null and b/subsites/projects/jap/kanaviewer/bak/logo.xcf differ diff --git a/subsites/projects/jap/kanaviewer/db.php b/subsites/projects/jap/kanaviewer/db.php new file mode 100644 index 0000000..923cad7 --- /dev/null +++ b/subsites/projects/jap/kanaviewer/db.php @@ -0,0 +1,102 @@ + +362o +354a +373sa +365ki +414ma +411ho +399ha +424yo +416mu +418mo +375shi,si +_ +396nu +417me +392to +371ko +395ni +383ta +394na +397ne +431wa +428le,re +379se +369ke +_ +415mi +398no +388tsu,tzu,tu +358u +425la,ra +385chi,ci,ti +429lo,ro +427lu,ru +422yu +420ya +434wo +426li,ri +_ +435n,n' +360e +381so +390te +408he +367ku +405fu,hu +377su +402hi +363ka +- +356i +| +459ka +454u +513me +494no +452i +488to +481chi,ci,ti +458o +511mi +520yo +- +512mu +_ +465ke +527wa +492nu +477so +531n,n' +469sa +490na +486te +518yu +467ko +456e +_ +463ku +501fu,hu +473su +484tsu,tzu,tu +471shi,si +522li,ri +523lu,ru +524le,re +498hi +525lo,ro +504he +507ho +_ +479ta +521la,ra +530wo +- +461ki +491ni +495ha +475se +516ya +450a +510ma +493ne \ No newline at end of file diff --git a/subsites/projects/jap/kanaviewer/index.php b/subsites/projects/jap/kanaviewer/index.php new file mode 100644 index 0000000..900bc2b --- /dev/null +++ b/subsites/projects/jap/kanaviewer/index.php @@ -0,0 +1,122 @@ +Hiragana:"; +else $ft.="

Katakana:

"; +$odb1=explode("\r\n_\r\n",$odb[$i]); +$odb1l=sizeof($odb1); +for ($ii=0;$ii<$odb1l;$ii++) { +$odb2=explode("\r\n",$odb1[$ii]); +$odb2l=sizeof($odb2); +for ($iii=0;$iii<$odb2l;$iii++) { +$cdp=$odb2[$iii]; +if ($cdp!="-") { +$cdpa=substr($cdp,0,3); +$cdpb=substr($cdp,3); +$ft.="
".$cdpb."
".$cdpa.";
"; +} +else $ft.="
"; +} +if ($ii+1<$odb1l) $ft.="\n
\n"; +} +if ($i+1<$odbl) $ft.="\n
\n"; +} +?> + + + +kanaviewer + + + + +
+ +
+ + \ No newline at end of file diff --git a/subsites/projects/jap/kanaviewer/logo.png b/subsites/projects/jap/kanaviewer/logo.png new file mode 100644 index 0000000..666eb09 Binary files /dev/null and b/subsites/projects/jap/kanaviewer/logo.png differ diff --git a/subsites/projects/misc/bibbob-0.1.1.tar.gz b/subsites/projects/misc/bibbob-0.1.1.tar.gz new file mode 100644 index 0000000..e6bd99a Binary files /dev/null and b/subsites/projects/misc/bibbob-0.1.1.tar.gz differ diff --git a/subsites/projects/misc/bibbob-0.1.tar.gz b/subsites/projects/misc/bibbob-0.1.tar.gz new file mode 100644 index 0000000..25d89a3 Binary files /dev/null and b/subsites/projects/misc/bibbob-0.1.tar.gz differ diff --git a/subsites/projects/misc/cheatbibtex-0.1.tar.gz b/subsites/projects/misc/cheatbibtex-0.1.tar.gz new file mode 100644 index 0000000..5ad2361 Binary files /dev/null and b/subsites/projects/misc/cheatbibtex-0.1.tar.gz differ diff --git a/subsites/projects/misc/colchs.tgz b/subsites/projects/misc/colchs.tgz new file mode 100644 index 0000000..de8e835 Binary files /dev/null and b/subsites/projects/misc/colchs.tgz differ diff --git a/subsites/projects/misc/data2png.tar.gz b/subsites/projects/misc/data2png.tar.gz new file mode 100755 index 0000000..4a34068 Binary files /dev/null and b/subsites/projects/misc/data2png.tar.gz differ diff --git a/subsites/projects/misc/data2wav.tgz b/subsites/projects/misc/data2wav.tgz new file mode 100644 index 0000000..d740015 Binary files /dev/null and b/subsites/projects/misc/data2wav.tgz differ diff --git a/subsites/projects/misc/gadon.tgz b/subsites/projects/misc/gadon.tgz new file mode 100644 index 0000000..72d4b2c Binary files /dev/null and b/subsites/projects/misc/gadon.tgz differ diff --git a/subsites/projects/misc/googolplex.c b/subsites/projects/misc/googolplex.c new file mode 100755 index 0000000..a7fe7dc --- /dev/null +++ b/subsites/projects/misc/googolplex.c @@ -0,0 +1,30 @@ +#include + +unsigned int i[20]; + +int main() { + putchar('1'); + for (i[0] = 0; i[0] < 100000; i[0]++) { + for (i[1] = 0; i[1] < 100000; i[1]++) { + for (i[2] = 0; i[2] < 100000; i[2]++) { + for (i[3] = 0; i[3] < 100000; i[3]++) { + for (i[4] = 0; i[4] < 100000; i[4]++) { + for (i[5] = 0; i[5] < 100000; i[5]++) { + for (i[6] = 0; i[6] < 100000; i[6]++) { + for (i[7] = 0; i[7] < 100000; i[7]++) { + for (i[8] = 0; i[8] < 100000; i[8]++) { + for (i[9] = 0; i[9] < 100000; i[9]++) { + for (i[10] = 0; i[10] < 100000; i[10]++) { + for (i[11] = 0; i[11] < 100000; i[11]++) { + for (i[12] = 0; i[12] < 100000; i[12]++) { + for (i[13] = 0; i[13] < 100000; i[13]++) { + for (i[14] = 0; i[14] < 100000; i[14]++) { + for (i[15] = 0; i[15] < 100000; i[15]++) { + for (i[16] = 0; i[16] < 100000; i[16]++) { + for (i[17] = 0; i[17] < 100000; i[17]++) { + for (i[18] = 0; i[18] < 100000; i[18]++) { + for (i[19] = 0; i[19] < 100000; i[19]++) { + putchar('0'); + }}}}}}}}}}}}}}}}}}}} + return 0; +} diff --git a/subsites/projects/misc/lapyrint.tar.gz b/subsites/projects/misc/lapyrint.tar.gz new file mode 100755 index 0000000..20cdf44 Binary files /dev/null and b/subsites/projects/misc/lapyrint.tar.gz differ diff --git a/subsites/projects/misc/mssrnm.gz b/subsites/projects/misc/mssrnm.gz new file mode 100755 index 0000000..f323b05 Binary files /dev/null and b/subsites/projects/misc/mssrnm.gz differ diff --git a/subsites/projects/misc/mustdo.tgz b/subsites/projects/misc/mustdo.tgz new file mode 100644 index 0000000..e48ac3a Binary files /dev/null and b/subsites/projects/misc/mustdo.tgz differ diff --git a/subsites/projects/misc/pdfsplit.tar.gz b/subsites/projects/misc/pdfsplit.tar.gz new file mode 100644 index 0000000..6e07bfe Binary files /dev/null and b/subsites/projects/misc/pdfsplit.tar.gz differ diff --git a/subsites/projects/misc/pitivi-smil.tgz b/subsites/projects/misc/pitivi-smil.tgz new file mode 100644 index 0000000..f8af18f Binary files /dev/null and b/subsites/projects/misc/pitivi-smil.tgz differ diff --git a/subsites/projects/misc/problist.tar.gz b/subsites/projects/misc/problist.tar.gz new file mode 100755 index 0000000..4bf21be Binary files /dev/null and b/subsites/projects/misc/problist.tar.gz differ diff --git a/subsites/projects/misc/search.tar.gz b/subsites/projects/misc/search.tar.gz new file mode 100755 index 0000000..362d52a Binary files /dev/null and b/subsites/projects/misc/search.tar.gz differ diff --git a/subsites/projects/misc/stanimate.gz b/subsites/projects/misc/stanimate.gz new file mode 100755 index 0000000..b988830 Binary files /dev/null and b/subsites/projects/misc/stanimate.gz differ diff --git a/subsites/projects/misc/todo.tar.gz b/subsites/projects/misc/todo.tar.gz new file mode 100755 index 0000000..42ad795 Binary files /dev/null and b/subsites/projects/misc/todo.tar.gz differ diff --git a/subsites/projects/misc/wikiaq-0.1.tar.gz b/subsites/projects/misc/wikiaq-0.1.tar.gz new file mode 100644 index 0000000..8246732 Binary files /dev/null and b/subsites/projects/misc/wikiaq-0.1.tar.gz differ diff --git a/subsites/projects/misc/words.tar.gz b/subsites/projects/misc/words.tar.gz new file mode 100644 index 0000000..a0d9a48 Binary files /dev/null and b/subsites/projects/misc/words.tar.gz differ diff --git a/subsites/projects/nalgh/example.php b/subsites/projects/nalgh/example.php new file mode 100755 index 0000000..c2f4be0 --- /dev/null +++ b/subsites/projects/nalgh/example.php @@ -0,0 +1,26 @@ + diff --git a/subsites/projects/nalgh/nalgh.php b/subsites/projects/nalgh/nalgh.php new file mode 100755 index 0000000..ed46eed --- /dev/null +++ b/subsites/projects/nalgh/nalgh.php @@ -0,0 +1,75 @@ + diff --git a/subsites/projects/nalgh/writeclearly-preface b/subsites/projects/nalgh/writeclearly-preface new file mode 100755 index 0000000..d7cd4d2 --- /dev/null +++ b/subsites/projects/nalgh/writeclearly-preface @@ -0,0 +1,127 @@ +Almost every English boy can be taught to write clearly, so far at +least as clearness depends upon the arrangement of words. Force, +elegance, and variety of style are more difficult to teach, and far +more difficult to learn; but clear writing can be reduced to rules. To +teach the art of writing clearly is the main object of these Rules and +Exercises. + +Ambiguity may arise, not only from bad arrangement, but also from +other causes--from the misuse of single words, and from confused +thought. These causes are not removable by definite rules, and +therefore, though not neglected, are not prominently considered in +this book. My object rather is to point out some few continually +recurring causes of ambiguity, and to suggest definite remedies in +each case. Speeches in Parliament, newspaper narratives and articles, +and, above all, resolutions at public meetings, furnish abundant +instances of obscurity arising from the monotonous neglect of some +dozen simple rules. + +The art of writing forcibly is, of course, a valuable +acquisition--almost as valuable as the art of writing clearly. But +forcible expression is not, like clear expression, a mere question of +mechanism and of the manipulation of words; it is a much higher power, +and implies much more. + +Writing clearly does not imply thinking clearly. A man may think and +reason as obscurely as Dogberry himself, but he may (though it is not +probable that he will) be able to write clearly for all that. Writing +clearly--so far as arrangement of words is concerned--is a mere matter +of adverbs, conjunctions, prepositions, and auxiliary verbs, placed +and repeated according to definite rules.[1] Even obscure or illogical +thought can be clearly expressed; indeed, the transparent medium of +clear writing is not least beneficial when it reveals the illogical +nature of the meaning beneath it. + +On the other hand, if a man is to write forcibly, he must (to use a +well-known illustration) describe Jerusalem as "sown with salt," not +as "captured," and the Jews not as being "subdued" but as "almost +exterminated" by Titus. But what does this imply? It implies +knowledge, and very often a great deal of knowledge, and it implies +also a vivid imagination. The writer must have eyes to see the vivid +side of everything, as well as words to describe what he sees. Hence +forcible writing, and of course tasteful writing also, is far less a +matter of rules than is clear writing; and hence, though forcible +writing is exemplified in the exercises, clear writing occupies most +of the space devoted to the rules. + +Boys who are studying Latin and Greek stand in especial need of help +to enable them to write a long English sentence clearly. The periods +of Thucydides and Cicero are not easily rendered into our idiom +without some knowledge of the links that connect an English sentence. + +There is scarcely any better training, rhetorical as well as logical, +than the task of construing Thucydides into genuine English; but the +flat, vague, long-winded Greek-English and Latin-English imposture +that is often tolerated in our examinations and is allowed to pass +current for genuine English, diminishes instead of increasing the +power that our pupils should possess over their native language. By +getting marks at school and college for construing good Greek and +Latin into bad English, our pupils systematically unlearn what they +may have been allowed to pick up from Milton and from Shakespeare. + +I must acknowledge very large obligations to Professor Bain's treatise +on "English Composition and Rhetoric," and also to his English +Grammar. I have not always been able to agree with Professor Bain as +to matters of taste; but I find it difficult to express my admiration +for the systematic thoroughness and suggestiveness of his book on +Composition. In particular, Professor Bain's rule on the use of "that" +and "which" (see Rule 8) deserves to be better known.[2] The ambiguity +produced by the confusion between these two forms of the Relative is +not a mere fiction of pedants; it is practically serious. Take, for +instance, the following sentence, which appeared lately in one of our +ablest weekly periodicals: "There are a good many Radical members in +the House _who_ cannot forgive the Prime Minister for being a +Christian." Twenty years hence, who is to say whether the meaning is +"_and they_, i.e. _all the Radical_ members in the House," or "there +are a good many Radical members of the House _that_ cannot &c."? +Professor Bain, apparently admitting no exceptions to his useful rule, +amends many sentences in a manner that seems to me intolerably harsh. +Therefore, while laying due stress on the utility of the rule, I have +endeavoured to point out and explain the exceptions. + +The rules are stated as briefly as possible, and are intended not so +much for use by themselves as for reference while the pupil is working +at the exercises. Consequently, there is no attempt to prove the rules +by accumulations of examples. The few examples that are given, are +given not to prove, but to illustrate the rules. The exercises are +intended to be written out and revised, as exercises usually are; but +they may also be used for _vivâ voce_ instruction. The books being +shut, the pupils, with their written exercises before them, may be +questioned as to the reasons for the several alterations they have +made. Experienced teachers will not require any explanation of the +arrangement or rather non-arrangement of the exercises. They have been +purposely mixed together unclassified to prevent the pupil from +relying upon anything but his own common sense and industry, to show +him what is the fault in each case, and how it is to be amended. +Besides references to the rules, notes are attached to each sentence, +so that the exercises ought not to present any difficulty to a +painstaking boy of twelve or thirteen, provided he has first been +fairly trained in English grammar. + +The "Continuous Extracts" present rather more difficulty, and are +intended for boys somewhat older than those for whom the Exercises are +intended. The attempt to modernize, and clarify, so to speak, the +style of Burnet, Clarendon, and Bishop Butler,[3] may appear +ambitious, and perhaps requires some explanation. My object has, of +course, not been to _improve upon_ the style of these authors, but to +show how their meaning might be expressed more clearly in modern +English. The charm of the style is necessarily lost, but if the loss +is recognized both by teacher and pupil, there is nothing, in my +opinion, to counterbalance the obvious utility of such exercises. +Professor Bain speaks to the same effect:[4] "For an English exercise, +the matter should in some way or other be supplied, and the pupil +disciplined in giving it expression. I know of no better method than +to prescribe passages containing good matter, but in some respects +imperfectly worded, to be amended according to the laws and the +proprieties of style. Our older writers might be extensively, though +not exclusively, drawn upon for this purpose." + +To some of the friends whose help has been already acknowledged in +"English Lessons for English People," I am indebted for further help +in revising these pages. I desire to express especial obligations to +the Rev. J. H. Lupton, late Fellow of St. John's College, Cambridge, +and Second Master of St. Paul's School, for copious and valuable +suggestions; also to several of my colleagues at the City of London +School, among whom I must mention in particular the Rev. A. R. Vardy, +Fellow of Trinity College, Cambridge. + diff --git a/subsites/projects/pedro/img/1.jpg b/subsites/projects/pedro/img/1.jpg new file mode 100644 index 0000000..887857e Binary files /dev/null and b/subsites/projects/pedro/img/1.jpg differ diff --git a/subsites/projects/pedro/img/10.jpg b/subsites/projects/pedro/img/10.jpg new file mode 100644 index 0000000..d69fc3c Binary files /dev/null and b/subsites/projects/pedro/img/10.jpg differ diff --git a/subsites/projects/pedro/img/11.jpg b/subsites/projects/pedro/img/11.jpg new file mode 100644 index 0000000..4e4a989 Binary files /dev/null and b/subsites/projects/pedro/img/11.jpg differ diff --git a/subsites/projects/pedro/img/12.jpg b/subsites/projects/pedro/img/12.jpg new file mode 100644 index 0000000..14a3226 Binary files /dev/null and b/subsites/projects/pedro/img/12.jpg differ diff --git a/subsites/projects/pedro/img/13.jpg b/subsites/projects/pedro/img/13.jpg new file mode 100644 index 0000000..01dce7c Binary files /dev/null and b/subsites/projects/pedro/img/13.jpg differ diff --git a/subsites/projects/pedro/img/2.jpg b/subsites/projects/pedro/img/2.jpg new file mode 100644 index 0000000..b8dc279 Binary files /dev/null and b/subsites/projects/pedro/img/2.jpg differ diff --git a/subsites/projects/pedro/img/3.jpg b/subsites/projects/pedro/img/3.jpg new file mode 100644 index 0000000..263410d Binary files /dev/null and b/subsites/projects/pedro/img/3.jpg differ diff --git a/subsites/projects/pedro/img/4.jpg b/subsites/projects/pedro/img/4.jpg new file mode 100644 index 0000000..6eacca1 Binary files /dev/null and b/subsites/projects/pedro/img/4.jpg differ diff --git a/subsites/projects/pedro/img/5.jpg b/subsites/projects/pedro/img/5.jpg new file mode 100644 index 0000000..618f55b Binary files /dev/null and b/subsites/projects/pedro/img/5.jpg differ diff --git a/subsites/projects/pedro/img/6.jpg b/subsites/projects/pedro/img/6.jpg new file mode 100644 index 0000000..d5b08c5 Binary files /dev/null and b/subsites/projects/pedro/img/6.jpg differ diff --git a/subsites/projects/pedro/img/7.jpg b/subsites/projects/pedro/img/7.jpg new file mode 100644 index 0000000..a7b9f63 Binary files /dev/null and b/subsites/projects/pedro/img/7.jpg differ diff --git a/subsites/projects/pedro/img/8.jpg b/subsites/projects/pedro/img/8.jpg new file mode 100644 index 0000000..1b0c217 Binary files /dev/null and b/subsites/projects/pedro/img/8.jpg differ diff --git a/subsites/projects/pedro/img/9.jpg b/subsites/projects/pedro/img/9.jpg new file mode 100644 index 0000000..6726a88 Binary files /dev/null and b/subsites/projects/pedro/img/9.jpg differ diff --git a/subsites/projects/pedro/img/button.png b/subsites/projects/pedro/img/button.png new file mode 100644 index 0000000..a0e009e Binary files /dev/null and b/subsites/projects/pedro/img/button.png differ diff --git a/subsites/projects/pedro/img/buttonc.png b/subsites/projects/pedro/img/buttonc.png new file mode 100644 index 0000000..7463755 Binary files /dev/null and b/subsites/projects/pedro/img/buttonc.png differ diff --git a/subsites/projects/pedro/img/buttonh.png b/subsites/projects/pedro/img/buttonh.png new file mode 100644 index 0000000..b0f435d Binary files /dev/null and b/subsites/projects/pedro/img/buttonh.png differ diff --git a/subsites/projects/pedro/img/header.jpg b/subsites/projects/pedro/img/header.jpg new file mode 100644 index 0000000..0081c3a Binary files /dev/null and b/subsites/projects/pedro/img/header.jpg differ diff --git a/subsites/projects/pedro/index.htm b/subsites/projects/pedro/index.htm new file mode 100644 index 0000000..f48da86 --- /dev/null +++ b/subsites/projects/pedro/index.htm @@ -0,0 +1,313 @@ + + + +Katten Pedro og de tre danskere + + + + +
+

+ +
+
+
En tegneserie tegnet over 8 dage i Mallorca.

Af Niels Serup
+
Klik på billederne for at forstørre dem. Klik på dem igen for at formindske dem.
+ +
+

Striber

+ +

Mandag:

+Mandag +Glæd jer til i morgen, hvor Pedro vil smage ost!

+ +

Tirsdag:

+Tirsdag +I morgen vil Pedro forsøge stangspring!

+ +

Onsdag:

+Onsdag +Glæd jer til i morgen, hvor Pedro bliver fanget af en ufos fangarme...

+ +

Torsdag:

+Torsdag +I morgen får Pedro pludselig lyst til kage, men glimskianere spiser ikke kage. Se, hvad Pedro gør for at få fat i kage!

+ +

Fredag:

+Fredag +I morgen vil verden overvære intet mindre end en sensation! Pedro vil gøre en god gerning!

+ +

Lørdag:

+Lørdag +Åh nej! Dør Pedro? Eller dør han ikke? Eller dør han måske? Se med i morgen og se den spændende fortsættelse...

+ +

Søndag:

+Søndag +Overlever Pedro? Se med i det endelige afsnit i morgen!

+ +

Mandag:

+Mandag +SLUT! + +
+ +
+

Tegninger

+ +

Pedro i Mexico:

+Pedro i Mexico +I skal ikke ønske at møde Pedro i Mexico...

+ +

Pedros skæbne:

+Pedros skæbne +Det fortjente han.

+ +

Pedro kidnappet!

+Pedro kidnappet! +Når Pedro æder for mange sild, falder han i søvn og bliver kidnappet (af en eller anden grund).

+ +

"Goddag, goddag"

+"Goddag, goddag" +Pedro prøver på at være høflig...med en knytnæve.

+ +

Bazooka-Pedro

+Bazooka-Pedro +Bazookaen er en af Pedros bedste våben, selv om han siger, at den er for svag. + +
+
^ Til toppen ^
+

Alt tekst og alle billeder er licenseret under Creative Commons Attribution-ShareAlike (CC-BY-SA). Dette betyder, at du er fri til at ændre og/eller distribuere alting, så længe du minder folk om, at Niels Serup er den oprindelige ophavsmand, og at du ikke distribuerer det på en måde, hvorpå folks friheder bliver kompromitteret (dvs. at du også skal licensere det under CC-BY-SA eller en lignende licens).

+
+ + \ No newline at end of file diff --git a/subsites/projects/snake/.gitignore b/subsites/projects/snake/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/snake/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/snake/index.htm b/subsites/projects/snake/index.htm new file mode 100644 index 0000000..4144690 --- /dev/null +++ b/subsites/projects/snake/index.htm @@ -0,0 +1,9 @@ + + + +Snake + + + + + \ No newline at end of file diff --git a/subsites/projects/snake/script.js b/subsites/projects/snake/script.js new file mode 100644 index 0000000..aefa79c --- /dev/null +++ b/subsites/projects/snake/script.js @@ -0,0 +1,407 @@ +/* + This program is free software. It comes without any warranty, to + the extent permitted by applicable law. You can redistribute it + and/or modify it under the terms of the Do What The Fuck You Want + To Public License, Version 2, as published by Sam Hocevar. See + http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +window.onload=function() { + //dbg=document.createElement("div") + //document.body.appendChild(dbg) + field_width=48 + field_height=30 + dot_width=10 + dot_height=10 + create_field() + adjust_field() + + point=new Array() + bpoints=new Array() + points=new Array() + lines=new Array() + + speed=5 + gameload() +} + +function create_field() { + bfield=document.createElement("div") + bfield.id="bfield" + field=document.createElement("div") + field.id="field" + document.body.appendChild(bfield) + document.body.appendChild(field) + + dotdiv=document.createElement("div") + dotdiv.id="dot" + field.appendChild(dotdiv) + + score_div=document.createElement("div") + score_div.style.cssFloat="left" + score_val=document.createTextNode("Score: 0") + score_div.appendChild(score_val) + + speed_div=document.createElement("div") + speed_div.style.cssFloat="right" + speed_val=document.createTextNode("Speed: 5") + speed_div.appendChild(speed_val) + + bfield.appendChild(score_div) + bfield.appendChild(speed_div) +} + +function adjust_field() { + bfield.style.width=field_width*dot_width-6+"px" + bfield.style.height="24px" + bfield.style.marginLeft=-(field_width*dot_width/2)-2+"px" + bfield.style.marginTop=-(field_height*dot_height/2)-18+"px" + + field.style.width=field_width*dot_width+"px" + field.style.height=field_height*dot_height+"px" + field.style.marginLeft=-(field_width*dot_width/2)-2+"px" + field.style.marginTop=-(field_height*dot_height/2)+14+"px" +} + +function gameload() { + score=0 + score_val.data="Score: 0" + + var i + var lines_len=lines.length + + for (i=0;i=37 && key<=40) { + diff=[point[point.length-2][0]-point[point.length-1][0],point[point.length-2][1]-point[point.length-1][1]] + if (diff[0]<0) diff[0]=-diff[0] + if (diff[1]<0) diff[1]=-diff[1] + if (diff[0]>1 || diff[1]>1) { + var coor_a, coor_b + + if (key==38 && dir!=1 && dir!=3) { + coor_a=[0,-1] + if (dir==2) coor_b=[-1,0] + else if (dir==4) coor_b=[1,0] + dir=1 + } + else if (key==39 && dir!=2 && dir!=4) { + coor_a=[1,0] + if (dir==1) coor_b=[0,1] + else if (dir==3) coor_b=[0,-1] + dir=2 + } + else if (key==40 && dir!=3 && dir!=1) { + coor_a=[0,1] + if (dir==2) coor_b=[-1,0] + else if (dir==4) coor_b=[1,0] + dir=3 + } + else if (key==37 && dir!=4 && dir!=2) { + coor_a=[-1,0] + if (dir==3) coor_b=[0,-1] + else if (dir==1) coor_b=[0,1] + dir=4 + } + + if (coor_a) { + point[point.length-1]=[point[point.length-1][0]+coor_b[0],point[point.length-1][1]+coor_b[1]] + point[point.length]=[point[point.length-1][0]+coor_a[0],point[point.length-1][1]+coor_a[1]] + } + } + } + if (((key>=37 && key<=40) || key==32 || key==13) && !mov && !gameover) { + mov=true + movement() + } + if ((key==32 || key==13) && !mov && gameover) { + gameload() + } + if (key==33 && speed<9) change_speed(1) + else if (key==34 && speed>1) change_speed(-1) +} + +function change_score(ud) { + score+=ud + score_val.data="Score: "+score +} + +function change_speed(ud) { + speed+=ud + speed_val.data="Speed: "+speed +} + +function placedot() { + var x, y, coor, t_ok + var point_len=point.length + var bpoints_len=bpoints.length + var place_ok=false + var full_len=point_len+bpoints_len + //var a=0 + //dbg.innerHTML=a+":
" + do { + x=Math.floor(Math.random()*field_width) + y=Math.floor(Math.random()*field_height) + t_ok = true + for (i=1;icoor[1][1] || coor[0][0]>coor[1][0]) coor=[coor[1],coor[0]] + + coor[0][1]=coor[0][1]%(field_height) + coor[1][1]=coor[1][1]%(field_height) + if (coor[0][1]<0) coor[0][1]+=field_height + if (coor[1][1]<0) coor[1][1]+=field_height + if (coor[1][1]=point_len && coor[0][0]=point_len && coor[0][1]=coor[0][0] && x<=coor[1][0] && y>=coor[0][1] && y<=coor[1][1]) { + t_ok=false + } + //dbg.innerHTML+=x+","+y+" | "+coor[0]+"-"+coor[1]+"
" + } + if (t_ok) + place_ok=true + //a++ + } while (!place_ok) + + dotx=x + doty=y + + dotdiv.style.width=dot_width+"px" + dotdiv.style.height=dot_height+"px" + dotdiv.style.left=dotx*dot_width+"px" + dotdiv.style.top=doty*dot_height+"px" +} + +function movement() { + bpoints.splice(0,bpoints.length) + points.splice(0,points.length) + var point_len=point.length + var i + + var coorl, iffao + if (dir==1) coorl=[0,1] + else if (dir==2) coorl=[-1,0] + else if (dir==3) coorl=[0,-1] + else if (dir==4) coorl=[1,0] + + var line_height, line_width, x, y + for (i=0;ipoint[i+1][1]) { + line_height=point[i][1]-point[i+1][1]+1 + line_width=1 + x=point[i][0] + y=point[i+1][1] + } + else if (point[i][1]==point[i+1][1] && point[i+1][0]>point[i][0]) { + line_height=1 + line_width=point[i+1][0]-point[i][0]+1 + x=point[i][0] + y=point[i][1] + } + else if (point[i][0]==point[i+1][0] && point[i][1]field_width-1) x=x%(field_width) + else if (x<0) x=field_width+x%(field_width) + if (y>field_height-1) y=y%(field_height) + else if (y<0) y=field_height+y%(field_height) + + if (x==field_width) x=0 + if (y==field_height) y=0 + + if (x+line_width>field_width) { + bpoints[bpoints.length]=[[0,y],[(x+line_width)%(field_width),y]] + line_width=field_width-x + } + if (y+line_height>field_height) { + bpoints[bpoints.length]=[[x,0],[x,(y+line_height)%(field_height)]] + line_height=field_height-y + } + + line_height*=dot_height + line_width*=dot_width + x*=dot_width + y*=dot_height + + points[points.length]=[line_height,line_width,x,y] + } + + var bpoints_len=bpoints.length + + for (i=0;ibpoints[i][1][1]) { + line_height=bpoints[i][0][1]-bpoints[i][1][1] + line_width=1 + x=bpoints[i][0][0] + y=bpoints[i][1][1] + } + else if (bpoints[i][0][1]==bpoints[i][1][1] && bpoints[i][1][0]>bpoints[i][0][0]) { + line_height=1 + line_width=bpoints[i][1][0]-bpoints[i][0][0] + x=bpoints[i][0][0] + y=bpoints[i][0][1] + } + else if (bpoints[i][0][0]==bpoints[i][1][0] && bpoints[i][0][1]coor[1][1] || coor[0][0]>coor[1][0]) coor=[coor[1],coor[0]] + + coor[0][1]=coor[0][1]%(field_height) + coor[1][1]=coor[1][1]%(field_height) + if (coor[0][1]<0) coor[0][1]+=field_height + if (coor[1][1]<0) coor[1][1]+=field_height + if (coor[1][1]=point_len && coor[0][0]=point_len && coor[0][1]=coor[0][0] && x<=coor[1][0] && y>=coor[0][1] && y<=coor[1][1]) { + mov=false + gameover=true + } + } + + if (!gameover) { + var points_len=points.length + var lines_len=lines.length + + if (points_len>lines_len) { + for (i=lines_len;ipoint[i][1]) point[i][1]-- + else if (point[i-1][1]==point[i][1] && point[i][0]>point[i-1][0]) point[i][0]++ + else if (point[i-1][0]==point[i][0] && point[i-1][1]point[1][1]) point[0][1]-- + else if (point[0][1]point[0][0]) point[0][0]++ + else if (point[1][0] + + +The life of a snowman + + + +
Loading story... (please wait.. it takes a looong time to load)
\ No newline at end of file diff --git a/subsites/projects/sq/.gitignore b/subsites/projects/sq/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/sq/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/sq/bg.png b/subsites/projects/sq/bg.png new file mode 100644 index 0000000..23870d0 Binary files /dev/null and b/subsites/projects/sq/bg.png differ diff --git a/subsites/projects/sq/bg/1.png b/subsites/projects/sq/bg/1.png new file mode 100644 index 0000000..8287ba2 Binary files /dev/null and b/subsites/projects/sq/bg/1.png differ diff --git a/subsites/projects/sq/bg/101.png b/subsites/projects/sq/bg/101.png new file mode 100644 index 0000000..e96dbe4 Binary files /dev/null and b/subsites/projects/sq/bg/101.png differ diff --git a/subsites/projects/sq/bg/102.png b/subsites/projects/sq/bg/102.png new file mode 100644 index 0000000..828266c Binary files /dev/null and b/subsites/projects/sq/bg/102.png differ diff --git a/subsites/projects/sq/bg/111.png b/subsites/projects/sq/bg/111.png new file mode 100644 index 0000000..00cc230 Binary files /dev/null and b/subsites/projects/sq/bg/111.png differ diff --git a/subsites/projects/sq/bg/112.png b/subsites/projects/sq/bg/112.png new file mode 100644 index 0000000..27ff118 Binary files /dev/null and b/subsites/projects/sq/bg/112.png differ diff --git a/subsites/projects/sq/gb.png b/subsites/projects/sq/gb.png new file mode 100644 index 0000000..836a264 Binary files /dev/null and b/subsites/projects/sq/gb.png differ diff --git a/subsites/projects/sq/index.htm b/subsites/projects/sq/index.htm new file mode 100644 index 0000000..6f4853c --- /dev/null +++ b/subsites/projects/sq/index.htm @@ -0,0 +1 @@ +Satan's Quest \ No newline at end of file diff --git a/subsites/projects/sq/sa.png b/subsites/projects/sq/sa.png new file mode 100644 index 0000000..5b17060 Binary files /dev/null and b/subsites/projects/sq/sa.png differ diff --git a/subsites/projects/sq/script.js b/subsites/projects/sq/script.js new file mode 100644 index 0000000..2853b53 --- /dev/null +++ b/subsites/projects/sq/script.js @@ -0,0 +1,296 @@ +/* + This program is free software. It comes without any warranty, to + the extent permitted by applicable law. You can redistribute it + and/or modify it under the terms of the Do What The Fuck You Want + To Public License, Version 2, as published by Sam Hocevar. See + http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +/* + This code is MESSY! It is UNCOMMENTED! It is JAVASCRIPT! + In short: It's not perfect. WTF. +*/ + +function nothing() { +// NOTHING +} + +function finalend() { +head.removeChild(stylesheet) +document.body.style.backgroundColor="#000" +document.body.style.color="#fff" +document.body.style.fontFamily="'lucida console','lucida sans',verdana,arial" +document.body.style.fontSize="14px" +document.body.innerHTML="DOS
>" +document.title="" +} + +function gameover() { +if (!goa) { +goa=true +dir=2 +mvn[2]=false +document.onkeydown=nothing +document.onkeyup=nothing +gbdiv.style.top="43px" +gbdiv.style.left="57px" + +for (i=0;i1) { +if (bcblo) bctm++ +else bctm-- +bccgt=setTimeout("boxmsg()",1) +} +else { +if (bcblo) { +bcblo=false +boxmsgb() +} +else { +bcblo=true +bmd.style.display="none" +if (endtf) finalend() +} +} +} + +function startmove(direction) { +clearTimeout(at) +clearTimeout(mt) +dir=direction +for (i=0;iobjla && nlobjrt && ntnobjla && nlnobjrt && nt28 && nl<92 && nt>16 && nt<64) {dt=true;ng=false;end=true} +if (!dt) { +if (nt-4 && nl<580) ng=true +} +else { +ptmt=(dir-2)*moveby*(-2)+moveby +nt=gt+ptmt +if (nt>-4 && nt<308) ng=true +} +} +if (ng) { +gbdiv.style.left=nl+"px" +gbdiv.style.top=nt+"px" +} +else stopmove(dir) +if (end) gameover() +mt=setTimeout("move()",100) +} + +function ani() { +for (i=0;i + + + + + + + + + metanohi :: totxt + + + + + + + + + + +
+

+ + +

+
+ +
+ + +
+
+

totxt

+

What is totxt?

+

totxt is a futuristic program

+

+totxt is a JavaScript program that transforms text with regular HTML formatting into text that looks like what you're reading right now. The file totxt.js contains the function load_totxt_generator, which, when run, finds text in HTML elements and converts that text into this. Before reading on, have a look at the following examples to see how it works:

+Example 1
+Example 2
+Example 3
+
+You might also want to take a look at how the examples look without the use of totxt:

+Example 1 without totxt
+Example 2 without totxt
+Example 3 without totxt
+

+

 

+

totxt is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) +any later version.

+

 

+

+totxt accepts two ways of ignoring default values: a global way, which has an effect on all totxt elements, and a local way, which only has an effect on a particular totxt element. An example:
+Before running the load_totxt_generator function, define this inside a script tag:
+ totxt_DYNAMIC = 0
+This will make all totxt elements dynamic, i.e. it will be possible to open and close totxt boxes. When closed, only the header is displayed, while in its open state, both the header, the subheader (if any) and the text will be visible. The 0 value means that all totxt elements first appear in their closed forms. Assigning a value of 1 will make all elements start out as open. Any other value than 0 or 1 will not work. Note that, by default, being dynamic also means that an element opens and closes in a sliding motion and that an element is opened by clicking on it and closed by doubleclicking on it.
+Another way to defy normal values is to locally define changes. Applying 'dynamic0' as a class to a totxt element, such that it will look something like:
+ <h1 class='totxt dynamic0'>A header</h1>
+will have the same effect as defining it the global way, except this will only affect the current element, and not all elements. +

+


Below is a table describing the values of totxt.

+ + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global variableLocal definitionDescriptionDefault value
totxt_WIDTHwidthXLine width80
totxt_DYNAMICdynamicXDynamic, open or closed?-1 (not dynamic)
totxt_DYNAMIC_SPEEDspeedXSpeed of line removal/appending when sliding (in ms)50
totxt_DYNAMIC_LINESlinesXAmount of line(s) to (dis)appear per function call1
totxt_QUICK_DYNAMICquick_dynamicOpen/close boxes instantly. Do not slide.false
totxt_DEL_XWSdel_excess_whitespaceDelete excess whitespacefalse
totxt_HEADER_ALIGNhalignXAlignment of header (0 = left, 1 = center, 2 = right)1 (center)
totxt_SUBHEADER_ALIGNshalignXAlignment of subheader0 (left)
totxt_TEXT_ALIGNtalignXAlignment of text0 (left)
+
+

Furthermore, there are some global variables that can be used to modify the what classes to look for.

+ + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Global variableDescriptionDefault value
totxt_CLASSNAMEMain class to look for. Only elements with this classname has a chance of becoming totxt elements.totxt
totxt_DYNAMIC_CLASSNAME dynamic
totxt_DYNSPEED_CLASSNAME speed
totxt_DYNLINES_CLASSNAME lines
totxt_HALIGN_CLASSNAME halign
totxt_SHALIGN_CLASSNAME shalign
totxt_TALIGN_CLASSNAME talign
totxt_WIDTH_CLASSNAME width
totxt_DELXWS_CLASSNAME del_excess_whitespace
totxt_QUICK_CLASSNAME quick_dynamic
totxt_HEADER_ELEMENTElement type containing header text and totxt information in form of classesH1
totxt_SUBHEADER_ELEMENTElement type containing subheader text. Any information in classes will be ignored.H2
totxt_TEXT_ELEMENTElement type containing text. Any information in classes will be ignored.P
+
+

To use totxt, simply save it in a directory, then import it using a script tag. Something like this:

+
+<html>
+    <head>
+        <script type='text/javascript' src='totxt.js'></script>
+        <script type='text/javascript'>
+            window.onload = load_totxt_generator
+        </script>
+    </head>
+    
+    <body>
+        ...
+    </body>
+</html>
+
+

Note that this will run when the page importing it has loaded. It is of course also possible to execute totxt code on other actions.

+

load_totxt_generator can be run more than once, without any problems arising.

+
+

Important information (click to open)

+

Look no further!

+

+totxt elements inherit all classes, any eventual id, and style if present, but only from the header element. When looking for text, totxt searches for subheader elements and text elements below the header element. If any other element than those appears, the search will halt. An example:

+<h1 class='totxt'>Header</h1>
+<p>This will be used.</p>
+<p>This will also be used.</p>
+<blockquote>
+I fell asleep reading a dull book, and I dreamt that I was reading on, so I woke up from sheer boredom.
+</blockquote>
+<p>This will not be used.</p> +

+
Last updated: 7 Aug 2009
+
+ +
+
 
+
+ $RIGHT$ +
+
+
+ + + + \ No newline at end of file diff --git a/subsites/projects/totxt/.time.php b/subsites/projects/totxt/.time.php new file mode 100644 index 0000000..138f78a --- /dev/null +++ b/subsites/projects/totxt/.time.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/subsites/projects/totxt/example1.php b/subsites/projects/totxt/example1.php new file mode 100755 index 0000000..1d8b4f6 --- /dev/null +++ b/subsites/projects/totxt/example1.php @@ -0,0 +1,50 @@ + + + + totxt example (1) + + + + + + + + + +

Fish

+

What is a fish?

+

A fish is any aquatic vertebrate animal that is typically ectothermic (or cold-blooded), covered with scales, and equipped with two sets of paired fins and several unpaired fins. Fish are abundant in the sea and in fresh water, with species being known from mountain streams (e.g., char and gudgeon) as well as in the deepest depths of the ocean (e.g., gulpers and anglerfish).

+

+

Food prepared from fish is also called fish, and it is an important food source for humans. They are harvested either from wild fisheries (see fishing) or farmed in much the same way as cattle or chickens (see aquaculture). They are also exploited by recreational fishers and fishkeepers, and are exhibited in public aquaria. Fish have had a role in many cultures through the ages, ranging from deities and religious symbols to the subjects of books and popular movies.

+


From http://en.wikipedia.org/wiki/Fish. Licensed under CC-BY-SA 3.0.

+ +

Plain text

+

In computing, plain text is a term used for an ordinary "unformatted" sequential file readable as textual material without much processing.

+

+

The encoding has traditionally been either ASCII, one of its many derivatives such as ISO/IEC 646 etc., or sometimes EBCDIC. No other encodings are used in plain text files which neither contain any (character-based) structural tags such as heading marks, nor any typographic markers like bold face, italics, etc.

+

+

Unicode is today gradually replacing the older ASCII derivatives limited to 7 or 8 bit codes. It will probably serve much the same purposes, but this time permitting almost any human language as well as important punctuation and symbols such as mathematical relations (≠ ≤ ≥ ≈), multiplication (× •), etc, which are not included in the more restricted ASCII set.

+


From http://en.wikipedia.org/wiki/Plain_text. Licensed under CC-BY-SA 3.0.

+ +

Lojban

+

A logical language

+

Lojban (pronounced [ˈloʒban]) is a constructed, syntactically unambiguous human language based on predicate logic. Its predecessor is Loglan, the original logical language by James Cooke Brown.

+

+

Development of the language began in 1987 by The Logical Language Group (LLG), who intended to realize Loglan's purposes as well as further complement the language by making it more usable, and freely available (as indicated by its official full English name "Lojban: a realization of Loglan"). After a long initial period of debating and testing, the baseline was completed in 1998 with the publication of The Complete Lojban Language. The name "Lojban" is a combination of loj and ban, which are short forms of logji (logic) and bangu (language), respectively.

+

+

The principal sources of its basic vocabulary were the six (at the time) most widely spoken languages: Mandarin, English, Hindi, Spanish, Russian, and Arabic, chosen to reduce the unfamiliarity or strangeness of the root words to people of diverse linguistic backgrounds. The language has drawn on other constructed languages' components, a notable instance of which is Láadan's set of indicators[1].

+


From http://en.wikipedia.org/wiki/Lojban. Licensed under CC-BY-SA 3.0.

+ + + diff --git a/subsites/projects/totxt/example2.php b/subsites/projects/totxt/example2.php new file mode 100755 index 0000000..895e570 --- /dev/null +++ b/subsites/projects/totxt/example2.php @@ -0,0 +1,62 @@ + + + + totxt example (2) + + + + + + + + + +

Click to open, doubleclick to close

+

Fish

+

What is a fish?

+

A fish is any aquatic vertebrate animal that is typically ectothermic (or cold-blooded), covered with scales, and equipped with two sets of paired fins and several unpaired fins. Fish are abundant in the sea and in fresh water, with species being known from mountain streams (e.g., char and gudgeon) as well as in the deepest depths of the ocean (e.g., gulpers and anglerfish).

+

+

Food prepared from fish is also called fish, and it is an important food source for humans. They are harvested either from wild fisheries (see fishing) or farmed in much the same way as cattle or chickens (see aquaculture). They are also exploited by recreational fishers and fishkeepers, and are exhibited in public aquaria. Fish have had a role in many cultures through the ages, ranging from deities and religious symbols to the subjects of books and popular movies.

+


From http://en.wikipedia.org/wiki/Fish. Licensed under CC-BY-SA 3.0.

+ +

Plain text

+

In computing, plain text is a term used for an ordinary "unformatted" sequential file readable as textual material without much processing.

+

+

The encoding has traditionally been either ASCII, one of its many derivatives such as ISO/IEC 646 etc., or sometimes EBCDIC. No other encodings are used in plain text files which neither contain any (character-based) structural tags such as heading marks, nor any typographic markers like bold face, italics, etc.

+

+

Unicode is today gradually replacing the older ASCII derivatives limited to 7 or 8 bit codes. It will probably serve much the same purposes, but this time permitting almost any human language as well as important punctuation and symbols such as mathematical relations (≠ ≤ ≥ ≈), multiplication (× •), etc, which are not included in the more restricted ASCII set.

+


From http://en.wikipedia.org/wiki/Plain_text. Licensed under CC-BY-SA 3.0.

+ +

Lojban

+

A logical language

+

Lojban (pronounced [ˈloʒban]) is a constructed, syntactically unambiguous human language based on predicate logic. Its predecessor is Loglan, the original logical language by James Cooke Brown.

+

+

Development of the language began in 1987 by The Logical Language Group (LLG), who intended to realize Loglan's purposes as well as further complement the language by making it more usable, and freely available (as indicated by its official full English name "Lojban: a realization of Loglan"). After a long initial period of debating and testing, the baseline was completed in 1998 with the publication of The Complete Lojban Language. The name "Lojban" is a combination of loj and ban, which are short forms of logji (logic) and bangu (language), respectively.

+

+

The principal sources of its basic vocabulary were the six (at the time) most widely spoken languages: Mandarin, English, Hindi, Spanish, Russian, and Arabic, chosen to reduce the unfamiliarity or strangeness of the root words to people of diverse linguistic backgrounds. The language has drawn on other constructed languages' components, a notable instance of which is Láadan's set of indicators[1].

+


From http://en.wikipedia.org/wiki/Lojban. Licensed under CC-BY-SA 3.0.

+ + + diff --git a/subsites/projects/totxt/example3.php b/subsites/projects/totxt/example3.php new file mode 100755 index 0000000..03d735c --- /dev/null +++ b/subsites/projects/totxt/example3.php @@ -0,0 +1,122 @@ + + + + totxt example (3) + + + + + + + + + + +

Nonsense makes more sense

+

Not to be confused with fish

+

4 August 2013 -- In a surprising move this morning, former ex-alien Mr. Umbago has now volunteered for freedom work at the speaker center in the middle of the bus driving from left to right on Wednesdays, right to left on Fridays, and all other directions whenever people feel like it. This has resulted in the loss of several server farms in the midst of the rainy midsommer, and within the monthly year of sun, it has now finally been decided that prices on tickets for sleep walking should not go up. On the contrary, people with doppelgangers should be allowed to walk across the ocean, as long as they remember to bring a bucket to travel to the lake south of the Earth with.

+

"This is unfortunate," current foreign affairs pencil adds.

+ + + +

Peach takes icecream shop to court

+

+ 3 August 2012 -- Peach, the company known throughout + the world for their iPears, yesterday declared war on a small + business. The reason? Trademark infringement. The small + icecream cafe known as "iCecreamy" had, unfortunately, + used a lowercase i and an uppercase C in + their name. This unlucky decision made Peach drag it to + court, saying that the name was patented by Peach. The + ***cream owner has had no comments so far.
+ See also: Peach aquired by aliens +

+ + + +

< ¾ = ¼ × 3 >

+

¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿± ¿±

+ + + +
+ + +

HTML codes

+

You can collapse and expand this window.

+

+The following is made to confuse:
+<a href='http://example.org/'>http://example.org/</a>
+<span style='color: magenta'>Magenta-coloured text</span> +

+ + + +

aHA!

+

2 + 2 = 2 · 2

+ + + + diff --git a/subsites/projects/totxt/index.php b/subsites/projects/totxt/index.php new file mode 100755 index 0000000..da79e6b --- /dev/null +++ b/subsites/projects/totxt/index.php @@ -0,0 +1,3 @@ + diff --git a/subsites/projects/totxt/totxt.js b/subsites/projects/totxt/totxt.js new file mode 100755 index 0000000..a01d939 --- /dev/null +++ b/subsites/projects/totxt/totxt.js @@ -0,0 +1,725 @@ +/* + totxt: A program that transforms HTML elements to plain text + Copyright (C) 2009 Niels Serup + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* + Version: 0.9 + You can contact Niels at . + Latest version is always available at , + along with documentation. +*/ + + + +/* To avoid overuse of global variables, all functions and actions have been + stuffed into the 'load_totxt_generator' function. */ +function load_totxt_generator(action, var_a) { + /* Normally, this function will load a bunch of functions and then generate + PRE elements. This isn't the case if a special action is defined. */ + + function count(haystack, needle) { + // Counts needles in haystack + if (needle == undefined) + var needle = '\n' + var c, offset + offset = -1 + c = 0 + while (offset) { + offset = haystack.indexOf(needle, offset) + 1 + c++ + } + return c + } + + if (action == 'show_or_hide') { + /* Used by dynamic boxes that utilize sliding functionality. To open an + article box, it is sufficient to click on it, but to close one, one + must doubleclick on it. This is partly why there are some + differences in what type of state the box is in. */ + var obj = document.totxt_preElements[var_a] + if (obj.state) { + // If open, COLLAPSE + obj.state = 0 + if (obj.quickdyn) { + // Don't slide + obj.innerHTML = obj.header + obj.className = obj.className.replace(obj.dynclass + '1', obj.dynclass + '0') + obj.onclick = function(){load_totxt_generator('show_or_hide', this.number)} + obj.ondblclick = undefined + } + else { + // Do slide + obj.onclick = undefined + obj.ondblclick = undefined + obj.slide_expand = 0 + obj.line = undefined + load_totxt_generator('slide', var_a) + } + } + else { + // If closed, EXPAND + obj.state = 1 + obj.className = obj.className.replace(obj.dynclass + '0', obj.dynclass + '1') + if (obj.quickdyn) { + // Don't slide + obj.innerHTML = obj.fulltext + obj.onclick = undefined + obj.ondblclick = function(){load_totxt_generator('show_or_hide', this.number)} + } + else { + // Do slide + obj.onclick = undefined + obj.ondblclick = undefined + obj.slide_expand = 1 + obj.line = undefined + load_totxt_generator('slide', var_a) + } + } + return true + } + else if (action == 'slide') { + /* Using the setTimeout function, this action is used by 'show_or_hide' + actions to either expand or collapse a box slidingly. */ + var obj, hh, th, obdl + obj = document.totxt_preElements[var_a] + hh = obj.headerheight + th = obj.fulltextheight + if (obj.line == undefined) { + if (obj.slide_expand) + obj.line = hh + else + obj.line = th + } + + obj.innerHTML = obj.fulltext.split('\n', obj.line).join('\n') + + // Add lines when expanding, remove lines when collapsing + if (obj.slide_expand) { + obdl = obj.line + if (obdl == th) + obdl++ + else { + obdl = obj.line + obj.dynlines + if (obdl > th) + obdl = th + } + obj.line = obdl + } + else { + obdl = obj.line + if (obdl == hh) + obdl-- + else { + obdl = obj.line - obj.dynlines + if (obdl < hh) + obdl = hh + } + obj.line = obdl + } + if (obj.line >= hh && obj.line <= th) + setTimeout('load_totxt_generator(\'slide\', ' + var_a + ')', obj.dynspeed) + else { + // End 'loop' + if (obj.slide_expand) { + obj.onclick = undefined + obj.ondblclick = function(){load_totxt_generator('show_or_hide', this.number)} + } + else { + obj.onclick = function(){load_totxt_generator('show_or_hide', this.number)} + obj.ondblclick = undefined + obj.className = obj.className.replace(obj.dynclass + '1', obj.dynclass + '0') + } + // Not necessary. Has no noticable effect. + delete document.slide_object + delete obj.slide_expand + delete obj.line + } + return true + } + + /* + No more special actions exist. If none of the two above actions were + specified, code execution will begin here. + */ + + // Various functions + function isin(ref, str, end, defau) { + // Checks for string str in array ref. If end is true, look for match in + // beginning of str and return the end of str + var x, c + for (x in ref) { + c = ref[x] + if (end) { + if (c.indexOf(str) == 0) + return c.substr(str.length) + } + else if (c == str) + return true + } + if (defau) + return defau + else + return false + } + + function ctimes(cha, times) { + // * times (a, 3 = aaa) + var t = '' + for (var i = 0; i < times; i++) { + t += cha + } + return t + } + + function transform_text(str, w, align, del_xws) { + /* This function transforms text seen in ordinary HTML tags into text + that fits simple monospace character boxes. */ + + // Prepare text + str = str.replace(new RegExp('^\\s+'), '').replace(new RegExp('\\s+$'), '') + str = str.replace(/
/gi, '
').replace(/
\n/gi, '
') + //str = str.replace(/ /g, ' ') + str = str.replace(/\n/g, ' ') + if (del_xws) { + // Delete excessive whitespace + str = str.replace(new RegExp('\\s+', 'g'), ' ') + } + str = str.replace(/
/gi, '\n') + if (del_xws) { + // Delete excessive whitespace caused by line break transformation + str = str.replace(/\n /g, '\n') + } + + var tags, tlen, intag, start, i, c, x, sstr, ntxt, ctxt, txt, cw, clen + var entities, inentity, filter, tminus, l, spaces + + // Store and remove HTML tags in text (will be readded in text later) + // Also look for HTML entities, such as < (<) + tagent = [] // To store HTML tags and HTML entities + tlen = str.length + start = 0 + intag = false + inentity = false + filter = ' <>!"\'\\/*-+,.:;' + + ntxt = '' + for (i = 0; i < tlen; i++) { + c = str.substr(i, 1) + if (c == '<' && !intag) { + intag = true + start = i + } + else if (c == '>' && intag) { + intag = false + tagent[tagent.length] = ['tag', start, str.substr(start, i - start + 1)] + } + else if (!intag) { + if (c == '&' && !inentity) { + if (filter.indexOf(str.substr(i+1, 1)) == -1) { + inentity = true + start = i + } + ntxt += c + } + else if (c == ';' && inentity) { + inentity = false + tagent[tagent.length] = ['ent', start, str.substr(start, i - start + 1)] + } + else if (!inentity) + ntxt += c + } + } + str = ntxt + + // Change line width of text. When inserting a hyphen and a newline, check + // if positions of HTML tags and HTML entities need to be changed. + sstr = str.split('\n') + ntxt = '' + for (ctxt in sstr) { + txt = sstr[ctxt] + while (txt) { + if (txt.length <= w) { + ntxt += txt + break + } + if (txt.substr(0, w).indexOf(' ') == -1) { + ntxt += txt.substr(0, w - 1) + '-\n' + txt = txt.substr(w - 1) + clen = ntxt.length + tminus = 0 + for (x in tagent) { + if (tagent[x][1] - tminus > clen) + tagent[x][1] += 2 + l = tagent[x][2].length + if (tagent[x][0] == 'ent') + l-- + tminus += l + } + continue + } + cw = w + while (txt.substr(cw, 1) != ' ') + cw -= 1 + ntxt += txt.substr(0, cw) + '\n' + txt = txt.substr(cw + 1) + // No need to readjust positions of HTML stuff here, as the + // new newline replaces a space character + } + ntxt += '\n' + } + while (ntxt.substr(ntxt.length - 1) == '\n') + ntxt = ntxt.substr(0, ntxt.length - 1) + + str = ntxt + + // Readd removed HTML tags and HTML entities + for (x in tagent) { + c = tagent[x] + if (c[0] == 'tag') + str = str.substr(0, c[1]) + c[2] + str.substr(c[1]) + else if (c[0] == 'ent') + str = str.substr(0, c[1]) + c[2] + str.substr(c[1]+1) + } + + // Align (0 = left, 1 = center, 2 = right) + if (align != 0 && align != 1 && align != 2) + align = 0 + + sstr = str.split('\n') + ntxt = '' + for (ctxt in sstr) { + txt = sstr[ctxt] + tlen = txt.length + clen = 0 + intag = false + inentity = false + for (i = 0; i < tlen; i++) { + c = txt.substr(i, 1) + if (c == '<' && !intag) + intag = true + else if (c == '>' && intag) + intag = false + else if (c == '&' && !inentity) { + if (filter.indexOf(txt.substr(i+1, 1)) == -1) + inentity = true + clen++ + } + else if (c == ';' && inentity) + inentity = false + else if (!intag && !inentity) + clen++ + } + spaces = w - clen + ntxt += '\n' + if (align == 0) // Left + ntxt += txt + ctimes(' ', spaces) + else if (align == 2) // Right + ntxt += ctimes(' ', spaces) + txt + else if (align == 1) // Center + ntxt += ctimes(' ', Math.floor(spaces / 2)) + txt + ctimes(' ', Math.ceil(spaces / 2)) + } + ntxt = ntxt.substr(1) + if (ntxt) + str = ntxt + return str + } + + function add_borders(txt, border, padding) { + // Adds borders to boxes + if (border == undefined) + border = '|' + if (padding == undefined) + padding = ' ' + var s, x, c, n + s = txt.split('\n') + n = '' + for (x in s) { + c = s[x] + n += '\n' + border + padding + c + padding + border + } + return n.substr(1) + } + + function transform_text_in_list(arr, w, del_xws, borders, padding, align) { + // Transform, then join + var x, c, f, t + f = '' + for (x in arr) { + c = arr[x] + if (align == undefined) + align = 0 // Left + t = transform_text(c, w, align, del_xws) + if (borders) + t = add_borders(t, borders, padding) + f += '\n' + t + } + return f.substr(1) + } + // No more functions + + + // Begin load + search + generate + + // Local variables + var h1s, x, z, y, ok, cur, classes, par, chs, cur_found, ccur, + header, subheaders, texts, elems, subheader, content, + stdclass, dynclass, widclass, xwsclass, quiclass, speclass, linclass, + stdwidth, width, stddynamic, dynamic, isdynamic, delxws, + dynspeed, c_speed, dynlines, c_lines, quickdyn, c_quidyn, alwdelxws, + stdhalign, stdshalign, stdtalign, halclass, shalclass, talclass, + c_halign, c_shalign, c_talign + + var h_elmnm, sh_elmnm, txt_elmnm + var tmps, text, preElements, elmminus, prelms, plen, celm + var /*poss_classes, n_classes,*/ pid, tmp + + // Default classnames for recognition purposes. + // Can be changed using global variables. + stdclass = 'totxt' + try { + stdclass = totxt_CLASSNAME ? totxt_CLASSNAME : stdclass + } + catch(e) {} + dynclass = 'dynamic' + try { + dynclass = totxt_DYNAMIC_CLASSNAME ? totxt_DYNAMIC_CLASSNAME : dynclass + } + catch(e) {} + widclass = 'width' + try { + widclass = totxt_WIDTH_CLASSNAME ? totxt_WIDTH_CLASSNAME : widclass + } + catch(e) {} + xwsclass = 'del_excess_whitespace' + try { + xwsclass = totxt_DELXWS_CLASSNAME ? totxt_DELXWS_CLASSNAME : xwsclass + } + catch(e) {} + speclass = 'speed' + try { + speclass = totxt_DYNSPEED_CLASSNAME ? totxt_DYNSPEED_CLASSNAME : speclass + } + catch(e) {} + linclass = 'lines' + try { + linclass = totxt_DYNLINES_CLASSNAME ? totxt_DYNLINES_CLASSNAME : linclass + } + catch(e) {} + quiclass = 'quick_dynamic' + try { + quiclass = totxt_QUICK_CLASSNAME ? totxt_QUICK_CLASSNAME : quiclass + } + catch(e) {} + halclass = 'halign' + try { + halclass = totxt_HALIGN_CLASSNAME ? totxt_HALIGN_CLASSNAME : halclass + } + catch(e) {} + shalclass = 'shalign' + try { + shalclass = totxt_SHALIGN_CLASSNAME ? totxt_SHALIGN_CLASSNAME : shalclass + } + catch(e) {} + talclass = 'talign' + try { + talclass = totxt_TALIGN_CLASSNAME ? totxt_TALIGN_CLASSNAME : talclass + } + catch(e) {} + h_elmnm = 'H1' + try { + h_elmnm = totxt_HEADER_ELEMENT ? totxt_HEADER_ELEMENT.toUpperCase() : h_elmnm + } + catch(e) {} + sh_elmnm = 'H2' + try { + sh_elmnm = totxt_SUBHEADER_ELEMENT ? totxt_SUBHEADER_ELEMENT.toUpperCase() : sh_elmnm + } + catch(e) {} + txt_elmnm = 'P' + try { + txt_elmnm = totxt_TEXT_ELEMENT ? totxt_TEXT_ELEMENT.toUpperCase() : txt_elmnm + } + catch(e) {} + + h1s = document.getElementsByTagName(h_elmnm) + if (!h1s) + return false + + + // Default values + // Line width + stdwidth = 80 + try { + stdwidth = totxt_WIDTH * 1 ? totxt_WIDTH : stdwidth + } + catch(e) {} + if (stdwidth < 10) + stdwidth = 10 + + // Should articles be allowed to collapse and expand with a mouseclick? + stddynamic = -1 + try { + stddynamic = totxt_DYNAMIC + } + catch(e) {} + + // Sliding speed + dynspeed = 50 + try { + dynspeed = totxt_DYNAMIC_SPEED * 1 + } + catch(e) {} + + // Line(s) to (dis)appear per function call + dynlines = 1 + try { + dynlines = totxt_DYNAMIC_LINES * 1 ? totxt_DYNAMIC_LINES * 1 : dynlines + } + catch(e) {} + + // Don't slide? + quickdyn = false + try { + quickdyn = totxt_QUICK_DYNAMIC + } + catch(e) {} + + // Delete excessive whitespace? + alwdelxws = false + try { + alwdelxws = totxt_DEL_XWS + } + catch(e) {} + + // Header alignment + stdhalign = 1 // Center + try { + stdhalign = totxt_HEADER_ALIGN * 1 + } + catch(e) {} + + // Subheader alignment + stdshalign = 0 // Left + try { + stdshalign = totxt_SUBHEADER_ALIGN * 1 + } + catch(e) {} + + // Text alignment + stdtalign = 0 // Left + try { + stdtalign = totxt_TEXT_ALIGN * 1 + } + catch(e) {} + // Checking for impossible alignments + if (stdhalign > 2) stdhalign = 2 + else if (stdhalign < 0) stdhalign = 0 + if (stdshalign > 2) stdshalign = 2 + else if (stdshalign < 0) stdshalign = 0 + if (stdtalign > 2) stdtalign = 2 + else if (stdtalign < 0) stdtalign = 0 + + elems = [] // Elements that contain info to be used in final PRE elements. + prelms = [] // PRE elements + + /* + // Special classes + poss_classes = [stdclass, dynclass, widclass, xwsclass, speclass, linclass, quiclass, halclass, shalclass, talclass] + */ + + // document.totxt_preElements is the variable in which to store the PRE elements. + try { + /* document.totxt_preElements likely doesn't exist, which could result in an + error if not called inside a try statement. */ + preElements = document.totxt_preElements + elmminus = preElements.length + } + catch(e) { + document.totxt_preElements = [] + preElements = [] + elmminus = 0 + } + + // Look up H1 elements + for (x in h1s) { + cur = h1s[x] + if (!cur || !cur.className) + continue + // Filters + classes = cur.className.split(' ') + if (!isin(classes, stdclass)) + continue + + par = cur.parentNode + if (!par) + continue + + // Find H2 and P elements that are "below" the current H1 element + chs = par.childNodes + cur_found = 0 + header = cur.innerHTML + subheaders = [] + texts = [] + elems[elems.length] = cur + for (z in chs) { + ccur = chs[z] + if (ccur == cur) { + cur_found = 1 + continue + } + if (!cur_found || !ccur.tagName) + continue + + if (ccur.tagName == sh_elmnm) + subheaders[subheaders.length] = ccur.innerHTML + else if (ccur.tagName == txt_elmnm) + texts[texts.length] = ccur.innerHTML + else + break + // If either H2 or P element, add object to elems var + elems[elems.length] = ccur + } + + width = isin(classes, widclass, 1, stdwidth) * 1 + if (width < 10) + width = stdwidth + dynamic = isin(classes, dynclass, 1, stddynamic) * 1 + isdynamic = dynamic == 0 || dynamic == 1 + + delxws = isin(classes, xwsclass, 0, alwdelxws) + + c_halign = isin(classes, halclass, 1, stdhalign) * 1 + c_shalign = isin(classes, shalclass, 1, stdshalign) * 1 + c_talign = isin(classes, talclass, 1, stdtalign) * 1 + + tmps = [' ' + ctimes('-', width - 2), + '|' + ctimes('_', width - 2) + '|', + '| ' + ctimes('~', width - 4) + ' |\n'] + + // Now generate the content + header = add_borders(transform_text(header, width - 4, c_halign, delxws), '|') + subheader = subheaders ? transform_text_in_list(subheaders, width - 4, delxws, '|', ' ', c_shalign) : '' + content = texts ? transform_text_in_list(texts, width - 4, delxws, '|', ' ', c_talign) : '' + + header = tmps[0] + '\n' + header + '\n' + tmps[0] + text = header + '\n' + if (subheader) + text += subheader + '\n' + tmps[2] + if (content) + text += content + '\n' + text += tmps[1] + + /* + // Check for special classes that have nothing to do with settings + n_classes = [] + for (z in classes) { + for (y in poss_classes) { + ok = true + if (!classes[z].indexOf(poss_classes[y])) { + ok = false + break + } + } + if (ok) + n_classes[n_classes.length] = classes[z] + } + n_classes = n_classes.join(' ') + */ + + // Find eventual id + pid = cur.id + delete cur.id // To avoid two elements with alike ids + + plen = prelms.length + prelms[plen] = document.createElement('pre') + celm = prelms[plen] + celm.number = plen + elmminus // preElements may not be empty + celm.className = cur.className + /* + celm.className = stdclass + if (n_classes) + celm.className += ' ' + n_classes + */ + if (pid) + celm.id = pid + + // Find and apply eventual styles + for (z in cur.style) { + c = cur.style[z] + if (c) { + try { + if (c.indexOf(':') != -1) + tmp = c.split(':') + celm.style.setProperty(tmp[0], tmp[1].replace(';', ''), '') + } + catch(e){} + } + } + + celm.style.display = 'none' + celm.innerHTML = text + if (isdynamic) { + c_speed = isin(classes, speclass, 1, dynspeed) * 1 + c_lines = isin(classes, linclass, 1, dynlines) * 1 + if (!c_lines) c_lines = dynlines + c_quidyn = isin(classes, quiclass, 0, quickdyn) + celm.fulltext = text + celm.header = header + celm.headerheight = count(header) + celm.fulltextheight = count(text) + celm.state = dynamic + if (!isin(classes, dynclass)) + celm.className += ' ' + dynclass + if (!isin(classes, dynclass + dynamic)) + celm.className += ' ' + dynclass + dynamic + /* + if (c_quidyn) + celm.className += ' ' + quiclass + */ + celm.dynclass = dynclass + celm.dynspeed = c_speed + celm.dynlines = c_lines + celm.quickdyn = c_quidyn + + if (dynamic == 0) + celm.onclick = function(){load_totxt_generator('show_or_hide', this.number)} + else + celm.ondblclick = function(){load_totxt_generator('show_or_hide', this.number)} + if (!dynamic) + celm.innerHTML = header + } + + par.insertBefore(prelms[plen], cur) + } + + // Remove used elements + for (x in elems) { + elems[x].parentNode.removeChild(elems[x]) + } + + // Show new elements + for (x in prelms) { + prelms[x].style.display = 'block' + } + + for (x in prelms) { + preElements[preElements.length] = prelms[x] + } + document.totxt_preElements = preElements + + return true +} diff --git a/subsites/projects/totxt/vortex-l2.png b/subsites/projects/totxt/vortex-l2.png new file mode 100755 index 0000000..450f6c2 Binary files /dev/null and b/subsites/projects/totxt/vortex-l2.png differ diff --git a/subsites/projects/webcli/.gitignore b/subsites/projects/webcli/.gitignore new file mode 100644 index 0000000..20d30ef --- /dev/null +++ b/subsites/projects/webcli/.gitignore @@ -0,0 +1 @@ +bak/ \ No newline at end of file diff --git a/subsites/projects/webcli/commands.js b/subsites/projects/webcli/commands.js new file mode 100644 index 0000000..a24f35b --- /dev/null +++ b/subsites/projects/webcli/commands.js @@ -0,0 +1,344 @@ + + + +add("If you don't know what this is, you'll know in less than one minute. If you already know what this is, you'll already know what it is (simple).\nThis is webCLI, a playground for people who find it fascinating to use a computer with commands. You can't use your mouse. You need to type words - commands. Type [whatis] to see a list of all commands. Type [whatis -detail] to see a list of all commands in detail. Type [whatis <command>] to see a more detailed description of just one command.") + + + + + +if (!cb) +add("Here's a list of available commands and a description of them:\n\n"+allcommands+"\n\nIf you want to see a more detailed description of a command, type [whatis <command>]. Type [whatis -detail] to see a list of all commands in detail.") +else if (cb=="-detail") +add("Here's a list of available commands, a description of them and possible parameters:\n\n"+allcommandsdetailed+"\n\nIf you only want to see a list of commands with a description, type [whatis] with no parameters. \n") +else if (commandexists()) +add("The \""+cb+"\" command:\n"+whatis()) +else +add("The command \""+cb+"\" doesn't exist. Type [whatis] for a list of all commands and a description. Type [whatis -detail] for a complete reference of all commands.") + + + +add(ca.substr(0,1).toUpperCase()+ca.substr(1)+"ing...") +window.location.reload() + + + + + +t.value="" +add(startmessage,true) + + + +if (!cb) { +add("You have to specify parameters!") +return +} +if (!cc) { +if (cb=="-reset") t.style.font="" +else t.style.font=cb +} +else { +if (cb=="family") { +if (cc=="-reset") t.style.fontFamily="lucida console" +else t.style.fontFamily=cc +} +else if (cb=="size") { +if (cc=="-reset") t.style.fontSize="12px" +else t.style.fontSize=cc +} +else if (cb=="style") { +if (cc=="-reset") t.style.fontStyle="normal" +else t.style.fontStyle=cc +} +else if (cb=="variant") { +if (cc=="-reset") t.style.fontVariant="normal" +else t.style.fontVariant=cc +} +else if (cb=="weight") { +if (cc=="-reset") t.style.fontWeight="bold" +else t.style.fontWeight=cc +} +else { +add("That property doesn't exist.") +return +} +} +add("",true,true) + + + +if (!cb) { +add("You have to specify parameters!") +return +} +if (!cc) { +if (cb=="-reset") { +t.style.color="#fff" +t.style.lineHeight="normal" +t.style.letterSpacing="normal" +t.style.textDecoration="none" +t.style.textTransform="none" +t.style.wordSpacing="normal" +} +else { +add("You have to specify a value!") +return +} +} +else { +if (cb=="color") { +if (cc=="-reset") t.style.color="#fff" +else t.style.color=cc +} +else if (cb=="line-height") { +if (cc=="-reset") t.style.lineHeight="normal" +else t.style.lineHeight=cc +} +else if (cb=="letter-spacing") { +if (cc=="-reset") t.style.letterSpacing="normal" +else t.style.letterSpacing=cc +} +else if (cb=="decoration") { +if (cc=="-reset") t.style.textDecoration="none" +else t.style.textDecoration=cc +} +else if (cb=="transform") { +if (cc=="-reset") t.style.textTransform="none" +else t.style.textTransform=cc +} +else if (cb=="word-spacing") { +if (cc=="-reset") t.style.wordSpacing="normal" +else t.style.wordSpacing=cc +} +else { +add("That property doesn't exist.") +return +} +} +add("",true,true) + + + +if (!cb) { +add("You have to specify parameters!") +return +} +if (!cc) { +if (cb=="-reset") t.style.background="" +else t.style.background=cb +} +else { +if (cb=="attachment") { +if (cc=="-reset") t.style.backgroundAttachment="scroll" +else t.style.backgroundAttachment=cc +} +else if (cb=="color") { +if (cc=="-reset") t.style.backgroundColor="#000" +else t.style.backgroundColor=cc +} +else if (cb=="image") { +if (cc=="-reset") t.style.backgroundImage="none" +else t.style.backgroundImage=cc +} +else if (cb=="position") { +if (cc=="-reset") t.style.backgroundPosition="0% 0%" +else t.style.backgroundPosition=cc +} +else if (cb=="repeat") { +if (cc=="-reset") t.style.backgroundRepeat="repeat" +else t.style.backgroundRepeat=cc +} +else { +add("That property doesn't exist.") +return +} +} +add("",true,true) + + + + + +t.style.font="normal normal bold 12px 'lucida console'" + +t.style.color="#fff" +t.style.lineHeight="normal" +t.style.letterSpacing="normal" +t.style.textDecoration="none" +t.style.textTransform="none" +t.style.wordSpacing="normal" + +t.style.background="#000" +add("",true,true) + + + +add("Fetching joke from database...\nOoops, there are no jokes! What a disaster!\nIn fact the joke system hasn't been implemented yet..") + + + +add("New chat session started.\nTry writing something like \"My name's Croxy and I'm from the planet Dyyzasf\".\nYou can't use the normal commands while in chat mode. Type [/exit] at any time to quit the chat.") + +add(msg) + + + + +if (anirunning) { +add("An animation is already running. Wait until it's done.") +return +} +anirunning=true +road=document.createElement("div") +road.style.width="500px" +road.style.height="1060px" +road.style.background="url('img/road.png') no-repeat" +road.style.position="absolute" +road.style.left="50%" +road.style.top="50%" +road.style.marginTop="-530px" +road.style.marginLeft="-250px" +road.style.zIndex="2" +bdy.appendChild(road) +ani=new Array() +for (i=0;i<3;i++) { +ani[i]=document.createElement("img") +ani[i].src="img/m"+(i+1)+".png" +ani[i].style.display="hidden" +ani[i].alt="" +ani[i].style.position="absolute" +ani[i].style.top="50%" +ani[i].style.left="50%" +animt=50 +ani[i].style.marginTop="-50px" +ani[i].style.marginLeft="-137px" +ani[i].style.zIndex="3" +bdy.appendChild(ani[i]) +} + +animation() +add("Animation is now running. You can't watch another animation while this is still running. You'll have to wait until the animation ends.") + + + + + +if (!cb) add("You have to specify an internet address.") +else if (cb=="back") window.history.go(-1) +else if (cb=="forward") window.history.go(1) +else { +var cbn=cb + +if (!(cbn.indexOf(".")>0 && cbn.indexOf(".")!=cbn.length-2)) { +add("Invalid address") +return +} +if (cbn.substr(0,7)!="http://") +cbn="http://"+cbn +window.location.href=cbn +} +add("Redirecting...",true) + + + +if (!cb) { +add("You have to specify an input!") +return +} +var addr +if (!cc || cc=="google") addr="http://www.google.com/search?q="+cbc +else if (cc=="yahoo") addr="http://search.yahoo.com/search?p="+cbc +else if (cc=="lycos") addr="http://search.lycos.com/?query="+cbc +else if (cc=="altavista") addr="http://www.altavista.com/web/results?q="+cbc +else if (cc=="live") addr="http://search.live.com/results.aspx?q="+cbc +else if (cc=="aol") addr="http://search.aol.com/aol/search?query="+cbc +else if (cc=="wikipedia") addr="http://en.wikipedia.org/wiki/Special:Search?search="+cbc+"\&go=Go" +else if (cc=="imdb") addr="http://www.imdb.com/find?q="+cbc +else { +add("That site doesn't exist.") +return +} +add("Redirecting...",true) +window.location.href=addr + + + +if (!cb) { +if (svsn==0 && (getCookie("mem")=="" || getCookie("mem")==null)) { +add("You have to use [mem] with parameters before you can see what you earlier wrote!") +return +} +if (!cookie) { +var remmsg="" +for (var ii=0; ii + + +if (!cb) { +if (!cookie) { +svsn=0 +svs=new Array() +} +else { +setCookie("mem","") +csvn=0 +} +add("Everything deleted.",true) +} +else if (!isnumeric(cb)) { +add("Dont write \""+cb+"\"! Write a number!",true) +} +else if ((cb*1>svsn && !cookie) || cb*1==0 || (cb*1>csvn && cookie)) +add("A sentence with that number doesn't exist.",true) +else { +if (!cookie) { +for (i=svsn-cb*1; i + + \ No newline at end of file diff --git a/subsites/projects/webcli/functions.js b/subsites/projects/webcli/functions.js new file mode 100644 index 0000000..7cbd13d --- /dev/null +++ b/subsites/projects/webcli/functions.js @@ -0,0 +1,137 @@ +function whatis() { + +} + +function commandexists() { +if () return true +else return false +} + +function getwh() { +if (self.innerHeight) { +h=self.innerHeight +w=self.innerWidth +} +else if (document.documentElement && document.documentElement.clientHeight) { +h=document.documentElement.clientHeight +w=document.documentElement.clientHeight +} +else if (document.body) { +h=document.body.clientHeight +w=document.body.clientWidth +} +} + +anin=1 +aniw=274 +anih=538 +function animation() { +if (anin==1 || anin==3) aninn=0 +else if (anin==2) aninn=1 +else if (anin==4) aninn=2 + +aniw=aniw*0.99 +anih=anih*0.99 +animt=animt+4 + +getwh() + +fanip=h/2-animt+anih + +for (i=0;i<3;i++) { +ani[i].style.display="none" +ani[i].style.width=aniw+"px" +ani[i].style.height=anih+"px" +ani[i].style.marginTop="-"+animt+"px" +ani[i].style.marginLeft="-"+aniw/2+"px" +} +ani[aninn].style.display="block" + +if (anin<4) anin+=1 +else anin=1 + +if (fanip>10) setTimeout("animation()",100) +else { +bdy.removeChild(road) +for (i=0;i<3;i++) { +bdy.removeChild(ani[i]) +} +anirunning=false +aniw=274 +anih=538 +} +} + +function exit() { +var opl=pl +pl="" +add(opl.substr(0,1).toUpperCase()+opl.substr(1).toLowerCase()+" session ended.") +} + +function isnumeric(ttext) { +var validchars="0123456789" +var isnumber=true +var charac + +for (i=0; i0) + { + c_start=document.cookie.indexOf(c_name + "="); + if (c_start!=-1) + { + c_start=c_start + c_name.length+1; + c_end=document.cookie.indexOf(";",c_start); + if (c_end==-1) c_end=document.cookie.length; + return unescape(document.cookie.substring(c_start,c_end)); + } + } +return ""; +} + +function setCookie(c_name,value,expiredays) +{ +var exdate=new Date(); +exdate.setDate(exdate.getDate()+expiredays); +document.cookie=c_name+ "=" +escape(value)+ +((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); +} + +function ie() { +if (navigator.appName=="Microsoft Internet Explorer") return true +else return false +} + +function ie6() { +if (navigator.appVersion.indexOf("MSIE 6")!=-1) return true +else return false +} + +function opera() { +if (navigator.appName=="Opera") return true +else return false +} + +function setCaretToEnd (control) { + if (control.createTextRange) { + var range = control.createTextRange(); + range.collapse(false); + range.select(); + } + else if (control.setSelectionRange) { + control.focus(); + var length = control.value.length; + control.setSelectionRange(length, length); + } +} \ No newline at end of file diff --git a/subsites/projects/webcli/img/m1.png b/subsites/projects/webcli/img/m1.png new file mode 100644 index 0000000..88a95d8 Binary files /dev/null and b/subsites/projects/webcli/img/m1.png differ diff --git a/subsites/projects/webcli/img/m2.png b/subsites/projects/webcli/img/m2.png new file mode 100644 index 0000000..4de0a1a Binary files /dev/null and b/subsites/projects/webcli/img/m2.png differ diff --git a/subsites/projects/webcli/img/m3.png b/subsites/projects/webcli/img/m3.png new file mode 100644 index 0000000..ebf5054 Binary files /dev/null and b/subsites/projects/webcli/img/m3.png differ diff --git a/subsites/projects/webcli/img/road.png b/subsites/projects/webcli/img/road.png new file mode 100644 index 0000000..a9d5584 Binary files /dev/null and b/subsites/projects/webcli/img/road.png differ diff --git a/subsites/projects/webcli/img/road.xcf b/subsites/projects/webcli/img/road.xcf new file mode 100644 index 0000000..ae50777 Binary files /dev/null and b/subsites/projects/webcli/img/road.xcf differ diff --git a/subsites/projects/webcli/index.htm b/subsites/projects/webcli/index.htm new file mode 100644 index 0000000..ba27ff0 --- /dev/null +++ b/subsites/projects/webcli/index.htm @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/subsites/projects/webcli/script.php b/subsites/projects/webcli/script.php new file mode 100644 index 0000000..5c273c6 --- /dev/null +++ b/subsites/projects/webcli/script.php @@ -0,0 +1,275 @@ +\n",str_replace(">",">",str_replace("\n<","\n<",str_replace("<","<",str_replace("\&","&",str_replace("&&","&&",$a))))))); +$a="<".substr($a,4,strlen($a)-8).">"; + +$xml=new SimpleXMLElement($a); +//$xml=simplexml_load_file("commands.js"); +$i=0; +foreach($xml->children() as $child) { +$newfunction=true; +$childname=$child->getName(); + +$ifpl=""; +$what="None"; +$param="None"; +foreach($child->attributes() as $a=>$b) { +if ($a=="rel" && $b!="") { +$newfunction=false; +$childname=$b; +} +else if ($a=="what" && $b!="") { +$what=$b; +} +else if ($a=="param" && $b!="") { +$param=$b; +} +else if ($a=="pl" && $b!="") { +$pl=$b; +$apl.="\nelse if (pl==\"".$pl."\") pl_".strtolower($pl)."()"; +$ifpl="\npl=\"".$pl."\""; + +foreach($child->children() as $nchild) { +$plfunctions.="\n\nfunction pl_".strtolower($pl)."() {".$nchild."}"; +} +} +} + + +if (!$newfunction) { +foreach($xml->children() as $childb) { +if ($childb->getName()==$childname) { +foreach($childb->attributes() as $ab=>$bb) { +if ($ab=="what" && $bb!="") { +if ($what!="None") { +$bb=$what; +} +$what=$bb." (does the same as [".$childb->getName()."])"; +} +else if ($ab=="param" && $bb!="") { +if ($param!="None") { +$bb=$param; +} +$param=$bb." (the same as [".$childb->getName()."])"; +} +} +} +} +} +else { + +$allfunctions.="\n\nfunction command_".$child->getName()."() {".$ifpl.$child."}"; +} +$determinefunction.="\nelse if (ca==\"".$child->getName()."\") command_".$childname."()"; +$determinewhat.="\nelse if (cb==\"".$child->getName()."\") return \"Description: ".$what."\\nParameters: ".$param."\""; + +$allcommands[$i]="\\n".$child->getName().": ".$what; +$allcommandsdetailed[$i]="\\nThe \\\"".$child->getName()."\\\" command\\nDescription: ".$what."\\nParameters: ".$param."\\n"; +//$allcommands.="\\n".$child->getName().": ".$what; +//$allcommandsdetailed.="\\nThe \\\"".$child->getName()."\\\" command\\nDescription: ".$what."\\nParameters: ".$param."\\n"; +$commandexists.=" || cb==\"".$child->getName()."\""; + +$i++; +} + +$allfunctions=substr($allfunctions,2); +$determinewhat=substr($determinewhat,6); + +sort($allcommands); +while (list($key, $val) = each($allcommands)) { +$nallcommands.=$val; +} + +sort($allcommandsdetailed); +while (list($key, $val) = each($allcommandsdetailed)) { +$nallcommandsdetailed.=$val; +} + +$allcommands=""; +$allcommandsdetailed=""; + +$allcommands=substr($nallcommands,2); +$allcommandsdetailed=substr($nallcommandsdetailed,2); +$commandexists=substr($commandexists,4); + +include("functions.js"); +echo "\n\n".$allfunctions.$plfunctions; +?> + + +function add(sometext,l,ll) { +nn="\n\n" +if (l) nn="\n" +if (ll) nn="" +t.value+=sometext+nn+pl+">" +t.focus() +} + +function resize() { +if (self.innerHeight) h=self.innerHeight +else if (document.documentElement && document.documentElement.clientHeight) h=document.documentElement.clientHeight +else if (document.body) h=document.body.clientHeight +t.style.height=h-2+"px" +scrolldown() +} + +function focusafterawhile() { +if (focuswait) { +focuswait=false +setTimeout("focusafterawhile()",250) +} +else +t.focus() +} + +function scrolldown() { +th=t.scrollHeight +if (th>h) t.scrollTop=th +} + +function onenter(e) { +if (!enterdown) { +if (window.event) keycode=window.event.keyCode +else if (e) keycode=e.which +enterdown=true +setTimeout("onenter()",50) +} +else { +enterdown=false +if (keycode!=13) return +msga=t.value.split("\n") +msgl=msga.length +msg=msga[msgl-2].substr(1+pl.length) +//msg=msg.toLowerCase() +msgl=msg.length +if (ie() || opera()) { +msgl-=1 +msg=msg.substr(0,msgl) +} + + +msgps=new Array() +c=0 +cc=0 +qtd=false +for (i=0; i +else add("Error! The command \""+ca+"\" doesn't exist! Type help for help.") +} +else { +if (ca=="") add("",true,true) +else if (ca=="/exit") exit() + +} +if (opera()) setCaretToEnd(t) +scrolldown() +} + +} + +function start() { + +document.title="webCLI" +stylelink=document.createElement("link") +stylelink.href="style.css" +stylelink.type="text/css" +stylelink.rel="stylesheet" +head=document.getElementsByTagName("head")[0] +head.appendChild(stylelink) + +enterdown=false +allcommands="" +allcommandsdetailed="" +anirunning=false +svsn=0 +svs=new Array() +startmessage="webCLI [version 0.01]\nwebCLI is free software. No warranty blah blah." +if (opera()) beware="\nYou are using Opera, and webCLI is, for some reason, not working perfectly in Opera. Most of it works, though. You might want to consider using Firefox, where webCLI works perfectly." +else if (ie()) beware="\nYou are using Internet Explorer, and webCLI works okay in this browser. However, you might want to consider using Firefox, where webCLI works perfectly." +else beware="" +pl="" +cookie=navigator.cookieEnabled +if (cookie) { +var coie=getCookie("mem") +if (coie) { +coie=coie.split("\n") +csvn=coie.length +} +else csvn=0 +} + +img1=new Image() +img1.src="img/m1.png" +img2=new Image() +img2.src="img/m2.png" +img3=new Image() +img3.src="img/m3.png" +img4=new Image() +img4.src="img/road.png" + +bdy=document.body + +t=document.createElement("textarea") +bdy.appendChild(t) + +resize() +t.innerHTML="" +add(startmessage+beware,true) +focuswait=true +if (ie() || opera()) setCaretToEnd(t) +focusafterawhile() +} + +window.onload=start +window.onresize=resize +document.onkeydown=onenter \ No newline at end of file diff --git a/subsites/projects/webcli/style.css b/subsites/projects/webcli/style.css new file mode 100644 index 0000000..a0e7e8a --- /dev/null +++ b/subsites/projects/webcli/style.css @@ -0,0 +1,21 @@ +* { + margin:0; + padding:0; + } + +body { + background:#000; + height:100%; + overflow:hidden; + } + +textarea { + font:normal normal bold 12px 'lucida console'; + color:#fff; + width:100%; + height:50px; + background:transparent; + border:0; + cursor:default; + overflow-x:hidden; + } \ No newline at end of file diff --git a/subsites/projects/words/.htaccess b/subsites/projects/words/.htaccess new file mode 100644 index 0000000..0723dda --- /dev/null +++ b/subsites/projects/words/.htaccess @@ -0,0 +1 @@ +ErrorDocument 404 /show.php diff --git a/subsites/projects/words/data/1261236202 b/subsites/projects/words/data/1261236202 new file mode 100644 index 0000000..05d53bf --- /dev/null +++ b/subsites/projects/words/data/1261236202 @@ -0,0 +1 @@ +First words. \ No newline at end of file diff --git a/subsites/projects/words/data/1261601736 b/subsites/projects/words/data/1261601736 new file mode 100644 index 0000000..c66f576 --- /dev/null +++ b/subsites/projects/words/data/1261601736 @@ -0,0 +1 @@ +PiTiVi seems nice but renders not happily. Looks nice, though. \ No newline at end of file diff --git a/subsites/projects/words/data/1261601803 b/subsites/projects/words/data/1261601803 new file mode 100644 index 0000000..f7a1936 --- /dev/null +++ b/subsites/projects/words/data/1261601803 @@ -0,0 +1 @@ +PiTiVi 0.13.3, that is. \ No newline at end of file diff --git a/subsites/projects/words/data/1261939098 b/subsites/projects/words/data/1261939098 new file mode 100644 index 0000000..de70a69 --- /dev/null +++ b/subsites/projects/words/data/1261939098 @@ -0,0 +1 @@ +Græskar, kernefamilie \ No newline at end of file diff --git a/subsites/projects/words/data/1262258778 b/subsites/projects/words/data/1262258778 new file mode 100644 index 0000000..55d758f --- /dev/null +++ b/subsites/projects/words/data/1262258778 @@ -0,0 +1 @@ +The unpeople at Uncyclopedia decided to keep my Humanato article! \ No newline at end of file diff --git a/subsites/projects/words/data/1262587110 b/subsites/projects/words/data/1262587110 new file mode 100644 index 0000000..20c0586 --- /dev/null +++ b/subsites/projects/words/data/1262587110 @@ -0,0 +1 @@ +School. \ No newline at end of file diff --git a/subsites/projects/words/data/1262867437 b/subsites/projects/words/data/1262867437 new file mode 100644 index 0000000..7c44871 --- /dev/null +++ b/subsites/projects/words/data/1262867437 @@ -0,0 +1 @@ +Must switch keyboard layout. QWERTY is slow. \ No newline at end of file diff --git a/subsites/projects/words/data/1262952166 b/subsites/projects/words/data/1262952166 new file mode 100644 index 0000000..dd7b6f1 --- /dev/null +++ b/subsites/projects/words/data/1262952166 @@ -0,0 +1 @@ +DVORAK? \ No newline at end of file diff --git a/subsites/projects/words/data/1263133664 b/subsites/projects/words/data/1263133664 new file mode 100644 index 0000000..e69de29 diff --git a/subsites/projects/words/data/1263133929 b/subsites/projects/words/data/1263133929 new file mode 100644 index 0000000..3a18da4 --- /dev/null +++ b/subsites/projects/words/data/1263133929 @@ -0,0 +1 @@ +I wrote that on a keyboard with Dvorak layout. \ No newline at end of file diff --git a/subsites/projects/words/data/1263815455 b/subsites/projects/words/data/1263815455 new file mode 100644 index 0000000..b8026bd --- /dev/null +++ b/subsites/projects/words/data/1263815455 @@ -0,0 +1 @@ +ord: højtænksomt \ No newline at end of file diff --git a/subsites/projects/words/data/1264663488 b/subsites/projects/words/data/1264663488 new file mode 100644 index 0000000..019cca6 --- /dev/null +++ b/subsites/projects/words/data/1264663488 @@ -0,0 +1 @@ +Hvidkål, hummus \ No newline at end of file diff --git a/subsites/projects/words/data/1264664016 b/subsites/projects/words/data/1264664016 new file mode 100644 index 0000000..82dbf0c --- /dev/null +++ b/subsites/projects/words/data/1264664016 @@ -0,0 +1,2 @@ +Verden er af lave => verden er skæv +Verden er af høje => verden har mange bakker => verden er skæv \ No newline at end of file diff --git a/subsites/projects/words/data/1264693156 b/subsites/projects/words/data/1264693156 new file mode 100644 index 0000000..2bdb256 --- /dev/null +++ b/subsites/projects/words/data/1264693156 @@ -0,0 +1 @@ +Hollywood is a Ford T factory. \ No newline at end of file diff --git a/subsites/projects/words/data/1264851757 b/subsites/projects/words/data/1264851757 new file mode 100644 index 0000000..78fd57a --- /dev/null +++ b/subsites/projects/words/data/1264851757 @@ -0,0 +1 @@ +Synopsis = :( \ No newline at end of file diff --git a/subsites/projects/words/data/1264870454 b/subsites/projects/words/data/1264870454 new file mode 100644 index 0000000..124df95 --- /dev/null +++ b/subsites/projects/words/data/1264870454 @@ -0,0 +1 @@ +First shared library! \ No newline at end of file diff --git a/subsites/projects/words/data/1265315369 b/subsites/projects/words/data/1265315369 new file mode 100644 index 0000000..0e1d755 --- /dev/null +++ b/subsites/projects/words/data/1265315369 @@ -0,0 +1,3 @@ +Skolefif #1 +Man kan altid sige til sin lærer, at ens stil bare var på et niveau +langt højere end lærerens. \ No newline at end of file diff --git a/subsites/projects/words/data/1265315436 b/subsites/projects/words/data/1265315436 new file mode 100644 index 0000000..b8eeff9 --- /dev/null +++ b/subsites/projects/words/data/1265315436 @@ -0,0 +1 @@ +Thinking _in_ Dvorak now. \ No newline at end of file diff --git a/subsites/projects/words/data/1265376595 b/subsites/projects/words/data/1265376595 new file mode 100644 index 0000000..c0cca76 --- /dev/null +++ b/subsites/projects/words/data/1265376595 @@ -0,0 +1 @@ +convert -density 200 sæt.pdf a.png \ No newline at end of file diff --git a/subsites/projects/words/data/1267471342 b/subsites/projects/words/data/1267471342 new file mode 100644 index 0000000..a7ea90f --- /dev/null +++ b/subsites/projects/words/data/1267471342 @@ -0,0 +1 @@ +Talende metal: stemmejern \ No newline at end of file diff --git a/subsites/projects/words/data/1268722667 b/subsites/projects/words/data/1268722667 new file mode 100644 index 0000000..244cf00 --- /dev/null +++ b/subsites/projects/words/data/1268722667 @@ -0,0 +1 @@ +wiiiiiibxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk \ No newline at end of file diff --git a/subsites/projects/words/data/1269462121 b/subsites/projects/words/data/1269462121 new file mode 100644 index 0000000..8b3719d --- /dev/null +++ b/subsites/projects/words/data/1269462121 @@ -0,0 +1,15 @@ +From Jan 10, when I was not yet a master at Dvorak: + +Nioels' IHDvorab\xk ypractnices + +Neouioenient. Niels., IDvorabxk +annoyc\rimbxkncyfp.ioethoentihtaoenihaodeihaoedaaaaaarlrcgch + + +The rabbit was forced to travel south. It didn't bother to look for +knowledge, as it had already fulfillen its purpose. Its purpose was to +completely destroy all goot. In ancient times, goot was a substance that +only special people were allowed to utilize. And goot was made from +animals -- rabbits. Together with turtles and zebras, who quickly +stopped cooperating, they created a not-for-profit goot-removal +organization. \ No newline at end of file diff --git a/subsites/projects/words/data/1269719179 b/subsites/projects/words/data/1269719179 new file mode 100644 index 0000000..77bcd81 --- /dev/null +++ b/subsites/projects/words/data/1269719179 @@ -0,0 +1 @@ +Diskussionsdebatten \ No newline at end of file diff --git a/subsites/projects/words/data/1269719193 b/subsites/projects/words/data/1269719193 new file mode 100644 index 0000000..e0358e5 --- /dev/null +++ b/subsites/projects/words/data/1269719193 @@ -0,0 +1 @@ +Sketch hvor mennesker er internettet \ No newline at end of file diff --git a/subsites/projects/words/data/1269719207 b/subsites/projects/words/data/1269719207 new file mode 100644 index 0000000..d27a872 --- /dev/null +++ b/subsites/projects/words/data/1269719207 @@ -0,0 +1 @@ +I want to make an RPG! \ No newline at end of file diff --git a/subsites/projects/words/data/1269720734 b/subsites/projects/words/data/1269720734 new file mode 100644 index 0000000..768cc95 --- /dev/null +++ b/subsites/projects/words/data/1269720734 @@ -0,0 +1,7 @@ +The world will soon break free of its bonds to humanity. + +... who said that? + +Hmm.. + +I'm tired of television. It's hasn't got a vision. \ No newline at end of file diff --git a/subsites/projects/words/data/1269727939 b/subsites/projects/words/data/1269727939 new file mode 100644 index 0000000..1f0807f --- /dev/null +++ b/subsites/projects/words/data/1269727939 @@ -0,0 +1 @@ +Ulam spiral \ No newline at end of file diff --git a/subsites/projects/words/data/1269820763 b/subsites/projects/words/data/1269820763 new file mode 100644 index 0000000..f75e8e8 --- /dev/null +++ b/subsites/projects/words/data/1269820763 @@ -0,0 +1 @@ +We must abolish daylight saving time! \ No newline at end of file diff --git a/subsites/projects/words/data/1269820885 b/subsites/projects/words/data/1269820885 new file mode 100644 index 0000000..f156ce0 --- /dev/null +++ b/subsites/projects/words/data/1269820885 @@ -0,0 +1 @@ +I repeat: This is not a (micro)blog. \ No newline at end of file diff --git a/subsites/projects/words/data/1269892094 b/subsites/projects/words/data/1269892094 new file mode 100644 index 0000000..f023ac9 --- /dev/null +++ b/subsites/projects/words/data/1269892094 @@ -0,0 +1 @@ +And so he said: "You should never do that; do this instead." diff --git a/subsites/projects/words/data/1269901241 b/subsites/projects/words/data/1269901241 new file mode 100644 index 0000000..1aebf69 --- /dev/null +++ b/subsites/projects/words/data/1269901241 @@ -0,0 +1 @@ +A bug can become a feature. \ No newline at end of file diff --git a/subsites/projects/words/data/1270078531 b/subsites/projects/words/data/1270078531 new file mode 100644 index 0000000..1994a59 --- /dev/null +++ b/subsites/projects/words/data/1270078531 @@ -0,0 +1 @@ +My new programming language, Enigma, is getting there! \ No newline at end of file diff --git a/subsites/projects/words/data/1270173663 b/subsites/projects/words/data/1270173663 new file mode 100644 index 0000000..0469631 --- /dev/null +++ b/subsites/projects/words/data/1270173663 @@ -0,0 +1,2 @@ +$ whatis "nothing appropriate" +nothing appropriate: nothing appropriate. \ No newline at end of file diff --git a/subsites/projects/words/data/1270174114 b/subsites/projects/words/data/1270174114 new file mode 100644 index 0000000..87cc33d --- /dev/null +++ b/subsites/projects/words/data/1270174114 @@ -0,0 +1,30 @@ +This is a sentence which is not written in past tense. +This is a word which is not absurd. +This is a letter which is not any better. +But what is it? + +The scientists thought about it for a long time, but they gave up in the end. +The evil people investigated it for evil purposes, but they gave up in the end. +"An object cannot both be a sentence, a word, and a letter at the same +time!" everybody kept saying. +Then, one day, in came a quantum particle. It said "Hi", but it also +said "Farewell". At the same time. Everybody was schocked. + +But they were still not sure. + +Then, another day, a fly appeared. While the peoples' uncertainty switch +was still on, they were all determined on killing the fly. They were +certain and uncertain at the same time. + +"This is a coincidence!" a scientist said. So they were still not sure. + +Then, on a third day, the second day showed up. It was followed by the +first day. People were surprised, as the days officially lay in the +past. But they realized that all three days suddenly existed on the same +day. They did not understand this. + +And so they ignored it. + + +--------------------- +Based on a true story \ No newline at end of file diff --git a/subsites/projects/words/data/1270219723 b/subsites/projects/words/data/1270219723 new file mode 100644 index 0000000..49b1159 --- /dev/null +++ b/subsites/projects/words/data/1270219723 @@ -0,0 +1 @@ +nɛls \ No newline at end of file diff --git a/subsites/projects/words/data/1270316742 b/subsites/projects/words/data/1270316742 new file mode 100644 index 0000000..1f1c9bb --- /dev/null +++ b/subsites/projects/words/data/1270316742 @@ -0,0 +1 @@ +A nullVariable is not a nullVariable if you change it. \ No newline at end of file diff --git a/subsites/projects/words/data/1270316785 b/subsites/projects/words/data/1270316785 new file mode 100644 index 0000000..5828c61 --- /dev/null +++ b/subsites/projects/words/data/1270316785 @@ -0,0 +1 @@ +This beats Identi.ca. \ No newline at end of file diff --git a/subsites/projects/words/data/1270316798 b/subsites/projects/words/data/1270316798 new file mode 100644 index 0000000..76254be --- /dev/null +++ b/subsites/projects/words/data/1270316798 @@ -0,0 +1,3 @@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +More than 140 characters! \ No newline at end of file diff --git a/subsites/projects/words/data/1270417438 b/subsites/projects/words/data/1270417438 new file mode 100644 index 0000000..6453f81 --- /dev/null +++ b/subsites/projects/words/data/1270417438 @@ -0,0 +1 @@ +I must set out on a quest to create an RPG! \ No newline at end of file diff --git a/subsites/projects/words/data/1270933129 b/subsites/projects/words/data/1270933129 new file mode 100644 index 0000000..b655693 --- /dev/null +++ b/subsites/projects/words/data/1270933129 @@ -0,0 +1 @@ +6.626 \ No newline at end of file diff --git a/subsites/projects/words/data/1271840975 b/subsites/projects/words/data/1271840975 new file mode 100644 index 0000000..bb1767a --- /dev/null +++ b/subsites/projects/words/data/1271840975 @@ -0,0 +1 @@ +It's snowing in Denmark. \ No newline at end of file diff --git a/subsites/projects/words/data/1273256987 b/subsites/projects/words/data/1273256987 new file mode 100644 index 0000000..717aef5 --- /dev/null +++ b/subsites/projects/words/data/1273256987 @@ -0,0 +1 @@ +Strong ant: Tarzant (haha) \ No newline at end of file diff --git a/subsites/projects/words/data/1274476571 b/subsites/projects/words/data/1274476571 new file mode 100644 index 0000000..44b1318 --- /dev/null +++ b/subsites/projects/words/data/1274476571 @@ -0,0 +1 @@ +Only two exams. Easy. \ No newline at end of file diff --git a/subsites/projects/words/data/1279182016 b/subsites/projects/words/data/1279182016 new file mode 100644 index 0000000..62eb764 --- /dev/null +++ b/subsites/projects/words/data/1279182016 @@ -0,0 +1,19 @@ +Poetic: + +I have not written anything +for a long time +now. + +But I just realized +that +I love atan2. + +It makes my life +easier. + +Without atan2, I +would have to type a lot of crappy +code. + +I don't +want to. diff --git a/subsites/projects/words/data/1279182169 b/subsites/projects/words/data/1279182169 new file mode 100644 index 0000000..e69de29 diff --git a/subsites/projects/words/data/1280866754 b/subsites/projects/words/data/1280866754 new file mode 100644 index 0000000..d973c0f --- /dev/null +++ b/subsites/projects/words/data/1280866754 @@ -0,0 +1 @@ +I want to create a text editor. \ No newline at end of file diff --git a/subsites/projects/words/data/1280866768 b/subsites/projects/words/data/1280866768 new file mode 100644 index 0000000..fc06eb4 --- /dev/null +++ b/subsites/projects/words/data/1280866768 @@ -0,0 +1 @@ +And also an RPG where no one gets hurt.. A friendly RPG. Still very action-packed, but without the murderously scary swords, shields and so on that tend to appear in these games. Something nice.. Something quiet. With puzzles. And fighting should not result in death. One should be able to build up an inventory of objects to be used in "battle", but battles should be made into battles regarding something clever: games. One should play games within the game. A common game must be established for this purpose. I don't know what it should be, but I'm thinking of something like small "monsters" that battle with their wits. One can buy jokes, knowledge, etc. Could be fun. \ No newline at end of file diff --git a/subsites/projects/words/data/1281016498 b/subsites/projects/words/data/1281016498 new file mode 100644 index 0000000..63376ed --- /dev/null +++ b/subsites/projects/words/data/1281016498 @@ -0,0 +1 @@ +100805=6=508001 \ No newline at end of file diff --git a/subsites/projects/words/data/1283533478 b/subsites/projects/words/data/1283533478 new file mode 100644 index 0000000..312371e --- /dev/null +++ b/subsites/projects/words/data/1283533478 @@ -0,0 +1 @@ +Nogle folk taler som vinden blæser. \ No newline at end of file diff --git a/subsites/projects/words/data/1284212663 b/subsites/projects/words/data/1284212663 new file mode 100644 index 0000000..2036836 --- /dev/null +++ b/subsites/projects/words/data/1284212663 @@ -0,0 +1 @@ +Landlig piedestal: piedestald. \ No newline at end of file diff --git a/subsites/projects/words/data/1284932560 b/subsites/projects/words/data/1284932560 new file mode 100644 index 0000000..e8464ff --- /dev/null +++ b/subsites/projects/words/data/1284932560 @@ -0,0 +1 @@ +Fav word: generic \ No newline at end of file diff --git a/subsites/projects/words/data/1287692197 b/subsites/projects/words/data/1287692197 new file mode 100644 index 0000000..e6b6659 --- /dev/null +++ b/subsites/projects/words/data/1287692197 @@ -0,0 +1 @@ +Croatia. \ No newline at end of file diff --git a/subsites/projects/words/data/1295193419 b/subsites/projects/words/data/1295193419 new file mode 100644 index 0000000..eff53f9 --- /dev/null +++ b/subsites/projects/words/data/1295193419 @@ -0,0 +1 @@ +Is it worth noting or worth nothing? \ No newline at end of file diff --git a/subsites/projects/words/data/1296682829 b/subsites/projects/words/data/1296682829 new file mode 100644 index 0000000..9f1518d --- /dev/null +++ b/subsites/projects/words/data/1296682829 @@ -0,0 +1 @@ +new word: multiplicativity \ No newline at end of file diff --git a/subsites/projects/words/index.php b/subsites/projects/words/index.php new file mode 100644 index 0000000..b781a18 --- /dev/null +++ b/subsites/projects/words/index.php @@ -0,0 +1,30 @@ + diff --git a/subsites/projects/words/saved_crypt_pass.php b/subsites/projects/words/saved_crypt_pass.php new file mode 100644 index 0000000..0945be7 --- /dev/null +++ b/subsites/projects/words/saved_crypt_pass.php @@ -0,0 +1,3 @@ + diff --git a/subsites/projects/words/upload.php b/subsites/projects/words/upload.php new file mode 100644 index 0000000..5498426 --- /dev/null +++ b/subsites/projects/words/upload.php @@ -0,0 +1,24 @@ + diff --git a/subsites/projects/x/.gitignore b/subsites/projects/x/.gitignore new file mode 100644 index 0000000..917e6c5 --- /dev/null +++ b/subsites/projects/x/.gitignore @@ -0,0 +1,2 @@ +bak/ +andet/ \ No newline at end of file diff --git a/subsites/projects/x/a.jpg b/subsites/projects/x/a.jpg new file mode 100644 index 0000000..7adf104 Binary files /dev/null and b/subsites/projects/x/a.jpg differ diff --git a/subsites/projects/x/blinkit.htm b/subsites/projects/x/blinkit.htm new file mode 100644 index 0000000..a0754ee --- /dev/null +++ b/subsites/projects/x/blinkit.htm @@ -0,0 +1,114 @@ + + + +BlinkIt + + + + +
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/boxmove.htm b/subsites/projects/x/boxmove.htm new file mode 100644 index 0000000..9c88a8d --- /dev/null +++ b/subsites/projects/x/boxmove.htm @@ -0,0 +1,86 @@ + + + +BoxMove + + + + +
+ + \ No newline at end of file diff --git a/subsites/projects/x/cc.htm b/subsites/projects/x/cc.htm new file mode 100644 index 0000000..42881e7 --- /dev/null +++ b/subsites/projects/x/cc.htm @@ -0,0 +1,260 @@ + + + +ChadChat + + + + +
+
+
+
+
+
+
+Welcome to ChadChat.
I'm Chad, and you can ask me all kinds of questions (even though I can't guarantee an intelligent answer..)
Type help if you're completely lost.
Type links to see what cool links I know of..
And finally, just chat with me! +
+
+
+
+ Ask me! +
+
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/ccr.htm b/subsites/projects/x/ccr.htm new file mode 100644 index 0000000..2f2c1de --- /dev/null +++ b/subsites/projects/x/ccr.htm @@ -0,0 +1,50 @@ + + + +ColorChange + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/circlebounce.htm b/subsites/projects/x/circlebounce.htm new file mode 100644 index 0000000..fe004ea --- /dev/null +++ b/subsites/projects/x/circlebounce.htm @@ -0,0 +1,110 @@ + + + +CircleBounce + + + + +
+ + \ No newline at end of file diff --git a/subsites/projects/x/dotspot.htm b/subsites/projects/x/dotspot.htm new file mode 100644 index 0000000..5a5f4fc --- /dev/null +++ b/subsites/projects/x/dotspot.htm @@ -0,0 +1,89 @@ + + + +dotspot + + + + +
+ + \ No newline at end of file diff --git a/subsites/projects/x/draw.htm b/subsites/projects/x/draw.htm new file mode 100644 index 0000000..7242759 --- /dev/null +++ b/subsites/projects/x/draw.htm @@ -0,0 +1,8 @@ + + + +SimpleDraw + + + + \ No newline at end of file diff --git a/subsites/projects/x/draw.js b/subsites/projects/x/draw.js new file mode 100644 index 0000000..9ab70bb --- /dev/null +++ b/subsites/projects/x/draw.js @@ -0,0 +1,64 @@ +function isnumeric(sText) +{ +ValidChars="0123456789" +IsNumber=true + +for (i=0; i
" +add_html("
SimpleDraw
Choose the size of the drawing box:
Width:    Height:    ") +} + +function loadbox() +{ +document.getElementById("btn").disabled='disabled' +w=document.getElementById("w").value +h=document.getElementById("h").value +add_html("
Box size: "+w+"x"+h+"

") +document.getElementById("w").value=w +document.getElementById("h").value=h + +add_html("
Loading...
") +pxs="" +for (a=0; a
" +} +pxs=pxs+"
" +} +document.getElementById("drawingbox").innerHTML=pxs +} \ No newline at end of file diff --git a/subsites/projects/x/eyekiller.htm b/subsites/projects/x/eyekiller.htm new file mode 100644 index 0000000..5459967 --- /dev/null +++ b/subsites/projects/x/eyekiller.htm @@ -0,0 +1,109 @@ + + + +Eyekiller + + + + +
+
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/eyekiller/bg.png b/subsites/projects/x/eyekiller/bg.png new file mode 100644 index 0000000..09b7033 Binary files /dev/null and b/subsites/projects/x/eyekiller/bg.png differ diff --git a/subsites/projects/x/eyekiller/car.png b/subsites/projects/x/eyekiller/car.png new file mode 100644 index 0000000..d5f9226 Binary files /dev/null and b/subsites/projects/x/eyekiller/car.png differ diff --git a/subsites/projects/x/eyekiller/gbg.png b/subsites/projects/x/eyekiller/gbg.png new file mode 100644 index 0000000..e205313 Binary files /dev/null and b/subsites/projects/x/eyekiller/gbg.png differ diff --git a/subsites/projects/x/fbox.htm b/subsites/projects/x/fbox.htm new file mode 100644 index 0000000..b8010f7 --- /dev/null +++ b/subsites/projects/x/fbox.htm @@ -0,0 +1,200 @@ + + + +FocusBox + + + + +
+ +
+
+
+
+ +
+ +
+ +
And so on..Gdhad sdighg s kdhfkash tregh ædfgltFshdsgæ rjkhsjfhgkl wew ykdsl æsdægfXDFghjd sdjgf sdDSdjgds dsdkhfkaA AadtFshdsgæ rjkhsjfhgkl wew ykdsl æsdægfXDFghjd sdjgf sdDSdj + +
If the world should once again be hit by a gigantic meteor/meteoroid/asteroid the human race is not going to die. 5201 people will survive, as the Holy Book of the Babylonians describe. "This is pure nonsense," is not written. However, nonsense is written indirectly. The phrase "Ghykjsd" is yet to be translated.
+ +
And so on.. Gdhad sdighg s kdhfkash tregh æd fgltFsh dsgæ rjkhsjfhg klwewykdsl æsdægf XDFghjd sdjgf sdD Sdjgds dsdkh fkaA Aadjf eD FhsdgtASs ksdjrDD sdfhsjkldf ..adfj kSSS h!!bdfk ?? sdfs++-+ gSf sA hdR hhsa asd SF; fhhs aaaafss ss rhgjasdasdso on.. Gdhad sdighg s kdhfkash tregh æd fgltFsh dsgæ rjkhsjfhgkl wew ykdsl æsdægf XDFghjd sdjgf sdD Sdjgds dsdkh fkaA Aadjf eD FhsdgtASs ksdjrDD sdfhsjkldf ..adfj kSSS h!!bdfk ?? sdfs++-+ gSf sA hdR hhsa asd SF; fhhs aaaafss ss Trhsdkh fkaA Aadjf eD FhsdgtASs ksdjrDD sdfhsjkldf ..adfj kSSS h!!bdfk ?? sdfs++-+ gSf sA hdR hhsa asd SF; fhhs aaaafss ss Trhgjasdasdso on.. Gdhad sdighg s.
+ +
+ + \ No newline at end of file diff --git a/subsites/projects/x/gallery.htm b/subsites/projects/x/gallery.htm new file mode 100644 index 0000000..5deb55d --- /dev/null +++ b/subsites/projects/x/gallery.htm @@ -0,0 +1,134 @@ + + + +Gallery + + + + + +
+ + +
+ +
+ + \ No newline at end of file diff --git a/subsites/projects/x/gallery/1.jpg b/subsites/projects/x/gallery/1.jpg new file mode 100644 index 0000000..add0a5c Binary files /dev/null and b/subsites/projects/x/gallery/1.jpg differ diff --git a/subsites/projects/x/gallery/2.jpg b/subsites/projects/x/gallery/2.jpg new file mode 100644 index 0000000..4e01293 Binary files /dev/null and b/subsites/projects/x/gallery/2.jpg differ diff --git a/subsites/projects/x/gallery/3.jpg b/subsites/projects/x/gallery/3.jpg new file mode 100644 index 0000000..98375cb Binary files /dev/null and b/subsites/projects/x/gallery/3.jpg differ diff --git a/subsites/projects/x/gallery/4.jpg b/subsites/projects/x/gallery/4.jpg new file mode 100644 index 0000000..45c7487 Binary files /dev/null and b/subsites/projects/x/gallery/4.jpg differ diff --git a/subsites/projects/x/gallery/5.jpg b/subsites/projects/x/gallery/5.jpg new file mode 100644 index 0000000..f35dbdd Binary files /dev/null and b/subsites/projects/x/gallery/5.jpg differ diff --git a/subsites/projects/x/gallery/6.jpg b/subsites/projects/x/gallery/6.jpg new file mode 100644 index 0000000..434ffa8 Binary files /dev/null and b/subsites/projects/x/gallery/6.jpg differ diff --git a/subsites/projects/x/gallery/7.jpg b/subsites/projects/x/gallery/7.jpg new file mode 100644 index 0000000..ba42868 Binary files /dev/null and b/subsites/projects/x/gallery/7.jpg differ diff --git a/subsites/projects/x/gallery/8.jpg b/subsites/projects/x/gallery/8.jpg new file mode 100644 index 0000000..4a99b89 Binary files /dev/null and b/subsites/projects/x/gallery/8.jpg differ diff --git a/subsites/projects/x/game.htm b/subsites/projects/x/game.htm new file mode 100644 index 0000000..1272133 --- /dev/null +++ b/subsites/projects/x/game.htm @@ -0,0 +1,307 @@ + + + +Kill Thrill + + + + + + + + + +
Laser beams fired:
0
+
+
+
+
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/game/beam.mp3 b/subsites/projects/x/game/beam.mp3 new file mode 100644 index 0000000..b2f2c2b Binary files /dev/null and b/subsites/projects/x/game/beam.mp3 differ diff --git a/subsites/projects/x/game/beam.wav b/subsites/projects/x/game/beam.wav new file mode 100644 index 0000000..688cad9 Binary files /dev/null and b/subsites/projects/x/game/beam.wav differ diff --git a/subsites/projects/x/game/boxspace.png b/subsites/projects/x/game/boxspace.png new file mode 100644 index 0000000..473e75d Binary files /dev/null and b/subsites/projects/x/game/boxspace.png differ diff --git a/subsites/projects/x/game/infospace.png b/subsites/projects/x/game/infospace.png new file mode 100644 index 0000000..4141320 Binary files /dev/null and b/subsites/projects/x/game/infospace.png differ diff --git a/subsites/projects/x/game/monster.png b/subsites/projects/x/game/monster.png new file mode 100644 index 0000000..f32ad84 Binary files /dev/null and b/subsites/projects/x/game/monster.png differ diff --git a/subsites/projects/x/game/space.png b/subsites/projects/x/game/space.png new file mode 100644 index 0000000..42302bb Binary files /dev/null and b/subsites/projects/x/game/space.png differ diff --git a/subsites/projects/x/game/spaceship.png b/subsites/projects/x/game/spaceship.png new file mode 100644 index 0000000..650d47d Binary files /dev/null and b/subsites/projects/x/game/spaceship.png differ diff --git a/subsites/projects/x/gimg.php b/subsites/projects/x/gimg.php new file mode 100644 index 0000000..716897d --- /dev/null +++ b/subsites/projects/x/gimg.php @@ -0,0 +1,176 @@ + + + + +<?php echo $ts; ?>ImageLoad Google + + + + +
+
+ +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/subsites/projects/x/gldnsctn.php b/subsites/projects/x/gldnsctn.php new file mode 100644 index 0000000..93caa8c --- /dev/null +++ b/subsites/projects/x/gldnsctn.php @@ -0,0 +1,64 @@ + + + + +Golden section + + + +
+Width:
+Height:
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/gravity.htm b/subsites/projects/x/gravity.htm new file mode 100644 index 0000000..9cb92f7 --- /dev/null +++ b/subsites/projects/x/gravity.htm @@ -0,0 +1,94 @@ +JS Gravity \ No newline at end of file diff --git a/subsites/projects/x/hidemouse.htm b/subsites/projects/x/hidemouse.htm new file mode 100644 index 0000000..6331e46 --- /dev/null +++ b/subsites/projects/x/hidemouse.htm @@ -0,0 +1,87 @@ + + + +MouseHide + + + + + +
+ + \ No newline at end of file diff --git a/subsites/projects/x/htrt.php b/subsites/projects/x/htrt.php new file mode 100644 index 0000000..aa83850 --- /dev/null +++ b/subsites/projects/x/htrt.php @@ -0,0 +1,66 @@ + + + + +JS-PHP HTMLrotate (JS) + + + + + \ No newline at end of file diff --git a/subsites/projects/x/htrtp.php b/subsites/projects/x/htrtp.php new file mode 100644 index 0000000..55fd321 --- /dev/null +++ b/subsites/projects/x/htrtp.php @@ -0,0 +1,53 @@ +
"; +} +} +?> + + + +JS-PHP HTMLrotate (PHP) + + + +
Original image
+
Rotated image
+ + \ No newline at end of file diff --git a/subsites/projects/x/img/askme.gif b/subsites/projects/x/img/askme.gif new file mode 100644 index 0000000..eb715b8 Binary files /dev/null and b/subsites/projects/x/img/askme.gif differ diff --git a/subsites/projects/x/img/bold.png b/subsites/projects/x/img/bold.png new file mode 100644 index 0000000..d43b3e6 Binary files /dev/null and b/subsites/projects/x/img/bold.png differ diff --git a/subsites/projects/x/img/c.png b/subsites/projects/x/img/c.png new file mode 100644 index 0000000..fe585f7 Binary files /dev/null and b/subsites/projects/x/img/c.png differ diff --git a/subsites/projects/x/img/ca.png b/subsites/projects/x/img/ca.png new file mode 100644 index 0000000..a600780 Binary files /dev/null and b/subsites/projects/x/img/ca.png differ diff --git a/subsites/projects/x/img/cb.png b/subsites/projects/x/img/cb.png new file mode 100644 index 0000000..1175ac8 Binary files /dev/null and b/subsites/projects/x/img/cb.png differ diff --git a/subsites/projects/x/img/cc.png b/subsites/projects/x/img/cc.png new file mode 100644 index 0000000..b7ae602 Binary files /dev/null and b/subsites/projects/x/img/cc.png differ diff --git a/subsites/projects/x/img/ccaskme.gif b/subsites/projects/x/img/ccaskme.gif new file mode 100644 index 0000000..7722042 Binary files /dev/null and b/subsites/projects/x/img/ccaskme.gif differ diff --git a/subsites/projects/x/img/ccbg.gif b/subsites/projects/x/img/ccbg.gif new file mode 100644 index 0000000..bbf6b26 Binary files /dev/null and b/subsites/projects/x/img/ccbg.gif differ diff --git a/subsites/projects/x/img/ccbgg.gif b/subsites/projects/x/img/ccbgg.gif new file mode 100644 index 0000000..f1db430 Binary files /dev/null and b/subsites/projects/x/img/ccbgg.gif differ diff --git a/subsites/projects/x/img/ccleb.gif b/subsites/projects/x/img/ccleb.gif new file mode 100644 index 0000000..984fd2e Binary files /dev/null and b/subsites/projects/x/img/ccleb.gif differ diff --git a/subsites/projects/x/img/ccm1.gif b/subsites/projects/x/img/ccm1.gif new file mode 100644 index 0000000..a3d173c Binary files /dev/null and b/subsites/projects/x/img/ccm1.gif differ diff --git a/subsites/projects/x/img/ccm2.gif b/subsites/projects/x/img/ccm2.gif new file mode 100644 index 0000000..de98b82 Binary files /dev/null and b/subsites/projects/x/img/ccm2.gif differ diff --git a/subsites/projects/x/img/ccreb.gif b/subsites/projects/x/img/ccreb.gif new file mode 100644 index 0000000..1776a8e Binary files /dev/null and b/subsites/projects/x/img/ccreb.gif differ diff --git a/subsites/projects/x/img/ccs.gif b/subsites/projects/x/img/ccs.gif new file mode 100644 index 0000000..d894472 Binary files /dev/null and b/subsites/projects/x/img/ccs.gif differ diff --git a/subsites/projects/x/img/cctg.gif b/subsites/projects/x/img/cctg.gif new file mode 100644 index 0000000..22279e6 Binary files /dev/null and b/subsites/projects/x/img/cctg.gif differ diff --git a/subsites/projects/x/img/cd.png b/subsites/projects/x/img/cd.png new file mode 100644 index 0000000..14f8e51 Binary files /dev/null and b/subsites/projects/x/img/cd.png differ diff --git a/subsites/projects/x/img/circle.png b/subsites/projects/x/img/circle.png new file mode 100644 index 0000000..0e51842 Binary files /dev/null and b/subsites/projects/x/img/circle.png differ diff --git a/subsites/projects/x/img/circle_l.png b/subsites/projects/x/img/circle_l.png new file mode 100644 index 0000000..2c93359 Binary files /dev/null and b/subsites/projects/x/img/circle_l.png differ diff --git a/subsites/projects/x/img/fade-bottom.png b/subsites/projects/x/img/fade-bottom.png new file mode 100644 index 0000000..0b9bdeb Binary files /dev/null and b/subsites/projects/x/img/fade-bottom.png differ diff --git a/subsites/projects/x/img/fade-left.png b/subsites/projects/x/img/fade-left.png new file mode 100644 index 0000000..56b4e84 Binary files /dev/null and b/subsites/projects/x/img/fade-left.png differ diff --git a/subsites/projects/x/img/fade-right.png b/subsites/projects/x/img/fade-right.png new file mode 100644 index 0000000..e080439 Binary files /dev/null and b/subsites/projects/x/img/fade-right.png differ diff --git a/subsites/projects/x/img/fade-top.png b/subsites/projects/x/img/fade-top.png new file mode 100644 index 0000000..ec939e8 Binary files /dev/null and b/subsites/projects/x/img/fade-top.png differ diff --git a/subsites/projects/x/img/i1.png b/subsites/projects/x/img/i1.png new file mode 100644 index 0000000..18c2be0 Binary files /dev/null and b/subsites/projects/x/img/i1.png differ diff --git a/subsites/projects/x/img/i2.png b/subsites/projects/x/img/i2.png new file mode 100644 index 0000000..53e3266 Binary files /dev/null and b/subsites/projects/x/img/i2.png differ diff --git a/subsites/projects/x/img/italic.png b/subsites/projects/x/img/italic.png new file mode 100644 index 0000000..c40d23e Binary files /dev/null and b/subsites/projects/x/img/italic.png differ diff --git a/subsites/projects/x/img/linux.png b/subsites/projects/x/img/linux.png new file mode 100644 index 0000000..d273c84 Binary files /dev/null and b/subsites/projects/x/img/linux.png differ diff --git a/subsites/projects/x/img/linux.png.txt b/subsites/projects/x/img/linux.png.txt new file mode 100644 index 0000000..eb156c0 --- /dev/null +++ b/subsites/projects/x/img/linux.png.txt @@ -0,0 +1 @@ +The image linux.png is copyrighted by Larry Ewing, Simon Budig and Anja Gerwinski. See . \ No newline at end of file diff --git a/subsites/projects/x/img/m.png b/subsites/projects/x/img/m.png new file mode 100644 index 0000000..c3d425c Binary files /dev/null and b/subsites/projects/x/img/m.png differ diff --git a/subsites/projects/x/img/m1.png b/subsites/projects/x/img/m1.png new file mode 100644 index 0000000..20f8499 Binary files /dev/null and b/subsites/projects/x/img/m1.png differ diff --git a/subsites/projects/x/img/m2.png b/subsites/projects/x/img/m2.png new file mode 100644 index 0000000..bde64a1 Binary files /dev/null and b/subsites/projects/x/img/m2.png differ diff --git a/subsites/projects/x/img/nbg.png b/subsites/projects/x/img/nbg.png new file mode 100644 index 0000000..a6808d6 Binary files /dev/null and b/subsites/projects/x/img/nbg.png differ diff --git a/subsites/projects/x/img/textsize.jpg b/subsites/projects/x/img/textsize.jpg new file mode 100644 index 0000000..cd8d0d6 Binary files /dev/null and b/subsites/projects/x/img/textsize.jpg differ diff --git a/subsites/projects/x/img/textsize.jpg.txt b/subsites/projects/x/img/textsize.jpg.txt new file mode 100644 index 0000000..a1445b8 --- /dev/null +++ b/subsites/projects/x/img/textsize.jpg.txt @@ -0,0 +1 @@ +License: Public domain \ No newline at end of file diff --git a/subsites/projects/x/img/top.png b/subsites/projects/x/img/top.png new file mode 100644 index 0000000..c92e602 Binary files /dev/null and b/subsites/projects/x/img/top.png differ diff --git a/subsites/projects/x/img/topselected.png b/subsites/projects/x/img/topselected.png new file mode 100644 index 0000000..9592695 Binary files /dev/null and b/subsites/projects/x/img/topselected.png differ diff --git a/subsites/projects/x/img/underline.png b/subsites/projects/x/img/underline.png new file mode 100644 index 0000000..0b373ca Binary files /dev/null and b/subsites/projects/x/img/underline.png differ diff --git a/subsites/projects/x/imgfade.htm b/subsites/projects/x/imgfade.htm new file mode 100644 index 0000000..5434d20 --- /dev/null +++ b/subsites/projects/x/imgfade.htm @@ -0,0 +1,68 @@ + + + +ImageFade + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/imgshk.php b/subsites/projects/x/imgshk.php new file mode 100644 index 0000000..5121fc5 --- /dev/null +++ b/subsites/projects/x/imgshk.php @@ -0,0 +1,81 @@ + + + + +ImageShake + + + + + \ No newline at end of file diff --git a/subsites/projects/x/index.php b/subsites/projects/x/index.php new file mode 100644 index 0000000..ae5722a --- /dev/null +++ b/subsites/projects/x/index.php @@ -0,0 +1,101 @@ +",$fr); +$fr=explode("",$fr[1]); +$fr=$fr[0]; + +if (strpos($fr,"?>")!==false) { +$fr=explode("?>",$fr); +$fr=$fr[1]; +} + +$fw=$fw.$fr."&".$f."/"; +} +} +$c++; +} +$fw=explode("/",$fw); +sort($fw); +$fn=sizeof($fw)-2; +$c=0; + +while ($c<$fn) +{ +$fa=$fw[$c+1]; +$fa=explode("&",$fa); +$fp=$fp."".$fa[0].""; +$c++; +} +?> + + + +Experiments + + + +
+
Experiments
+
+ +
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/line.php b/subsites/projects/x/line.php new file mode 100644 index 0000000..aca7191 --- /dev/null +++ b/subsites/projects/x/line.php @@ -0,0 +1,141 @@ +$h) { +$l=$h; +$lw=$w/$h; +$lh=1; +} +else if ($h>$w) { +$l=$w; +$lw=1; +$lh=$h/$w; +} +else { +$l=$w; +$lw=1; +$lh=1; +} + + +if ($tf==false && $pi!="tr" && $pi!="br") { +$pb=$pb+$w-$lw; +} + +if ($pi=="tr") {$divstyle="top:".$pa."px;right:".$pb."px";} +else if ($pi=="br") {$divstyle="bottom:".$pa."px;right:".$pb."px";} +else if ($pi=="bl") {$divstyle="bottom:".$pa."px;left:".$pb."px";} +else {$divstyle="top:".$pa."px;left:".$pb."px";} + + +while ($c<$l) { +if ($w>$h) { +$cc=$c*$w/$h; +} +else { +$cc=$c; +} + +if ($tf==false) {$cc=$cc*-1;} + +$fl.="
"; +$c++; +} +return "
".$fl."
"; +} + +function drawlines($s) { +$fr.=drawline($s,$s/2,"tl",$s/4,0,true); +$fr.=drawline($s,$s,"tl",0,0,true); +$fr.=drawline($s/2,$s,"tl",0,$s/4,true); +$fr.=drawline(1,$s,"tl",0,$s/2,true); + +$fr.=drawline($s,1,"tl",$s/2,0,false); +$fr.=drawline($s,$s/2,"tl",$s/4,0,false); +$fr.=drawline($s,$s,"tl",0,0,false); +$fr.=drawline($s/2,$s,"tl",0,$s/4,false); + +return $fr; +} + +function drawlinewrappers($n,$s) { +$c=0; +while ($c<$n) { +$fr.="
".drawlines($s)."
\n"; +$c++; +} +return $fr; +} + +function dlwx($s,$n,$r) { +$c=0; +while ($c<$n) { +$fr.="
".drawlines($s)."
\n"; +$s=$s+$r; +$c++; +} +return $fr; +} + +function drawsimplecircle($s) { +$c=0; +while ($c<$s) { +if ($c!=0) { +if ($c>round($s/2)) { +$m=$c-$s/2; +} +else { +$m=($s/4)-sqrt(pow(($s/4)-$c,2)); +$m=$m+($s/2-$c)/$c; + +} +} +else { +$m=$s/2; +} + +$fr.="
"; +$c++; +} +return $fr; +} +?> + + +LineMaker + + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/mgravity.htm b/subsites/projects/x/mgravity.htm new file mode 100644 index 0000000..2d5c89b --- /dev/null +++ b/subsites/projects/x/mgravity.htm @@ -0,0 +1,149 @@ +Multi Gravity \ No newline at end of file diff --git a/subsites/projects/x/mm.htm b/subsites/projects/x/mm.htm new file mode 100644 index 0000000..e86e239 --- /dev/null +++ b/subsites/projects/x/mm.htm @@ -0,0 +1,69 @@ + + + +Moving Man + + + + +
+ + \ No newline at end of file diff --git a/subsites/projects/x/mousexy.htm b/subsites/projects/x/mousexy.htm new file mode 100644 index 0000000..743056d --- /dev/null +++ b/subsites/projects/x/mousexy.htm @@ -0,0 +1,43 @@ + + + +MouseXY + + + + +
+
+ + \ No newline at end of file diff --git a/subsites/projects/x/mtitle.htm b/subsites/projects/x/mtitle.htm new file mode 100644 index 0000000..e780f91 --- /dev/null +++ b/subsites/projects/x/mtitle.htm @@ -0,0 +1,12 @@ +Moving Title \ No newline at end of file diff --git a/subsites/projects/x/newspaper.php b/subsites/projects/x/newspaper.php new file mode 100644 index 0000000..7026745 --- /dev/null +++ b/subsites/projects/x/newspaper.php @@ -0,0 +1,52 @@ +".$y.""; +$a=$a+$lc; +$i++; +} +$f="
".$h.$f."
"; +return $f; +} +?> + + +The Nuked Newspaper + + + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/pf.htm b/subsites/projects/x/pf.htm new file mode 100644 index 0000000..71b22bb --- /dev/null +++ b/subsites/projects/x/pf.htm @@ -0,0 +1,69 @@ + + + +Platform + + + +
+ \ No newline at end of file diff --git a/subsites/projects/x/pgravity.htm b/subsites/projects/x/pgravity.htm new file mode 100644 index 0000000..2467895 --- /dev/null +++ b/subsites/projects/x/pgravity.htm @@ -0,0 +1,113 @@ + + + +Poor JS Gravity + + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/piclook.htm b/subsites/projects/x/piclook.htm new file mode 100644 index 0000000..febe9a7 --- /dev/null +++ b/subsites/projects/x/piclook.htm @@ -0,0 +1,52 @@ + + + +PicLook + + + + + + + \ No newline at end of file diff --git a/subsites/projects/x/richtext.htm b/subsites/projects/x/richtext.htm new file mode 100644 index 0000000..bd1d502 --- /dev/null +++ b/subsites/projects/x/richtext.htm @@ -0,0 +1,229 @@ + + + +The RichTextDevice + + + + + +
+