class AndMatcher<T> extends AbstractMatcher<T> {
        private final Matcher<? super T> a;
        private final Matcher<? super T> b;

        AndMatcher(Matcher<? super T> a, Matcher<? super T> b) {
            this.a = a;
            this.b = b;
        }

        @Override
        public boolean matches(T t) {
            return a.matches(t) && b.matches(t);
        }

        @Override
        public boolean equals(Object other) {
            return other instanceof AndMatcher
                    && ((AndMatcher<?>) other).a.equals(a)
                    && ((AndMatcher<?>) other).b.equals(b);
        }

        @Override
        public int hashCode() {
            return 41 * (a.hashCode() ^ b.hashCode());
        }

        @Override
        public String toString() {<FILL_FUNCTION_BODY>}
    }

            return "and(" + a + ", " + b + ")";
        
<no_super_class>