code: func (c *Client) ExecuteWrite(flags uint8) error {
  
  	// Acquire and reuse the txBuf, and release it after usage.
  	txBuf := <-c.chTxBuf
  	defer func() { c.chTxBuf <- txBuf }()
  
  	req := ExecuteWriteRequest(txBuf[:1])
  	req.SetAttributeOpcode()
  	req.SetFlags(flags)
  
  	b, err := c.sendReq(req)
  	if err != nil {
  		return err
  	}
  
  	// Convert and validate the response.
  	rsp := ExecuteWriteResponse(b)
  	switch {
  	case rsp[0] == ErrorResponseCode && len(rsp) == 5:
  		return ble.ATTError(rsp[4])
  	case rsp[0] == ErrorResponseCode && len(rsp) == 5:
  		fallthrough
  	case rsp[0] != rsp.AttributeOpcode():
  		return ErrInvalidResponse
  	}
  	return nil
  }
docs: // ExecuteWrite requests the server to write or cancel the write of all the prepared
  // values currently held in the prepare queue from this Client. This request shall be
  // handled by the server as an atomic operation. [Vol 3, Part F, 3.4.6.3 & 3.4.6.4]