------------------------------------------------------------------- ::::::::: ::::::::::: ::::::::: :::::::::: ::: :::: ::: :+: :+: :+: :+: :+: :+: :+: :+: :+:+: :+: +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ :+:+:+ +:+ +#++:++#+ +#+ +#+ +:+ +#++:++# +#++:++#++: +#+ +:+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+#+# ### ##### ######### ########## ### ### ### #### -------------------------------------------------------------------