@staticmethod
def unpack(reader):
    (subtype,) = reader.peek('!H', 0)
    subclass = instruction.subtypes.get(subtype)
    if subclass:
        return subclass.unpack(reader)
    obj = instruction()
    obj.type = reader.read('!H')[0]
    _len = reader.read('!H')[0]
    orig_reader = reader
    reader = orig_reader.slice(_len, 4)
    reader.skip(4)
    return obj
@staticmethod
def unpack(reader):
    (subtype,) = reader.peek('!H', 0)
    subclass = instruction.subtypes.get(subtype)
    if subclass:
        return subclass.unpack(reader)
    obj = instruction()
    obj.type = reader.read('!H')[0]
    _len = reader.read('!H')[0]
    orig_reader = reader
    reader = orig_reader.slice(_len, 4)
    reader.skip(4)
    return obj