code: def _parse_build(encoded_data, pointer=0, spec=None, spec_params=None, strict=False):
      
  
      encoded_len = len(encoded_data)
      info, new_pointer = _parse(encoded_data, encoded_len, pointer)
      if strict and new_pointer != pointer + encoded_len:
          extra_bytes = pointer + encoded_len - new_pointer
          raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes)
      return (_build(*info, spec=spec, spec_params=spec_params), new_pointer)
docs: Parses a byte string generically, or using a spec with optional params
  
      :param encoded_data:
          A byte string that contains BER-encoded data
  
      :param pointer:
          The index in the byte string to parse from
  
      :param spec:
          A class derived from Asn1Value that defines what class_ and tag the
          value should have, and the semantics of the encoded value. The
          return value will be of this type. If omitted, the encoded value
          will be decoded using the standard universal tag based on the
          encoded tag number.
  
      :param spec_params:
          A dict of params to pass to the spec object
  
      :param strict:
          A boolean indicating if trailing data should be forbidden - if so, a
          ValueError will be raised when trailing data exists
  
      :return:
          A 2-element tuple:
           - 0: An object of the type spec, or if not specified, a child of Asn1Value
           - 1: An integer indicating how many bytes were consumed