public Map<String, MetaNode> resolveOptions(QueryOptions filter) {
        // get relevant entries
        SortedMap<ImmutableContextSet, Map<String, MetaNode>> sorted = new TreeMap<>(ContextSetComparator.reverse());
        for (Map.Entry<ImmutableContextSet, Map<String, String>> entry : this.options.entrySet()) {
            if (!filter.satisfies(entry.getKey(), defaultSatisfyMode())) {
                continue;
            }

            Map<String, MetaNode> nodeMap = new HashMap<>();
            entry.getValue().forEach((key, value) -> {
                MetaNode node = Meta.builder()
                        .key(key)
                        .value(value)
                        .context(entry.getKey())
                        .withMetadata(InheritanceOriginMetadata.KEY, this.inheritanceOrigin)
                        .build();
                nodeMap.put(key, node);
            });

            sorted.put(entry.getKey(), nodeMap);
        }

        // flatten
        Map<String, MetaNode> result = new HashMap<>();
        for (Map<String, MetaNode> map : sorted.values()) {
            for (Map.Entry<String, MetaNode> e : map.entrySet()) {
                result.putIfAbsent(e.getKey(), e.getValue());
            }
        }

        return result;
    }
In-memory implementation of {@link LPSubjectData}.
sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubjectData.java