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