~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(created 31 August 2008, updated 2 January 2013, 20 April 2020)