Long, but well worth reading