class VersionedBackupProcessor<K> implements EntryProcessor<K, byte[], byte[]>, ComparableByContent<VersionedBackupProcessor> {

    private static final long serialVersionUID = 1L;

    private final byte[] state;
    private final Long ttlMillis;

    public VersionedBackupProcessor(byte[] state, Long ttlMillis) {
        this.state = state;
        this.ttlMillis = ttlMillis;
    }

    public byte[] getState() {
        return state;
    }

    public Long getTtlMillis() {
        return ttlMillis;
    }

    @Override
    public boolean equalsByContent(VersionedBackupProcessor other) {
        return Arrays.equals(state, other.state) && Objects.equals(ttlMillis, other.ttlMillis);
    }

    @Override
    public byte[] process(Map.Entry<K, byte[]> entry) {<FILL_FUNCTION_BODY>}
    
}

        if (ttlMillis == null) {
            entry.setValue(state);
        } else {
            ExtendedMapEntry extendedMapEntry = (ExtendedMapEntry) entry;
            extendedMapEntry.setValue(state, ttlMillis, TimeUnit.MILLISECONDS);
        }
        return null; // return value from backup processor is ignored, see https://github.com/hazelcast/hazelcast/pull/14995
    
<no_super_class>