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