******* ** ******* ** ****** ** ** ****************** ** ********* *** ** ********* ******* *********
************ ****** *** ** **** ** ****** ** **************** *** ************* ********* ** ************* **** ** ***** *** ******** *** ********* * ***** ******** ** ************ ** ************ **** ******** *** ******** ******
** *********** ***** ** ****** ** ** ******** * ***** *********** ****** ** ******* *******