diff --git a/.git/COMMIT_EDITMSG b/.git/COMMIT_EDITMSG
new file mode 100644
--- /dev/null
+++ b/.git/COMMIT_EDITMSG
@@ -0,0 +1,13 @@
+we want our encode function to return the input for non-international labels
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+# On branch master
+# Changes to be committed:
+#   (use "git reset HEAD <file>..." to unstage)
+#
+#	modified:   Data/Text/Punycode.hs
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	dist/
diff --git a/.git/HEAD b/.git/HEAD
new file mode 100644
--- /dev/null
+++ b/.git/HEAD
@@ -0,0 +1,1 @@
+ref: refs/heads/master
diff --git a/.git/config b/.git/config
new file mode 100644
--- /dev/null
+++ b/.git/config
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	url = git@github.com:jonkri/punycode.git
+	fetch = +refs/heads/*:refs/remotes/origin/*
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
diff --git a/.git/description b/.git/description
new file mode 100644
--- /dev/null
+++ b/.git/description
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/.git/hooks/applypatch-msg.sample b/.git/hooks/applypatch-msg.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff --git a/.git/hooks/commit-msg.sample b/.git/hooks/commit-msg.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/.git/hooks/post-commit.sample b/.git/hooks/post-commit.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/post-commit.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script that is called after a successful
+# commit is made.
+#
+# To enable this hook, rename this file to "post-commit".
+
+: Nothing
diff --git a/.git/hooks/post-receive.sample b/.git/hooks/post-receive.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/post-receive.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script for the "post-receive" event.
+#
+# The "post-receive" script is run after receive-pack has accepted a pack
+# and the repository has been updated.  It is passed arguments in through
+# stdin in the form
+#  <oldrev> <newrev> <refname>
+# For example:
+#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+# see contrib/hooks/ for a sample, or uncomment the next line and
+# rename the file to "post-receive".
+
+#. /usr/share/git-core/contrib/hooks/post-receive-email
diff --git a/.git/hooks/post-update.sample b/.git/hooks/post-update.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/.git/hooks/pre-applypatch.sample b/.git/hooks/pre-applypatch.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff --git a/.git/hooks/pre-commit.sample b/.git/hooks/pre-commit.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/pre-commit.sample
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test "$(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0')"
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+exec git diff-index --check --cached $against --
diff --git a/.git/hooks/pre-rebase.sample b/.git/hooks/pre-rebase.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
diff --git a/.git/hooks/prepare-commit-msg.sample b/.git/hooks/prepare-commit-msg.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
diff --git a/.git/hooks/update.sample b/.git/hooks/update.sample
new file mode 100644
--- /dev/null
+++ b/.git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/.git/index b/.git/index
new file mode 100644
Binary files /dev/null and b/.git/index differ
diff --git a/.git/info/exclude b/.git/info/exclude
new file mode 100644
--- /dev/null
+++ b/.git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/.git/logs/HEAD b/.git/logs/HEAD
new file mode 100644
--- /dev/null
+++ b/.git/logs/HEAD
@@ -0,0 +1,12 @@
+0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724349 +0200	commit (initial): initial commit with README file
+53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724429 +0200	commit: added LICENSE file
+0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724680 +0200	commit: added Cabal file
+f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724712 +0200	commit: added Setup.hs file
+8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724820 +0200	commit: added Punycode module and updated the Cabal file
+2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781060 +0200	commit: Made an implementation of the adapt function
+0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783508 +0200	commit: some Haddock documentation, some clean-up, some minor Cabal changes, some stubs
+8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809242 +0200	commit: prototyped the encode function. it seems to mostly work
+0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852382 +0200	commit: fixed the suffix bug
+5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855512 +0200	commit: some minor changes. if no more bugs are detected today or tomorrow, this will be 0.0.1.0
+029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855699 +0200	commit: updated the README file
+130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864002 +0200	commit: we want our encode function to return the input for non-international labels
diff --git a/.git/logs/refs/heads/master b/.git/logs/refs/heads/master
new file mode 100644
--- /dev/null
+++ b/.git/logs/refs/heads/master
@@ -0,0 +1,12 @@
+0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724349 +0200	commit (initial): initial commit with README file
+53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724429 +0200	commit: added LICENSE file
+0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724680 +0200	commit: added Cabal file
+f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724712 +0200	commit: added Setup.hs file
+8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724820 +0200	commit: added Punycode module and updated the Cabal file
+2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781060 +0200	commit: Made an implementation of the adapt function
+0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783508 +0200	commit: some Haddock documentation, some clean-up, some minor Cabal changes, some stubs
+8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809242 +0200	commit: prototyped the encode function. it seems to mostly work
+0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852382 +0200	commit: fixed the suffix bug
+5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855512 +0200	commit: some minor changes. if no more bugs are detected today or tomorrow, this will be 0.0.1.0
+029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855699 +0200	commit: updated the README file
+130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864002 +0200	commit: we want our encode function to return the input for non-international labels
diff --git a/.git/logs/refs/remotes/origin/master b/.git/logs/refs/remotes/origin/master
new file mode 100644
--- /dev/null
+++ b/.git/logs/refs/remotes/origin/master
@@ -0,0 +1,12 @@
+0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724379 +0200	update by push
+53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724441 +0200	update by push
+0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724700 +0200	update by push
+f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724731 +0200	update by push
+8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724839 +0200	update by push
+2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781092 +0200	update by push
+0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783544 +0200	update by push
+8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809371 +0200	update by push
+0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852413 +0200	update by push
+5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855556 +0200	update by push
+029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855715 +0200	update by push
+130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864034 +0200	update by push
diff --git a/.git/objects/01/63dcbb5a184f54262f50a3596a181f586f3aa5 b/.git/objects/01/63dcbb5a184f54262f50a3596a181f586f3aa5
new file mode 100644
Binary files /dev/null and b/.git/objects/01/63dcbb5a184f54262f50a3596a181f586f3aa5 differ
diff --git a/.git/objects/02/9db06c06e1114f3cf89e750eadc5ba087f07b2 b/.git/objects/02/9db06c06e1114f3cf89e750eadc5ba087f07b2
new file mode 100644
--- /dev/null
+++ b/.git/objects/02/9db06c06e1114f3cf89e750eadc5ba087f07b2
@@ -0,0 +1,2 @@
+x¥KNÄ0DYç½Eí_âH±SøÓ»íÑÛã`YO¥Ò«À¥äJ§ÑÀYt&èÑNÒÈÝJ¤öÇNvFË·kTÞÙ TÀ]ïÖaRNOnóÑ.î>NnðÁ>[îj§
+¯¹&~ÿâzýckàòBáa1BÂ3JÄeÒ):èKçBPrátõB} 2nþ~é0oA¤AaPÁÑýÀ¬ÆgîðÈ·x\q+.¿wAgO
diff --git a/.git/objects/06/08637f3a9663403bcf5aa5fbb912293817c7df b/.git/objects/06/08637f3a9663403bcf5aa5fbb912293817c7df
new file mode 100644
--- /dev/null
+++ b/.git/objects/06/08637f3a9663403bcf5aa5fbb912293817c7df
@@ -0,0 +1,1 @@
+x¥Kn!³æ½5`Ó E×±r>Ý2IÑßßdãx[O¯Ty´V'Òosgì1ÃH´I>g-=Z>Úâ%íÕwîëH\tÉ x¨²Gd­Á´	¢%I$¯â}^Ç_£Ãe¯·ÉýÆ>kqþý÷É>òh'Ðyá¢ZtN~A¡¾cajÛþ¸­ü8ëêóº·	rïùªåNYM
diff --git a/.git/objects/0d/568849e909c947e83f21120b4603a34461459d b/.git/objects/0d/568849e909c947e83f21120b4603a34461459d
new file mode 100644
--- /dev/null
+++ b/.git/objects/0d/568849e909c947e83f21120b4603a34461459d
@@ -0,0 +1,3 @@
+x¥P;nÄ LÍ)^hÆW¢ÔÉ)ðãµy`9{û°M.fÑü4ÈÛh;>µBFÍÖ)ÂIê CÒÌhôHh¢c¤ôÖ±ûB¹ÁdÔÐ-8{^93[k¢²ÁÍÁ:¼ÎNiá¶pÎðYRm+exM9òû7çÛwAÞÞ@iyäux½St¶mô±nÜî;heä@-q¾@?¢mÃÆµ­w8¹Üx¨çãR¾M@YçpôG¥
+NJ%@=bL?/àLë
++ó|ëàKáSüJyà
diff --git a/.git/objects/0d/f8fa07e84fe3fed2a2aec504a82fe3c062829b b/.git/objects/0d/f8fa07e84fe3fed2a2aec504a82fe3c062829b
new file mode 100644
Binary files /dev/null and b/.git/objects/0d/f8fa07e84fe3fed2a2aec504a82fe3c062829b differ
diff --git a/.git/objects/13/0df5810ba24bd068a65b15c75743e8734c2472 b/.git/objects/13/0df5810ba24bd068a65b15c75743e8734c2472
new file mode 100644
Binary files /dev/null and b/.git/objects/13/0df5810ba24bd068a65b15c75743e8734c2472 differ
diff --git a/.git/objects/18/a76a36c99a177df4fa1d4edfa3254f21198b3e b/.git/objects/18/a76a36c99a177df4fa1d4edfa3254f21198b3e
new file mode 100644
Binary files /dev/null and b/.git/objects/18/a76a36c99a177df4fa1d4edfa3254f21198b3e differ
diff --git a/.git/objects/27/ffeecc508bb39739af2def53d22f9db96f7233 b/.git/objects/27/ffeecc508bb39739af2def53d22f9db96f7233
new file mode 100644
Binary files /dev/null and b/.git/objects/27/ffeecc508bb39739af2def53d22f9db96f7233 differ
diff --git a/.git/objects/2a/76dd32a10dac62fab910b5d4e1c29001a13ba4 b/.git/objects/2a/76dd32a10dac62fab910b5d4e1c29001a13ba4
new file mode 100644
Binary files /dev/null and b/.git/objects/2a/76dd32a10dac62fab910b5d4e1c29001a13ba4 differ
diff --git a/.git/objects/2b/7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 b/.git/objects/2b/7f6a6b20f86b7d4c8f6773320bb129f1fbfa78
new file mode 100644
Binary files /dev/null and b/.git/objects/2b/7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 differ
diff --git a/.git/objects/35/653898400ef0f128dc9f629abaeb1704c6b7c4 b/.git/objects/35/653898400ef0f128dc9f629abaeb1704c6b7c4
new file mode 100644
Binary files /dev/null and b/.git/objects/35/653898400ef0f128dc9f629abaeb1704c6b7c4 differ
diff --git a/.git/objects/39/255027b23d0c3728f63493a0169b16e9db3de9 b/.git/objects/39/255027b23d0c3728f63493a0169b16e9db3de9
new file mode 100644
Binary files /dev/null and b/.git/objects/39/255027b23d0c3728f63493a0169b16e9db3de9 differ
diff --git a/.git/objects/3d/2f3f6f30b28b332f278e720594b388883a25e1 b/.git/objects/3d/2f3f6f30b28b332f278e720594b388883a25e1
new file mode 100644
Binary files /dev/null and b/.git/objects/3d/2f3f6f30b28b332f278e720594b388883a25e1 differ
diff --git a/.git/objects/3f/bb0e281a38c4ef74db799ff0adf2279f97782a b/.git/objects/3f/bb0e281a38c4ef74db799ff0adf2279f97782a
new file mode 100644
Binary files /dev/null and b/.git/objects/3f/bb0e281a38c4ef74db799ff0adf2279f97782a differ
diff --git a/.git/objects/46/ad3d63640865c60723d6d4e0c6b9c8cddc8871 b/.git/objects/46/ad3d63640865c60723d6d4e0c6b9c8cddc8871
new file mode 100644
Binary files /dev/null and b/.git/objects/46/ad3d63640865c60723d6d4e0c6b9c8cddc8871 differ
diff --git a/.git/objects/53/eba928bca75be4bf30ed746f8677fa80597829 b/.git/objects/53/eba928bca75be4bf30ed746f8677fa80597829
new file mode 100644
--- /dev/null
+++ b/.git/objects/53/eba928bca75be4bf30ed746f8677fa80597829
@@ -0,0 +1,2 @@
+x¥ÍM
+Â0@a×9Åìæ§5 ¢`7o	mH#^ßàÜ¾Å÷|&® \ÕBQ#ÝDk¼iÑÉ.(gPÐÞ}°Úm±sDÖ÷ªC.pÎ	.çJi¦;N19=mãó´F¡í¤VÚÂ%¢Xê2®ô!8qe7Â×7×nýñtí!òHâQ×FF
diff --git a/.git/objects/5b/ff51646c0ee8c33c07478a0f1933a3cbea6bd8 b/.git/objects/5b/ff51646c0ee8c33c07478a0f1933a3cbea6bd8
new file mode 100644
--- /dev/null
+++ b/.git/objects/5b/ff51646c0ee8c33c07478a0f1933a3cbea6bd8
@@ -0,0 +1,2 @@
+x¥K
+Â0@]ç³d2ùt"®õi3±UHÇ·+/àò½Åãu§d»C[D@ò8!']çS1'¹#4htìÕ;.R`rÙ	`;aIkÂÞz4ÑXëµu!©¸µ±.p«îË´6)«8O%×ë³×Ï:_@ìÈ0Á	QívmòGBåé#	Ú(°nyè·úN:Ob
diff --git a/.git/objects/5c/1c69bbf6b0e2183b189cfd51cfdb89661eb69e b/.git/objects/5c/1c69bbf6b0e2183b189cfd51cfdb89661eb69e
new file mode 100644
Binary files /dev/null and b/.git/objects/5c/1c69bbf6b0e2183b189cfd51cfdb89661eb69e differ
diff --git a/.git/objects/62/cad6920027644a32e8791f6c043b635e74eb20 b/.git/objects/62/cad6920027644a32e8791f6c043b635e74eb20
new file mode 100644
Binary files /dev/null and b/.git/objects/62/cad6920027644a32e8791f6c043b635e74eb20 differ
diff --git a/.git/objects/6a/5da3c83e102878b6a5d504c5b9cd272a0408b2 b/.git/objects/6a/5da3c83e102878b6a5d504c5b9cd272a0408b2
new file mode 100644
Binary files /dev/null and b/.git/objects/6a/5da3c83e102878b6a5d504c5b9cd272a0408b2 differ
diff --git a/.git/objects/74/1d6a4f06115b0ea1d047c8cf2ec08785395bd0 b/.git/objects/74/1d6a4f06115b0ea1d047c8cf2ec08785395bd0
new file mode 100644
Binary files /dev/null and b/.git/objects/74/1d6a4f06115b0ea1d047c8cf2ec08785395bd0 differ
diff --git a/.git/objects/78/05a40b998fdfba12625f5ad8bf8fcfbeb439f4 b/.git/objects/78/05a40b998fdfba12625f5ad8bf8fcfbeb439f4
new file mode 100644
Binary files /dev/null and b/.git/objects/78/05a40b998fdfba12625f5ad8bf8fcfbeb439f4 differ
diff --git a/.git/objects/7b/772f5040ca692e15127ab20087d8dc08122d46 b/.git/objects/7b/772f5040ca692e15127ab20087d8dc08122d46
new file mode 100644
Binary files /dev/null and b/.git/objects/7b/772f5040ca692e15127ab20087d8dc08122d46 differ
diff --git a/.git/objects/7b/8db4acfd92fea8939354f9e07091635a6540d4 b/.git/objects/7b/8db4acfd92fea8939354f9e07091635a6540d4
new file mode 100644
Binary files /dev/null and b/.git/objects/7b/8db4acfd92fea8939354f9e07091635a6540d4 differ
diff --git a/.git/objects/7d/cad7423ffee1641921b3ec7cb7c8bd9efe950c b/.git/objects/7d/cad7423ffee1641921b3ec7cb7c8bd9efe950c
new file mode 100644
Binary files /dev/null and b/.git/objects/7d/cad7423ffee1641921b3ec7cb7c8bd9efe950c differ
diff --git a/.git/objects/7f/c85a942ed2e07e912b8cc1f8e803e53d693718 b/.git/objects/7f/c85a942ed2e07e912b8cc1f8e803e53d693718
new file mode 100644
Binary files /dev/null and b/.git/objects/7f/c85a942ed2e07e912b8cc1f8e803e53d693718 differ
diff --git a/.git/objects/84/99ea1219f0dc85651bd99eeba130f757b35311 b/.git/objects/84/99ea1219f0dc85651bd99eeba130f757b35311
new file mode 100644
Binary files /dev/null and b/.git/objects/84/99ea1219f0dc85651bd99eeba130f757b35311 differ
diff --git a/.git/objects/85/12c51cba7ca3ee75b665f16d7bd67c94754713 b/.git/objects/85/12c51cba7ca3ee75b665f16d7bd67c94754713
new file mode 100644
--- /dev/null
+++ b/.git/objects/85/12c51cba7ca3ee75b665f16d7bd67c94754713
@@ -0,0 +1,1 @@
+x¥ÁJ1D=ç+ú¾*´L@dÁèWtnwv7É2Éü¿AÀKAUAñ*Ö×¨íCßÁ8æg½Þ¡'1eÆdø¼gÕ6.´ÕE'HÞZ|Ñ¢ÌD³à'c<..¢½êµÀ×¶¶Î¥q×µH=k¹üeÏ±æ7P{·àÀ6Z«ÐÎÿP­fJ©ÆÙó¸@}­å~»xe*OûínóZò;ºB<QùævoZßCS?O<eë
diff --git a/.git/objects/87/03890913fdb53e96d74639df2085cfff491422 b/.git/objects/87/03890913fdb53e96d74639df2085cfff491422
new file mode 100644
Binary files /dev/null and b/.git/objects/87/03890913fdb53e96d74639df2085cfff491422 differ
diff --git a/.git/objects/87/b967ef95d00f5e64258d720281208bb1d323f7 b/.git/objects/87/b967ef95d00f5e64258d720281208bb1d323f7
new file mode 100644
Binary files /dev/null and b/.git/objects/87/b967ef95d00f5e64258d720281208bb1d323f7 differ
diff --git a/.git/objects/8b/f24ce8f6c08355ad229ed9049f3f69176fdd04 b/.git/objects/8b/f24ce8f6c08355ad229ed9049f3f69176fdd04
new file mode 100644
Binary files /dev/null and b/.git/objects/8b/f24ce8f6c08355ad229ed9049f3f69176fdd04 differ
diff --git a/.git/objects/8f/6a06e70e51dcb660d55f99392342cc5fcac890 b/.git/objects/8f/6a06e70e51dcb660d55f99392342cc5fcac890
new file mode 100644
Binary files /dev/null and b/.git/objects/8f/6a06e70e51dcb660d55f99392342cc5fcac890 differ
diff --git a/.git/objects/9b/fa009ea8720edb4754ff445a88b0f089b7049b b/.git/objects/9b/fa009ea8720edb4754ff445a88b0f089b7049b
new file mode 100644
Binary files /dev/null and b/.git/objects/9b/fa009ea8720edb4754ff445a88b0f089b7049b differ
diff --git a/.git/objects/a8/0a5d5dbf4c95464f25275e3f1e24b97e827530 b/.git/objects/a8/0a5d5dbf4c95464f25275e3f1e24b97e827530
new file mode 100644
Binary files /dev/null and b/.git/objects/a8/0a5d5dbf4c95464f25275e3f1e24b97e827530 differ
diff --git a/.git/objects/b0/d07da498268c45494abecd22354f48ba5cb97e b/.git/objects/b0/d07da498268c45494abecd22354f48ba5cb97e
new file mode 100644
Binary files /dev/null and b/.git/objects/b0/d07da498268c45494abecd22354f48ba5cb97e differ
diff --git a/.git/objects/b5/823f3a2b78cac7f13dc982e8ce6321e5e2a6dd b/.git/objects/b5/823f3a2b78cac7f13dc982e8ce6321e5e2a6dd
new file mode 100644
Binary files /dev/null and b/.git/objects/b5/823f3a2b78cac7f13dc982e8ce6321e5e2a6dd differ
diff --git a/.git/objects/c7/87e0f52ea535f9601401e5cfc3a0884d97466f b/.git/objects/c7/87e0f52ea535f9601401e5cfc3a0884d97466f
new file mode 100644
Binary files /dev/null and b/.git/objects/c7/87e0f52ea535f9601401e5cfc3a0884d97466f differ
diff --git a/.git/objects/cc/51b671ec803d0df005bc534ec5f704d200a6a5 b/.git/objects/cc/51b671ec803d0df005bc534ec5f704d200a6a5
new file mode 100644
Binary files /dev/null and b/.git/objects/cc/51b671ec803d0df005bc534ec5f704d200a6a5 differ
diff --git a/.git/objects/d0/898a171ae32850864a60a47264aa45f451b544 b/.git/objects/d0/898a171ae32850864a60a47264aa45f451b544
new file mode 100644
Binary files /dev/null and b/.git/objects/d0/898a171ae32850864a60a47264aa45f451b544 differ
diff --git a/.git/objects/d4/a955a7c342d457f00ae7191982120dd60228ce b/.git/objects/d4/a955a7c342d457f00ae7191982120dd60228ce
new file mode 100644
Binary files /dev/null and b/.git/objects/d4/a955a7c342d457f00ae7191982120dd60228ce differ
diff --git a/.git/objects/df/8539007d0f3099536b78dbe30dd697ac711b81 b/.git/objects/df/8539007d0f3099536b78dbe30dd697ac711b81
new file mode 100644
Binary files /dev/null and b/.git/objects/df/8539007d0f3099536b78dbe30dd697ac711b81 differ
diff --git a/.git/objects/e8/ef27dbba9992f80d9271a60892aadc63c9ef36 b/.git/objects/e8/ef27dbba9992f80d9271a60892aadc63c9ef36
new file mode 100644
Binary files /dev/null and b/.git/objects/e8/ef27dbba9992f80d9271a60892aadc63c9ef36 differ
diff --git a/.git/objects/eb/aab0733f361ac8dcbd89fa042713114c919092 b/.git/objects/eb/aab0733f361ac8dcbd89fa042713114c919092
new file mode 100644
Binary files /dev/null and b/.git/objects/eb/aab0733f361ac8dcbd89fa042713114c919092 differ
diff --git a/.git/objects/ef/c092828d08e8d6a576db0ef0fd0af7203031ab b/.git/objects/ef/c092828d08e8d6a576db0ef0fd0af7203031ab
new file mode 100644
Binary files /dev/null and b/.git/objects/ef/c092828d08e8d6a576db0ef0fd0af7203031ab differ
diff --git a/.git/objects/f1/830f88eccad143bc84b219633c85d8503efb27 b/.git/objects/f1/830f88eccad143bc84b219633c85d8503efb27
new file mode 100644
Binary files /dev/null and b/.git/objects/f1/830f88eccad143bc84b219633c85d8503efb27 differ
diff --git a/.git/objects/f1/85e80639824829958ad776ea7849477768ced1 b/.git/objects/f1/85e80639824829958ad776ea7849477768ced1
new file mode 100644
Binary files /dev/null and b/.git/objects/f1/85e80639824829958ad776ea7849477768ced1 differ
diff --git a/.git/objects/f3/f5940b48982e8e840339162bda5d49ec434155 b/.git/objects/f3/f5940b48982e8e840339162bda5d49ec434155
new file mode 100644
Binary files /dev/null and b/.git/objects/f3/f5940b48982e8e840339162bda5d49ec434155 differ
diff --git a/.git/objects/f4/00d41f95c560a27d3a5035d6bcd94a807aee9c b/.git/objects/f4/00d41f95c560a27d3a5035d6bcd94a807aee9c
new file mode 100644
Binary files /dev/null and b/.git/objects/f4/00d41f95c560a27d3a5035d6bcd94a807aee9c differ
diff --git a/.git/objects/f5/1e9243591607b228887c501811a8d68a36fbf4 b/.git/objects/f5/1e9243591607b228887c501811a8d68a36fbf4
new file mode 100644
Binary files /dev/null and b/.git/objects/f5/1e9243591607b228887c501811a8d68a36fbf4 differ
diff --git a/.git/objects/f5/daa3932cab2c8ee9bc73a6475a20c8ff20960b b/.git/objects/f5/daa3932cab2c8ee9bc73a6475a20c8ff20960b
new file mode 100644
Binary files /dev/null and b/.git/objects/f5/daa3932cab2c8ee9bc73a6475a20c8ff20960b differ
diff --git a/.git/objects/fb/f918c9e7d1bc84f134134dbd8f2000c10d4e1c b/.git/objects/fb/f918c9e7d1bc84f134134dbd8f2000c10d4e1c
new file mode 100644
Binary files /dev/null and b/.git/objects/fb/f918c9e7d1bc84f134134dbd8f2000c10d4e1c differ
diff --git a/.git/objects/fd/ea5be35e03f22dce0423511443ffad7221107e b/.git/objects/fd/ea5be35e03f22dce0423511443ffad7221107e
new file mode 100644
--- /dev/null
+++ b/.git/objects/fd/ea5be35e03f22dce0423511443ffad7221107e
@@ -0,0 +1,2 @@
+xuSËn0í¯8»ÎC@ª4,*RW­|@Ll2Ö=Óªé¿÷Úb	û¾Î=Üs]ÖºD]§ÍûZà3ló(Nfó³W58îD+¢(âÂaF Î¿(%ë°Ýâ»2âE´Þ+¨ ÿIT¬¯ÍY¬_ós(Å)åW"*Y'Xo¸¸"ÓÈ°£·©ÒFØ),rvº½8!gÞýñæM<Óx¬×¸ou_÷w¸ør#~ÏFjËMl)nSª^y'ãì`b.jÃVªoZ*Ó­*ÙvÆÈF¸¡¬0ù`vB¡®fàO.ÃR±ø¨içrñ>¸g5±IÞÒ÷Ô,õæq'i=|çÄ±ÿvÖ	>ÓÉNÃÉÁ5Jñ"/Ä¬faªmºÇ¶÷Åý¥¦oÆ3
+Yç1üÚVÉ$"7ú@G¬oÆµµ×[­ëÀ5æsÚºÕZ/Ürú71î:_°Óò·pBz9hÌON2¯ÖèÉýxWÑTï:¾=­[pgï'8R{µ|(§ÿsO&Ü(¶8>}¦Ü<ó¶µ=JZF¯âyd³¸Hô6¼Ýod'ÇíuMÇ
diff --git a/.git/objects/fe/658ec2983d9b15c4ba1b0fb8d98535ce085d38 b/.git/objects/fe/658ec2983d9b15c4ba1b0fb8d98535ce085d38
new file mode 100644
Binary files /dev/null and b/.git/objects/fe/658ec2983d9b15c4ba1b0fb8d98535ce085d38 differ
diff --git a/.git/refs/heads/master b/.git/refs/heads/master
new file mode 100644
--- /dev/null
+++ b/.git/refs/heads/master
@@ -0,0 +1,1 @@
+5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
diff --git a/.git/refs/remotes/origin/master b/.git/refs/remotes/origin/master
new file mode 100644
--- /dev/null
+++ b/.git/refs/remotes/origin/master
@@ -0,0 +1,1 @@
+5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
diff --git a/Data/Text/Punycode.hs b/Data/Text/Punycode.hs
new file mode 100644
--- /dev/null
+++ b/Data/Text/Punycode.hs
@@ -0,0 +1,238 @@
+-- |
+-- Module:      $Header$
+-- Description: Encoding function for Punycode
+-- Copyright:   Copyright © 2011 Jon Kristensen
+-- License:     BSD3
+--
+-- Maintainer:  jon.kristensen@pontarius.org
+-- Stability:   unstable
+-- Portability: portable
+--
+-- Uniquely and reversibly transform a Unicode string into an ASCII string.
+-- 0.0.2.0 will support going the other way - from ASCII to Unicode.
+
+
+-- TODO: Assmuption: All code points less than initial_n (128) are basic code
+-- points; code points are unsigned.
+
+
+module Data.Text.Punycode (encode) where
+
+
+import Data.Text (Text)
+
+import Data.Char (chr, intToDigit, isAlphaNum, isAscii, ord, toUpper)
+
+
+base :: Int
+
+base = 36
+
+
+tmin :: Int
+
+tmin = 1
+
+
+tmax :: Int
+
+tmax = 26
+
+
+skew :: Int
+
+skew = 38
+
+
+damp :: Int
+
+damp = 700
+
+
+initial_bias :: Int
+
+initial_bias = 72
+
+
+initial_n :: Int
+
+initial_n = 128 -- The first character after the ASCII characters
+
+
+-- decode will implement the following pseudo code from Section 6.2 of RFC 3492:
+--
+-- let n = initial_n
+-- let i = 0
+-- let bias = initial_bias
+-- let output = an empty string indexed from 0
+-- consume all code points before the last delimiter (if there is one)
+--   and copy them to output, fail on any non-basic code point
+-- if more than zero code points were consumed then consume one more
+--   (which will be the last delimiter)
+-- while the input is not exhausted do begin
+--   let oldi = i
+--   let w = 1
+--   for k = base to infinity in steps of base do begin
+--     consume a code point, or fail if there was none to consume
+--     let digit = the code point's digit-value, fail if it has none
+--     let i = i + digit * w, fail on overflow
+--     let t = tmin if k <= bias {+ tmin}, or
+--             tmax if k >= bias + tmax, or k - bias otherwise
+--     if digit < t then break
+--     let w = w * (base - t), fail on overflow
+--   end
+--   let bias = adapt(i - oldi, length(output) + 1, test oldi is 0?)
+--   let n = n + i div (length(output) + 1), fail on overflow
+--   let i = i mod (length(output) + 1)
+--   {if n is a basic code point then fail}
+--   insert n into output at position i
+--   increment i
+-- end
+
+
+-- |
+-- Encodes a Unicode label to a Punycode-encoded ASCII string. The encoding does
+-- not prepend the IDNA @\"xn--\"@ prefix. The output is lower-cased.
+
+-- TODO: Support for mixed cases (see Appendix A in the RFC)
+
+-- encode implements the following pseudo code from Section 6.3 of RFC 3492:
+--
+-- let n = initial_n
+-- let delta = 0
+-- let bias = initial_bias
+-- let h = b = the number of basic code points in the input
+-- copy them to the output in order, followed by a delimiter if b > 0
+-- {if the input contains a non-basic code point < n then fail}
+-- while h < length(input) do begin
+--   let m = the minimum {non-basic} code point >= n in the input
+--   let delta = delta + (m - n) * (h + 1), fail on overflow
+--   let n = m
+--   for each code point c in the input (in order) do begin
+--     if c < n {or c is basic} then increment delta, fail on overflow
+--     if c == n then begin
+--       let q = delta
+--       for k = base to infinity in steps of base do begin
+--         let t = tmin if k <= bias {+ tmin}, or
+--                 tmax if k >= bias + tmax, or k - bias otherwise
+--         if q < t then break
+--         output the code point for digit t + ((q - t) mod (base - t))
+--         let q = (q - t) div (base - t)
+--       end
+--       output the code point for digit q
+--       let bias = adapt(delta, h + 1, test h equals b?)
+--       let delta = 0
+--       increment h
+--     end
+--   end
+--   increment delta and n
+-- end
+
+encode :: String -> Maybe String
+
+encode i = let n = initial_n
+               delta = 0
+               bias = initial_bias
+               h = b
+               output = if (length $ basic_codepoints) == 0
+                        then ""
+                        else basic_codepoints ++ ['-']
+           -- TODO: Fail for non-basic code point < n
+           in if b == length i then Just i else loop output n delta bias h
+    where
+
+        b :: Int
+        b = length basic_codepoints
+
+        basic_codepoints :: String
+        basic_codepoints = filter isAsciiAlphaNum i
+
+        -- while h < length(input)
+        loop :: String -> Int -> Int -> Int -> Int -> Maybe String
+        loop output n delta bias h
+            | h < (length i) = let m = minimum $ filter (>= n) $ map ord i
+                                   delta' = delta + (m - n) * (h + 1) -- TODO: Overflow?
+                                   n' = m
+                                   (output', delta'', h') = loop' i output n' delta' bias h
+                               in loop output' (n' + 1) (delta'' + 1) bias h'
+            | otherwise = Just output
+
+        -- for each code point
+        loop' :: String -> String -> Int -> Int -> Int -> Int -> (String, Int, Int)
+        loop' [] output _ delta _ h = (output, delta, h)
+        loop' (c:cs) output n delta bias h
+            | ord c < n = loop' cs output n delta bias h
+            | ord c == n = let q = delta
+                               (output', q') = loop'' base output bias q
+                               -- TODO: output'' seems to add an unnecessary
+                               -- character... I'll investigate this more
+                               -- tomorrow
+                               output'' = output' ++ [toDigitValue q']
+                           in loop' cs output'' n 0 (adapt delta (h + 1) (h == b)) (h + 1)
+
+        -- for k = base...
+        loop'' :: Int -> String -> Int -> Int -> (String, Int)
+        loop'' k output bias q
+            | q < t = (output, q)
+            | otherwise = let output' = output ++ [toDigitValue (t + ((q - t) `mod` (base - t)))]
+                              q' = (q - t) `div` (base - t)
+                          in loop'' (k + base) output' bias q'
+            where
+                t = if k <= bias + tmin then tmin else if k >= bias + tmax then tmax else k - bias
+                          -- TODO: ^^^^
+
+
+-- Returns true if the Char is ASCII, alpha-numeric, or a hyphen.
+
+-- TODO: Ugly function
+
+isAsciiAlphaNum :: Char -> Bool
+
+isAsciiAlphaNum '-' = True
+
+isAsciiAlphaNum c = isAscii c && isAlphaNum c
+
+
+-- adapt implements the following pseudo code from Section 6.1 of RFC 3492:
+--
+-- function adapt(delta,numpoints,firsttime):
+--   if firsttime then let delta = delta div damp
+--   else let delta = delta div 2
+--   let delta = delta + (delta div numpoints)
+--   let k = 0
+--   while delta > ((base - tmin) * tmax) div 2 do begin
+--     let delta = delta div (base - tmin)
+--     let k = k + base
+--   end
+--   return k + (((base - tmin + 1) * delta) div (delta + skew))
+
+adapt :: Int -> Int -> Bool -> Int
+
+adapt d n f = loop 0 d'
+    where
+
+        d' :: Int
+        d' = if f then d `div` damp else d `div` 2 + d `div` n
+
+        loop :: Int -> Int -> Int
+        loop k d''
+            | d'' > ((base - tmin) * tmax) `div` 2 = loop (k + base)
+                (d'' `div` (base - tmin))
+            | otherwise = k + ((base - tmin + 1) * d'') `div` (d'' + skew)
+
+
+-- Maps a character to its Punycode digit value; 0-25 for characters, 26-35 for
+-- digits.
+
+-- toDigitValue :: Char -> Int
+--
+-- toDigitValue c | c `elem` ['0'..'9'] = digitToInt c + 30
+--                | toUpper c `elem` ['A'..'Z'] = ord (toUpper c) - 65
+
+
+-- The 0-25 digits are mapped to 'a'-'z', 26-35 to '0'-'9'.
+
+toDigitValue :: Int -> Char
+
+toDigitValue i | i >= 0 && i <= 25 = chr $ 97 + i
+               | i >= 26 && i <= 35 = intToDigit $ i - 26
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,28 @@
+Copyright © 2010-2011, Jon Kristensen.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+  * The names of the punycode project's contributors may not be used to endorse
+    or promote products derived from this software without specific prior
+    written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL JON KRISTENSEN BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,14 @@
+The goal of this Haskell library is to support unique and reversible
+transformations of Unicode strings to ASCII strings, and the other way around.
+It will be an implementation of RFC 3492: Punycode: A Bootstring encoding of
+Unicode for Internationalized Domain Names in Applications (IDNA).
+
+The current version, 0.0.1.0, supports encoding a Unicode string to an ASCII
+string. Note however that the code is currently prototyped and untested.
+
+0.0.2.0 will add support for the ASCII to Unicode transformation.
+
+Copyright © 2011, Jon Kristensen.
+All rights reserved.
+
+This library is licensed under a BSD-3 license. See LICENSE for details.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+import Distribution.Simple
+
+main = defaultMain
diff --git a/punycode.cabal b/punycode.cabal
new file mode 100644
--- /dev/null
+++ b/punycode.cabal
@@ -0,0 +1,64 @@
+Name:               punycode
+Version:            0.0.1.0
+Cabal-Version:      >= 1.6
+Build-Type:         Simple
+License:            BSD3
+License-File:       LICENSE
+Copyright:          Copyright © 2011, Jon Kristensen
+Author:             Jon Kristensen
+Maintainer:         jon.kristensen@pontarius.org
+Stability:          alpha
+-- Homepage:
+Bug-Reports:        mailto:jon.kristensen@pontarius.org
+-- Package-URL:
+Synopsis:           Punycode encoder
+Description:        Punicode library to uniquely and reversibly transform a
+                    Unicode string into an ASCII string. This is a partial
+                    implementation of RFC 3492: Punycode: A Bootstring encoding
+                    of Unicode for Internationalized Domain Names in
+                    Applications (IDNA). 0.0.2.0 will ship with support for
+                    Punycode decoding. The code is currently prototyped and
+                    untested.
+Category:           Network
+Tested-With:        GHC ==7.0.2
+-- Data-Files:
+-- Data-Dir:
+-- Extra-Source-Files:
+-- Extra-Tmp-Files:
+
+Library
+  Exposed-Modules:   Data.Text.Punycode
+  Exposed:           True
+  Build-Depends:     base >= 2 && < 5, parsec, text, bytestring, text-icu
+  -- Other-Modules:
+  -- HS-Source-Dirs:
+  -- Extensions:
+  -- Build-Tools:
+  -- Buildable:
+  -- GHC-Options:
+  -- GHC-Prof-Options:
+  -- Hugs-Options:
+  -- NHC98-Options:
+  -- Includes:
+  -- Install-Includes:
+  -- Include-Dirs:
+  -- C-Sources:
+  -- Extra-Libraries:
+  -- Extra-Lib-Dirs:
+  -- CC-Options:
+  -- LD-Options:
+  -- Pkgconfig-Depends:
+  -- Frameworks:
+
+Source-Repository head
+  Type:     git
+  -- Module:
+  Location: git://github.com/jonkri/punycode.git
+  -- Subdir:
+
+Source-Repository this
+  Type:     git
+  -- Module:
+  Location: git://github.com/jonkri/punycode.git
+  Tag:      0.0.1.0
+  -- Subdir:
