:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::'':::::::::::::::::::::::::::::::
::::::::::::::::::::;:::':::::::::::::::::::: . `::::::::::::::::::::::::::::::
:::::::::::::::::::::::'.::::::::::::;::::::: :  ::::::::::::::':::::::::::::::
:::::::::;::::::::;:::' ::::::::::::::::::::' 8  :::::::::::::' ;::::::::::::::
:::::::::':::::;:::::: .::::::::::::'':::::: j8  ::::``:::::::  :::::::::::::::
:::::::::.`::::::::::' :::::::::::' . :::::' 8f' :::: . `::::'  :::::::::::::::
:::::::::: `::::::::: .::::'`::::' j' ::::' j8  .::::. b. `::  .::::::'::::::::
::::::::::  ::::::::' ::::' .:::' .8  ::::  88 .:'`::: `8. :'  ::::::' ::::::::
::::::::::. `::::::'  ::: . ::::  8f .:::' j8f : . :::. `8.    :::::' .::::::::
:::::::::::  ::::::  .::' j :::' j8  :::' .88 .: : ::::  88    ::::'  :::::::::
::::`::::::  `::::'  ::' .f ::' .8f .::' .88f :' l `:::. l8l  .:::'  .:::::::::
::::.`:::::.   ::'   '  .8  ::  j8  ::' .888 .:  8  ::::  88  :::'   ::::::::::
:::::.`:::::   `:'     .8f .:' .8f .:' .8O88 ::  8l `:::. 88l `:'   .::::::::::
::::::.`::::         .d88  :' .88  :' .8Pll8 `:  88  :::: l88. `    ::::::'::::
:::::::  `::.      .d8l8f .' .88f .:  88lll8l :  88l `:::  888.    .:::::: ::::
::::::::  `:    .od8Pl88    .888  :' j8Plll88 `  888  `::. l8l8b.  `:::::' ::::
::::::::.     .d8Pllld8f   .8888  :  88llll88    888l  :::. 8bl84b.  `::'  ::::
::::::::'   .d8Plllld88   .8Pl8f     88llllO8    f8l8. `::: l8bll48bo. `   ::::
:: ` ::    .88Plllld88'  .8Pld8      88llllO8     88l8. `::. 88llll488b.   `:::
:    :     88Olllld88'  .8Pll88    . 88lllld8     88l88. `:: `88bllll488b.  :::
     :     88Ollld8P'  .88lll88      `8blld8'  :  f8ll88   `. `88blllll488. `:'
     :     `+8gg8+'   .88Plll88       `+88+'   :   88ll8l      `488bllllO88  :
                      88Pllll88                :   f8ll88        `48bllld88
                     j8Olllld8f        .o7'    '    88l88   .      `+8gg8+'
      \o.            l8Olllld8      .d8+'           `+8+'   8
       `+8bo._       `88llld8'    .d8+'   b.               .8
         .`+888o.     `+8g8+'   .d88'     `4bo.           .88       .8.
       .d8b. `488b.           .d888'  .d.   `88b.        .888      .888.
     .o88888b. `888b.        .8888'  .888.   `888.      .888f    .o88888.
   .o8888'`488b.`8888.      .8888'  .88888b.  `888.    .8888   .o88+' `88b.
  .88888'   `888.`8888.     8888'  .d8888888b. `888.  .8888' .o888'    `888b.
  8888P'     `888 `8888.   j888f .d888'"`48888. l888.d8888' .8888' _..ood8888.
 j888'        `88l l8888   8888 .888P     `8888. 8888888P'  88888888888gg88++'
 888'  ..oo8888888  8888l j888f.8888       l8888.l88888'    88888g8++"'
 l88.       `""+8g  l8888 8888 j8888        8888l 888888o.  88888          .d
  888o.              8888j888f `8888.       8888P 88888888b.l8888.        .88
  l8888b.         .; l8888888   l8888.      8888'j8888888888.88888.     .d888
   888888b.     .d8   888888f    88888b.   j888' 88888`888888`48888.    8888f
   `8888888   .d88f   l88888     `888888. .888' j888P' `88888b.`8888.  j8888'
    `888888l .8888     8888f      `488888b888' .888F    `888888.`488Bb.8888'
     `488888.8888'     l888         `+888888' .888F      `488888. `+88888+'
       `48888888'       88f            `4gP' .888'         `48888b. `+8+'
         `4888+'        l8                  .88P'            `+4888bo.
           `4'           f                 .8+'                 `+4888bo._
           ,:.           :              .    `:.               .,:::;"++888o.
        ,:.:::':;.      .::.         .::':.    `::.         .:-:'::'..::.
    ,;::.:':' `:::.    :'::,.     .:'::`'::;:.  '::.     .:::':'.::;:' :'::.
   .::':::''     `::  .:;::':.  .:,:::'    ::':. `:::. ,::':::'::':'    `::;:.
  :;:''              .::: :::: `:::;:'      `:::  :':,:'::;' .:':         '::'
  :::.   ..:;;:'::; .:`::' ::':  :::;       .:'::'.:;:.:'    ::'::,::..
  ':.::.     ,:::' :,::'   `:::.  ''::`.  ,:::'  :::':::,:.  `:::.   ':::'::;'
   `'::.::. ,:;:',:;:;'      '::':.  '::::'::' .:':'    `:::.   `::,:.  :.:'
        '::'..:'::'           '`::;..  ':'  .::;'        ':;:      ':;:''
        .:,:''                    `'::;. .:;:'              ':
      ::'                             ''::