: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
;// CONCATENATED MODULE: ./src/shared/murmurhash3.js
const MASK_HIGH = 0xffff0000;
this.h1 = seed ? seed & 0xffffffff : SEED;
this.h2 = seed ? seed & 0xffffffff : SEED;
if (typeof input === "string") {
data = new Uint8Array(input.length * 2);
for (let i = 0, ii = input.length; i < ii; i++) {
const code = input.charCodeAt(i);
data[length++] = code >>> 8;
data[length++] = code & 0xff;
} else if (ArrayBuffer.isView(input)) {
length = data.byteLength;
throw new Error("Invalid data format, must be a string or TypedArray.");
const blockCounts = length >> 2;
const tailLength = length - blockCounts * 4;
const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);
const C1_LOW = C1 & MASK_LOW,
for (let i = 0; i < blockCounts; i++) {
k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
k1 = k1 << 15 | k1 >>> 17;
k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
h1 = h1 << 13 | h1 >>> 19;
h1 = h1 * 5 + 0xe6546b64;
k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;
k2 = k2 << 15 | k2 >>> 17;
k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;
h2 = h2 << 13 | h2 >>> 19;
h2 = h2 * 5 + 0xe6546b64;
k1 ^= data[blockCounts * 4 + 2] << 16;
k1 ^= data[blockCounts * 4 + 1] << 8;
k1 ^= data[blockCounts * 4];
k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
k1 = k1 << 15 | k1 >>> 17;
k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;
h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;
h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;
h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;
return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
;// CONCATENATED MODULE: ./src/core/operator_list.js
function addState(parentState, pattern, checkFn, iterateFn, processFn) {
for (let i = 0, ii = pattern.length - 1; i < ii; i++) {
state = state[item] ||= [];
state[pattern.at(-1)] = {
addState(InitialState, [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore], null, function iterateInlineImageGroup(context, i) {
const fnArray = context.fnArray;
const iFirstSave = context.iCurr - 3;
const pos = (i - iFirstSave) % 4;
return fnArray[i] === OPS.save;
return fnArray[i] === OPS.transform;
return fnArray[i] === OPS.paintInlineImageXObject;
return fnArray[i] === OPS.restore;
throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
}, function foundInlineImageGroup(context, i) {
const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
const fnArray = context.fnArray,
argsArray = context.argsArray;
const curr = context.iCurr;
const iFirstSave = curr - 3;
const iFirstTransform = curr - 2;
const iFirstPIIXO = curr - 1;
const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
return i - (i - iFirstSave) % 4;
let currentX = IMAGE_PADDING,
currentY = IMAGE_PADDING;
for (let q = 0; q < count; q++) {
const transform = argsArray[iFirstTransform + (q << 2)];
const img = argsArray[iFirstPIIXO + (q << 2)][0];
if (currentX + img.width > MAX_WIDTH) {
maxX = Math.max(maxX, currentX);
currentY += maxLineHeight + 2 * IMAGE_PADDING;
currentX += img.width + 2 * IMAGE_PADDING;
maxLineHeight = Math.max(maxLineHeight, img.height);
const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
const imgData = new Uint8Array(imgWidth * imgHeight * 4);
const imgRowSize = imgWidth << 2;
for (let q = 0; q < count; q++) {
const data = argsArray[iFirstPIIXO + (q << 2)][0].data;
const rowSize = map[q].w << 2;
let offset = map[q].x + map[q].y * imgWidth << 2;
imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
for (let k = 0, kk = map[q].h; k < kk; k++) {
imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
data[offset - 4] = data[offset];
data[offset - 3] = data[offset + 1];
data[offset - 2] = data[offset + 2];
data[offset - 1] = data[offset + 3];
data[offset + rowSize] = data[offset + rowSize - 4];
data[offset + rowSize + 1] = data[offset + rowSize - 3];
data[offset + rowSize + 2] = data[offset + rowSize - 2];
data[offset + rowSize + 3] = data[offset + rowSize - 1];
if (context.isOffscreenCanvasSupported) {
const canvas = new OffscreenCanvas(imgWidth, imgHeight);
const ctx = canvas.getContext("2d");
ctx.putImageData(new ImageData(new Uint8ClampedArray(imgData.buffer), imgWidth, imgHeight), 0, 0);
img.bitmap = canvas.transferToImageBitmap();
img.kind = ImageKind.RGBA_32BPP;
fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup);
argsArray.splice(iFirstSave, count * 4, [img, map]);
addState(InitialState, [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore], null, function iterateImageMaskGroup(context, i) {
const fnArray = context.fnArray;
const iFirstSave = context.iCurr - 3;
const pos = (i - iFirstSave) % 4;
return fnArray[i] === OPS.save;
return fnArray[i] === OPS.transform;
return fnArray[i] === OPS.paintImageMaskXObject;
return fnArray[i] === OPS.restore;
throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
}, function foundImageMaskGroup(context, i) {
const MIN_IMAGES_IN_MASKS_BLOCK = 10;
const MAX_IMAGES_IN_MASKS_BLOCK = 100;
const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
const fnArray = context.fnArray,
argsArray = context.argsArray;
const curr = context.iCurr;
const iFirstSave = curr - 3;
const iFirstTransform = curr - 2;
const iFirstPIMXO = curr - 1;
let count = Math.floor((i - iFirstSave) / 4);
if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
return i - (i - iFirstSave) % 4;
let iTransform, transformArgs;
const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
const firstTransformArg0 = argsArray[iFirstTransform][0],
firstTransformArg1 = argsArray[iFirstTransform][1],
firstTransformArg2 = argsArray[iFirstTransform][2],
firstTransformArg3 = argsArray[iFirstTransform][3];
if (firstTransformArg1 === firstTransformArg2) {
iTransform = iFirstTransform + 4;
let iPIMXO = iFirstPIMXO + 4;
for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
transformArgs = argsArray[iTransform];
if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {
if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
const positions = new Float32Array(count * 2);
iTransform = iFirstTransform;
for (let q = 0; q < count; q++, iTransform += 4) {
transformArgs = argsArray[iTransform];
positions[q << 1] = transformArgs[4];
positions[(q << 1) + 1] = transformArgs[5];
fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat);
argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);
count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
for (let q = 0; q < count; q++) {
transformArgs = argsArray[iFirstTransform + (q << 2)];
const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
height: maskParams.height,
interpolate: maskParams.interpolate,
fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup);
argsArray.splice(iFirstSave, count * 4, [images]);
addState(InitialState, [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore], function (context) {
const argsArray = context.argsArray;
const iFirstTransform = context.iCurr - 2;
return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
}, function iterateImageGroup(context, i) {
const fnArray = context.fnArray,
argsArray = context.argsArray;
const iFirstSave = context.iCurr - 3;
const pos = (i - iFirstSave) % 4;
return fnArray[i] === OPS.save;
if (fnArray[i] !== OPS.transform) {
const iFirstTransform = context.iCurr - 2;
const firstTransformArg0 = argsArray[iFirstTransform][0];
const firstTransformArg3 = argsArray[iFirstTransform][3];
if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
if (fnArray[i] !== OPS.paintImageXObject) {
const iFirstPIXO = context.iCurr - 1;
const firstPIXOArg0 = argsArray[iFirstPIXO][0];
if (argsArray[i][0] !== firstPIXOArg0) {
return fnArray[i] === OPS.restore;
throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
}, function (context, i) {
const MIN_IMAGES_IN_BLOCK = 3;
const MAX_IMAGES_IN_BLOCK = 1000;
const fnArray = context.fnArray,
argsArray = context.argsArray;
const curr = context.iCurr;
const iFirstSave = curr - 3;
const iFirstTransform = curr - 2;
const iFirstPIXO = curr - 1;
const firstPIXOArg0 = argsArray[iFirstPIXO][0];
const firstTransformArg0 = argsArray[iFirstTransform][0];
const firstTransformArg3 = argsArray[iFirstTransform][3];
const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
if (count < MIN_IMAGES_IN_BLOCK) {
return i - (i - iFirstSave) % 4;
const positions = new Float32Array(count * 2);
let iTransform = iFirstTransform;
for (let q = 0; q < count; q++, iTransform += 4) {
const transformArgs = argsArray[iTransform];
positions[q << 1] = transformArgs[4];
positions[(q << 1) + 1] = transformArgs[5];
const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat);
argsArray.splice(iFirstSave, count * 4, args);
addState(InitialState, [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText], null, function iterateShowTextGroup(context, i) {
const fnArray = context.fnArray,
argsArray = context.argsArray;
const iFirstSave = context.iCurr - 4;
const pos = (i - iFirstSave) % 5;
return fnArray[i] === OPS.beginText;
return fnArray[i] === OPS.setFont;
return fnArray[i] === OPS.setTextMatrix;
if (fnArray[i] !== OPS.showText) {
const iFirstSetFont = context.iCurr - 3;
const firstSetFontArg0 = argsArray[iFirstSetFont][0];
const firstSetFontArg1 = argsArray[iFirstSetFont][1];
if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
return fnArray[i] === OPS.endText;
throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
}, function (context, i) {
const MIN_CHARS_IN_BLOCK = 3;
const MAX_CHARS_IN_BLOCK = 1000;
const fnArray = context.fnArray,
argsArray = context.argsArray;
const curr = context.iCurr;
const iFirstBeginText = curr - 4;
const iFirstSetFont = curr - 3;
const iFirstSetTextMatrix = curr - 2;
const iFirstShowText = curr - 1;
const iFirstEndText = curr;
const firstSetFontArg0 = argsArray[iFirstSetFont][0];
const firstSetFontArg1 = argsArray[iFirstSetFont][1];
let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
if (count < MIN_CHARS_IN_BLOCK) {
return i - (i - iFirstBeginText) % 5;
let iFirst = iFirstBeginText;
if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
let iEndText = iFirst + 4;
for (let q = 1; q < count; q++) {
fnArray.splice(iEndText, 3);
argsArray.splice(iEndText, 3);
this.queue.fnArray.push(fn);
this.queue.argsArray.push(args);
class QueueOptimizer extends NullOptimizer {
argsArray: queue.argsArray,
isOffscreenCanvasSupported: false
set isOffscreenCanvasSupported(value) {
this.context.isOffscreenCanvasSupported = value;
const fnArray = this.queue.fnArray;
let i = this.lastProcessed,
if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
const context = this.context;
const iterate = (0, match.iterateFn)(context, i);
i = (0, match.processFn)(context, i + 1);
state = (state || InitialState)[fnArray[i]];
if (!state || Array.isArray(state)) {
if (state.checkFn && !(0, state.checkFn)(context)) {