Click here for an updated version of this post.