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