abstract gate