func getV3Filter(code []byte) (v3Filter, error) {
	// check if filter is a known standard filter
	c := crc32.ChecksumIEEE(code)
	for _, f := range standardV3Filters {
		if f.crc == c && f.len == len(code) {
			return f.f, nil
		}
	}

	// create new vm filter
	f := new(vmFilter)
	r := newRarBitReader(bytes.NewReader(code[1:])) // skip first xor byte check

	// read static data
	n, err := r.readBits(1)
	if err != nil {
		return nil, err
	}
	if n > 0 {
		m, err := r.readUint32()
		if err != nil {
			return nil, err
		}
		f.static = make([]byte, m+1)
		err = r.readFull(f.static)
		if err != nil {
			return nil, err
		}
	}

	f.code, err = readCommands(r)
	if err == io.EOF {
		err = nil
	}

	return f.execute, err
}
func getV3Filter(code []byte) (v3Filter, error) {
	
	c := crc32.ChecksumIEEE(code)
	for _, f := range standardV3Filters {
		if f.crc == c && f.len == len(code) {
			return f.f, nil
		}
	}

	
	f := new(vmFilter)
	r := newRarBitReader(bytes.NewReader(code[1:])) 

	
	n, err := r.readBits(1)
	if err != nil {
		return nil, err
	}
	if n > 0 {
		m, err := r.readUint32()
		if err != nil {
			return nil, err
		}
		f.static = make([]byte, m+1)
		err = r.readFull(f.static)
		if err != nil {
			return nil, err
		}
	}

	f.code, err = readCommands(r)
	if err == io.EOF {
		err = nil
	}

	return f.execute, err
}
func getV3Filter ( code [ ] byte ) ( v3Filter , error ) { // check if filter is a known standard filter c := crc32 . ChecksumIEEE ( code ) for _ , f := range standardV3Filters { if f . crc == c && f . len == len ( code ) { return f . f , nil } } // create new vm filter f := new ( vmFilter ) r := newRarBitReader ( bytes . NewReader ( code [ 1 : ] ) ) // skip first xor byte check // read static data n , err := r . readBits ( 1 ) if err != nil { return nil , err } if n > 0 { m , err := r . readUint32 ( ) if err != nil { return nil , err } f . static = make ( [ ] byte , m + 1 ) err = r . readFull ( f . static ) if err != nil { return nil , err } } f . code , err = readCommands ( r ) if err == io . EOF { err = nil } return f . execute , err }
// getV3Filter returns a V3 filter function from a code byte slice.
getV3Filter returns a V3 filter function from a code byte slice .