+*            `+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*      .:,`  `#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*     ;#*++. `+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*    ,#.  i+ `+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*  ,*+#**,`#``#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*  :+i+:*:.#``#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*  :*.#,i;** `#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++i++++++++i+++++++++++++++++++++++++++++++++++++++++++++++++
+*  :* :###+` `++++++++++++++++++++++++++++++++++++*i+;i;;;;i;+i;*+*;+i*+;;*;**i+;;**;*+*i+:*i+;;*;i;*++++++++++++++++++++++++++++++++++++++++++++++++
+*  :*  `*;   `++++++++++++++++++++++++++++++++++++;:+`i`;;`i`+,,**`;*.,*`;,,*:`+`:,.:*+:`+`:,+.::.i.*++++++++++++++++++++++++++++++++++++++++++++++++
+*  :#####:   `#+++++++++++++++++++++++++++++++++++::+`+`**`+`+,.**`+*.`*`:i`;..;``;;`;+..;`:,+`,*.,`*++++++++++++++++++++++++++++++++++++++++++++++++
+*  `.....`   `#+++++++++++++++++++++++++++++++++++:.;`+`**`+`,,.i+.,,,.;`,:.,.,,`,,,.;*`,,`:`;.,:,,`*++++++++++++++++++++++++++++++++++++++++++++++++
+*`           `#++++++++++++++++++++++++++++++++++++***+*++*+****+++**+++**+*+*+**+***++*+**+****+*+*+++++++++++++++++++++++++++++++++++++++++++++++++
+i,,..,,,.,,,,.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++#############++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++W+++++++++++++++++++nxz++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++z#++#nz++z##z#z#+#z#++z++##+##++##+z##zz##z+#z#z##z++z#+++zz++#z+++#n#+##++###z+#z++z#+#z+##++z#+z##zz#z#+++++++++++++++++++++
+++++++++++++++++++++++##n+#@@#xz#nWW##@+x#n+x#n+x@#MM++WW+#xn#@Wn##@Mz#zW#zz#M++W@@z+M#z+z@@@zM@++WWn#zWM++WW+WW+@@+#@xM@#W#@x#n+++++++++++++++++++++
+++++++++++++++++++++++z#n+x##M@z#W@#+##zW#n+W@W+x#WMM++@Wz@Mn#z#n#W@+z#zW#xx#M+##M#++@@M+W@###M@++WWz#W@#++x@##nn@#z##W@z+WW+##n+++++++++++++++++++++
+++++++++++++++++++++++z#n+M@+x#n##@++#@M##n##x##x@#@M++@###Mn##xn##M+z#zW@WW@M++M#@zz#M@+@WnMnM@++WWz##W+++##M##MW@x###@#+W#@##n+++++++++++++++++++++
+++++++++++++++++++++++z#n+x##M@z#M#x+#M#W#nx#M#nx@M#M++WW+#Mn##+n#M#zz#zWM#@WM++#z@MM@M#zW@z#xM@++WWz#M#n+++W#W#@W@@##M@M+WW###n+++++++++++++++++++++
+++++++++++++++++++++++z#@Wz@W@Mz#nM@z#n#x#nWWxWWx@#@M++@W+#Mn#WMn##W@z#zWMWMWM+#@W@x@Mx@Mn#W#xM#WxWWz#zW@#++x#nn#xM#z#xx#zWW+##n+++++++++++++++++++++
+++++++++++++++++++++++#nnn+#nn+#n##nzn#z#n#n#+znzz+zz++zz+zz#nnz#n+#nzn#zzzzzz++znz#n#+zz+znz+znnzzz#n##n#++#n##z++nzn##nzzz++n#+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++x#+++++M#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++z#++##+z+#++#+++##+#++z#+++##+##+####++#+#z+++##++##+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++@x#@#@z#nMW+Wx++#xx@#W@#M+W##zWW+@xx@#WWn@@@#x#@@zW@+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++#Mx#z#z#nM#xWx++#M@nn#zx#z#M#+@W+#M#@M#n@W#@Mx##@xMW+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++#MW@++##nM#@@x++##@+x##n#nW#@z@W+#M+x#W##M+@Wx#M@nnM+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++#MM##+z#nMMW#x+##W@xn#zn#z#n@MWW+@x+##x+@M+@Mx#W@+zz+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++#Mz@@Wz#nMMz#x+##xx#z@W@W#@M@xx@W#z+##n+M@M#zx#n#xnM+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++xz+zWn#xzzz+nz++xz#nz#xx#+nWn++nxz+++n#++nxz+zn+nnzz+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++#M#+++++++++++++++++++++xn++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++#z++++++++++++++++++++++z+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++###++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#####++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#####++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#####++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#####++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++xM+zM+++++++++++++++++++++++++++++++++++++++++##################++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++nxn#WM#@zz##+++++++++++++++++++++++++++++++++++++##################++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#x############@WMn#+#++##++++++++++++++++++++++++++##################++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#x@#####M#****+#nW####@Mnz###+++++++++++++++++++++++++##################++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#x@##@######        `,*zW###Wn#++++++++++++++++++++++++###################++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++z@##W#@Wizx#`             ,+M##@M#+++++++++++++++++++++####################++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++x##x#@#M+z`                   .+M##M#+++++++++++++++++++####################++++
+++++++++++++++++++++++++++++++++++++++++#########+++++++++++++++++++M##M W####x  .i   .,              :n##M#+++++++++++++++++####################++++
+++++++++++++++++++++++++++++++++++++++++#########++++++++++++++++++M#WW@;@n:*;`  :W`  z#i+   ::         ,z#@z++++++++++++++++####################++++
+++++++++++++++++++++++++++++++++++++++++#########+++++++++++++++++x#@,z#@@n@,    `Wx;+#:;@, `M*           :W#n++##########+++########################
++++++++++++++++++++++++++++++++++++++++###########+++++++++++++++z@@**:####z      :W### `W@#x#,            .M@#+##########+++########################
++++++++++++++++++++++++++++++++++++++++###########+++++++++++++++@#*WM+#i:.        `,.   .x#Wi              +#z+##########+++########################
++++++++++++++++++++++++++++++++++++++++###########++++++++++++++n#M`@W#n+,                                 ,W@++##########+++########################
++++++++++++++++++++++++++++++++++++++++###########++++++++++++++@#@:n####:      .i#:                     .+@@z++#####################################
++++++++++++++++++++++++++++++++++++++++###########+++++++++++++z###iM@Wx;      +@#M:                  .in@#Wz+++#####################################
++++++++++++++++++++++++++++++++++++++###############++++++++++nW#W#W@#+       z##M`       `,.```.:i+nW###Wn+++#######################################
++++++++++++++++#+++++++++++++++++++++###############++++++++++@##;####x      *####Wi      @##########@Wx#+++#########################################
++++++++++++++++###+++++++++++++++++++###############++++++++++@#@W@nn#`     `@WM@n@#M:   `##WWW@WWMxn##++############################################
++++++++++++++++#####+++++++++++++++++###############+++++++++n@####;        i#;##z#M##x;  @#z########################################################
++++++++++++++++#######+++++++++++++++###############+++++++++n@####z        zz ;#x+#zM##M+@#z########################################################
++++++++++++++++########++++++++++++++###############++++++++##W#;;:         .` `@@####zM####z########################################################
++++++++++++++++#########+++++++++++++###############+++++++###@#`               z#n#####zxWW#########################################################
++++++++++++++++#########+++++++++++++###############+++++#######                ,#@##################################################################
+++++++++++##############+++++++++++++###############+++######z##`                z#x#################################################################
+++++++++++##############+++++++++++++###############+++######z##`                .@#z################################################################
++++++++#################+++++++++++++###############+++######z##.                 i#@z###############################################################
++++++++#################+++++++++++++###############+++#######@#:                  ##@z##############################################################
++++++++#################+++++++++++++###############+++#######@#i                   ##@x#############################################################
++++++++#################+++++++++++++###############+++#######M##                    i@#Wn###########################################################
++++++++#################+++++++#####################+++####zznM#M,`                   .n##Wn#########################################################
++++++++#################+++++++######################znMW@########@z                    :x#M############xMx##########################################
++++++++#################+++++++#################zxM@#####@Mxn##++#z+                     ;#x###########x#W@@z########################################
++++++++#################++++++################nW###@x#i:`                                i#n##########z#n ,W@Mz######################################
++++++++#################++++++###############z##x*,                                     ;W#n##########M#,  ,#n@n#####################################
++++++++#################++++++###############z#x                                      .n###n##########@x +* x*i@z####################################
++++++++#################++++++################@@.     `.;i++#zi                     `*@#W##M#########z#+ #x +Wx#z####################################
#########################++++++################x#+   :x@#######i                    ;M#Wz@###z########n#: +W *MWM#####################################
#########################++++++################z@@`  ;##WMMMW#@`                  :x##x#M@@##M########x@` z#zM+*@#####################################
#########################++++++#################M#+  `@@####W##                 :x##M#+x#n@M@#z#######MM  W###W@M#####################################
#########################++++++#################z#@`  +#x##z##,              `;x##Wz##n#Mz#z##M######x## *#z`.#@######################################
#########################++++++##################M#+  .@@##M#M             ,+W##Wn###x#M#x#+`@#z####n#n` n##x*+W######################################
#################################################z#@`  z#n#@#n`        `:+M###Mz####x#W##@#* +#M###x#n`  ;#+#W@z######################################
##################################################M#+  .@Wn###@n+*ii+zx@###Wx######M#M##n##; `W#z#M#n`  `M#Wi#M#######################################
##################################################z#@.  z#@#Mx@########@Mn########W#x###W##.  i#WW##   `M#WxWWz#######################################
###################################################M##  .@##z##znnxnnz##########z@@n###x##@    M#@i   .M#M############################################
###################################################z@@.  ####@Mz###############x#@z###n@@##,   :x,   ,W#M#############################################
####################################################x#z  `;+nW##Wz############W#M####z@@x##n        ;@#x##############################################
#####################################################@#,      .*W@z######+##n@@n#+##n@@zx#W#i      *#@n###############################################
#####################################################n#z        .W@########M#Wz####n#@z#M#nW@.   `z#@z################################################
########################################################         *#z#####n@@x#####n#W###@##z@x  .M#Wz#################################################
######################################################@z       ``,#x####M#Wz######nn#####@##x#z:W#M###################################################
######################################################WW:# *, `W;,#x###nWn#############n#W###M###x####################################################
######################################################x#W@ @# i@`:#x###################x#x####W@n#####################################################
######################################################M#@#:Wz *M +#z###################M#n############################################################
######################################################@#nW@@W`,@iWW#n##################@#z############################################################
#####################################################x#@#n@M#z`+##nn#@M#################@#############################################################
#####################################################W#x#MWzx@@@###Wxzn#Mx#z##########z#W#############################################################
####################################################z##z#nW@@MMxxW#@Wn##@nx#@x########x#M#############################################################
####################################################M#@xz###nMx#WM#zxW#z@#Wxnn#Mn#####M#x#############################################################
####################################################M@###Wxz####x@@Wx##xW##Mz##@zM@Mn#W#z#############################################################
######################################################nM@###@Mn###zxWx#Wx#nM@#n@#@xxn#################################################################
#########################################################nW####@Mn#####W@@Mz##MMz#x##z#@##############################################################
#######################################################znM#@*+M####Wx####nM@n#@n#xW@#n#M##############################################################
####################################################nxW###M;   .z#####Wxz####z@@Wn###M#x##############################################################
################################################xWW@##Wz;`     .W#xnW@###@Mn###zxW#z#W#n##############################################################
###########################################znxW@##@n*,        `x#M####nM####@Mn########z################:i#:i,#:i#,,;i.+,i;..i+.######################
##########################################n@#@Mzz#:       `:*nW#W#######@@#M####Wxz#z#@################*.i#:`i#`.+`i:; : i*`*`;`i#####################
##########################################MW,`  `W#   ,izM###@WMz#######@@  ,M#####WW#W################,.,#:.,i.`+i`,;.`.i#`i...,+####################
##########################################x@`    *@#n@###@Mxz###########@#   x#nxW@###M#################i*#;*::i;;,:ii::;*#:,*:+::+###################
##########################################z#+;;;.;##@Wxnz###############W#`  M#z##znM@n##########################################+####################
###########################################W#####@#x####################W#.  M########################################################################
###########################################x#MxW###W####################M#.  W@###############################n#######################################
###########################################z#:  `+#x####################M#,  W@#########################xnxx##MnMxWWxxxzMnnWMzMzMxn###################
############################################@#   i#z####################x#:  @W########################n@xxM##WM@nz@#WWz#Wx@Mn@z@Mx###################
############################################MM;zW##M####################x#;  @W########################WWWxM##Wnx@z@z@@nW@x@Mx@n@Mx###################
############################################n######M####################n#* `@M#########################xnnxM#MxWMzWxxxxMxxWWnxWxxWx##################
############################################z#M+;,Wx####################x#x#W#MzMz#########xxx########################################################
#############################################Wx :W#W####################x########@xnMz#####zzn########################################################
#############################################x@*@#@#n###################z#x;:.:@#W###Mzzz#############################################################
#############################################n###z`n@n##################z#z   *#n *#@@##W##############xxxM#MznWM#xxMWMxWxxxMnMxxxMzMxWx#Mnnx#########
##############################################W##x;`x@z###################n   x#: x#*.M#@@Mz###########MWWWz@MxM@zWW#@z@z@M@WxWxxn@WWWn@z@WnM#########
###############################################zM@#W+@M###################x  `@# .#@`.##,:z@Mz#########MWWWxW@x@Wn@@z@z@z@MW#xWMx#@WWWx@xW@zn#########
##################################################nW#@n##################@W..:#W.i#Wi+#@+#zM#@n########xxxMMnMxxMMnxnMznWxnnMzMWz#MzMxWxxnxxx#########
####################################################zz##########zzzzzzzz#@##############@@WWWMz#######################################################
############################################zzznnnnnnnxxxxxxxxxxxxxxxxxxxMWWWWMMMMxxxxnnnnnnnzzz######################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
#######*`+#:+*#*:;#########################################################################################################################zz#########
########.##:;.,,i;;:####################################################################################################################znMMMMnz######
#######+.##,i:;ii:,,*##################################################################################################znz#############nMxzzznMMn#####
#######+.#;,i:;ii:,+###################################################################################################M#M############xMz######nMn####
####;::i,:;:i,i,;;::##################################################################################################z@#@z##########nMznxxxnnWznMz###
###*:#ii;#i*+i+;i+*;*i+###############################################################################################x#M#x#########zMn#xnnMnx@##Mn###
###;;##i:;;,,iii.*`i.;+###########################################################################################nWn#@@#@@#########zM##nzznnnnz#zMz##
###i:#*:,,:ii.i:.+,#;.+###########################################################+#++#####n############n#########W#Wn#WM@#n########zM#MxnxnxxMxnzMz##
####.::.::.::::,,;.+,,+###########################################################*i:i#MWMz@#@@nxMWzMx@zWn#######z#M#W#####W########nM#MxnxxMMMMn#Mz##
#######ii*#+#####################################################################+:::i#MWMz@#@@nxM@zW@@zWn#######M#@##Wxn#M#z#######zM#nznMnnnxnnzMz##
#######:;,*:#####################################################################*:ii;+xWMzW#WMnzWW#MnWzMz#######WMzM@n###n@x#######zMz##zMnnx###xx###
#######;i:;,i:.,,;:,##############################################################ii*i+nMMMMMMMMMMMMMMMMMz###########################nM##zWxxx##zMz###
#######;;i#.+:**,+;.##############################################################+++*#z#zz#zznz#zzzzzzzzz###########################zxx#zxnnM#zMn####
#######:i##.+,;:i,;,##############################################################+#+##zznnznznnzzzznznnzz####nMnWzxMMzzWzWzxxMn######zxMn###znMn#####
#######ii#+iiiiii*;i+#########################################################################################nxzM#nnxznxzMznnxz#######znMMMMMxz######
##########################################################################################################################################zzzz########
######################################################################################################################################################
######################################################################################################################################################