Took longer than I thought it would, but here it is...