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