# #     # ### # # ### ## # ### ## # ### ## #####                #            ##  ##   
##      # ### # # ### ## # ### ## # ### ## #####   ###     ######    ###              
##  ##  ##### # # ### ## # ### ## # ### ## ##### ## ####  ##  ##    #####   #   #     
## ####   ### # # ### ## # ### ## # ### ## ##### #    ##  ###      ##  #   ### ###    
#### ## ##  ### # ### ## # ### ## # ### ## #####  ### ##   #####   ##       ##  ##    
###  ## # ### # # ###### # ###### # ### ## ##### ##  ###      ###  ##       ##  ##    
##   ## # ### # ######## ######## # ### ## ##### ## ####   ##  ##   ## ##   ### ###   
    ##  # ### # # ### ## # ### ## # ### ## #####  ###  ## ## ###     ###    ##  ##