::::    :::     :::     ::::::::::: ::::    :::  ::::::::  :::       :::  :::::::: :::::::::     :::          :::::::::   ::::::::  ::::    ::::  :::::::::      :::           ::::::::  :::::::::        :::::::: ::::::::::: :::     
            :+:+:   :+:   :+: :+:       :+:     :+:+:   :+: :+:    :+: :+:       :+: :+:    :+:     :+:    :+: :+:        :+:    :+: :+:    :+: +:+:+: :+:+:+ :+:    :+:   :+: :+:        :+:    :+: :+:    :+:      :+:    :+:    :+:    :+:      
            :+:+:+  +:+  +:+   +:+      +:+     :+:+:+  +:+ +:+    +:+ +:+       +:+ +:+           +:+    +:+   +:+       +:+    +:+ +:+    +:+ +:+ +:+:+ +:+ +:+    +:+  +:+   +:+       +:+    +:+ +:+    +:+            +:+     +:+   +:+ +:+   
            +#+ +:+ +#+ +#++:++#++:     +#+     +#+ +:+ +#+ +#+    +:+ +#+  +:+  +#+ +#++:++#++   +#+    +#++:++#++:      +#++:++#+  +#+    +:+ +#+  +:+  +#+ +#++:++#+  +#++:++#++:      +#+    +:+ +#+    +:+          +#+       +#+  +#+  +:+   
            +#+  +#+#+# +#+     +#+     +#+     +#+  +#+#+# +#+    +#+ +#+ +#+#+ +#+        +#+  +#+     +#+     +#+      +#+    +#+ +#+    +#+ +#+       +#+ +#+    +#+ +#+     +#+      +#+    +#+ +#+    +#+        +#+         +#+ +#+#+#+#+#+ 
            #+#   #+#+# #+#     #+# #+# #+#     #+#   #+#+# #+#    #+#  #+#+# #+#+#  #+#    #+# #+#      #+#     #+#      #+#    #+# #+#    #+# #+#       #+# #+#    #+# #+#     #+#      #+#    #+# #+#    #+#       #+#          #+#       #+#   
            ###    #### ###     ###  #####      ###    ####  ########    ###   ###    ######## ######### ###     ###      #########   ########  ###       ### #########  ###     ###       ########  #########       ##########    ###       ###