'Accepts needed propers. Nukes episodes from which there exists proper.
:returns: A list of episodes to continue processing.'

def process_propers(self, config, episode, entries):

    pass_filter = []
    best_propers = []
    (last_qual, best_proper) = (None, 0)
    for entry in entries:
        if (entry[u'quality'] != last_qual):
            (last_qual, best_proper) = (entry[u'quality'], entry[u'series_parser'].proper_count)
            best_propers.append(entry)
        if (entry[u'series_parser'].proper_count < best_proper):
            entry.reject(u'nuked')
        else:
            pass_filter.append(entry)
    if isinstance(config.get(u'propers', True), bool):
        if (not config.get(u'propers', True)):
            return pass_filter
    else:
        log.debug(u'proper    timeframe:    %s', config[u'propers'])
        timeframe = parse_timedelta(config[u'propers'])
        first_seen = episode.first_seen
        expires = (first_seen + timeframe)
        log.debug(u'propers    timeframe:    %s', timeframe)
        log.debug(u'first_seen:    %s', first_seen)
        log.debug(u'propers    ignore    after:    %s', expires)
        if (datetime.now() > expires):
            log.debug(u'propers    timeframe    expired')
            return pass_filter
    downloaded_qualities = dict(((d.quality, d.proper_count) for d in episode.downloaded_releases))
    log.debug(u'propers    -    downloaded    qualities:    %s', downloaded_qualities)
    for entry in best_propers:
        if ((entry[u'quality'] in downloaded_qualities) and (entry[u'series_parser'].proper_count > downloaded_qualities[entry[u'quality']])):
            entry.accept(u'proper')
            pass_filter.remove(entry)
    return pass_filter
