import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.locks.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.math.*;
class main {
static Map mapFieldToField(String fieldA, String fieldB, Iterable l) {
return fieldToFieldIndex(fieldA, fieldB, l);
}
static Map mapFieldToField(String fieldA, Class typeA, String fieldB, Class typeB, Iterable l) {
return filterMap(mapFieldToField(fieldA, fieldB, l), (k, v) -> isInstanceX(typeA, k) && isInstance(typeB, k));
}
static Map fieldToFieldIndex(final String fieldA, final String fieldB, Iterable l) {
return pairsToMap((List) collectTwoFieldsAsPair(fieldA, fieldB, l));
}
static Map filterMap(Map map, Object f) {
if (map == null) return null;
Map m2 = similarEmptyMap(map);
for (A a : keys(map)) {
B b = map.get(a);
if (isTrue(callF(f, a, b)))
m2.put(a, b);
}
return m2;
}
static Map filterMap(Object f, Map map) {
return filterMap(map, f);
}
static Map filterMap(Map map, IF2 f) {
return filterMap(f, map);
}
static Map filterMap(IF2 f, Map map) {
return filterMap(map, (Object) f);
}
static boolean isInstanceX(Class type, Object arg) {
if (type == boolean.class) return arg instanceof Boolean;
if (type == int.class) return arg instanceof Integer;
if (type == long.class) return arg instanceof Long;
if (type == float.class) return arg instanceof Float;
if (type == short.class) return arg instanceof Short;
if (type == char.class) return arg instanceof Character;
if (type == byte.class) return arg instanceof Byte;
if (type == double.class) return arg instanceof Double;
return type.isInstance(arg);
}
static boolean isInstance(Class type, Object arg) {
return type.isInstance(arg);
}
static HashMap pairsToMap(Collection extends Pair> l) {
HashMap map = new HashMap();
if (l != null) for (Pair p : l)
map.put(p.a, p.b);
return map;
}
static List> collectTwoFieldsAsPair(final String fieldA, final String fieldB, Iterable l) {
return map(l, new F1