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