rem: return (a.lookup_source < b.lookup_source || (a.lookup_source == b.lookup_source && (a.score < b.score || (a.score == b.score && a.glyph < b.glyph))));
add: if (l1.out == l2.in1 || l1.out == l2.in2) return true; else return l1.in1 < l2.in1 || (l1.in1 == l2.in1 && (l1.in2 < l2.in2 || (l1.in2 == l2.in2 && l1.out < l2.out)));
context: operator<(const Slot &a, const Slot &b){    // note: will give real glyphs priority over virtual ones at a given    // priority    return (a.lookup_source < b.lookup_source	    || (a.lookup_source == b.lookup_source		&& (a.score < b.score		    || (a.score == b.score && a.glyph < b.glyph))));}