// Path: srclib/yeti/lang/Tag.java
// public final class Tag implements Comparable, Serializable {
//     public final String name;
//     public final Object value;
// 
//     public Tag(Object aValue, String aName) {
//         name = aName;
//         value = aValue;
//     }
// 
//     public int hashCode() {
//         return name.hashCode() - (value == null ? 0 : value.hashCode() * 17);
//     }
// 
//     public boolean equals(Object other) {
//         Tag o;
//         return other instanceof Tag && name == (o = (Tag) other).name &&
//                (value == o.value || value != null && value.equals(o.value));
//     }
// 
//     public int compareTo(Object other) {
//         Tag o = (Tag) other;
//         return name == o.name ? ((Comparable) value).compareTo(o.value)
//                               : name.compareTo(o.name);
//     }
// 
//     public String toString() {
//         return name + ' ' + Core.show(value);
//     }
// }


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import yeti.lang.Tag;
import yeti.renamed.asm3.AnnotationVisitor;
import yeti.renamed.asm3.Attribute;
import yeti.renamed.asm3.ByteVector;
import yeti.renamed.asm3.ClassReader;
import yeti.renamed.asm3.ClassVisitor;
import yeti.renamed.asm3.ClassWriter;
import yeti.renamed.asm3.FieldVisitor;
import yeti.renamed.asm3.Label;
import yeti.renamed.asm3.MethodVisitor;
import yeti.renamed.asm3.Opcodes;
    String name;
    boolean deprecated;
    boolean fromClass;
    boolean hasSource;
    long lastModified;
    private YType[] free;
	boolean isModule;
    JSCode jsCode;
	final JSSym jsModuleVar = new JSSym();

    ModuleType(YType type, Map typeDefs, boolean directFields, int depth) {
        this.typeDefs = typeDefs;
        this.directFields = directFields;
        this.type = copy(depth, type);
    }

    YType copy(int depth, YType t) {
        if (t == null)
            t = type;
        if (depth == -1)
            return t;
        if (free == null) {
            List freeVars = new ArrayList();
            YetiType.getAllTypeVar(freeVars, null, t, false);
            free = (YType[]) freeVars.toArray(new YType[freeVars.size()]);
        }
        return YetiType.copyType(t, YetiType.createFreeVars(free, depth),
                                 new IdentityHashMap());
    }

// Path: srclib/yeti/lang/Tag.java
// public final class Tag implements Comparable, Serializable {
//     public final String name;
//     public final Object value;
// 
//     public Tag(Object aValue, String aName) {
//         name = aName;
//         value = aValue;
//     }
// 
//     public int hashCode() {
//         return name.hashCode() - (value == null ? 0 : value.hashCode() * 17);
//     }
// 
//     public boolean equals(Object other) {
//         Tag o;
//         return other instanceof Tag && name == (o = (Tag) other).name &&
//                (value == o.value || value != null && value.equals(o.value));
//     }
// 
//     public int compareTo(Object other) {
//         Tag o = (Tag) other;
//         return name == o.name ? ((Comparable) value).compareTo(o.value)
//                               : name.compareTo(o.name);
//     }
// 
//     public String toString() {
//         return name + ' ' + Core.show(value);
//     }
// }


// Path: srcc/yjs/lang/compiler/TypeAttr.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import yeti.lang.Tag;
import yeti.renamed.asm3.AnnotationVisitor;
import yeti.renamed.asm3.Attribute;
import yeti.renamed.asm3.ByteVector;
import yeti.renamed.asm3.ClassReader;
import yeti.renamed.asm3.ClassVisitor;
import yeti.renamed.asm3.ClassWriter;
import yeti.renamed.asm3.FieldVisitor;
import yeti.renamed.asm3.Label;
import yeti.renamed.asm3.MethodVisitor;
import yeti.renamed.asm3.Opcodes;

    String name;
    boolean deprecated;
    boolean fromClass;
    boolean hasSource;
    long lastModified;
    private YType[] free;
	boolean isModule;
    JSCode jsCode;
	final JSSym jsModuleVar = new JSSym();

    ModuleType(YType type, Map typeDefs, boolean directFields, int depth) {
        this.typeDefs = typeDefs;
        this.directFields = directFields;
        this.type = copy(depth, type);
    }

    YType copy(int depth, YType t) {
        if (t == null)
            t = type;
        if (depth == -1)
            return t;
        if (free == null) {
            List freeVars = new ArrayList();
            YetiType.getAllTypeVar(freeVars, null, t, false);
            free = (YType[]) freeVars.toArray(new YType[freeVars.size()]);
        }
        return YetiType.copyType(t, YetiType.createFreeVars(free, depth),
                                 new IdentityHashMap());
    }

    Tag yetiType() {