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