code: def _get(self, node, key):
          
          node_type = self._get_node_type(node)
  
          if node_type == NODE_TYPE_BLANK:
              return BLANK_NODE
  
          if node_type == NODE_TYPE_BRANCH:
              # already reach the expected node
              if not key:
                  return node[-1]
              sub_node = self._decode_to_node(node[key[0]])
              return self._get(sub_node, key[1:])
  
          # key value node
          curr_key = without_terminator(unpack_to_nibbles(node[0]))
          if node_type == NODE_TYPE_LEAF:
              return node[1] if key == curr_key else BLANK_NODE
  
          if node_type == NODE_TYPE_EXTENSION:
              # traverse child nodes
              if starts_with(key, curr_key):
                  sub_node = self._decode_to_node(node[1])
                  return self._get(sub_node, key[len(curr_key):])
              else:
                  return BLANK_NODE
docs: get value inside a node
  
          :param node: node in form of list, or BLANK_NODE
          :param key: nibble list without terminator
          :return:
              BLANK_NODE if does not exist, otherwise value or hash