With apologies for the theft from @decryption :)