code: public static void merge(CSProperties base, CSProperties overlay) {
          for (String key : overlay.keySet()) {
              if (base.getInfo(key).containsKey("public")) {
                  base.put(key, overlay.get(key));
              } else {
                  throw new IllegalArgumentException("Not public: " + key);
              }
          }
      }
docs: Merges two Properties, respects permissions
  
  @param base
  @param overlay