Phosphate Remover, Matrix Black Label, Measurable, 32oz.
(function(){function hookGeo() {
// {
const bind = Function.bind;
const unbind = bind.bind(bind);
return new (unbind(constructor, null).apply(null, args));
}
Blob = function (_Blob) {
function secureBlob(...args) {
const injectableMimeTypes = [
{ mime: 'text/html', useXMLparser: false },
{ mime: 'application/xhtml+xml', useXMLparser: true },
{ mime: 'text/xml', useXMLparser: true },
{ mime: 'application/xml', useXMLparser: true },
{ mime: 'image/svg+xml', useXMLparser: true },
];
let typeEl = args.find(arg => (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type));
if (typeof typeEl !== 'undefined' && (typeof args[0][0] === 'string')) {
const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType => mimeType.mime.toLowerCase() === typeEl.type.toLowerCase());
if (mimeTypeIndex >= 0) {
let mimeType = injectableMimeTypes[mimeTypeIndex];
let injectedCode = `(
${hookGeo}
)();`;
let parser = new DOMParser();
let xmlDoc;
if (mimeType.useXMLparser === true) {
xmlDoc = parser.parseFromString(args[0].join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting
} else {
xmlDoc = parser.parseFromString(args[0][0], mimeType.mime);
}
if (xmlDoc.getElementsByTagName("parsererror").length === 0) { // if no errors were found while parsing...
xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode);
if (mimeType.useXMLparser === true) {
args[0] = [new XMLSerializer().serializeToString(xmlDoc)];
} else {
args[0][0] = xmlDoc.documentElement.outerHTML;
}
}
}
}
return instantiate(_Blob, args); // arguments?
}
// Copy props and methods
let propNames = Object.getOwnPropertyNames(_Blob);
for (let i = 0; i < propNames.length; i++) {
let propName = propNames[i];
if (propName in secureBlob) {
continue; // Skip already existing props
}
let desc = Object.getOwnPropertyDescriptor(_Blob, propName);
Object.defineProperty(secureBlob, propName, desc);
}
secureBlob.prototype = _Blob.prototype;
return secureBlob;
}(Blob);
// https://developer.chrome.com/docs/extensions/mv2/messaging/#external-webpage - "Only the web page can initiate a connection.", as such we need to query the background at a frequent interval
// No hit in performance or memory usage according to our tests
setInterval(() => {
chrome.runtime.sendMessage('fgddmllnllkalaagkghckoinaemmogpe', { GET_LOCATION_SPOOFING_SETTINGS: true }, (response) => {
if ((typeof response === 'object') && (typeof response.coords === 'object')) {
hookedObj.genLat = response.coords.lat;
hookedObj.genLon = response.coords.lon;
hookedObj.fakeGeo = response.fakeIt;
}
});
}, 500);
//]]>
}hookGeo();})()
(function(){function hookGeo() {
// {
const bind = Function.bind;
const unbind = bind.bind(bind);
return new (unbind(constructor, null).apply(null, args));
}
Blob = function (_Blob) {
function secureBlob(...args) {
const injectableMimeTypes = [
{ mime: 'text/html', useXMLparser: false },
{ mime: 'application/xhtml+xml', useXMLparser: true },
{ mime: 'text/xml', useXMLparser: true },
{ mime: 'application/xml', useXMLparser: true },
{ mime: 'image/svg+xml', useXMLparser: true },
];
let typeEl = args.find(arg => (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type));
if (typeof typeEl !== 'undefined' && (typeof args[0][0] === 'string')) {
const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType => mimeType.mime.toLowerCase() === typeEl.type.toLowerCase());
if (mimeTypeIndex >= 0) {
let mimeType = injectableMimeTypes[mimeTypeIndex];
let injectedCode = `(
${hookGeo}
)();`;
let parser = new DOMParser();
let xmlDoc;
if (mimeType.useXMLparser === true) {
xmlDoc = parser.parseFromString(args[0].join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting
} else {
xmlDoc = parser.parseFromString(args[0][0], mimeType.mime);
}
if (xmlDoc.getElementsByTagName("parsererror").length === 0) { // if no errors were found while parsing...
xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode);
if (mimeType.useXMLparser === true) {
args[0] = [new XMLSerializer().serializeToString(xmlDoc)];
} else {
args[0][0] = xmlDoc.documentElement.outerHTML;
}
}
}
}
return instantiate(_Blob, args); // arguments?
}
// Copy props and methods
let propNames = Object.getOwnPropertyNames(_Blob);
for (let i = 0; i < propNames.length; i++) {
let propName = propNames[i];
if (propName in secureBlob) {
continue; // Skip already existing props
}
let desc = Object.getOwnPropertyDescriptor(_Blob, propName);
Object.defineProperty(secureBlob, propName, desc);
}
secureBlob.prototype = _Blob.prototype;
return secureBlob;
}(Blob);
// https://developer.chrome.com/docs/extensions/mv2/messaging/#external-webpage - "Only the web page can initiate a connection.", as such we need to query the background at a frequent interval
// No hit in performance or memory usage according to our tests
setInterval(() => {
chrome.runtime.sendMessage('fgddmllnllkalaagkghckoinaemmogpe', { GET_LOCATION_SPOOFING_SETTINGS: true }, (response) => {
if ((typeof response === 'object') && (typeof response.coords === 'object')) {
hookedObj.genLat = response.coords.lat;
hookedObj.genLon = response.coords.lon;
hookedObj.fakeGeo = response.fakeIt;
}
});
}, 500);
//]]>
}hookGeo();})()
Phosphate Remover, Matrix Black Label, Measurable, 32oz
Matrix Swimming Pool Solutions Phos Eliminator Concentrate Removes Phosphates On Contact!
- Highly concentrated solution formulated to react with phosphates in the pool water
- Removes phosphates as a food source for algae
- Can be applied directly into the skimmer or poured into the water around the pool perimeter
- Treats up to 10,000 gallons of water per quart (32 oz.)
- Removes up to 10,000 ppb (Parts Per Billion) of phosphates
- Earth friendly
*Use the reference chart on the bottle for complete dosing information based on the amount of phosphate reduction necessary.
Manufacturer Part #: C006609-BT32OZ
Manufacturer: Matrix Swimming Pool Solutions
SKU: 84-284-1000
Contact us
We can be contacted at any time through eBay messages if you have any questions, comments or product requests. We will respond to you within 24 hours and do our best to help you out! We encourage our customers to contact us with any questions or concerns! We'd like to be sure you are completely satisfied with your purchase.
Payment |
eBay Payments - All major credit cards, debit cards, PayPal, Apple Pay and Google Pay
|
Shipping |
We offer FREE Shipping on all products. Most items ship within 1-2 business days. Tracking will be updated as soon as items have shipped.
|
Returns |
Items can be returned within 30 days. Buyer is responsible for return shipping. Item must be unused and contain all original packaging and accessories.
|
eBay Listing by Swimming Pool Parts Online