final void drawVerticalLine(int x, int y, int len, int color, int mode) {
	if (x >= ((SoftwareToolkit) this).widthOffset && x < ((SoftwareToolkit) this).width) {
	    if (y < ((SoftwareToolkit) this).heightOffset) {
		len -= ((SoftwareToolkit) this).heightOffset - y;
		y = ((SoftwareToolkit) this).heightOffset;
	    }
	    if (y + len > ((SoftwareToolkit) this).height)
		len = ((SoftwareToolkit) this).height - y;
	    int destOff = x + y * ((SoftwareToolkit) this).maxWidth;
	    int alpha = color >>> 24;
	    if (mode == 0 || mode == 1 && alpha == 255) {
		for (int j = 0; j < len; j++)
		    ((SoftwareToolkit) this).pixelBuffer[destOff + j * ((SoftwareToolkit) this).maxWidth] = color;
	    } else if (mode == 1) {
		color = (((color & 0xff00ff) * alpha >> 8 & 0xff00ff)
			 + ((color & 0xff00) * alpha >> 8 & 0xff00)
			 + (alpha << 24));
		int i_78_ = 256 - alpha;
		for (int i_79_ = 0; i_79_ < len; i_79_++) {
		    int i_80_ = destOff + i_79_ * ((SoftwareToolkit) this).maxWidth;
		    int i_81_ = ((SoftwareToolkit) this).pixelBuffer[i_80_];
		    i_81_ = (((i_81_ & 0xff00ff) * i_78_ >> 8 & 0xff00ff)
			     + ((i_81_ & 0xff00) * i_78_ >> 8 & 0xff00));
		    ((SoftwareToolkit) this).pixelBuffer[i_80_] = color + i_81_;
		}
	    } else if (mode == 2) {
		for (int i_82_ = 0; i_82_ < len; i_82_++) {
		    int i_83_ = destOff + i_82_ * ((SoftwareToolkit) this).maxWidth;
		    int i_84_ = ((SoftwareToolkit) this).pixelBuffer[i_83_];
		    int i_85_ = color + i_84_;
		    int i_86_ = (color & 0xff00ff) + (i_84_ & 0xff00ff);
		    i_84_ = (i_86_ & 0x1000100) + (i_85_ - i_86_ & 0x10000);
		    ((SoftwareToolkit) this).pixelBuffer[i_83_]
			= i_85_ - i_84_ | i_84_ - (i_84_ >>> 8);
		}
	    } else
		throw new IllegalArgumentException();
	}
    }