;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::;;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::clc:clodddoollllc:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:llccllodddxO0Okxdoodooolcccc:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cdkkkkkxkkO0KK000Okxxxddddddxkxollc::::;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:oOXXKKK00KK0000KXXXKK0OkkkkkxdddodOkollc:::::;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lKWWWNXNNNWWWWWNXXXXKK0000K0KK0OkkkOOOkO0Oxollllc:;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lKWWWWNNWWWWNWWNNNNNNXNNNNWWWWNNNXNNNNNNNWWX0kxkkxdl:;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lKWWWMMWWWWWWWNNNNWWWWWWWWNNNWWWWWWWWWWWNNWWNXXKK000Odl:;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:OMMWWWMWWWWWWWNNWNNXXXKKXXNWNNNNNNWWWNNNNWNNNWWNNNKKKKko:;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oNMMMMMMMMWWWWNK00OkxdodxOKXNNNNNXXXKKKKXNNNWWWWWWWNXKKKOo;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:kWWWMMWMMMWWWWX0xdoccccldxOOkxxxxdodddodO0XNNXNWWWWWNNXK0x:;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oNWWMMWWMMMMWWNKOxoc::;;;::::::cccc::::::ldx0K00KXNNWWNNXKkl:;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;:OWWWMMMWWMWWWWNKkdl:;;;;;;;;;;;;;;;;;::::ccclooodxOKXNXXXKx:;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;xXNWMMMMMWWWWNXX0xl:;;;;;;;;;;;;;;;;;;;;:::ccc::::clodkKXKkc;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;lddox0WMMMWWWNXKOdc:;;;;;;;;;;;;;;;;;;;;;;;;::;;;;;;::coOOo:;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;:lc::cckWWWNWNX0dl:::;;;;;:clodoollcc:::;;;;;;;;;;;;;:clooc;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;c:;;;ccxNWNNXOdl::::::;;;:codxkkOOOOOOkxl:;;;;;;;;;;;::ccc:;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;::;;;;;dKNXXKxc:::;:;;;;;;;::clllllodxkkkdc;;;;;;;;;;;:cc:;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;:lll:;:okOOkocc::;;;;;;;:cldxO00kkkxxddolc:;;;;;;;;coddoc;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;lkxl:;;;lddlcccc:;;;;;;::loxkXXOllkkOkdlcc;;;;;;;:codxkOkc;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;:::coc;;;loolcccc:;;;;;;;:ccclddlcldxddolc:;;;;;;cxkxdlccol;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::;;:lolccccc:;;;;;;::cccclllooodolllc:;;;;:dKNNXOxoc;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;::;;;;;:olccccc::;;;;;;;::cccccllllllcccc:;;;;oOKKXkcoo:;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:olcccc::;;;;;;;;;:ccccccllcc::::c:;;;;lxxddolc;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cl:;clccccc::;;;;;;;;;::ccccccccc::;;;;;;;;:oollcc:;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:xk:;clccccc::;;;;;;;;;::cccclllcc:;;;;;;;;;:cllccc:;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cOd;;cllcccc::;;;;;;;;;:::ccclllcc:;;;;;;;;:::ccccc:;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:dl;:cloolcc::;;;;;;;;;;:cccclllc::;;;;;;;::ccccccc:;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:o::clllllcc:::;;;;;;;;;;::cccccc::cc:;;;::::cccccc;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:l;;collllllc::::;;;;;;;;;::::;;:ccldl::clc:ccc:cc;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cc;;colllllllcc::;;;;;;::::ccc::ccc:::::cc:ccc:::;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;c:;;:lll