// Path: phial-key-value/src/main/java/com/mindcoders/phial/keyvalue/Saver.java
// public interface Saver {
//     /**
//      * Should save key value association
//      *
//      * @param category - category provided by {@link Phial#category(String)}
//      * @param key      - provided key
//      * @param value    - provided value
//      */
//     void save(String category, String key, String value);
// 
//     /**
//      * Should delete key value association
//      *
//      * @param category - category provided by {@link Phial#category(String)}
//      * @param key      - provided key
//      */
//     void remove(String category, String key);
// 
// 
//     /**
//      * Delete the category and all the key-value pairs associated with it.
//      * @param category - name of the category to be deleted
//      */
//     void remove(String category);
// }


import com.mindcoders.phial.keyvalue.Saver;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Observable;

            if (name != null ? !name.equals(kvEntry.name) : kvEntry.name != null) return false;
            return value != null ? value.equals(kvEntry.value) : kvEntry.value == null;
        }

        @Override
        public int hashCode() {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + (value != null ? value.hashCode() : 0);
            return result;
        }
    }

    static class KVCategory {
        private final String name;
        private final List<KVEntry> entries;

        KVCategory(String name, List<KVEntry> entries) {
            this.name = name;
            this.entries = entries;
        }

        String getName() {
            return name;
        }

        List<KVEntry> entries() {
            return entries;
        }

// Path: phial-key-value/src/main/java/com/mindcoders/phial/keyvalue/Saver.java
// public interface Saver {
//     /**
//      * Should save key value association
//      *
//      * @param category - category provided by {@link Phial#category(String)}
//      * @param key      - provided key
//      * @param value    - provided value
//      */
//     void save(String category, String key, String value);
// 
//     /**
//      * Should delete key value association
//      *
//      * @param category - category provided by {@link Phial#category(String)}
//      * @param key      - provided key
//      */
//     void remove(String category, String key);
// 
// 
//     /**
//      * Delete the category and all the key-value pairs associated with it.
//      * @param category - name of the category to be deleted
//      */
//     void remove(String category);
// }


// Path: phial-overlay/src/main/java/com/mindcoders/phial/internal/keyvalue/KVSaver.java
import com.mindcoders.phial.keyvalue.Saver;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Observable;


            if (name != null ? !name.equals(kvEntry.name) : kvEntry.name != null) return false;
            return value != null ? value.equals(kvEntry.value) : kvEntry.value == null;
        }

        @Override
        public int hashCode() {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + (value != null ? value.hashCode() : 0);
            return result;
        }
    }

    static class KVCategory {
        private final String name;
        private final List<KVEntry> entries;

        KVCategory(String name, List<KVEntry> entries) {
            this.name = name;
            this.entries = entries;
        }

        String getName() {
            return name;
        }

        List<KVEntry> entries() {
            return entries;
        }

        boolean isEmpty() {