class JSONReaderUTF16Vector
        extends JSONReaderUTF16 {
    JSONReaderUTF16Vector(Context ctx, String str, char[] chars, int offset, int length) {
        super(ctx, str, chars, offset, length);
    }

    JSONReaderUTF16Vector(Context ctx, String str, int offset, int length) {
        super(ctx, str, offset, length);
    }

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

    public static class Factory
            implements JSONFactory.JSONReaderUTF16Creator {
        @Override
        public JSONReader create(Context ctx, String str, char[] chars, int offset, int length) {
            if (chars == null) {
                return new JSONReaderUTF16Vector(ctx, str, offset, length);
            } else {
                return new JSONReaderUTF16Vector(ctx, str, chars, offset, length);
            }
        }
    }
}

        char[] chars = this.chars;
        if (ch == '"' || ch == '\'') {
            final char quote = ch;

            int offset = this.offset;
            final int start = offset, end = this.end;
            int valueLength;
            boolean valueEscape = false;

            {
                int i = 0;
                final Vector<Short> v_quote = quote == '"' ? V_SHORT_128_DOUBLE_QUOTE : V_SHORT_128_SINGLE_QUOTE;
                for (; offset + 8 < end; offset += 8, i += 8) {
                    ShortVector v = ShortVector.fromCharArray(ShortVector.SPECIES_128, chars, offset);
                    if (v.eq(V_SHORT_128_SLASH).or(v.eq(v_quote)).anyTrue()) {
                        break;
                    }
                }

                for (; ; ++i) {
                    if (offset >= end) {
                        throw new JSONException(info("invalid escape character EOI"));
                    }
                    char c = chars[offset];
                    if (c == '\\') {
                        valueEscape = true;
                        c = chars[offset + 1];
                        offset += (c == 'u' ? 6 : (c == 'x' ? 4 : 2));
                        continue;
                    }

                    if (c == quote) {
                        valueLength = i;
                        break;
                    }
                    offset++;
                }
            }

            String str;
            if (valueEscape) {
                char[] buf = new char[valueLength];
                offset = start;
                for (int i = 0; ; ++i) {
                    char c = chars[offset];
                    if (c == '\\') {
                        c = chars[++offset];
                        switch (c) {
                            case 'u': {
                                c = char4(chars[offset + 1], chars[offset + 2], chars[offset + 3], chars[offset + 4]);
                                offset += 4;
                                break;
                            }
                            case 'x': {
                                c = char2(chars[offset + 1], chars[offset + 2]);
                                offset += 2;
                                break;
                            }
                            case '\\':
                            case '"':
                                break;
                            default:
                                c = char1(c);
                                break;
                        }
                    } else if (c == quote) {
                        break;
                    }
                    buf[i] = c;
                    offset++;
                }

                str = new String(buf);
            } else {
                char c0, c1;
                int strlen = offset - start;
                if (strlen == 1 && (c0 = chars[start]) < 128) {
                    str = TypeUtils.toString(c0);
                } else if (strlen == 2
                        && (c0 = chars[start]) < 128
                        && (c1 = chars[start + 1]) < 128
                ) {
                    str = TypeUtils.toString(c0, c1);
                } else {
                    str = this.str.substring(start, offset);
                }
            }

            if ((context.features & Feature.TrimString.mask) != 0) {
                str = str.trim();
            }

            int ch = ++offset == end ? EOI : chars[offset++];
            while (ch <= ' ' && (1L << ch & SPACE) != 0) {
                ch = offset == end ? EOI : chars[offset++];
            }

            if (comma = ch == ',') {
                ch = offset == end ? EOI : chars[offset++];
                while (ch <= ' ' && (1L << ch & SPACE) != 0) {
                    ch = offset == end ? EOI : chars[offset++];
                }
            }

            this.ch = (char) ch;
            this.offset = offset;
            return str;
        }

        return readStringNotMatch();
    
<methods>public final void close() ,public final java.lang.String getFieldName() ,public final long getNameHashCodeLCase() ,public final int getRawInt() ,public final long getRawLong() ,public final java.lang.String getString() ,public final int getStringLength() ,public final java.lang.String info(java.lang.String) ,public final boolean isNull() ,public final boolean isReference() ,public final void next() ,public final boolean nextIfArrayEnd() ,public final boolean nextIfArrayStart() ,public final boolean nextIfComma() ,public final boolean nextIfInfinity() ,public final boolean nextIfMatch(char) ,public final boolean nextIfMatchIdent(char, char, char) ,public final boolean nextIfMatchIdent(char, char, char, char) ,public final boolean nextIfMatchIdent(char, char, char, char, char) ,public final boolean nextIfMatchIdent(char, char, char, char, char, char) ,public final boolean nextIfName4Match10(long) ,public final boolean nextIfName4Match11(long) ,public final boolean nextIfName4Match12(long, byte) ,public final boolean nextIfName4Match13(long, int) ,public final boolean nextIfName4Match14(long, int) ,public final boolean nextIfName4Match15(long, int) ,public final boolean nextIfName4Match16(long, int, byte) ,public final boolean nextIfName4Match17(long, long) ,public final boolean nextIfName4Match18(long, long) ,public final boolean nextIfName4Match19(long, long) ,public final boolean nextIfName4Match2() ,public final boolean nextIfName4Match20(long, long, byte) ,public final boolean nextIfName4Match21(long, long, int) ,public final boolean nextIfName4Match22(long, long, int) ,public final boolean nextIfName4Match23(long, long, int) ,public final boolean nextIfName4Match24(long, long, int, byte) ,public final boolean nextIfName4Match25(long, long, long) ,public final boolean nextIfName4Match26(long, long, long) ,public final boolean nextIfName4Match27(long, long, long) ,public final boolean nextIfName4Match28(long, long, long, byte) ,public final boolean nextIfName4Match29(long, long, long, int) ,public final boolean nextIfName4Match3() ,public final boolean nextIfName4Match30(long, long, long, int) ,public final boolean nextIfName4Match31(long, long, long, int) ,public final boolean nextIfName4Match32(long, long, long, int, byte) ,public final boolean nextIfName4Match33(long, long, long, long) ,public final boolean nextIfName4Match34(long, long, long, long) ,public final boolean nextIfName4Match35(long, long, long, long) ,public final boolean nextIfName4Match36(long, long, long, long, byte) ,public final boolean nextIfName4Match37(long, long, long, long, int) ,public final boolean nextIfName4Match38(long, long, long, long, int) ,public final boolean nextIfName4Match39(long, long, long, long, int) ,public final boolean nextIfName4Match4(byte) ,public final boolean nextIfName4Match40(long, long, long, long, int, byte) ,public final boolean nextIfName4Match41(long, long, long, long, long) ,public final boolean nextIfName4Match42(long, long, long, long, long) ,public final boolean nextIfName4Match43(long, long, long, long, long) ,public final boolean nextIfName4Match5(int) ,public final boolean nextIfName4Match6(int) ,public final boolean nextIfName4Match7(int) ,public final boolean nextIfName4Match8(int, byte) ,public final boolean nextIfName4Match9(long) ,public final boolean nextIfName8Match0() ,public final boolean nextIfName8Match1() ,public final boolean nextIfName8Match2() ,public final boolean nextIfNull() ,public final boolean nextIfNullOrEmptyString() ,public final boolean nextIfObjectEnd() ,public final boolean nextIfObjectStart() ,public final boolean nextIfSet() ,public final boolean nextIfValue4Match10(long) ,public final boolean nextIfValue4Match11(long) ,public final boolean nextIfValue4Match2() ,public final boolean nextIfValue4Match3() ,public final boolean nextIfValue4Match4(byte) ,public final boolean nextIfValue4Match5(byte, byte) ,public final boolean nextIfValue4Match6(int) ,public final boolean nextIfValue4Match7(int) ,public final boolean nextIfValue4Match8(int, byte) ,public final boolean nextIfValue4Match9(int, byte, byte) ,public final java.math.BigDecimal readBigDecimal() ,public final boolean readBoolValue() ,public final double readDoubleValue() ,public final java.lang.String readFieldName() ,public final long readFieldNameHashCode() ,public final long readFieldNameHashCodeUnquote() ,public final float readFloatValue() ,public final byte[] readHex() ,public final boolean readIfNull() ,public final java.lang.Integer readInt32() ,public final int readInt32Value() ,public final java.lang.Long readInt64() ,public final long readInt64Value() ,public final java.time.LocalDate readLocalDate() ,public final java.time.LocalDate readLocalDate10() ,public final java.time.LocalDate readLocalDate11() ,public final java.time.LocalDate readLocalDate8() ,public final java.time.LocalDate readLocalDate9() ,public final long readMillis19() ,public final void readNull() ,public final java.util.Date readNullOrNewDate() ,public final void readNumber0() ,public final java.time.OffsetDateTime readOffsetDateTime() ,public final java.time.OffsetTime readOffsetTime() ,public final java.lang.String readPattern() ,public final java.lang.String readReference() ,public java.lang.String readString() ,public final java.util.UUID readUUID() ,public final long readValueHashCode() ,public final void skipComment() ,public final boolean skipName() ,public final void skipValue() <variables>static final long CHAR_MASK,private int cacheIndex,protected final non-sealed char[] chars,protected final non-sealed int end,private java.io.Closeable input,protected final non-sealed int length,private int nameBegin,private int nameEnd,private int nameLength,private int referenceBegin,protected final non-sealed int start,protected final non-sealed java.lang.String str