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