|
|
@ -1,7 +1,7 @@ |
|
|
|
// ==UserScript==
|
|
|
|
// @name PNGExtraEmbed
|
|
|
|
// @namespace https://coom.tech/
|
|
|
|
// @version 0.242
|
|
|
|
// @version 0.245
|
|
|
|
// @description uhh
|
|
|
|
// @author You
|
|
|
|
// @match https://boards.4channel.org/*
|
|
|
@ -89,7 +89,7 @@ const _DOMParser = DOMParser; |
|
|
|
var define_BUILD_VERSION_default; |
|
|
|
var init_define_BUILD_VERSION = __esm({ |
|
|
|
"<define:BUILD_VERSION>"() { |
|
|
|
define_BUILD_VERSION_default = [0, 242]; |
|
|
|
define_BUILD_VERSION_default = [0, 245]; |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
@ -16189,6 +16189,7 @@ const _DOMParser = DOMParser; |
|
|
|
csettings2 = b; |
|
|
|
}); |
|
|
|
var CUM3 = import_buffer3.Buffer.from("doo\0m"); |
|
|
|
var CUM4 = import_buffer3.Buffer.from("voo\0m"); |
|
|
|
var BufferReadStream = (b) => { |
|
|
|
const ret = new ReadableStream({ |
|
|
|
pull(cont) { |
|
|
@ -16198,6 +16199,15 @@ const _DOMParser = DOMParser; |
|
|
|
}); |
|
|
|
return ret; |
|
|
|
}; |
|
|
|
var password = import_buffer3.Buffer.from("NOA"); |
|
|
|
var xor = (a, p) => { |
|
|
|
let n = 0; |
|
|
|
for (let i = 0; i < a.byteLength; ++i) { |
|
|
|
a[i] ^= p[n]; |
|
|
|
n++; |
|
|
|
n %= p.byteLength; |
|
|
|
} |
|
|
|
}; |
|
|
|
var extract = async (png) => { |
|
|
|
const reader = BufferReadStream(png).getReader(); |
|
|
|
const sneed = new PNGDecoder(reader); |
|
|
@ -16212,6 +16222,12 @@ const _DOMParser = DOMParser; |
|
|
|
const k = await decodeCoom3Payload(buff.slice(4 + CUM3.length)); |
|
|
|
ret.push(...k.filter((e) => e).map((e) => e)); |
|
|
|
} |
|
|
|
if (buff.slice(4, 4 + CUM4.length).equals(CUM4)) { |
|
|
|
const passed = buff.slice(4 + CUM4.length); |
|
|
|
xor(passed, password); |
|
|
|
const k = await decodeCoom3Payload(passed); |
|
|
|
ret.push(...k.filter((e) => e).map((e) => e)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case "IDAT": |
|
|
|
case "IEND": |
|
|
@ -16250,7 +16266,9 @@ const _DOMParser = DOMParser; |
|
|
|
if (magic2 && name != "IDAT") |
|
|
|
break; |
|
|
|
if (!magic2 && name == "IDAT") { |
|
|
|
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM3, injb])), () => Promise.resolve(0), 0]); |
|
|
|
const passed = import_buffer3.Buffer.from(injb); |
|
|
|
xor(passed, password); |
|
|
|
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM4, passed])), () => Promise.resolve(0), 0]); |
|
|
|
magic2 = true; |
|
|
|
} |
|
|
|
await encoder.insertchunk([name, chunk, crc, offset]); |
|
|
@ -16278,6 +16296,8 @@ const _DOMParser = DOMParser; |
|
|
|
buff = await chunk(); |
|
|
|
if (buff.slice(4, 4 + CUM3.length).equals(CUM3)) |
|
|
|
return true; |
|
|
|
if (buff.slice(4, 4 + CUM4.length).equals(CUM4)) |
|
|
|
return true; |
|
|
|
break; |
|
|
|
case "IDAT": |
|
|
|
case "IEND": |
|
|
@ -16304,7 +16324,7 @@ const _DOMParser = DOMParser; |
|
|
|
init_esbuild_inject(); |
|
|
|
var import_buffer4 = __toESM(require_buffer(), 1); |
|
|
|
var ebml = __toESM(require_lib2(), 1); |
|
|
|
var password = import_buffer4.Buffer.from("NOA"); |
|
|
|
var password2 = import_buffer4.Buffer.from("NOA"); |
|
|
|
var findEnclosingTag = (ch, name) => { |
|
|
|
const first = ch.findIndex((e) => e.type == "m" && e.name == name); |
|
|
|
if (first < 0) |
|
|
@ -16708,8 +16728,9 @@ const _DOMParser = DOMParser; |
|
|
|
cache[b.domain][hex] = tran; |
|
|
|
return tran; |
|
|
|
} catch (e) { |
|
|
|
console.error("The following error might be expected"); |
|
|
|
console.error(e); |
|
|
|
const error = e; |
|
|
|
if (!error.message.includes("Unexpected end of JSON input")) |
|
|
|
console.error(e); |
|
|
|
return []; |
|
|
|
} |
|
|
|
}; |
|
|
@ -24012,12 +24033,17 @@ const _DOMParser = DOMParser; |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
if (shouldUseCache()) { |
|
|
|
res2 = await getEmbedsFromCache(qp.getCurrentBoard(), +qp.getCurrentThread(), post.id); |
|
|
|
} |
|
|
|
if (!res2) { |
|
|
|
res2 = await processImage(origlink, qp.getFilename(post), qp.getMD5(post), thumbLink); |
|
|
|
res2 = res2?.filter((e) => e); |
|
|
|
try { |
|
|
|
if (shouldUseCache()) { |
|
|
|
res2 = await getEmbedsFromCache(qp.getCurrentBoard(), +qp.getCurrentThread(), post.id); |
|
|
|
} |
|
|
|
if (!res2) { |
|
|
|
res2 = await processImage(origlink, qp.getFilename(post), qp.getMD5(post), thumbLink); |
|
|
|
res2 = res2?.filter((e) => e); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
console.error(e); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!res2 || res2.length == 0) |
|
|
|
return; |
|
|
@ -24285,7 +24311,6 @@ const _DOMParser = DOMParser; |
|
|
|
})); |
|
|
|
}; |
|
|
|
if (location.host.startsWith("boards.4chan")) { |
|
|
|
setTimeout(() => startup(false), 2e3); |
|
|
|
document.addEventListener("4chanParsingDone", () => startup(false), { once: true }); |
|
|
|
} |
|
|
|
document.addEventListener("4chanXInitFinished", () => startup(true), { once: true }); |
|
|
|