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