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