------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX----------
------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------
----XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX------
--XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX----
XX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXX
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------