code: def demux(select):
      
      if len(select) == 1:
          return _demux_2(select)
  
      wires = demux(select[:-1])
      sel = select[-1]
      not_select = ~sel
      zero_wires = tuple(not_select & w for w in wires)
      one_wires = tuple(sel & w for w in wires)
      return zero_wires + one_wires
docs: Demultiplexes a wire of arbitrary bitwidth
  
      :param WireVector select: indicates which wire to set on
      :return (WireVector, ...): a tuple of wires corresponding to each demultiplexed wire