// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/Value.java
// public interface Value<T> {
// 	/**
// 	 * 
// 	 * @return the generated value
// 	 */
// 	T get();
// }
// 
// Path: src/main/java/moulder/values/SeqValue.java
// public class SeqValue<T> implements Value<T> {
//     private Iterator<T> values;
// 
//     public SeqValue(Iterator<T> values) {
//         super();
//         this.values = values;
//     }
// 
//     public SeqValue(Iterable<T> values) {
//         this.values = values.iterator();
//     }
// 
//     public SeqValue(T... values) {
//         this.values = Arrays.asList(values).iterator();
//     }
// 
//     public T get() {
//         return values.hasNext() ? values.next() : null;
//     }
// 
//     public SeqValue<T> cycle() {
//         return new SeqValue<T>(new CyclingIterator<T>(values));
//     }
// 
//     private static final class CyclingIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private final List<S> values = new ArrayList<S>();
//         private boolean cycled = false;
// 
//         public CyclingIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 S res = it.next();
//                 if (!cycled) {
//                     values.add(res);
//                 }
//                 return res;
//             } else {
//                 cycled = true;
//                 it = values.iterator();
//                 return next();
//             }
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// 
//     public SeqValue<T> repeatLast() {
//         return new SeqValue<T>(new RepeatLastIterator<T>(values));
//     }
// 
//     private static final class RepeatLastIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private S last;
// 
//         public RepeatLastIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 last = it.next();
//             }
//             return last;
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// }
// 
// Path: src/main/java/moulder/values/SimpleBox.java
// public class SimpleBox<T> implements Value<T> {
// 
//     private T value;
// 
//     public SimpleBox() {
//         this.value = null;
//     }
// 
//     public SimpleBox(T value) {
//         this.value = value;
//     }
// 
//     public void set(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


import moulder.Moulder;
import moulder.Value;
import moulder.values.SeqValue;
import moulder.values.SimpleBox;
import org.jsoup.nodes.Node;
import java.util.List;
    }

    public static AttrModifier attr(String attr, String value) {
        return new AttrModifier(attr, value);
    }

    public static AttrModifier attr(String attr, Value<String> value) {
        return new AttrModifier(attr, value);
    }

    public static AttrModifier attr(Value<String> attr, Value<String> value) {
        return new AttrModifier(attr, value);
    }

    public static NopMoulder nop() {
        return new NopMoulder();
    }

    public static IfMoulder ifm(Value<Boolean> condition, Moulder thenMoulder, Moulder elseMoulder) {
        return new IfMoulder(condition, thenMoulder, elseMoulder);
    }

    public static IfMoulder ifm(boolean condition, Moulder thenMoulder, Moulder elseMoulder) {
        return new IfMoulder(condition, thenMoulder, elseMoulder);
    }

    public static SubMoulder sub(String selector, Moulder... moulders) {
        return new SubMoulder().register(selector, moulders);
    }

// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/Value.java
// public interface Value<T> {
// 	/**
// 	 * 
// 	 * @return the generated value
// 	 */
// 	T get();
// }
// 
// Path: src/main/java/moulder/values/SeqValue.java
// public class SeqValue<T> implements Value<T> {
//     private Iterator<T> values;
// 
//     public SeqValue(Iterator<T> values) {
//         super();
//         this.values = values;
//     }
// 
//     public SeqValue(Iterable<T> values) {
//         this.values = values.iterator();
//     }
// 
//     public SeqValue(T... values) {
//         this.values = Arrays.asList(values).iterator();
//     }
// 
//     public T get() {
//         return values.hasNext() ? values.next() : null;
//     }
// 
//     public SeqValue<T> cycle() {
//         return new SeqValue<T>(new CyclingIterator<T>(values));
//     }
// 
//     private static final class CyclingIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private final List<S> values = new ArrayList<S>();
//         private boolean cycled = false;
// 
//         public CyclingIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 S res = it.next();
//                 if (!cycled) {
//                     values.add(res);
//                 }
//                 return res;
//             } else {
//                 cycled = true;
//                 it = values.iterator();
//                 return next();
//             }
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// 
//     public SeqValue<T> repeatLast() {
//         return new SeqValue<T>(new RepeatLastIterator<T>(values));
//     }
// 
//     private static final class RepeatLastIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private S last;
// 
//         public RepeatLastIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 last = it.next();
//             }
//             return last;
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// }
// 
// Path: src/main/java/moulder/values/SimpleBox.java
// public class SimpleBox<T> implements Value<T> {
// 
//     private T value;
// 
//     public SimpleBox() {
//         this.value = null;
//     }
// 
//     public SimpleBox(T value) {
//         this.value = value;
//     }
// 
//     public void set(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


// Path: src/main/java/moulder/moulds/Moulds.java
import moulder.Moulder;
import moulder.Value;
import moulder.values.SeqValue;
import moulder.values.SimpleBox;
import org.jsoup.nodes.Node;
import java.util.List;

    }

    public static AttrModifier attr(String attr, String value) {
        return new AttrModifier(attr, value);
    }

    public static AttrModifier attr(String attr, Value<String> value) {
        return new AttrModifier(attr, value);
    }

    public static AttrModifier attr(Value<String> attr, Value<String> value) {
        return new AttrModifier(attr, value);
    }

    public static NopMoulder nop() {
        return new NopMoulder();
    }

    public static IfMoulder ifm(Value<Boolean> condition, Moulder thenMoulder, Moulder elseMoulder) {
        return new IfMoulder(condition, thenMoulder, elseMoulder);
    }

    public static IfMoulder ifm(boolean condition, Moulder thenMoulder, Moulder elseMoulder) {
        return new IfMoulder(condition, thenMoulder, elseMoulder);
    }

    public static SubMoulder sub(String selector, Moulder... moulders) {
        return new SubMoulder().register(selector, moulders);
    }

    public static SubMoulder sub(String selector, List<Moulder> moulders) {