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