--------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
---?????--------???-------------------------------------????????????-----------
---??????------???-------------------------------------???---------------------------
---???--???----???------??---------------------------???---------------------------
---???---???---???----------------???????--------??????????---------------
---???----???--???-----???---???-------???-----??????????----------------
---???-----???-???-----???--???-------------------???---------------------------
---???-------?????------???---???-------???-----???----------------------------
---???---------????------???-----???????--------????????????------------
-----------------------------------------------------------------------------------------