 (zero_channel == 2 ? '0' : '');
			return color;
		}
		// draw
		context.beginPath();
		var the_gap = true;
		var old_i;
		for(var j = 0.5; j < w - 0.5; j += 0.5) {
			const x = s2x(j);
			const y = f(x);
			const i = y2s(y);
			if(the_gap) {
				context.moveTo(j, i)
				the_gap = false;
			} else {
				if(abs(i - old_i) >= h)
					the_gap = true;
				else
					context.lineTo(j, i);
			}
			old_i = i;
		}
		context.strokeStyle = color_by_hash_of(f_line);
		context.lineWidth = 1.5;
		context.stroke();
		con