This took a while.