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