private void updateGate(String CLK, String CLR, String SHLD, String CLKINH, String SER, String A, String B, String C, String D, String E, String F, String G, String H, String QH) throws InvalidPinException {
		if (this.isLow(CLR)) {
			this.a = Pin.PinState.LOW;
			this.b = Pin.PinState.LOW;
			this.c = Pin.PinState.LOW;
			this.d = Pin.PinState.LOW;
			this.e = Pin.PinState.LOW;
			this.f = Pin.PinState.LOW;
			this.g = Pin.PinState.LOW;
			this.setPin(QH, Pin.PinState.LOW);
		} else if (this.isLow(SHLD)) {
			this.a = this.getPinState(A);
			this.b = this.getPinState(B);
			this.c = this.getPinState(C);
			this.d = this.getPinState(D);
			this.e = this.getPinState(E);
			this.f = this.getPinState(F);
			this.g = this.getPinState(G);

			if (this.isHigh(H)) {
				this.setPin(QH, Pin.PinState.HIGH);
			} else {
				this.setPin(QH, Pin.PinState.LOW);
			}
		} else if (this.isRisingEdge(CLK) && this.isLow(CLKINH)) {
			if (this.g.equals(Pin.PinState.HIGH)) {
				this.setPin(QH, Pin.PinState.HIGH);
			} else {
				this.setPin(QH, Pin.PinState.LOW);
			}
			this.g = this.f;
			this.f = this.e;
			this.e = this.d;
			this.d = this.c;
			this.c = this.b;
			this.b = this.a;
			this.a = this.getPinState(SER);
		}
	}