Do you want to code a snowman? Here is a simple ASCII art snowman:

_===_
(.,.)
( : )
( : )


Let's make him some friends. This will be the general pattern for our ASCII art snowpeople:

 HHHHH
 HHHHH
X(LNR)Y
X(TTT)Y
 (BBB)


The leading spaces and the parentheses are always the same for all snowpeople. The different letters represent sections of the pattern that can individually change. Each section has exactly four presets for what ASCII characters can fill it.
By mixing and matching these presets for all eight sections, we can make a variety of snowpeople. 

All Presets

(Notice that spaces are put on otherwise empty lines so the section shape is always correct.)

H is for Hat


Straw Hat

     
_===_
Mexican Hat

 ___ 
.....

Fez

  _  
 /_\ 

Russian Hat

 ___ 
(_*_)



N is for Nose/Mouth


Normal ,
Dot .
Line _
None  


L is for Left Eye


Dot .
Bigger Dot o
Biggest Dot O
Closed -


R is for Right Eye

(Same list as left eye.)

X is for Left Arm


Normal Arm

 
&lt;
Upwards Arm

\
 
Downwards Arm

 
/
None

 
 


Y is for Right Arm


Normal Arm

 
&gt;
Upwards Arm

/
 
Downwards Arm

 
\
None

 
 


T is for Torso


Buttons  : 
Vest ] [
Inward Arms &gt; &lt;
None    


B is for Base


Buttons  : 
Feet " "
Flat ___
None    


Challenge

Write a program that takes in an eight character string (via stdin or command line) in the format HNLRXYTB, where each letter is a digit from 1 to 4 that denotes which preset to use for the corresponding section of the snowperson. Print the full snowperson to stdout.

For example, the input 11114411 is the snowman at the top of the page. (First 1: he has a straw hat, second 1: he has a normal nose, etc.)

Another example, the snowperson for input 33232124:

   _
  /_\
\(o_O)
 (] [)&gt;
 (   )


Details


Any amounts and combinations of leading/trailing spaces and leading/trailing newlines are allowed as long as...


the snowperson has all their sections arranged correctly with respect to one another, and
there are never more than 64 total whitespace characters (the general pattern is only 7&times;5, so you probably won't hit this limit).


You don't need to print rows/columns of the pattern if they only contain whitespace. e.g. the empty line of the straw hat is not required.
You must use the ordering of the parts as they are given above.
Instead of a program, you may write a function that takes the digit string as an argument. The output should be printed normally or returned as a string.
You may treat the input as an integer instead of a string if preferred.


Scoring

The shortest code in bytes wins.

Bonus question: Which of the 65536 distinct snowpeople is your favorite?
JavaScript ES6, 210 208 202 bytes

s=&gt;` 0
8(213)9
4(6)5
 (7)`.replace(/\d/g,p=&gt;`_===_1 ___
 .....1  _
  /_\\1 ___
 (_*_)1,1.1_11.1o101-1.1o101-1&lt;11/11&gt;11\\11 : 1] [1&gt; &lt;1   1 : 1" "1___1   11\\11 11/11 `.split(1)[s[p&gt;7?p-4:p]-1+p*4]||' ')


This is an anonymous function; you use it by executing ([function code])('42232124'). The most aggravating part of this was the arms, which take up 2 lines, so I had to include code for both top and bottom.

The Stack Snippet below has ungolfed, un-ES6-ified, commented code. And you can use it to easily test the code and try out different combinations. Edit: I'm having way too much fun with this. I've added several new features, including a way to generate a random snowman.

Thanks to Yair Rand for saving six bytes.



var f=function(s){
  return' 0\n8(213)9\n4(6)5\n (7)' // Start with a placeholder string with all the static components
    .replace(/\d/g,function(p){ // Go through each placeholder number to replace it with its value
    // The massive string below holds all the possible body parts, separated by 1 for easy splitting.
    // The two at the end are for the top of the arms
    return'_===_1 ___\n .....1  _\n  /_\\1 ___\n (_*_)1,1.1_11.1o101-1.1o101\
-1&lt;11/11&gt;11\\11 : 1] [1&gt; &lt;1   1 : 1" "1___1   11\\11 11/11 '.split(1)
    [s[p&gt;7?p-4:p]-1 // Get the value from the input string. If the current body part
                    // is the top of the two-line arms (8 or 9), drop it down to 4 or 5
                    // Subtract 1 to account for the 0-indexed array.
     +p*4] // multiply by 4 to skip to the relevant code
     ||' ' // To save bytes in the above string, spaces are empty strings, so replace them here
  })
}

// Code for the interactive version follows
// http://codepen.io/hsl/pen/bdEgej
function updateRadios(){$('input[type="radio"]').each(function(){if($(this).is(":checked")){var t=$(this).data("p"),i=$(this).data("v");input[t]=i}}),inputS=input.join(""),update()}var input=[],inputS=$("#code").val(),update=function(){$("#p").text(f(inputS)),$("#code").val(inputS)};$('input[type="radio"]').change(updateRadios),$("#code").keyup(function(){inputS=$(this).val(),update()}),updateRadios(),$("#random").click(function(){for(var t=0;8&gt;t;t++)$("div:eq("+t+") input:eq("+Math.floor(4*Math.random())+")").prop("checked",!0);updateRadios()});
body{font-family:sans-serif}h2{font-size:18px;font-weight:400}label{display:block}div{display:inline-block;margin:0 10px}#code{width:70px}
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;&lt;div&gt;&lt;h2&gt;Hat&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p1" data-p="1" data-v="1"&gt; Straw hat&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p1" data-p="1" data-v="2"&gt; Mexican hat&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p1" data-p="1" data-v="3"&gt; Fez&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p1" data-p="1" data-v="4" checked&gt; Russian hat&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Nose/mouth&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p2" data-p="2" data-v="1"&gt; Normal&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p2" data-p="2" data-v="2" checked&gt; Dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p2" data-p="2" data-v="3"&gt; Line&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p2" data-p="2" data-v="4"&gt; None&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Left eye&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p3" data-p="3" data-v="1"&gt; Dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p3" data-p="3" data-v="2" checked&gt; Bigger dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p3" data-p="3" data-v="3"&gt; Biggest dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p3" data-p="3" data-v="4"&gt; Closed&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Right eye&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p4" data-p="4" data-v="1"&gt; Dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p4" data-p="4" data-v="2"&gt; Bigger dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p4" data-p="4" data-v="3" checked&gt; Biggest dot&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p4" data-p="4" data-v="4"&gt; Closed&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Left arm&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p5" data-p="5" data-v="1"&gt; Normal&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p5" data-p="5" data-v="2" checked&gt; Upwards&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p5" data-p="5" data-v="3"&gt; Downwards&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p5" data-p="5" data-v="4"&gt; None&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Right arm&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p6" data-p="6" data-v="1" checked&gt; Normal&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p6" data-p="6" data-v="2"&gt; Upwards&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p6" data-p="6" data-v="3"&gt; Downwards&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p6" data-p="6" data-v="4"&gt; None&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Torso&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p7" data-p="7" data-v="1"&gt; Buttons&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p7" data-p="7" data-v="2" checked&gt; Vest&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p7" data-p="7" data-v="3"&gt; Inward arms&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p7" data-p="7" data-v="4"&gt; None&lt;/label&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Base&lt;/h2&gt;&lt;label&gt;&lt;input type="radio" name="p8" data-p="8" data-v="1"&gt; Buttons&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p8" data-p="8" data-v="2"&gt; Feet&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p8" data-p="8" data-v="3"&gt; Flat&lt;/label&gt;&lt;label&gt;&lt;input type="radio" name="p8" data-p="8" data-v="4" checked&gt; None&lt;/label&gt;&lt;/div&gt;&lt;br&gt;&lt;button id="random"&gt;Randomize&lt;/button&gt;&lt;pre id="p"&gt;&lt;/pre&gt;&lt;input type="text" id="code"&gt;