   Use it in your component to override event bus options. Return an option hash to be merged into `default-config`."
   (init-event-bus [_]))
 
+(def default-protocols
+  {::all #(when (satisfies? IGotEvent %)
+           got-event)
+   ::bubbling #(when (satisfies? IGotBubblingEvent %)
+                got-bubbling-event)
+   ::trickling #(when (satisfies? IGotTricklingEvent %)
+                got-trickling-event)})
+
 ;; Here are the configuration options you can use along with their default values:
 ;;
 ;; * `:xform` - this optional xform will be applied to all passing through the component, e.g.

           value
           options
           nil
           {::trickling (impl/event-bus (impl/trickling-router))})))

; =============================================================================
;; ### Triggering events.

  and tear down the event bus for a component and to bind `*parent*` to be used in the `:instrument` function.

  3. It passes the custom descriptor to `om.core/build*`."
  [f value options out-event-ch event-buses protocols]
  (let [descriptor (d/make-descriptor {:componentWillMount
                                       (fn [this super]
                                         (init-event-bus! this protocols)
                                         (super))
                                       :componentWillUnmount
                                       (fn [this super]
