class ExtractorTagParser extends TagParser {

        protected ExtractorTagParser(SWFTagTypes tagtypes) {
            super(tagtypes);
        }

        protected void parseDefineBits(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in bits
        }

        protected void parseDefineBitsJPEG3(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in bits
        }

        protected void parseDefineBitsLossless(InStream in, int length, boolean hasAlpha) throws IOException {
            // DO NOTHING - no URLs to be found in bits
        }

        protected void parseDefineButtonSound(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in sound
        }

        protected void parseDefineFont(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in font
        }

        protected void parseDefineJPEG2(InStream in, int length) throws IOException {
            // DO NOTHING - no URLs to be found in jpeg
        }

        protected void parseDefineJPEGTables(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in jpeg
        }

        protected void parseDefineShape(int type, InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in shape
        }

        protected void parseDefineSound(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in sound
        }

        protected void parseFontInfo(InStream in, int length, boolean isFI2) throws IOException {
            // DO NOTHING - no URLs to be found in font info
        }

        protected void parseDefineFont2(InStream in) throws IOException {
            // DO NOTHING - no URLs to be found in bits
        }
        
        // heritrix: Overridden to use our TagParser and SWFReader. The rest of
        // the code is the same.
        @Override
        protected void parseDefineSprite(InStream in) throws IOException {
            int id = in.readUI16();
            in.readUI16(); // frame count

            SWFTagTypes sstt = mTagtypes.tagDefineSprite(id);

            if (sstt == null)
                return;

            // heritrix: only these two lines differ from
            // super.parseDefineSprite()
            TagParser parser = new ExtractorTagParser(sstt);
            SWFReader reader = new SWFReader(parser, in);

            reader.readTags();
        }
        
        // Overridden to read 32 bit clip event flags when flash version >= 6.
        // All the rest of the code is copied directly. Fixes HER-1509.
        @Override
        protected void parsePlaceObject2( InStream in ) throws IOException
        {<FILL_FUNCTION_BODY>}

    }

            boolean hasClipActions    = in.readUBits(1) != 0;
            boolean hasClipDepth      = in.readUBits(1) != 0;
            boolean hasName           = in.readUBits(1) != 0;
            boolean hasRatio          = in.readUBits(1) != 0;
            boolean hasColorTransform = in.readUBits(1) != 0;
            boolean hasMatrix         = in.readUBits(1) != 0;
            boolean hasCharacter      = in.readUBits(1) != 0;
            boolean isMove            = in.readUBits(1) != 0;

            int depth = in.readUI16();

            int            charId    = hasCharacter      ? in.readUI16()            : 0;
            Matrix         matrix    = hasMatrix         ? new Matrix( in )         : null;
            AlphaTransform cxform    = hasColorTransform ? new AlphaTransform( in ) : null;
            int            ratio     = hasRatio          ? in.readUI16()            : -1;        
            String         name      = hasName           ? in.readString(mStringEncoding)  : null;  
            int            clipDepth = hasClipDepth      ? in.readUI16()            : 0;

            int clipEventFlags = 0;

            if (hasClipActions) {
                in.readUI16(); // reserved

                // heritrix: flags size changed in swf version 6
                clipEventFlags = mFlashVersion < 6 ? in.readUI16() : in.readSI32();
            }

            SWFActions actions = mTagtypes.tagPlaceObject2(isMove, clipDepth,
                    depth, charId, matrix, cxform, ratio, name, clipEventFlags);

            if (hasClipActions && actions != null) {
                int flags = 0;

                // heritrix: flags size changed in swf version 6
                while ((flags = mFlashVersion < 6 ? in.readUI16() : in.readSI32()) != 0) {
                    in.readUI32(); // length

                    actions.start(flags);
                    ActionParser parser = new ActionParser(actions, mFlashVersion);

                    parser.parse(in);
                }

                actions.done();
            }
        
<methods>public non-sealed void <init>() <variables>