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