docs: def _get_binary(data, position, obj_end, opts, dummy1):
      """Decode a BSON binary to bson.binary.Binary or python UUID."""
      length, subtype = _UNPACK_LENGTH_SUBTYPE(data[position:position + 5])
      position += 5
      if subtype == 2:
          length2 = _UNPACK_INT(data[position:position + 4])[0]
          position += 4
          if length2 != length - 4:
              raise InvalidBSON("invalid binary (st 2) - lengths don't match!")
          length = length2
      end = position + length
      if length < 0 or end > obj_end:
          raise InvalidBSON('bad binary object length')
      if subtype in (3, 4):
          # Java Legacy
          uuid_representation = opts.uuid_representation
          if uuid_representation == JAVA_LEGACY:
              java = data[position:end]
              value = uuid.UUID(bytes=java[0:8][::-1] + java[8:16][::-1])
          # C# legacy
          elif uuid_representation == CSHARP_LEGACY:
              value = uuid.UUID(bytes_le=data[position:end])
          # Python
          else:
              value = uuid.UUID(bytes=data[position:end])
          return value, end
      # Python3 special case. Decode subtype 0 to 'bytes'.
      if PY3 and subtype == 0:
          value = data[position:end]
      else:
          value = Binary(data[position:end], subtype)
      return value, end