######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
##############################################################nxxMxnxnnxMMMMMxnxnxMxxxxxxMMMMMxxx#####################################################
##############################################+###+##########nxMMMMMxMMMMMMMMMMxMMMMMMMMMMMMMMMMxz####################################################
#############################################++++++++##+++++###+#@#i;i*x####W#i;i+Wx++++#@###@#++zn###################################################
############################################++++++++##++++++++*:;*;;;;;;###x;;;;;;i+;ii;;M###M:;*xx###################################################
###########################################+++++++++#++++++##+*:;;i#n+;;;nW;;;*zz*;;;in:;#####;;xxx###################################################
###########################################++++++++#+++++++##+*:;iW###x;;i+;;#@###z;;iW;;i@#@;;i@xx###################################################
###########################################+++++++#++++++++##+*;;x######;;;;i@####@i;i@#;;x#n;;n#xx###################################################
###########################################++++++#+++++++++##+*;;W#####x:;;;+######+;i@W;;+@*;;@#xx###################################################
###########################################+++++##+++++++++##+*;;W#####x:;;;+######+;i@#*;;M;;###xx###################################################
#############################################++###+++++++++##+*;;x#####+;;;;i@####@i;i@#x:;i;;W##xx###################################################
##################################################+++++++++##+*:;iM###n;;*#;;+@##@+;;i@#@i;;;+###xx###################################################
##############################################++###++++++++##+*:;;;+#*;;;xW;;;i##i;;;i@##z;;;x###xx###################################################
#############################################+++++##+++++++##+*;;*;;;;;;n##M;;;;;;i+;i@##M;;i####xx###################################################
############################################+++++++##++++++##+*;;Mn*i*#W####@z*i*n@xzz@##z;;n####xx###################################################
###########################################++++++++###+++++##+*;;M##@##########@########@i;i@####xx###################################################
############################################++++++++##++++++++*;;M######################n::z#####xx###################################################
#############################################+++++++###+++++#+*::M######################WMM@#####xx###################################################
##############################################*###i######**##zzzzMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMnM###################################################
##############################################################Mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnx#####################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################