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

'##:::::'##:'########:::'#######:::'######::
 ##:'##: ##: ##.... ##:'##.... ##:'##... ##:
 ##: ##: ##: ##:::: ##: ##:::: ##: ##:::..::
 ##: ##: ##: ########:: ##:::: ##:. ######::
 ##: ##: ##: ##.....::: ##:::: ##::..... ##:
 ##: ##: ##: ##:::::::: ##:::: ##:'##::: ##:
. ###. ###:: ##::::::::. #######::. ######::
:...::...:::..::::::::::.......::::......:::

              8888888b.           .d8888b.
              888   Y88b         d88P  Y88b 
              888    888         Y88b.      
888  888  888 888   d88P .d88b.   "Y888b.   
888  888  888 8888888P" d88""88b     "Y88b. 
888  888  888 888       888  888       "888 
Y88b 888 d88P 888       Y88..88P Y88b  d88P 
 "Y8888888P"  888        "Y88P"   "Y8888P"