Last active
May 13, 2016 13:38
-
-
Save fraszczakszymon/9dd6fb6137b6202de44e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* LEGAL NOTICE: COPYRIGHT 2015 THE RUBICON PROJECT, INC. ALL RIGHTS RESERVED. THIS CODE CONTAINS TRADE SECRETS OR OTHERWISE CONFIDENTIAL AND/OR PROPRIETARY INFORMATION THAT IS THE EXCLUSIVE INTELLECTUAL PROPERTY OF THE RUBICON PROJECT, INC. AND IS PROTECTED BY COPYRIGHT, TRADE SECRET AND/OR OTHER STATE AND FEDERAL LAW. SEE http://bit.ly/1g7QAOO FOR FULL TERMS AND CONDITIONS. */ ! function a(b, c, d) { | |
function e(g, h) { | |
if (!c[g]) { | |
if (!b[g]) { | |
var i = "function" == typeof require && require; | |
if (!h && i) return i(g, !0); | |
if (f) return f(g, !0); | |
var j = new Error("Cannot find module '" + g + "'"); | |
throw j.code = "MODULE_NOT_FOUND", j | |
} | |
var k = c[g] = { | |
exports: {} | |
}; | |
b[g][0].call(k.exports, function(a) { | |
var c = b[g][1][a]; | |
return e(c ? c : a) | |
}, k, k.exports, a, b, c, d) | |
} | |
return c[g].exports | |
} | |
for (var f = "function" == typeof require && require, g = 0; g < d.length; g++) e(d[g]); | |
return e | |
}({ | |
1: [function(a, b, c) { | |
! function(a, c) { | |
"use strict"; | |
"object" == typeof b && "object" == typeof b.exports ? b.exports = c() : "function" == typeof define && define.amd ? define([], c) : a.objectPath = c() | |
}(this, function() { | |
"use strict"; | |
function a(a) { | |
if (!a) return !0; | |
if (l(a) && 0 === a.length) return !0; | |
if (!d(a)) { | |
for (var b in a) | |
if (k.call(a, b)) return !1; | |
return !0 | |
} | |
return !1 | |
} | |
function b(a) { | |
return j.call(a) | |
} | |
function c(a) { | |
return "number" == typeof a || "[object Number]" === b(a) | |
} | |
function d(a) { | |
return "string" == typeof a || "[object String]" === b(a) | |
} | |
function e(a) { | |
return "object" == typeof a && "[object Object]" === b(a) | |
} | |
function f(a) { | |
return "boolean" == typeof a || "[object Boolean]" === b(a) | |
} | |
function g(a) { | |
var b = parseInt(a); | |
return b.toString() === a ? b : a | |
} | |
function h(b, e, f, i) { | |
if (c(e) && (e = [e]), a(e)) return b; | |
if (d(e)) return h(b, e.split(".").map(g), f, i); | |
var j = e[0]; | |
if (1 === e.length) { | |
var k = b[j]; | |
return void 0 !== k && i || (b[j] = f), k | |
} | |
return void 0 === b[j] && (c(e[1]) ? b[j] = [] : b[j] = {}), h(b[j], e.slice(1), f, i) | |
} | |
function i(b, e) { | |
if (c(e) && (e = [e]), !a(b)) { | |
if (a(e)) return b; | |
if (d(e)) return i(b, e.split(".")); | |
var f = g(e[0]), | |
h = b[f]; | |
if (1 === e.length) void 0 !== h && (l(b) ? b.splice(f, 1) : delete b[f]); | |
else if (void 0 !== b[f]) return i(b[f], e.slice(1)); | |
return b | |
} | |
} | |
var j = Object.prototype.toString, | |
k = Object.prototype.hasOwnProperty, | |
l = Array.isArray || function(a) { | |
return "[object Array]" === j.call(a) | |
}, | |
m = function(a) { | |
return Object.keys(m).reduce(function(b, c) { | |
return "function" == typeof m[c] && (b[c] = m[c].bind(m, a)), b | |
}, {}) | |
}; | |
return m.has = function(b, f) { | |
if (a(b)) return !1; | |
if (c(f) ? f = [f] : d(f) && (f = f.split(".")), a(f) || 0 === f.length) return !1; | |
for (var g = 0; g < f.length; g++) { | |
var h = f[g]; | |
if (!e(b) && !l(b) || !k.call(b, h)) return !1; | |
b = b[h] | |
} | |
return !0 | |
}, m.ensureExists = function(a, b, c) { | |
return h(a, b, c, !0) | |
}, m.set = function(a, b, c, d) { | |
return h(a, b, c, d) | |
}, m.insert = function(a, b, c, d) { | |
var e = m.get(a, b); | |
d = ~~d, l(e) || (e = [], m.set(a, b, e)), e.splice(d, 0, c) | |
}, m.empty = function(b, g) { | |
if (a(g)) return b; | |
if (!a(b)) { | |
var h, i; | |
if (!(h = m.get(b, g))) return b; | |
if (d(h)) return m.set(b, g, ""); | |
if (f(h)) return m.set(b, g, !1); | |
if (c(h)) return m.set(b, g, 0); | |
if (l(h)) h.length = 0; | |
else { | |
if (!e(h)) return m.set(b, g, null); | |
for (i in h) k.call(h, i) && delete h[i] | |
} | |
} | |
}, m.push = function(a, b) { | |
var c = m.get(a, b); | |
l(c) || (c = [], m.set(a, b, c)), c.push.apply(c, Array.prototype.slice.call(arguments, 2)) | |
}, m.coalesce = function(a, b, c) { | |
for (var d, e = 0, f = b.length; f > e; e++) | |
if (void 0 !== (d = m.get(a, b[e]))) return d; | |
return c | |
}, m.get = function(b, e, f) { | |
if (c(e) && (e = [e]), a(e)) return b; | |
if (a(b)) return f; | |
if (d(e)) return m.get(b, e.split("."), f); | |
var h = g(e[0]); | |
return 1 === e.length ? void 0 === b[h] ? f : b[h] : m.get(b[h], e.slice(1), f) | |
}, m.del = function(a, b) { | |
return i(a, b) | |
}, m | |
}) | |
}, {}], | |
2: [function(a, b, c) { | |
var d = a(19), | |
e = a(14); | |
b.exports.rubicontag = new e, void 0 !== d && ("object" == typeof d.rubicontag && "object" == typeof d.rubicontag.cmd && "[object Array]" !== Object.prototype.toString.call(d.rubicontag.cmd) || (d.rubicontag && (d.origrubicontag = d.rubicontag), d.rubicontag = b.exports.rubicontag)) | |
}, { | |
14: 14, | |
19: 19 | |
}], | |
3: [function(a, b, c) { | |
"use strict"; | |
var d = a(20), | |
e = a(12), | |
f = a(18), | |
g = function() { | |
var a, b = this, | |
c = new d; | |
b.requestTime = 0; | |
var g = null, | |
h = null, | |
i = null, | |
j = { | |
url: "", | |
type: "post", | |
cache: !1, | |
async: !0, | |
dataType: "json", | |
data: null, | |
timeout: 0, | |
jsonpCallback: "", | |
jsonpCallbackParam: "" | |
}; | |
b.ajax = function(d) { | |
if (j = f.mergeObjects(j, d, !0), "jsonp" === j.dataType.toLowerCase()) { | |
if (j.type = "GET", !j.jsonpCallback) { | |
if (!j.jsonpCallbackParam) return f.error("cannot create a jsonp request with no callback or callbackParam specified:", j), b; | |
var h = "rp_callback_" + parseInt(1e8 * Math.random(), 10); | |
j.data = j.data || {}, j.data[j.jsonpCallbackParam] = h, j.jsonpCallback = h | |
} | |
c = new e(j.jsonpCallback) | |
} | |
var i = []; | |
if ("get" === j.type.toLowerCase() && j.data) | |
for (var k in j.data) j.data.hasOwnProperty(k) && i.push(encodeURIComponent(k) + "=" + encodeURIComponent(j.data[k])); | |
return j.cache !== !0 && "get" === j.type.toLowerCase() && i.push(1e18 * Math.random()), i.length > 0 && (j.url += j.url.indexOf("?") > 0 ? "&" : "?", j.url += i.join("&")), c.open(j.type, j.url, j.async), c.withCredentials = !0, j.timeout && j.async && (c.timeout = j.timeout), "post" === j.type.toLowerCase() && c.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), c.onreadystatechange = g, a = (new Date).getTime(), c.send("get" !== j.type.toLowerCase() ? j.data : null), b | |
}, g = function() { | |
if (4 === c.readyState) | |
if (b.requestTime = (new Date).getTime() - a, 200 === c.status) | |
for (; h.length;) h.shift()(c); | |
else | |
for (; i.length;) i.shift()(c) | |
}, h = [], i = [], b.done = function(a) { | |
return c && 4 === c.readyState && 200 === c.status ? a(c) : h.push(a), b | |
}, b.fail = function(a) { | |
return c && 4 === c.readyState && 200 !== c.status ? a(c) : i.push(a), b | |
}, b.always = function(a) { | |
return c && 4 === c.readyState ? a(c) : (h.push(a), i.push(a)), b | |
}, b.abort = function() { | |
return c.abort(), b | |
} | |
}; | |
b.exports = g | |
}, { | |
12: 12, | |
18: 18, | |
20: 20 | |
}], | |
4: [function(a, b, c) { | |
"use strict"; | |
var d = a(7), | |
e = a(18), | |
f = a(3), | |
g = function() { | |
var a = this, | |
b = !1, | |
c = null, | |
g = null, | |
h = e.browserSupportsXHR(), | |
i = { | |
nAccountId: null, | |
oBatching: { | |
bEnabled: !0, | |
nBatchSize: 100, | |
nBatchWindow: 3e3 | |
}, | |
sHost: "stats.aws.rubiconproject.com/stats/", | |
sBucket: "fastlane" | |
}, | |
j = [], | |
k = null, | |
l = function(b) { | |
var c = b[0]; | |
i.nAccountId = c.accountId; | |
var d = c && c.configuration && c.configuration.analytics ? c.configuration.analytics : {}; | |
return i.sBucket = d.bucket ? d.bucket : i.sBucket, i.sHost = d.host ? d.host : i.sHost, i.sHost.match(/^http(s)?:/) || (i.sHost = e.getProtocol() + i.sHost), d.batching && (i.oBatching.bEnabled = "boolean" == typeof d.batching.enabled ? d.batching.enabled : i.oBatching.bEnabled, i.oBatching.nBatchSize = isNaN(d.batching.batchSize) ? i.oBatching.nBatchSize : d.batching.batchSize, i.oBatching.nBatchWindow = isNaN(d.batching.batchWindow) ? i.oBatching.nBatchWindow : d.batching.batchWindow), e.addUserDistractionEventListener(function() { | |
a.flushEvents() | |
}), a | |
}; | |
a.publish = function(e, f) { | |
return b || (b = !0, l(d.getConfigs())), i.oBatching.bEnabled && h ? c(e, f) : g([{ | |
sEventCode: e, | |
sLine: f | |
}]), a | |
}, c = function(b, c) { | |
j.push({ | |
sEventCode: b, | |
sLine: c | |
}), j.length >= i.oBatching.nBatchSize ? a.flushEvents() : null === k && (k = setTimeout(function() { | |
a.flushEvents() | |
}, i.oBatching.nBatchWindow)) | |
}, g = function(a) { | |
var b = [], | |
c = 0; | |
if (h) { | |
for (c = 0; c < a.length; c++) b.push(encodeURIComponent(i.sBucket + "/" + a[c].sLine)); | |
var d = b.join("|"), | |
e = new f; | |
e.ajax({ | |
url: i.sHost, | |
type: "POST", | |
async: !0, | |
data: d | |
}) | |
} else | |
for (c = 0; c < a.length; c++) { | |
var g = i.sHost; | |
g += encodeURIComponent(i.sBucket) + "/"; | |
var j = encodeURIComponent(a[c].sLine); | |
j = j.replace(/%2F/g, "/"), (new Image).src = g + j + "?rnd=" + Math.random() | |
} | |
}, a.flushEvents = function() { | |
var a = j; | |
j = [], null !== k && (clearTimeout(k), k = null), a.length && g(a) | |
} | |
}; | |
b.exports = new g | |
}, { | |
18: 18, | |
3: 3, | |
7: 7 | |
}], | |
5: [function(a, b, c) { | |
"use strict"; | |
function d(a, b, c) { | |
var d = this, | |
f = [], | |
g = !1, | |
h = function() { | |
g = !1, a.blur(), window.focus() | |
}, | |
i = function() { | |
g = !0 | |
}, | |
j = function() { | |
a.onmouseover = function() { | |
i() | |
}, a.onmouseout = function() { | |
h() | |
}, "undefined" != typeof window.attachEvent ? window.attachEvent("onblur", function() { | |
d.firePixels() | |
}) : "undefined" != typeof window.addEventListener && window.addEventListener("blur", function() { | |
d.firePixels() | |
}, !1) | |
}; | |
d.init = function() { | |
var a = !1; | |
e.isArray(b) || (b = [b]), f = []; | |
for (var c = 0; c < b.length; c++) a = d.addTrackingUrl(b[c]), a || e.debug("Click tracker URL is not valid and could not be added", b[c]); | |
j() | |
}, d.addTrackingUrl = function(a) { | |
return e.isUrl(a) ? Boolean(f.push(a)) : !1 | |
}, d.replaceMacrosInUrl = function(a, b) { | |
var c = {}; | |
if (!e.isArray(a) || !a.length) return []; | |
c.siteId = b.siteId || "", c.zoneId = b.zoneId || "", c.sizeId = b.sizeId || "", c.userId = b.userId || ""; | |
for (var d = 0; d < a.length; d++) "string" == typeof a[d] && e.isUrl(a[d]) && (a[d] = e.replaceMacrosWithinUrl(a[d], b)); | |
return a | |
}, d.firePixels = function() { | |
var a, b; | |
if (g && e.isArray(f) && f.length) { | |
a = d.replaceMacrosInUrl(f, c), e.debug("Tracking click using the following pre-resolved, pre-cleaned URLs", f), e.warn("Tracking click using the following fully-resolved URLs", a); | |
for (var h = 0; h < a.length; h++) b = new window.Image, b.src = a[h]; | |
b = void 0 | |
} | |
}, d.init() | |
} | |
var e = a(18); | |
b.exports = d | |
}, { | |
18: 18 | |
}], | |
6: [function(a, b, c) { | |
"use strict"; | |
var d = (a(19), function() { | |
var a = this; | |
a.push = function(a) { | |
a() | |
} | |
}); | |
b.exports = new d | |
}, { | |
19: 19 | |
}], | |
7: [function(a, b, c) { | |
"use strict"; | |
var d = function() { | |
var b = this, | |
c = [], | |
d = [], | |
e = a(1); | |
b.getConfigs = function() { | |
return c | |
}, b.hasConfig = function() { | |
return c.length > 0 | |
}, b.addConfig = function(a) { | |
c.push(a); | |
for (var b = 0; b < d.length; b++) d[b]() | |
}, b.onLoad = function(a) { | |
"[object Function]" === Object.prototype.toString.call(a) && d.push(a) | |
}, b.getConfigValue = function(a, b, d) { | |
return a >= c.length ? d : e.get(c[a], b, d) | |
} | |
}; | |
b.exports = new d | |
}, { | |
1: 1 | |
}], | |
8: [function(a, b, c) { | |
"use strict"; | |
var d = a(18), | |
e = a(16), | |
f = (a(9), function() { | |
var a = this, | |
b = new e, | |
c = {}, | |
f = {}, | |
g = null; | |
a.setFPI = function(a, b) { | |
d.isArray(b) || (b = [b]), c[a] = b | |
}, a.addFPI = function(a, b) { | |
c.hasOwnProperty(a) && d.isArray(c[a]) || (c[a] = []), d.isArray(b) || (b = [b]); | |
for (var e = 0; e < b.length; e++) { | |
var f = b[e]; | |
d.inArray(f, c[a]) || c[a].push(f) | |
} | |
}, a.getFPI = function() { | |
return g(c) | |
}, a.setFPV = function(a, b) { | |
d.isArray(b) || (b = [b]), f[a] = b | |
}, a.addFPV = function(a, b) { | |
f.hasOwnProperty(a) && d.isArray(f[a]) || (f[a] = []), d.isArray(b) || (b = [b]); | |
for (var c = 0; c < b.length; c++) { | |
var e = b[c]; | |
d.inArray(e, f[a]) || f[a].push(e) | |
} | |
}, a.getFPV = function() { | |
return g(f) | |
}, a.addKW = function(a) { | |
d.isArray(a) || (a = [a]); | |
for (var c = 0; c < a.length; c++) b.add(a[c]) | |
}, a.getKWs = function() { | |
return b.toArray() | |
}, g = function(a) { | |
return d.convertKeyValuePairObjectToArray(a) | |
} | |
}); | |
b.exports = f | |
}, { | |
16: 16, | |
18: 18, | |
9: 9 | |
}], | |
9: [function(a, b, c) { | |
"use strict"; | |
var d = a(7), | |
e = a(4), | |
f = a(18), | |
g = {}, | |
h = {}, | |
i = { | |
LOG_DISABLE: 1 / 0, | |
LOG_ALWAYS: 0, | |
LOG_ERROR: 1, | |
LOG_WARN: 2, | |
LOG_INFO: 3, | |
LOG_DEBUG: 4 | |
}, | |
j = { | |
BAD_EVENT: { | |
sLabel: "badEvent", | |
sAnalyticsPattern: "bad-event/{sEventType}", | |
sLogPattern: "Unknown event triggered: {sEventType}", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_ERROR | |
}, | |
HL_INIT: { | |
sLabel: "init", | |
sAnalyticsPattern: "init/{nAccountId}/{sVersion}/{sIntegration}", | |
sLogPattern: "initialized account: {nAccountId}", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
HL_RUN_CALLED: { | |
sLabel: "runCalled", | |
sAnalyticsPattern: "run-called/{nAccountId}", | |
sLogPattern: "rubicontag.run() function called", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
HL_BAD_TIMEOUT: { | |
sLabel: "badTimeout", | |
sAnalyticsPattern: "badtimeout/{nTimeout}", | |
sLogPattern: "Invalid timeout value: {nTimeout}. Must be at least 300", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_ERROR | |
}, | |
HL_BAD_DEFINE_SLOT: { | |
sLabel: "badDefineSlot", | |
sAnalyticsPattern: "", | |
sLogPattern: "Too few arguments passed to defineSlot. Name: {sSlotName}; sizes list: {aDimensions}; element ID: {sElementId}.", | |
nAnalyticsLevel: i.LOG_WARN, | |
nLogLevel: i.LOG_WARN | |
}, | |
HL_BAD_DEFINE_SLOT_FROM_OBJ: { | |
sLabel: "badDefineSlotFromObj", | |
sAnalyticsPattern: "", | |
sLogPattern: "Incorrect object params passed to defineSlot. SiteId: {nSiteId}; zoneId: {nZoneId}; sizes list: {aSizes}; unique id: {nId}.", | |
nAnalyticsLevel: i.LOG_WARN, | |
nLogLevel: i.LOG_WARN | |
}, | |
SLOT_SIZE_NOT_MAPPED: { | |
sLabel: "slotSizeNotMapped", | |
sAnalyticsPattern: "slot-size-not-mapped/{sDimensions}/{sSlotName}", | |
sLogPattern: "Could not map dimension: {sDimensions} for slot: {sSlotName}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
SLOT_GET_TARGETING: { | |
sLabel: "getTargeting", | |
sAnalyticsPattern: "slot-targeting-get/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{sValue}/{sIntegration}/{sContext}", | |
sLogPattern: "Getting targeting for slot: {sSlotName}. Key: {sKey} Value: {sValue}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_INFO | |
}, | |
HL_CREATIVE_RENDERED: { | |
sLabel: "creativeRenderCalled", | |
sAnalyticsPattern: "render/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{nCpm}/{sAuctionId}/{sIntegration}", | |
sLogPattern: "Creative rendering called for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_DEBUG, | |
oListenerParams: { | |
accountId: "nAccountId", | |
siteId: "nSiteId", | |
zoneId: "nZoneId", | |
sizeId: "nSizeId", | |
slotId: "sSlotName", | |
elementId: "sElementId" | |
} | |
}, | |
HL_CREATIVE_RENDER_SLOT_NOT_FOUND: { | |
sLabel: "creativeRenderSlotNotFound", | |
sAnalyticsPattern: "render-no-slot/{nSizeId}/{sElementId}/{nAccountId}", | |
sLogPattern: "Creative rendering could not find slot for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_ERROR | |
}, | |
HL_CREATIVE_RENDER_CREATIVE_NOT_FOUND: { | |
sLabel: "creativeRenderCreativeNotFound", | |
sAnalyticsPattern: "render-no-creative/{nSizeId}/{sElementId}/{nAccountId}", | |
sLogPattern: "Creative rendering could not find creative for size: {nSizeId}, element: {sElementId}, account: {nAccountId}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_ERROR | |
}, | |
FL_RESPONSE_SUCCESS: { | |
sLabel: "responseSuccess", | |
sAnalyticsPattern: "response/success/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}", | |
sLogPattern: "Auction request finished successfully before timeout {nTimeout} in {nRequestTime} ms, elementId: {sElementId}, sizeId: {nSizeId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_RESPONSE_TIMEOUT: { | |
sLabel: "responseTimeout", | |
sAnalyticsPattern: "response/timeout/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}", | |
sLogPattern: "Auction request finished AFTER timeout {nTimeout} in {nRequestTime} ms, elementId: {sElementId}, sizeId: {nSizeId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_RESPONSE_FAILURE: { | |
sLabel: "responseFailure", | |
sAnalyticsPattern: "response/failure/{nStatusCode}/{sRequestType}/{nTimeout}/{nRequestTime}/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}", | |
sLogPattern: "Auction request failed: {sStatus}, with status code {nStatusCode}, elementId: {sElementId}, sizeId: {nSizeId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_WARN | |
}, | |
FL_RESPONSE_PARSE_ERROR: { | |
sLabel: "responseParseError", | |
sAnalyticsPattern: "parse-error/{sSlotName}/size/{nSizeId}/response/{sRequestData}", | |
sLogPattern: "Error parsing response data: {sRequestData}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_BAD_RESPONSE_STATUS: { | |
sLabel: "badResponseStatus", | |
sAnalyticsPattern: "status/{sStatus}", | |
sLogPattern: "Invalid auction ad: {sStatus} / {sReason}", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_AUCTION_CPM_OVERRIDE: { | |
sLabel: "auctionCpmOverride", | |
sAnalyticsPattern: "cpm-override/{nOriginalCpm}/{nOverrideCpm}", | |
sLogPattern: "Overriding Auction CPM. Original: {nOriginalCpm}. Override: {nOverrideCpm}", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_ERROR | |
}, | |
FL_NO_ADS: { | |
sLabel: "noAds", | |
sAnalyticsPattern: "no-ads/{sSlotName}", | |
sLogPattern: "No ads found for slot: {sSlotName}", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_RESPONSE_UNFIT: { | |
sLabel: "responseUnfit", | |
sAnalyticsPattern: "response-unfit/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sSlotName}/{bResponseTimedOut}/{sIntegration}", | |
sLogPattern: "Response for slot: {sSlotName} using size: {nSizeId}. Did not have any ads associated with it.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_INFO | |
}, | |
FL_TIER_MAPPED: { | |
sLabel: "tierMapped", | |
sAnalyticsPattern: "tier-mapped/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sTier}/{nCpm}/{bResponseTimedOut}/{sIntegration}", | |
sLogPattern: "Tier mapped. Price: {nCpm}. Tier: {sTier}. Slot: {sElementId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_INFO | |
}, | |
FL_TIER_NOT_MAPPED: { | |
sLabel: "tierNotMapped", | |
sAnalyticsPattern: "tier-not-mapped/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{nPrice}/{bResponseTimedOut}/{sIntegration}", | |
sLogPattern: 'Could not map "{nPrice}" to any tier for slot "{sSlotName}".', | |
nAnalyticsLevel: i.LOG_WARN, | |
nLogLevel: i.LOG_DEBUG | |
}, | |
FL_TIER_SPECIFICITY_PRICE: { | |
sLabel: "tierSpecificityPrice", | |
sAnalyticsPattern: "", | |
sLogPattern: "Price matched for tier: {sTierMapping}. Bounds: {nFloor} <= {nAuctionCpm} <= {nCeiling}. Points: {nPoints}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_INFO | |
}, | |
FL_EXCEEDED_REQUESTS_PER_SLOT: { | |
sLabel: "exceededReqPerSlotLimit", | |
sAnalyticsPattern: "exceed-slot-requests/{sSlotName}/limit/{nLimit}", | |
sLogPattern: "Exceeded size limit per slot for slot: {sSlotName}. Limit: {nLimit}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_WARN | |
}, | |
FL_EXCEEDED_REQUESTS_PER_PAGE: { | |
sLabel: "exceededReqPerPageLimit", | |
sAnalyticsPattern: "exceed-page-requests/{nLimit}", | |
sLogPattern: "Exceeded requests-per-page limit: {nLimit}.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_WARN | |
}, | |
FL_USING_JSONP_REQUEST: { | |
sLabel: "usingJsonpRequest", | |
sAnalyticsPattern: "using-jsonp-request/{nAccountId}", | |
sLogPattern: "Using JSONP rather than xhr for auction requests.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_INFO | |
}, | |
FL_CREATIVE_CACHED: { | |
sLabel: "creativeCached", | |
sAnalyticsPattern: "creative-cached/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}", | |
sLogPattern: "Found creative for slot: {sSlotName}, size: {nSizeId}. Skipping auction.", | |
nAnalyticsLevel: i.LOG_DISABLE, | |
nLogLevel: i.LOG_WARN | |
}, | |
FL_SLOT_AUCTION: { | |
sLabel: "slotAuction", | |
sAnalyticsPattern: "slot-auction/{nAccountId}/{nSiteId}/{nZoneId}/{nSizeId}/{sIntegration}", | |
sLogPattern: "Running auction for slot: {sSlotName}, size: {nSizeId}, account: {nAccountId}.", | |
nAnalyticsLevel: i.LOG_ALWAYS, | |
nLogLevel: i.LOG_DEBUG | |
} | |
}, | |
k = !1, | |
l = function() { | |
k || (k = !0, g.nAnalyticsLevel = d.getConfigValue(0, "configuration.analyticsLevel"), g.nAccountId = d.getConfigValue(0, "accountId"), g.nLogLevel = parseInt(f.getUrlCookieParam("rp_loglevel"), 10), isNaN(g.nLogLevel) && (g.nLogLevel = d.getConfigValue(0, "configuration.logLevel", 0))) | |
}, | |
m = function(a, b) { | |
var c = this; | |
l(); | |
var d, k = !1; | |
c.publish = function() { | |
if (!k) { | |
k = !0, j.hasOwnProperty(a) || (b = { | |
sEventType: a | |
}, a = "BAD_EVENT"); | |
var c = j[a]; | |
f.getIntegration() && (b.sIntegration = f.getIntegration()), c.nAnalyticsLevel <= g.nAnalyticsLevel && (d = f.formatString(c.sAnalyticsPattern, b, !0), d = "account/" + g.nAccountId + "/" + d, e.publish(c.sLabel, d)), c.nLogLevel <= g.nLogLevel && (d = f.formatString(c.sLogPattern, b), c.nLogLevel === i.LOG_ERROR ? f.error(d) : c.nLogLevel === i.LOG_WARN ? f.warn(d) : c.nLogLevel === i.LOG_INFO ? f.info(d) : c.nLogLevel === i.LOG_DEBUG && f.debug(d)) | |
} | |
}; | |
var m = function() { | |
var c = h[a]; | |
if (c) { | |
var d = j[a].oListenerParams, | |
e = {}; | |
for (var g in d) d.hasOwnProperty(g) && (e[g] = b[d[g]]); | |
for (var i = 0; i < c.length; i++) try { | |
c[i](e) | |
} catch (k) { | |
f.error(a, "event listener failed:", c[i], k) | |
} | |
} | |
}; | |
m() | |
}; | |
m.factory = function(a, b, c) { | |
var d = new m(a, b); | |
return (arguments.length <= 2 || c) && d.publish(), d | |
}, m.addEventListener = function(a, b) { | |
var c = d.getConfigValue(0, "configuration.exposedEvents", []); | |
return f.inArray(a, c) ? j[a] && j[a].oListenerParams ? f.isFunction(b) ? (h[a] || (h[a] = []), h[a].push(b), !0) : (f.error("Event listener is not a function:", b), !1) : (f.error("Unconfigured event:", a), !1) : (f.error("Unrecognized event:", a), !1) | |
}, b.exports = m | |
}, { | |
18: 18, | |
4: 4, | |
7: 7 | |
}], | |
10: [function(a, b, c) { | |
"use strict"; | |
var d = a(3), | |
e = a(13), | |
f = a(16), | |
g = a(9), | |
h = a(18), | |
i = function() { | |
var b = this, | |
c = null, | |
i = 0, | |
j = 0, | |
k = null, | |
l = a(7), | |
m = a(18), | |
n = a(11), | |
o = [], | |
p = [], | |
q = null, | |
r = null, | |
s = null, | |
t = null, | |
u = null, | |
v = null, | |
w = null, | |
x = 0, | |
y = { | |
nPrice: 10, | |
nDealWildcard: 25, | |
nDealExact: 50, | |
nPrimaryAccount: 100 | |
}, | |
z = !m.browserSupportsXHR(); | |
b.init = function(a) { | |
if (j = a, o = l.getConfigValue(j, "tiers", o), k = l.getConfigValue(j, "accountId"), i = w(o), p = l.getConfigValue(j, "fastlane.optimizedHosts", ["public.szymon.wikia-dev.com/public/rubicon/fastlane.json.php"]), z) | |
for (var b = 0; b < p.length; b++) p[b] += "p" | |
}; | |
var A = function(a, b, c, d) { | |
var e; | |
void 0 === d && (d = !1); | |
try { | |
e = "object" == typeof c ? c : JSON.parse(c) | |
} catch (f) { | |
return g.factory("FL_RESPONSE_PARSE_ERROR", { | |
sSlotName: a.getSlotName(), | |
nSizeId: b, | |
sRequestData: c | |
}), void D(d, a, k, b) | |
} | |
if (!e || !e.ads || e.ads.length < 1 || !e.ads[0]) return g.factory("FL_NO_ADS", { | |
sSlotName: a.getSlotName(), | |
nSizeId: b | |
}), void D(d, a, k, b); | |
if ("ok" !== e.ads[0].status) return g.factory("FL_BAD_RESPONSE_STATUS", { | |
sStatus: e.ads[0].status, | |
sReason: e.ads[0].reason | |
}), void D(d, a, k, b); | |
var j = parseFloat(m.getUrlCookieParam("rp_cpm_override")); | |
j && (g.factory("FL_AUCTION_CPM_OVERRIDE", { | |
nOriginalCpm: e.ads[0].cpm, | |
nOverrideCpm: j | |
}), e.ads[0].cpm = j); | |
var l = e.ads[0].cpm; | |
if (i > l) return h.warn("CPM is below the lowest floor for slot: " + a.getSlotName() + " using size: " + b + "."), void D(d, a, k, b); | |
var n = q(e, o), | |
p = n.nPoints ? n.oTier.mapping : !1; | |
p !== !1 ? (a.storeCreative(e.account_id, e.size_id, e.ads[0], e.ads[0].impression_id, p), g.factory("FL_TIER_MAPPED", { | |
nAccountId: k, | |
sElementId: a.getElementId(), | |
nSiteId: a.getSiteId(k), | |
nZoneId: a.getZoneId(k), | |
bResponseTimedOut: d ? 1 : 0, | |
nSizeId: b, | |
sTier: p, | |
nCpm: l | |
})) : g.factory("FL_TIER_NOT_MAPPED", { | |
sSlotName: a.getSlotName(), | |
sElementId: a.getElementId(), | |
nAccountId: k, | |
nSiteId: a.getSiteId(k), | |
nZoneId: a.getZoneId(k), | |
bResponseTimedOut: d ? 1 : 0, | |
nSizeId: b, | |
nPrice: l | |
}) | |
}; | |
q = function(a, b) { | |
for (var c, d = { | |
nPoints: 0, | |
oTier: {} | |
}, e = 0; e < b.length; e++) c = r(a, b[e]), c > d.nPoints && (d.nPoints = c, d.oTier = b[e]); | |
return d | |
}, r = function(a, b) { | |
var c = 0, | |
d = Math.round(100 * a.ads[0].cpm) / 100; | |
if (b.hasOwnProperty("floor") && b.hasOwnProperty("ceiling")) { | |
if (!(d >= b.floor && d <= b.ceiling)) return 0; | |
c += y.nPrice, h.info("Price matched for tier: " + b.mapping + ". Bounds: " + b.floor + " <= " + d + " <= " + b.ceiling + ". Points: " + c + ".") | |
} | |
if (b.hasDeals) { | |
var e = a.ads[0].deal ? parseInt(a.ads[0].deal, 10) : !1; | |
if (b.hasDeals !== !0 || !e) return h.info("Deal did not match for tier: " + b.mapping + ". Deal ID: " + e + "."), 0; | |
c += y.nDealWildcard, h.info("Deal wildcard matched for tier: " + b.mapping + ". Deal ID: " + e + ". Points: " + c + ".") | |
} else if (b.deals) { | |
var f = a.ads[0].deal ? parseInt(a.ads[0].deal, 10) : !1; | |
if (!m.isArray(b.deals) || !m.inArray(f, b.deals)) return h.info("Deal did not match for tier: " + b.mapping + ". Deal ID: " + f + "."), 0; | |
c += y.nDealExact, h.info("Deal matched for tier: " + b.mapping + ". Deal ID: " + f + ". Points: " + c + ".") | |
} | |
if (b.primaryAccountIds) { | |
var g = l.getConfigValue(0, "accountId"); | |
if (!m.inArray(g, b.primaryAccountIds)) return m.debug("Primary accountId did not match for tier:", b.mapping, ", Primary account: ", g, ", configured: ", b.primaryAccountIds), 0; | |
c += y.nPrimaryAccount, m.debug("Primary accountId match for tier:", b.mapping, ", Primary account: ", g, ", configured: ", b.primaryAccountIds, ", points:", c) | |
} | |
return c | |
}, b.run = function(a, c) { | |
if ("function" != typeof a) throw new Error("first argument to 'run' must be a callback function"); | |
if (!v()) return void a([]); | |
var h = ""; | |
m.getIntegration() || (h = "plain", l.getConfigValue(0, "configuration.exposeRawResponses", !1) && (h = "custom"), m.setIntegration(h)); | |
var i = new e(15e3), | |
j = new f, | |
o = { | |
bTimedout: !1, | |
nTimeout: c.nTimeout || 2e3 | |
}; | |
o.oTimeout = setTimeout(function() { | |
m.info("fastlane:", " timeout after " + o.nTimeout + " ms. " + i.getSuccessfulRequests().length + "/" + i.totalRequests() + " requests finished successfully before timeout"), o.bTimedout = !0, a(j.toArray()) | |
}, o.nTimeout); | |
var p = { | |
url: "", | |
type: "GET", | |
cache: !0, | |
async: !0, | |
dataType: "", | |
data: null | |
}; | |
z && (p.dataType = "jsonp", p.jsonpCallbackParam = "cb", g.factory("FL_USING_JSONP_REQUEST", { | |
nAccountId: k | |
})); | |
for (var q = l.getConfigValue(0, "configuration.maximumRequestsPerPage", 100), r = l.getConfigValue(0, "configuration.maximumSizesPerSlot", 10), w = l.getConfigValue(0, "configuration.cacheResponses", !1), x = m.getNow(), y = C(c.aSlots), A = {}, B = 0; B < y.length; B++) { | |
var D = y[B].slot, | |
E = y[B].size; | |
if (A[D.getElementId()] = A[D.getElementId()] || 0, i.totalRequests() >= q) { | |
g.factory("FL_EXCEEDED_REQUESTS_PER_PAGE", { | |
nLimit: q | |
}); | |
break | |
} | |
if (!(A[D.getElementId()] > r)) | |
if (A[D.getElementId()] !== r) { | |
var F = D.getCreative(k, E); | |
if (null !== F) | |
if (F.nExpires <= x) n.purgeCreative(F.sImpressionId); | |
else if (w) { | |
if (w) { | |
g.factory("FL_CREATIVE_CACHED", { | |
sSlotName: D.getSlotName(), | |
nAccountId: k, | |
nSiteId: D.getSiteId(k), | |
nZoneId: D.getZoneId(k), | |
nSizeId: E | |
}); | |
continue | |
} | |
} else D.purgeCreative(k, E); | |
g.factory("FL_SLOT_AUCTION", { | |
sSlotName: D.getSlotName(), | |
nAccountId: k, | |
nSiteId: D.getSiteId(k), | |
nZoneId: D.getZoneId(k), | |
nSizeId: E | |
}), p.url = u(D, E); | |
var G = new d; | |
i.addRequest(G.ajax(p).done(s(D, E, j, G, o)).fail(t(D, E, G, o))), A[D.getElementId()]++ | |
} else g.factory("FL_EXCEEDED_REQUESTS_PER_SLOT", { | |
sSlotName: D.getSlotName(), | |
nLimit: r | |
}), A[D.getElementId()]++ | |
} | |
i.allRequestsAdded(), m.info("fastlane:", "sent ", i.totalRequests(), " auction request(s)"), i.finished(function() { | |
o.bTimedout || (m.info("fastlane:", i.getSuccessfulRequests().length + "/" + i.totalRequests() + " requests finished successfully before timeout (" + o.nTimeout + " ms)"), clearTimeout(o.oTimeout), a(j.toArray())) | |
}), setTimeout(b.purgeExpiredCreatives, 3e5) | |
}, b.purgeExpiredCreatives = function() { | |
for (var a = m.getNow(), b = n.getCreatives(), c = 0; c < b.length; c++) { | |
var d = b[c]; | |
d && d.nExpires <= a && n.purgeCreative(d.sImpressionId) | |
} | |
}, s = function(a, b, c, d, e) { | |
return function(f) { | |
e.bTimedout ? g.factory("FL_RESPONSE_TIMEOUT", { | |
nAccountId: k, | |
sElementId: a.getElementId(), | |
nSiteId: a.getSiteId(k), | |
nZoneId: a.getZoneId(k), | |
nSizeId: b, | |
nTimeout: e.nTimeout, | |
nRequestTime: d.requestTime, | |
sRequestType: f.isJsonp ? "jsonp" : "xhr", | |
nStatusCode: f.status | |
}) : g.factory("FL_RESPONSE_SUCCESS", { | |
nAccountId: k, | |
sElementId: a.getElementId(), | |
nSiteId: a.getSiteId(k), | |
nZoneId: a.getZoneId(k), | |
nSizeId: b, | |
nTimeout: e.nTimeout, | |
nRequestTime: d.requestTime, | |
sRequestType: f.isJsonp ? "jsonp" : "xhr", | |
nStatusCode: f.status | |
}), c.add(a.getPublicVersion()), A(a, b, f.responseText, e.bTimedout) | |
} | |
}, t = function(a, b, c, d) { | |
return function(e) { | |
D(d.bTimedout, a, k, b), g.factory("FL_RESPONSE_FAILURE", { | |
nAccountId: k, | |
sElementId: a.getElementId(), | |
nSiteId: a.getSiteId(k), | |
nZoneId: a.getZoneId(k), | |
nSizeId: b, | |
nTimeout: d.nTimeout, | |
nRequestTime: c.requestTime, | |
sRequestType: e.isJsonp ? "jsonp" : "xhr", | |
nStatusCode: e.status, | |
sStatus: e.statusText || "" | |
}) | |
} | |
}; | |
var B = function() { | |
return x++, x >= p.length && (x = 0), p[x] | |
}; | |
u = function(a, b) { | |
var c = m.getProtocol(), | |
d = B(), | |
e = i, | |
f = Math.random(), | |
g = a.getKWs(), | |
h = a.getFPV(), | |
j = a.getFPI(), | |
l = { | |
account_id: k, | |
site_id: a.getSiteId(k), | |
zone_id: a.getZoneId(k), | |
size_id: b, | |
p_pos: a.getPosition(), | |
rp_floor: Math.max(e, .01), | |
rf: m.getFullPageUrl(), | |
p_screen_res: m.getScreenResolution() | |
}; | |
if (g.push("rp.fastlane"), l.kw = g.join(","), m.getIntegration() && (l.tk_flint = m.getIntegration()), h.length) { | |
var o = m.generateComplexQueryStringObject(h, "tg_v"); | |
l = m.mergeObjects(l, o, !0) | |
} | |
if (j.length) { | |
var p = m.generateComplexQueryStringObject(j, "tg_i"); | |
l = m.mergeObjects(l, p, !0) | |
} | |
var q = n.getUserKey(); | |
return q && (l.tk_user_key = q), l.rand = f, [c, d, "?", m.convertObjectToQueryString(l)].join("") | |
}, v = function() { | |
if ("boolean" == typeof c) return c; | |
var a = parseInt(l.getConfigValue(j, "fastlane.pageSampling", 1), 10); | |
return c = a > Math.random() | |
}, w = function(a) { | |
for (var b = [], c = 0; c < a.length; c++) b.push(parseFloat(a[c].floor)); | |
return b.sort(function(a, b) { | |
return a - b | |
}), b.length ? b[0] : 0 | |
}; | |
var C = function(a) { | |
for (var b, c = [], d = 0; d < a.length; d++) a[d].getSiteId(k) && a[d].getZoneId(k) && (b = (a[d].getRubiconSizeIds(k) || []).slice(), c.push({ | |
slot: a[d], | |
sizes: b | |
})); | |
var e = []; | |
for (d = 0; c.length;) { | |
var f = c[d].slot; | |
b = c[d].sizes, f && b.length && e.push({ | |
slot: f, | |
size: b.shift() | |
}), b.length || c.splice(d--, 1), ++d >= c.length && (d = 0) | |
} | |
return e | |
}, | |
D = function(a, b, c, d) { | |
g.factory("FL_RESPONSE_UNFIT", { | |
bResponseTimedOut: a ? 1 : 0, | |
nSiteId: b.getSiteId(c), | |
nZoneId: b.getZoneId(c), | |
sSlotName: b.getSlotName(), | |
sElementId: b.getElementId(), | |
nAccountId: c, | |
nSizeId: d | |
}) | |
} | |
}; | |
b.exports = i | |
}, { | |
11: 11, | |
13: 13, | |
16: 16, | |
18: 18, | |
3: 3, | |
7: 7, | |
9: 9 | |
}], | |
11: [function(a, b, c) { | |
"use strict"; | |
var d = a(19), | |
e = a(17), | |
f = a(10), | |
g = a(7), | |
h = a(8), | |
i = a(18), | |
j = a(9), | |
k = (a(4), a(15)), | |
l = a(5), | |
m = function() { | |
var a, b = this, | |
c = null, | |
m = null, | |
n = null, | |
o = null, | |
p = {}, | |
q = {}, | |
r = new h, | |
s = !1, | |
t = [], | |
u = [], | |
v = 1e3, | |
w = 300, | |
x = '<!doctype html>\n\n<html lang="en"><head><meta charset="utf-8"><title></title><script type="text/javascript">var inDapIF = true;</script></head><body style="margin: 0px; padding: 0px;"><script type="text/javascript">', | |
y = "</script></body></html>"; | |
b.loadConfiguration = function(a) { | |
s || g.addConfig(a) | |
}, b.init = function() { | |
if (!s) { | |
s = !0, b.writeDnsPrefetchElements(); | |
var a = g.getConfigValue(0, "sizeMap", !1); | |
a && (i.oSizeMap = a), t = c(), d.origrubicontag && d.origrubicontag.cmd && i.isArray(d.origrubicontag.cmd) && b.processCommands(d.origrubicontag.cmd), j.factory("HL_INIT", { | |
nAccountId: g.getConfigValue(0, "accountId"), | |
sVersion: g.getConfigValue(0, "configuration.version") | |
}) | |
} | |
}, b.writeDnsPrefetchElements = function() { | |
var a = d.document.createElement("link"); | |
a.rel = "dns-prefetch", a.href = "//optimized-by.rubiconproject.com/"; | |
var b = d.document.getElementsByTagName("script")[0]; | |
b && b.parentNode.appendChild(a) | |
}, c = function() { | |
for (var a = [], b = g.getConfigs(), c = 0; c < b.length; c++) | |
for (var d = g.getConfigValue(c, "services", []), e = 0; e < d.length; e++) { | |
var h = d[e]; | |
if ("fastlane" === h) { | |
var i = new f; | |
i.init(c), a.push(i) | |
} | |
} | |
return a | |
}, b.run = function(a, b) { | |
j.factory("HL_RUN_CALLED", { | |
nAccountId: g.getConfigValue(0, "accountId") | |
}), "function" != typeof a && (i.error("Missing or invalid callback provided to rubicontag.run(). Overiding with empty function."), a = function() {}); | |
var c = m(b); | |
k.run(t, a, c) | |
}, m = function(a) { | |
if (a = a || {}, a && i.isInteger(a)) { | |
var c = a; | |
a = { | |
timeout: c | |
} | |
} | |
var d = !!a.slots, | |
e = { | |
nTimeout: a.timeout ? a.timeout : g.getConfigValue(0, "configuration.timeout", v), | |
aSlots: a.slots ? a.slots : !1, | |
bSlotsSpecified: d | |
}; | |
e.nTimeout < w && (j.factory("HL_BAD_TIMEOUT", { | |
nTimeout: e.nTimeout | |
}), e.nTimeout = w); | |
var f = []; | |
if (e.bSlotsSpecified) { | |
if (i.isArray(e.aSlots)) | |
for (var h = 0; h < e.aSlots.length; h++) | |
if (e.aSlots[h] && "function" == typeof e.aSlots[h].getElementId) { | |
var k = b.getSlot(e.aSlots[h].getElementId()); | |
k && f.push(k) | |
} | |
} else f = b.getAllSlots(); | |
return e.aSlots = f, e | |
}, b.processCommands = function(a) { | |
for (var b = 0; b < a.length; b++) a[b]() | |
}, o = function(a) { | |
var b = a.oVisitor || {}, | |
c = a.aKeywords || [], | |
d = a.oInventory || {}, | |
f = new e(a.sName || null, a.aSizes || [], a.sId || null); | |
a.sPosition && f.setPosition(a.sPosition); | |
for (var g in b) b.hasOwnProperty(g) && f.addFPV(g, b[g]); | |
for (var h in d) d.hasOwnProperty(h) && f.addFPI(h, d[h]); | |
return f.addKW(c), f | |
}, b.defineSlot = function(a, c, d) { | |
if (1 === arguments.length && i.isObject(a)) return n(a); | |
if (arguments.length < 3) return j.factory("HL_BAD_DEFINE_SLOT", { | |
sSlotName: a, | |
aDimensions: c, | |
sElementId: d | |
}), o({ | |
sId: d, | |
sName: a, | |
aSizes: c | |
}); | |
var e = b.getSlot(d); | |
return e ? e : (p[d] = o({ | |
sId: d, | |
sName: a, | |
aSizes: c | |
}), p[d]) | |
}, n = function(a) { | |
if (!(i.isObject(a) && i.isArray(a.sizes) && a.siteId && a.zoneId && a.id)) return j.factory("HL_BAD_DEFINE_SLOT_FROM_OBJ", { | |
aSizes: a.sizes, | |
nSiteId: a.siteId, | |
nZoneId: a.zoneId, | |
nId: a.id | |
}), o({ | |
sId: a.id, | |
sName: a.id | |
}); | |
var c = b.getSlot(a.id); | |
if (c) return c; | |
a.url && i.setUrl(a.url), c = o({ | |
sId: a.id, | |
oVisitor: a.visitor, | |
sPosition: a.position, | |
aKeywords: a.keywords, | |
oInventory: a.inventory, | |
sName: a.name || a.id, | |
aSizes: i.normalizeDimensions(a.sizes) | |
}); | |
var d = g.getConfigValue(0, "accountId"), | |
e = { | |
siteId: a.siteId, | |
zoneId: a.zoneId | |
}; | |
return c.loadSlotConfiguration(d, e), p[a.id] = c, c | |
}, b.getAllSlots = function() { | |
var a = []; | |
for (var b in p) p.hasOwnProperty(b) && a.push(p[b]); | |
return a | |
}, b.getSlot = function(a) { | |
for (var b in p) | |
if (p.hasOwnProperty(b) && b === a) return p[b]; | |
return !1 | |
}, b.setTargetingForGPTSlot = function(a) { | |
if (!(a && i.isObject(a) && i.isFunction(a.getSlotElementId) && i.isFunction(a.setTargeting))) return !1; | |
var c = b.getSlot(a.getSlotElementId()); | |
return c && i.isObject(c) && i.isFunction(c.getAdServerTargeting) ? c.setTargetingForGPTSlot(a) : !1 | |
}, b.renderCreative = function(c) { | |
var d, e, f; | |
if (arguments.length > 1 && (c = { | |
oRenderContainer: arguments[0], | |
sElementId: arguments[1], | |
mSizeTargeting: arguments[2] || null, | |
nAccountId: arguments[3] || 0 | |
}), c.mSizeTargeting || c.nAccountId) { | |
c.nAccountId || (c.nAccountId = g.getConfigValue(0, "accountId")); | |
var h = c.mSizeTargeting && c.mSizeTargeting.match && c.mSizeTargeting.match(/^([0-9]+)_.+$/); | |
if (e = i.isArray(h) && 2 === h.length ? h[1] : c.mSizeTargeting, f = b.getSlot(c.sElementId), f === !1) return void j.factory("HL_CREATIVE_RENDER_SLOT_NOT_FOUND", { | |
sElementId: c.sElementId, | |
nSizeId: e, | |
nAccountId: c.nAccountId | |
}); | |
d = f.getCreative(c.nAccountId, e), c.sAuctionId = d && d.sImpressionId | |
} else c.sAuctionId || (c.sAuctionId = c.sElementId), d = b.getCreative(c.sAuctionId), d && (e = d.nSizeId, c.nAccountId = d.nAccountId, f = d.oSlot); | |
if (null === d) return void j.factory("HL_CREATIVE_RENDER_CREATIVE_NOT_FOUND", { | |
sElementId: c.sElementId, | |
nSizeId: e, | |
nAccountId: c.nAccountId | |
}); | |
b.purgeCreative(c.sAuctionId), j.factory("HL_CREATIVE_RENDERED", { | |
nAccountId: c.nAccountId, | |
sElementId: c.sElementId, | |
nSiteId: f.getSiteId(c.nAccountId), | |
nZoneId: f.getZoneId(c.nAccountId), | |
nSizeId: e, | |
sTier: d.sTier, | |
nCpm: d.oResponse.cpm, | |
sAuctionId: c.sAuctionId, | |
sSlotName: f.getSlotName() | |
}); | |
var k = i.getProtocol() + "stats.aws.rubiconproject.com/stats/fastlaneimps/" + d.sImpressionId + "/a" + d.nAccountId + "/s" + d.oSlot.getSiteId(d.nAccountId) + "/z" + d.oSlot.getZoneId(d.nAccountId) + "/d/" + Math.round(1e15 * Math.random()); | |
(new Image).src = k, b.writeContentToFriendlyIFrame({ | |
oContainer: c.oRenderContainer, | |
sContent: d.oResponse.script, | |
sId: ["rpfl", c.nAccountId, f.getSlotName().replace(/[^a-zA-Z0-9]/g, "_"), e].join("_"), | |
nSizeId: e, | |
sImpressionId: c.sAuctionId, | |
aClickTrackingUrls: c.aClickTrackingUrls, | |
oClickTrackingMacroData: { | |
siteId: f.getSiteId(c.nAccountId), | |
zoneId: f.getZoneId(c.nAccountId), | |
sizeId: e, | |
userId: a | |
} | |
}) | |
}, b.writeContentToFriendlyIFrame = function(a) { | |
try { | |
a.sId = a.sId ? a.sId : "rp_ct_" + Math.round(1e15 * Math.random()); | |
var b = d.document.createElement("iframe"); | |
b.setAttribute("scrolling", "no"), b.src = "about:blank"; | |
var c = i.convertSizeIdToDimensions(a.nSizeId); | |
if (b.style.cssText = "width: " + c[0] + "px; height: " + c[1] + "px; border: 0; margin: 0; padding: 0; overflow: hidden;", | |
b.id = a.sId, b.className = "rp-creative-iframe-wrapper", i.isArray(a.aClickTrackingUrls) && a.aClickTrackingUrls.length) { | |
new l(b, a.aClickTrackingUrls, a.oClickTrackingMacroData) | |
} | |
b.setAttribute("data-rp-impression-id", a.sImpressionId), a.oContainer.appendChild(b); | |
var e = b.contentWindow.document; | |
e.open(), e.write(x + a.sContent + y), e.close() | |
} catch (f) { | |
i.error(f) | |
} | |
}, b.storeCreative = function(a, b, c, d, e, f) { | |
var h = i.getNow() + g.getConfigValue(0, "configuration.creativeTTL", 18e4); | |
q[a] = { | |
oResponse: b, | |
nExpires: h, | |
nAccountId: c, | |
nSizeId: d, | |
sTier: e, | |
oSlot: f, | |
sImpressionId: a | |
} | |
}, b.getCreative = function(a) { | |
return q.hasOwnProperty(a) ? q[a] : null | |
}, b.getCreatives = function() { | |
var a = []; | |
for (var b in q) q.hasOwnProperty(b) && a.push(q[b]); | |
return a | |
}, b.purgeCreative = function(a) { | |
var b = null; | |
return q.hasOwnProperty(a) && (b = q[a], b.oSlot.purgeCreative(b.nAccountId, b.nSizeId), delete q[a]), b | |
}, b.setUserKey = function(c) { | |
return a = c, b | |
}, b.getUserKey = function() { | |
return a | |
}, b.setFPI = function(a, c) { | |
return r.setFPI(a, c), b | |
}, b.addFPI = function(a, c) { | |
return r.addFPI(a, c), b | |
}, b.getFPI = function() { | |
return r.getFPI() | |
}, b.setFPV = function(a, c) { | |
return r.setFPV(a, c), b | |
}, b.addFPV = function(a, c) { | |
return r.addFPV(a, c), b | |
}, b.getFPV = function() { | |
return r.getFPV() | |
}, b.addKW = function(a) { | |
return r.addKW(a), b | |
}, b.getKWs = function() { | |
return r.getKWs() | |
}, b.addContext = function() { | |
for (var a = 0; a < arguments.length; a++) u.push(arguments[a]); | |
return b | |
}, b.getContexts = function() { | |
return u | |
}, b.setUrl = i.setUrl, b.setIntegration = i.setIntegration | |
}; | |
b.exports = new m | |
}, { | |
10: 10, | |
15: 15, | |
17: 17, | |
18: 18, | |
19: 19, | |
4: 4, | |
5: 5, | |
7: 7, | |
8: 8, | |
9: 9 | |
}], | |
12: [function(a, b, c) { | |
"use strict"; | |
var d = a(18), | |
e = a(19), | |
f = function(a) { | |
d.debug("creating jsonp request object with callback:", a); | |
var b, c, f, g, h = this, | |
i = !1, | |
j = null, | |
k = null, | |
l = null, | |
m = null, | |
n = null, | |
o = null, | |
p = null; | |
h.readyState = 0, h.status = 0, h.statusText = "", h.responseText = "", h.timeout = 0, h.onreadystatechange = function() { | |
d.debug('jsonp "onreadystatechange" function called for request:', h, ", url:", b) | |
}, h.isJsonp = !0, h.jsonpArgs = [], h.open = function(a, c) { | |
b = c | |
}, h.send = function() { | |
return i ? void d.warn('"send" called multiple times for jsonp request:', b) : (i = !0, b ? a ? (d.debug("sending jsonp request:", b), j(), n(), void(h.timeout && (g = setTimeout(o, h.timeout)))) : (d.error("no callback given for jsonp request"), void p(0, "jsonp: no callback")) : (d.error("no url given for jsonp request"), void p(0, "jsonp: no url"))) | |
}, h.abort = function() { | |
p(0, "jsonp aborted") | |
}, j = function() { | |
var b = k().contentWindow; | |
b[a] = m | |
}; | |
var q = function() { | |
if (f && f.contentWindow) try { | |
delete f.contentWindow[a] | |
} catch (b) { | |
f.contentWindow[a] = void 0 | |
} | |
}; | |
k = function() { | |
for (var b = e.rp_fl_iframes = e.rp_fl_iframes || [], c = 0; c < b.length; c++) | |
if (!b[c].contentWindow[a]) { | |
f = b[c]; | |
break | |
} | |
return f || (f = l(), b.push(f)), f | |
}, l = function() { | |
var a = "rp_fl_iframe_" + parseInt(1e8 * Math.random(), 10), | |
b = d.createInvisibleIframe(a), | |
c = document.getElementsByTagName("head")[0]; | |
c.insertBefore(b, c.firstChild); | |
var e = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base target="_top" /><script>inDapIF=true;</script></head><body></body></html>', | |
f = b.contentWindow.document; | |
return f.open(), f.write(e), f.close(), b | |
}, m = function() { | |
for (var a = 0; a < arguments.length; a++) h.jsonpArgs.push(arguments[a]); | |
var b = arguments.length > 0 ? arguments[0] : ""; | |
p(200, "success", b) | |
}, n = function() { | |
var a = f.contentWindow.document; | |
c = a.createElement("script"); | |
var d = a.getElementsByTagName("script")[0]; | |
c.async = 1, c.src = b, d.parentNode.insertBefore(c, d) | |
}, o = function() { | |
p(0, "jsonp timeout") | |
}, p = function(a, e, f) { | |
4 !== h.readyState && (200 === a ? d.info("jsonp request finished successfully:", b, "arguments: ", h.jsonpArgs) : d.warn(e, ": closing jsonp request:", b), h.readyState = 4, h.status = a, h.statusText = e || "", h.responseText = f || "", clearTimeout(g), q(), c && c.parentNode && c.parentNode.removeChild(c), "function" == typeof h.onreadystatechange && h.onreadystatechange()) | |
} | |
}; | |
b.exports = f | |
}, { | |
18: 18, | |
19: 19 | |
}], | |
13: [function(a, b, c) { | |
"use strict"; | |
var d = a(16), | |
e = a(18), | |
f = function(a) { | |
var b, c = this, | |
f = new d, | |
g = new d, | |
h = new d, | |
i = new d, | |
j = !1, | |
k = !1, | |
l = [], | |
m = null, | |
n = null; | |
c.setTimeout = function(a) { | |
b = setTimeout(function() { | |
e.warn("RequestManager:", "timeout (after " + a + "ms)"), c.abort() | |
}, a) | |
}, a && c.setTimeout(a), c.addRequest = function(a) { | |
return f.contains(a) || g.contains(a) ? !0 : j ? !1 : f.add(a) ? (a.always(function(b) { | |
m(a, b) | |
}), k && a.abort(), !0) : !1 | |
}, m = function(a, b) { | |
return f.remove(a) && g.add(a) ? (200 === b.status ? h.add(a) : i.add(a), n(), !0) : !1 | |
}, c.allRequestsAdded = function() { | |
j = !0, n() | |
}, c.allRequestsFinished = function() { | |
return !(!j || c.haveOpenRequests()) | |
}, c.haveOpenRequests = function() { | |
return !f.isEmpty() | |
}, c.finished = function(a) { | |
return "function" == typeof a ? (l.push(a), !0) : !1 | |
}; | |
var o = function() { | |
for (; l.length;) l.shift()(); | |
l = { | |
length: 0, | |
push: function(a) { | |
a() | |
} | |
} | |
}; | |
n = function() { | |
c.allRequestsFinished() && (clearTimeout(b), o()) | |
}, c.abort = function() { | |
e.warn("RequestManager:", "aborting " + f.length() + " open request(s)"); | |
for (var a = f.toArray(), b = 0; b < a.length; b++) a[b].abort(); | |
k = !0, o() | |
}, c.getOpenRequests = function() { | |
return f.toArray() | |
}, c.getClosedRequests = function() { | |
return g.toArray() | |
}, c.totalRequests = function() { | |
return f.length() + g.length() | |
}, c.getSuccessfulRequests = function() { | |
return h.toArray() | |
}, c.getFailedRequests = function() { | |
return i.toArray() | |
} | |
}; | |
b.exports = f | |
}, { | |
16: 16, | |
18: 18 | |
}], | |
14: [function(a, b, c) { | |
"use strict"; | |
var d = a(11), | |
e = a(6), | |
f = a(9), | |
g = function() { | |
var a = this; | |
a.loadConfiguration = function() { | |
return d.loadConfiguration.apply(a, arguments), a | |
}, a.init = function() { | |
return d.init.apply(a, arguments), a | |
}, a.run = function() { | |
return d.run.apply(a, arguments), a | |
}, a.cmd = e, a.getSlot = function() { | |
var b = d.getSlot.apply(a, arguments); | |
return b === !1 ? null : b.getPublicVersion() | |
}, a.defineSlot = function() { | |
return d.defineSlot.apply(a, arguments).getPublicVersion() | |
}, a.getAllSlots = function() { | |
for (var b = d.getAllSlots.apply(a, arguments), c = [], e = 0; e < b.length; e++) c.push(b[e].getPublicVersion()); | |
return c | |
}, a.setUserKey = function() { | |
return d.setUserKey.apply(a, arguments), a | |
}, a.setFPI = function() { | |
return d.setFPI.apply(a, arguments), a | |
}, a.addFPI = function() { | |
return d.addFPI.apply(a, arguments), a | |
}, a.setFPV = function() { | |
return d.setFPV.apply(a, arguments), a | |
}, a.addFPV = function() { | |
return d.addFPV.apply(a, arguments), a | |
}, a.addKW = function() { | |
return d.addKW.apply(a, arguments), a | |
}, a.addContext = function() { | |
return d.addContext.apply(a, arguments), a | |
}, a.renderCreative = function() { | |
d.renderCreative.apply(a, arguments) | |
}, a.addEventListener = function() { | |
return f.addEventListener.apply(a, arguments) | |
}, a.setTargetingForGPTSlot = function() { | |
d.setTargetingForGPTSlot.apply(a, arguments) | |
}, a.setUrl = function() { | |
d.setUrl.apply(a, arguments) | |
}, a.setIntegration = function() { | |
d.setIntegration.apply(a, arguments) | |
} | |
}; | |
b.exports = g | |
}, { | |
11: 11, | |
6: 6, | |
9: 9 | |
}], | |
15: [function(a, b, c) { | |
"use strict"; | |
var d = (a(4), function() { | |
var a = this, | |
b = [], | |
c = 0, | |
d = function() {}, | |
e = null, | |
f = !1, | |
g = {}, | |
h = null, | |
i = null; | |
a.execute = function(a, j, k) { | |
b = a, g = k, c = 0, f = !1, d = j, e = setTimeout(function() { | |
i() | |
}, g.nTimeout); | |
for (var l = 0; l < g.aSlots.length; l++) g.aSlots[l].configure(); | |
for (var m = 0; m < b.length; m++) b[m].run(h, g) | |
}, h = function(a) { | |
c++, c >= b.length && i() | |
}, i = function() { | |
f || (f = !0, clearTimeout(e), d(g)) | |
} | |
}); | |
d.run = function(a, b, c) { | |
var e = new d; | |
return e.execute(a, b, c), e | |
}, b.exports = d | |
}, { | |
4: 4 | |
}], | |
16: [function(a, b, c) { | |
"use strict"; | |
var d = function() { | |
var a = this, | |
b = []; | |
a.add = function(c) { | |
return a.contains(c) ? !1 : (b.push(c), !0) | |
}, a.remove = function(a) { | |
for (var c = 0; c < b.length; c++) | |
if (b[c] === a) return b.splice(c, 1), !0; | |
return !1 | |
}, a.removeByIndex = function(a) { | |
return a < b.length && a >= 0 ? (b.splice(a, 1), !0) : !1 | |
}, a.contains = function(a) { | |
for (var c = 0; c < b.length; c++) | |
if (b[c] === a) return !0; | |
return !1 | |
}, a.isEmpty = function() { | |
return 0 === b.length | |
}, a.length = function() { | |
return b.length | |
}, a.get = function(a) { | |
return b[a] | |
}, a.toArray = function() { | |
return b.slice(0) | |
} | |
}; | |
b.exports = d | |
}, {}], | |
17: [function(a, b, c) { | |
"use strict"; | |
var d = a(19), | |
e = a(8), | |
f = a(16), | |
g = a(18), | |
h = a(9), | |
i = a(7), | |
j = function(a) { | |
var b = this, | |
c = a; | |
b.setFPI = function() { | |
return c.setFPI.apply(b, arguments), b | |
}, b.addFPI = function() { | |
return c.addFPI.apply(b, arguments), b | |
}, b.setFPV = function() { | |
return c.setFPV.apply(b, arguments), b | |
}, b.addFPV = function() { | |
return c.addFPV.apply(b, arguments), b | |
}, b.addKW = function() { | |
return c.addKW.apply(b, arguments), b | |
}, b.setPosition = function() { | |
return c.setPosition.apply(b, arguments), b | |
}, b.clearTargeting = function() { | |
return c.clearTargeting.apply(b, arguments), b | |
}, b.getInfo = c.getInfo, b.getElementId = c.getElementId, b.getSlotName = c.getSlotName, b.getAdServerTargeting = c.getAdServerTargeting, b.getAdServerTargetingByKey = c.getAdServerTargetingByKey, b.getRawResponses = c.getRawResponses, b.getRawResponseBySize = c.getRawResponseBySize, b.isConfigured = c.isConfigured | |
}, | |
k = function(b, c, k) { | |
var l = this, | |
m = null, | |
n = null, | |
o = !1, | |
p = null, | |
q = { | |
nUrlPattern: 10, | |
nDeviceType: 50, | |
nContextKeyword: 100, | |
nPosition: 500, | |
nSlotIdPattern: 1e3, | |
nSlotIdExact: 2e3, | |
nElementIdPattern: 1e4, | |
nElementIdExact: 2e4, | |
nPrimaryAccount: 4e4 | |
}, | |
r = new e, | |
s = a(11), | |
t = {}, | |
u = {}, | |
v = { | |
sElementId: null, | |
sSlotName: null, | |
sPos: "btf", | |
oAccountConfigs: {}, | |
aBaseDimensions: [], | |
aBaseRubiconSizeIds: [] | |
}; | |
l.init = function(a, b, c) { | |
v.sSlotName = a, v.sElementId = c; | |
var d = g.cleanseDimensionsList(b); | |
b != d && [b] != d && g.debug("Given dimensions " + b.toString() + " were parsed to " + d.toString()), v.aBaseDimensions = d, v.aBaseRubiconSizeIds = []; | |
for (var e = 0; e < d.length; e++) { | |
var f = g.convertDimensionsToSizeId(d[e]); | |
f === !1 || g.inArray(f, v.aBaseRubiconSizeIds) ? h.factory("SLOT_SIZE_NOT_MAPPED", { | |
sDimensions: d[e].toString(), | |
sSlotName: l.getSlotName() | |
}) : v.aBaseRubiconSizeIds.push(f) | |
} | |
}, l.getInfo = function() { | |
var a = v.oAccountConfigs, | |
b = l.getElementId(), | |
c = l.getSlotName(), | |
d = l.getPosition(), | |
e = l.getKWs(), | |
f = l.getFPI(), | |
h = l.getFPV(), | |
i = {}, | |
j = {}, | |
k = {}; | |
for (var m in a) | |
if (a.hasOwnProperty(m)) { | |
var n = [], | |
o = [], | |
p = "rpfl_" + m, | |
q = l.getSiteId(m), | |
r = l.getZoneId(m), | |
s = l.getRubiconSizeIds(m); | |
u.hasOwnProperty(p) && (o = u[p].toArray()); | |
for (var t = 0; t < s.length; t++) { | |
var w = s[t], | |
x = g.convertSizeIdToDimensions(w); | |
n.push({ | |
w: x[0], | |
h: x[1] | |
}) | |
} | |
k[m] = { | |
siteId: q, | |
zoneId: r, | |
sizes: s, | |
targeting: o, | |
dimensions: n | |
} | |
} | |
for (var y = 0; y < f.length; y++) { | |
var z = f[y].key, | |
A = f[y].value; | |
i[z] = A | |
} | |
for (var B = 0; B < h.length; B++) { | |
var C = h[B].key, | |
D = h[B].value; | |
j[C] = D | |
} | |
return { | |
id: b, | |
name: c, | |
position: d, | |
keywords: e, | |
inventory: i, | |
visitor: j, | |
accounts: k | |
} | |
}, l.clearTargeting = function() { | |
return r = new e, v.sPos = "btf", l | |
}, l.isConfigured = function() { | |
return o | |
}, l.setFPI = function(a, b) { | |
return r.setFPI(a, b), l | |
}, l.addFPI = function(a, b) { | |
return r.addFPI(a, b), l | |
}, l.getFPI = function(a) { | |
return arguments.length < 1 && (a = !0), p("getFPI", a) | |
}, l.setFPV = function(a, b) { | |
return r.setFPV(a, b), l | |
}, l.addFPV = function(a, b) { | |
return r.addFPV(a, b), l | |
}, l.getFPV = function(a) { | |
return arguments.length < 1 && (a = !0), p("getFPV", a) | |
}, p = function(a, b) { | |
if ("getFPV" !== a && "getFPI" !== a) return g.error("Passing in undefined first party data accessor: " + a), []; | |
var c = []; | |
if (b) { | |
var d = g.convertKeyValuePairArrayToObject(s[a]()), | |
e = g.convertKeyValuePairArrayToObject(r[a]()); | |
for (var f in e) e.hasOwnProperty(f) && (d.hasOwnProperty(f) ? d[f] = d[f].concat(e[f]) : d[f] = e[f]); | |
c = g.convertKeyValuePairObjectToArray(d) | |
} else c = r[a](); | |
return c | |
}, l.addKW = function(a) { | |
return r.addKW(a), l | |
}, l.getKWs = function(a) { | |
arguments.length < 1 && (a = !0); | |
var b, c = new f, | |
d = r.getKWs(), | |
e = a ? s.getKWs() : []; | |
for (b = 0; b < d.length; b++) c.add(d[b]); | |
for (b = 0; b < e.length; b++) c.add(e[b]); | |
return c.toArray() | |
}, l.setPosition = function(a) { | |
return "atf" !== a && "btf" !== a || (v.sPos = a), l | |
}, l.getPosition = function() { | |
return v.sPos | |
}, l.getElementId = function() { | |
return v.sElementId | |
}, l.getSlotName = function() { | |
return v.sSlotName | |
}, l.getSiteId = function(a) { | |
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].nSiteId : null | |
}, l.getZoneId = function(a) { | |
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].nZoneId : null | |
}, l.getRubiconSizeIds = function(a) { | |
return v.oAccountConfigs.hasOwnProperty(a) ? v.oAccountConfigs[a].aRubiconSizeIds : [] | |
}, l.storeCreative = function(a, b, c, d, e) { | |
s.storeCreative(d, c, a, b, e, l), t.hasOwnProperty(a) || (t[a] = {}), t[a][b] = d, w(a, b, e) | |
}, l.removeCreative = function(a, b) { | |
t.hasOwnProperty(a) && delete t[a][b] | |
}, l.purgeCreative = function(a, b) { | |
l.removeCreative(a, b), l.removeAdServerTargetingForSize("rpfl_" + a, b); | |
var c = n || l.findMatchingGPTSlot(); | |
c && l.setTargetingForGPTSlot(c) | |
}, l.findMatchingGPTSlot = function() { | |
var a = !1; | |
if (d.googletag && d.googletag.apiReady) | |
for (var b = d.googletag.pubads().getSlots(), c = 0; c < b.length; c++) | |
if (b[c].getSlotElementId() === l.getElementId()) { | |
a = b[c]; | |
break | |
} | |
return a | |
}, l.getCreative = function(a, b) { | |
return t.hasOwnProperty(a) && t[a].hasOwnProperty(b) && s.getCreative(t[a][b]) || null | |
}, l.addAdServerTargeting = function(a, b) { | |
u.hasOwnProperty(a) ? u[a].add(b) : (u[a] = new f, u[a].add(b)) | |
}; | |
var w = function(a, b, c) { | |
var d = "rpfl_" + a; | |
l.removeAdServerTargetingForSize(d, b), l.addAdServerTargeting(d, [b, "_", c].join("")), l.addAdServerTargeting("rpfl_elemid", l.getElementId()) | |
}; | |
l.removeAdServerTargetingByKey = function(a) { | |
delete u[a] | |
}, l.removeAdServerTargetingForSize = function(a, b) { | |
var c = new RegExp("^" + b + "_"); | |
if (u[a]) | |
for (var d = u[a].length(); d >= 0; d--) | |
if (c.test(u[a].get(d))) { | |
u[a].removeByIndex(d); | |
break | |
} | |
}, l.getAdServerTargeting = function(a) { | |
var b = []; | |
void 0 === a && (a = "other"); | |
for (var c in u) | |
if (u.hasOwnProperty(c)) { | |
var d = { | |
key: c, | |
values: u[c].toArray() | |
}; | |
if (b.push(d), d.key.match(/^rpfl_[0-9]+$/)) | |
for (var e = d.key.replace(/^rpfl_/, ""), f = 0; f < d.values.length; f++) { | |
var g = d.values[f], | |
i = g.match(/^([0-9]+)_(.*)$/); | |
i && h.factory("SLOT_GET_TARGETING", { | |
nSiteId: l.getSiteId(e), | |
nZoneId: l.getZoneId(e), | |
sSlotName: l.getSlotName(), | |
nSizeId: i[1], | |
sTier: i[2], | |
nAccountId: e, | |
sValue: g, | |
sContext: a, | |
sKey: d.key | |
}) | |
} | |
} | |
return b | |
}, l.getAdServerTargetingByKey = function(a) { | |
return u.hasOwnProperty(a) ? u[a].toArray() : [] | |
}, l.configure = function() { | |
if (!o) { | |
for (var a = i.getConfigs(), b = 0; b < a.length; b++) { | |
var c = l.findBestMatchForConfig(b); | |
c !== !1 ? l.loadSlotConfiguration(i.getConfigValue(b, "accountId"), c) : 0 === b ? (g.debug("No configuration match found for slot: " + l.getSlotName() + ", element ID: " + l.getElementId() + ". Using catch-all."), l.loadSlotConfiguration(i.getConfigValue(b, "accountId"), i.getConfigValue(b, "catchAll"))) : g.debug("No configuration match found for slot:", l.getSlotName(), ", element Id:", l.getElementId(), ", skipping catch-all because this is a secondary account:", i.getConfigValue(b, "accountId")) | |
} | |
return l | |
} | |
}, l.findBestMatchForConfig = function(a) { | |
for (var b = i.getConfigValue(a, "slots", []), c = s.getContexts(), d = { | |
nPoints: 0, | |
oConfig: !1 | |
}, e = 0; e < b.length; e++) { | |
var f = b[e]; | |
g.debug("Starting slot specificity calculation for slot name: " + l.getSlotName() + ", element ID: " + l.getElementId() + ", contexts: " + (c.toString() || "(none)") + "."); | |
var h = l.calculateSlotConfigurationPoints(f, c); | |
g.debug("End slot specificity calculation for slot name: " + l.getSlotName() + ", element ID: " + l.getElementId() + ", contexts: " + (c.toString() || "(none)") + ", Points: " + h + "."), h > d.nPoints && (d.nPoints = h, d.oConfig = f) | |
} | |
return d.oConfig | |
}, l.calculateSlotConfigurationPoints = function(a, b) { | |
var c = null, | |
d = 0; | |
if (a.slotId) | |
if (c = new RegExp(a.slotId), a.slotId === l.getSlotName()) d += q.nSlotIdExact, g.debug("Exact slot name match. slot name: " + l.getSlotName() + ", pattern: " + a.slotId + ", points: " + d + "."); | |
else { | |
if (!c.test(l.getSlotName())) return g.debug("Slot name match failed. Slot name: " + l.getSlotName() + ", pattern: " + a.slotId + ", Skipping."), 0; | |
d += q.nSlotIdPattern, g.debug("Partial slot name match. slot name: " + l.getSlotName() + ", pattern: " + a.slotId + ", points: " + d + ".") | |
} | |
if (a.elementIdPattern) | |
if (c = new RegExp(a.elementIdPattern), a.elementIdPattern === l.getElementId()) d += q.nElementIdExact, g.debug("Exact element ID match. element ID: " + l.getElementId() + ", pattern: " + a.elementIdPattern + ", points: " + d + "."); | |
else { | |
if (!c.test(l.getElementId())) return g.debug("Element Id match failed. Element Id: " + l.getElementId() + ", pattern: " + a.elementIdPattern + ". Skipping."), 0; | |
d += q.nElementIdPattern, g.debug("Partial element ID match. element ID: " + l.getElementId() + ", pattern: " + a.elementIdPattern + ", points: " + d + ".") | |
} | |
if (a.position) { | |
if (a.position !== l.getPosition()) return g.debug("Position match failed. Slot position: " + l.getPosition() + ", configured: oConfig.position. Skipping."), 0; | |
d += q.nPosition, g.debug("Position match. Position: " + a.position + ", points: " + d + ".") | |
} | |
var e = g.getDeviceType(); | |
if (a.deviceType) { | |
if (!g.inArray(e, a.deviceType)) return g.debug("Device type match failed. Device type: " + e + ", configured: " + a.deviceType.join(",") + ". Skipping."), 0; | |
d += q.nDeviceType, g.debug("Device type match. Device type: " + e + ", configured: " + a.deviceType.join(",") + ", points: " + d + ".") | |
} | |
var f = g.getFullPageUrl(); | |
if (a.urlPattern) { | |
if (c = new RegExp(a.urlPattern), !c.test(f)) return g.debug("URL match failed. URL: " + f + ", pattern: " + a.urlPattern + ". Skipping."), 0; | |
d += q.nUrlPattern, g.debug("Partial URL match. URL: " + f + ", pattern: " + a.urlPattern + ", points: " + d + ".") | |
} | |
if (a.contextKeywords) { | |
var h = g.getArrayIntersection(a.contextKeywords, b); | |
if (!h.length) return g.debug("Context match failed. Page contexts: " + (b.toString() || "(none)") + ", configured , contexts:" + (a.contextKeywords ? a.contextKeywords.toString() : "(none)") + ", Skipping."), 0; | |
d += h.length * q.nContextKeyword, g.debug("Context matching. Page contexts:" + (b.toString() || "(none)") + ", configured contexts:" + (a.contextKeywords ? a.contextKeywords.toString() : "(none)") + ", matches: " + h.length + ", points: " + d + ".") | |
} | |
if (a.primaryAccountIds) { | |
var j = i.getConfigValue(0, "accountId"); | |
if (!g.inArray(j, a.primaryAccountIds)) return g.debug("Primary accountId match failed. Primary account: ", j, ", configured: ", a.primaryAccountIds, ", Skipping"), 0; | |
d += q.nPrimaryAccount, g.debug("Primary accountId match. Primary account: ", j, ", configured: ", a.primaryAccountIds, ", points:", d) | |
} | |
return d | |
}, l.loadSlotConfiguration = function(a, b) { | |
o = !0; | |
var c = { | |
siteId: "nSiteId", | |
zoneId: "nZoneId", | |
sizes: "aRubiconSizeIds" | |
}; | |
v.oAccountConfigs[a] = { | |
nSiteId: null, | |
nZoneId: null, | |
aRubiconSizeIds: v.aBaseRubiconSizeIds.slice() | |
}; | |
for (var d in b) b.hasOwnProperty(d) && v.oAccountConfigs[a].hasOwnProperty(c[d]) && (v.oAccountConfigs[a][c[d]] = b[d]) | |
}, l.setTargetingForGPTSlot = function(a) { | |
n = a; | |
for (var b = l.getAdServerTargeting("gpt"), c = 0; c < b.length; c++) n.setTargeting(b[c].key, b[c].values); | |
return !0 | |
}, l.getRawResponses = function(a) { | |
var b = []; | |
if (!i.getConfigValue(0, "configuration.exposeRawResponses", !1)) return b; | |
a = a || i.getConfigValue(0, "accountId"); | |
for (var c in t[a]) | |
if (t[a].hasOwnProperty(c)) { | |
var d = "rpfl_" + a, | |
e = c + "_unused", | |
f = l.getRawResponseBySizeId(c); | |
b.push(f), h.factory("SLOT_GET_TARGETING", { | |
nSiteId: l.getSiteId(a), | |
nZoneId: l.getZoneId(a), | |
sSlotName: l.getSlotName(), | |
nSizeId: c, | |
nAccountId: a, | |
sKey: d, | |
sValue: e, | |
sContext: "raw", | |
sTier: "unused" | |
}) | |
} | |
return b | |
}, l.getRawResponseBySize = function(a, b) { | |
var c = g.convertDimensionsToSizeId(a); | |
return l.getRawResponseBySizeId(c) | |
}, l.getRawResponseBySizeId = function(a, b) { | |
var c = {}; | |
if (!i.getConfigValue(0, "configuration.exposeRawResponses", !1)) return c; | |
b = b || i.getConfigValue(0, "accountId"); | |
var d = l.getCreative(b, a); | |
if (d && d.hasOwnProperty("oResponse")) { | |
var e = d.oResponse; | |
c.advertiser = e.advertiser, c.cpm = e.cpm, c.dimensions = g.convertSizeIdToDimensions(a), c.auction_id = e.impression_id, e.hasOwnProperty("deal") && (c.deal = e.deal) | |
} | |
return c | |
}, l.getPublicVersion = function() { | |
return null === m && (m = new j(l)), m | |
}, l.init(b, c, k) | |
}; | |
b.exports = k | |
}, { | |
11: 11, | |
16: 16, | |
18: 18, | |
19: 19, | |
7: 7, | |
8: 8, | |
9: 9 | |
}], | |
18: [function(a, b, c) { | |
"use strict"; | |
var d = a(19), | |
e = a(7), | |
f = { | |
sUrl: "", | |
sIntegration: "" | |
}, | |
g = function() { | |
var a, b, c = this, | |
g = [], | |
h = null, | |
i = null, | |
j = null, | |
k = null; | |
c.oSizeMap = { | |
"728x90": 2, | |
"160x600": 9, | |
"300x600": 10, | |
"300x250": 15, | |
"320x50": 43, | |
"300x50": 44, | |
"300x1050": 54, | |
"970x90": 55, | |
"970x250": 57 | |
}, c.sVersion = "af62c7d", c.DEVICE_DESKTOP = "desktop", c.DEVICE_TABLET = "tablet", c.DEVICE_PHONE = "phone", c.init = function(d) { | |
a = b = h(d), c.hookUserDistractionEvents(), i(d) | |
}, h = function(a) { | |
var b = "http:"; | |
try { | |
a.location.protocol.match(/^http/) && (b = a.location.protocol) | |
} catch (c) {} | |
return b + "//" | |
}, c.getProtocol = function() { | |
return b | |
}, c.setProtocol = function(a) { | |
a && a.match(/^http(s)?:\/\/$/) && (b = a) | |
}, c.getFullPageUrl = function() { | |
return c.getUrlCookieParam("rp_url") ? c.getUrlCookieParam("rp_url") : c.getUrl() ? c.getUrl() : d.location.toString() | |
}, c.getScreenResolution = function() { | |
return d.screen.width + "x" + d.screen.height | |
}, c.debug = function() {}, c.info = function() {}, c.warn = function() {}, c.error = function() {}, i = function(a) { | |
j(a); | |
var b = parseInt(c.getUrlCookieParam("rp_loglevel")); | |
isNaN(b) && !e.hasConfig() && e.onLoad(function() { | |
i(a) | |
}), k(b) | |
}, j = function(a) { | |
if (a.console) | |
for (var b = { | |
debug: "log", | |
info: "info", | |
warn: "warn", | |
error: "error" | |
}, d = ["debug", "info", "warn", "error"], e = 0; e < d.length; e++) { | |
var f = d[e], | |
g = b[f]; | |
if (a.console[g]) try { | |
c[f] = Function.prototype.bind.call(a.console[g], a.console, "RP:") | |
} catch (h) {} else e > 0 && (c[f] = c[d[e - 1]]) | |
} | |
}, k = function(a) { | |
var b = 0, | |
d = 1, | |
f = 2, | |
g = 3, | |
h = 4; | |
a = isNaN(a) ? e.getConfigValue(0, "configuration.logLevel", b) : a, h > a && (c.debug = function() {}), g > a && (c.info = function() {}), f > a && (c.warn = function() {}), d > a && (c.error = function() {}) | |
}, c.getUrlCookieParam = function(a) { | |
if (a) { | |
var b = c.getQueryStringParam(a); | |
b = null === b ? c.getHashParam(a) : b; | |
var d = "rp_param_" + a; | |
return b ? c.setCookie(d, b, { | |
path: "/" | |
}) : null === b ? b = c.getCookie(d) : c.setCookie(d, "", { | |
path: "/", | |
exp: -1e4 | |
}), b || null | |
} | |
}, c.getCookie = function(a) { | |
if (!a) return null; | |
var b = new RegExp("\\b" + a + "=([^;]*)"), | |
c = b.exec(d.document.cookie || ""); | |
return c && c.length > 1 ? c[1] : null | |
}, c.setCookie = function(a, b, c) { | |
if (a) { | |
var e = [a + "=" + b]; | |
if (c = c || {}, c.domain && e.push("domain=" + c.domain), c.exp || 0 === c.exp) { | |
var f = new Date((new Date).getTime() + c.exp); | |
e.push("expires=" + f.toUTCString()) | |
} | |
var g = c.path || "/"; | |
e.push("path=" + g), d.document.cookie = e.join(";") | |
} | |
}, c.getQueryStringParam = function(a) { | |
if (!a) return null; | |
var b = new RegExp("[?&]" + a + "((=([^&]*))|(&|$))"), | |
c = b.exec(decodeURIComponent(d.location.search) || ""); | |
return !c || c.length < 5 ? null : c[3] || "" | |
}, c.queryStringParamExists = function(a) { | |
if (!a) return !1; | |
var b = new RegExp("[?&]" + a + "([=&]|$)"); | |
return b.test(d.location.search || "") | |
}, c.getHashParam = function(a) { | |
if (!a) return null; | |
var b = new RegExp("[#&]" + a + "((=([^&]*))|(&|$))"), | |
c = b.exec(d.location.hash || ""); | |
return !c || c.length < 5 ? null : c[3] || "" | |
}, c.hashParamExists = function(a) { | |
if (!a) return !1; | |
var b = new RegExp("[#&]" + a + "([=&]|$)"); | |
return b.test(d.location.hash || "") | |
}, c.mergeObjects = function(a, b, c) { | |
var d, e = {}; | |
if (c) | |
for (var f = 0; 2 > f; f++) | |
for (d in arguments[f]) arguments[f].hasOwnProperty(d) && (e[d] = arguments[f][d]); | |
else | |
for (d in a) a.hasOwnProperty(d) && (e[d] = b.hasOwnProperty(d) ? b[d] : a[d]); | |
return e | |
}, c.isInteger = function(a) { | |
return /string|number/.test(typeof a) && /^[0-9]+$/.test(a.toString()) | |
}, c.isSingleSlotSize = function(a) { | |
return c.isArray(a) && 2 === a.length && c.isInteger(a[0]) && c.isInteger(a[1]) | |
}, c.isArray = function(a) { | |
return (a || !1) && c.isObject(a) && a.hasOwnProperty("length") && "number" == typeof a.length && a.length > -1 && "[object Array]" === Object.prototype.toString.call(a) | |
}, c.inArray = function(a, b) { | |
if (!c.isArray(b)) return !1; | |
for (var d = 0; d < b.length; d++) | |
if (b[d] == a) return !0; | |
return !1 | |
}, c.getArrayIntersection = function(a, b) { | |
var d = []; | |
if (!c.isArray(a) || !c.isArray(b)) return d; | |
for (var e = 0; e < a.length; e++) c.inArray(a[e], b) && d.push(a[e]); | |
return d | |
}, c.isObject = function(a) { | |
return "object" == typeof a | |
}, c.isFunction = function(a) { | |
return (a || !1) && "[object Function]" === Object.prototype.toString.call(a) | |
}, c.generateComplexQueryStringObject = function(a, b) { | |
for (var c = {}, d = null, e = 0; e < a.length; e++) d = b + "." + a[e].key, c[d] = a[e].value.join(","); | |
return c | |
}, c.convertObjectToQueryString = function(a) { | |
var b = []; | |
for (var c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + "=" + encodeURIComponent(a[c])); | |
return b.join("&") | |
}, c.convertKeyValuePairArrayToObject = function(a) { | |
for (var b = {}, c = 0; c < a.length; c++) b[a[c].key] = a[c].value; | |
return b | |
}, c.convertKeyValuePairObjectToArray = function(a) { | |
var b = []; | |
for (var c in a) a.hasOwnProperty(c) && b.push({ | |
key: c, | |
value: a[c] | |
}); | |
return b | |
}, c.formatString = function(a, b, c) { | |
var d = a; | |
c = c || !1; | |
for (var e in b) b.hasOwnProperty(e) && (d = d.replace(new RegExp("{" + e + "}", "g"), c ? encodeURIComponent(b[e]) : b[e])); | |
return d | |
}, c.convertDimensionsToSizeId = function(a) { | |
if (!c.isSingleSlotSize(a)) return !1; | |
var b = a[0] + "x" + a[1]; | |
return c.oSizeMap.hasOwnProperty(b) ? c.oSizeMap[b] : !1 | |
}, c.convertSizeIdToDimensions = function(a) { | |
for (var b in c.oSizeMap) | |
if (c.oSizeMap.hasOwnProperty(b) && parseInt(c.oSizeMap[b], 10) === parseInt(a, 10)) { | |
var d = b.split("x"); | |
return d[0] = parseInt(d[0], 10), d[1] = parseInt(d[1], 10), d | |
} | |
return !1 | |
}, c.normalizeDimensions = function(a) { | |
if (c.convertDimensionsToSizeId(a) && (a = [a]), !c.isArray(a)) return []; | |
var b = []; | |
for (var d in a) | |
if (a.hasOwnProperty(d)) { | |
var e = a[d], | |
f = c.convertSizeIdToDimensions(e); | |
f !== !1 ? b.push(f) : b.push(e) | |
} | |
return c.cleanseDimensionsList(b) | |
}, c.cleanseDimensionsList = function(a) { | |
var b = []; | |
if (c.isArray(a) && 0 !== a.length) | |
if (c.isSingleSlotSize(a)) b = [a]; | |
else | |
for (var d = 0; d < a.length; d++) c.isSingleSlotSize(a[d]) && b.push(a[d]); | |
else; | |
return b | |
}, c.addUserDistractionEventListener = function(a) { | |
g.push(a) | |
}, c.hookUserDistractionEvents = function() { | |
var a = function(a) { | |
c.userDistractionEventOccurred(a) | |
}; | |
d.addEventListener ? (d.addEventListener("unload", a, !1), d.addEventListener("blur", a, !1)) : d.attachEvent && (d.attachEvent("onunload", a), d.attachEvent("onblur", a)) | |
}, c.userDistractionEventOccurred = function(a) { | |
for (var b = 0; b < g.length; b++) g[b](a) | |
}, c.getNow = function() { | |
return (new Date).getTime() | |
}, c.browserSupportsXHR = function() { | |
var a = c.isIE(); | |
return !(a && 10 > a) | |
}, c.isIE = function() { | |
var a = d.navigator.userAgent.toLowerCase(); | |
return -1 !== a.indexOf("msie") ? parseInt(a.split("msie")[1]) : !1 | |
}, c.getDeviceType = function() { | |
var a = d.screen.height || 1025, | |
b = d.screen.width || 1025, | |
e = Math.max(a, b), | |
f = c.DEVICE_DESKTOP; | |
return 736 >= e ? f = c.DEVICE_PHONE : 1024 >= e && (f = c.DEVICE_TABLET), f | |
}, c.createInvisibleIframe = function(a) { | |
var b = document.createElement("iframe"); | |
return b.id = a, b.height = 0, b.width = 0, b.border = "0px", b.hspace = "0", b.vspace = "0", b.marginWidth = "0", b.marginHeight = "0", b.style.border = "0", b.scrolling = "no", b.frameBorder = "0", c.isIE() && c.isIE() < 10 ? b.src = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();})()' : b.src = "about:self", b.style.display = "none", b | |
}, c.setUrl = function(a) { | |
return e.getConfigValue(0, "configuration.allowSetUrl") !== !0 ? void c.warn("Cannot manually set URL since it is not allowed in the configuration.") : void(c.isUrl(a) && (f.sUrl = a)) | |
}, c.getUrl = function(a) { | |
return f.sUrl | |
}, c.isUrl = function(a) { | |
return "string" != typeof a ? !1 : /^(https?:)?\/\/[a-zA-Z\d\-]+/.test(a) | |
}, c.replaceMacrosWithinUrl = function(a, b) { | |
var c; | |
if ("string" != typeof a) return ""; | |
for (var d in b) b.hasOwnProperty(d) && (c = new RegExp("\\$\\$" + d + "\\$\\$", "gi"), a = a.replace(c, encodeURIComponent(b[d]))); | |
return a = a.replace(/\$\$[^<>&?=+*#@!%^~;\s'"]+\$\$/gi, "") | |
}, c.setIntegration = function(a) { | |
f.sIntegration = a, "localhost" === document.location.hostname && c.setCookie("highlander-test.sIntegration", a, { | |
exp: 2e3 | |
}) | |
}, c.getIntegration = function() { | |
return f.sIntegration | |
} | |
}, | |
h = new g; | |
h.init(d), b.exports = h | |
}, { | |
19: 19, | |
7: 7 | |
}], | |
19: [function(a, b, c) { | |
"use strict"; | |
b.exports = "undefined" != typeof window ? window : void 0 | |
}, {}], | |
20: [function(a, b, c) { | |
"use strict"; | |
b.exports = "undefined" != typeof XMLHttpRequest ? XMLHttpRequest : void 0 | |
}, {}] | |
}, {}, [2]); | |
window.rubicontag.loadConfiguration({ | |
"accountId": 7450, | |
"services": ["fastlane"], | |
"configuration": { | |
"analyticsLevel": -1, | |
"logLevel": 1, | |
"timeout": 1500 | |
}, | |
"fastlane": { | |
"pageSampling": 1 | |
}, | |
"sizeMap": { | |
"300x250": 15, | |
"728x90": 2, | |
"160x600": 9, | |
"300x600": 10, | |
"320x50": 43, | |
"300x1050": 54, | |
"970x250": 57, | |
"468x60": 1, | |
"120x600": 8, | |
"300x50": 44, | |
"336x280": 49, | |
"320x480": 67 | |
}, | |
"catchAll": { | |
"siteId": 41686, | |
"zoneId": 367714 | |
}, | |
"slots": [{ | |
"elementIdPattern": "^.{0,5}TOP", | |
"siteId": 41686, | |
"zoneId": 175094 | |
}, { | |
"slotId": "^((?!MOBILE|TOP).)*$", | |
"siteId": 41686, | |
"zoneId": 194452 | |
}, { | |
"slotId": "MOBILE", | |
"siteId": 23565, | |
"zoneId": 87671 | |
}, { | |
"slotId": "INCONTENT_BOXAD_1", | |
"siteId": 83830, | |
"zoneId": 395614 | |
}, { | |
"slotId": "INCONTENT_LEADERBOARD", | |
"siteId": 83830, | |
"zoneId": 409364 | |
}, { | |
"slotId": "INVISIBLE_HIGH_IMPACT_2", | |
"siteId": 83830, | |
"zoneId": 439724 | |
}], | |
"tiers": [{ | |
"floor": 0.01, | |
"ceiling": 0.04, | |
"mapping": "tier0001deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.05, | |
"ceiling": 0.09, | |
"mapping": "tier0005deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.1, | |
"ceiling": 0.14, | |
"mapping": "tier0010deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.15, | |
"ceiling": 0.19, | |
"mapping": "tier0015deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.2, | |
"ceiling": 0.24, | |
"mapping": "tier0020deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.25, | |
"ceiling": 0.29, | |
"mapping": "tier0025deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.3, | |
"ceiling": 0.34, | |
"mapping": "tier0030deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.35, | |
"ceiling": 0.39, | |
"mapping": "tier0035deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.4, | |
"ceiling": 0.44, | |
"mapping": "tier0040deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.45, | |
"ceiling": 0.49, | |
"mapping": "tier0045deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.5, | |
"ceiling": 0.54, | |
"mapping": "tier0050deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.55, | |
"ceiling": 0.59, | |
"mapping": "tier0055deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.6, | |
"ceiling": 0.64, | |
"mapping": "tier0060deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.65, | |
"ceiling": 0.69, | |
"mapping": "tier0065deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.7, | |
"ceiling": 0.74, | |
"mapping": "tier0070deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.75, | |
"ceiling": 0.79, | |
"mapping": "tier0075deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.8, | |
"ceiling": 0.84, | |
"mapping": "tier0080deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.85, | |
"ceiling": 0.89, | |
"mapping": "tier0085deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.9, | |
"ceiling": 0.94, | |
"mapping": "tier0090deals", | |
"hasDeals": true | |
}, { | |
"floor": 0.95, | |
"ceiling": 0.99, | |
"mapping": "tier0095deals", | |
"hasDeals": true | |
}, { | |
"floor": 1, | |
"ceiling": 1.09, | |
"mapping": "tier0100deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.1, | |
"ceiling": 1.19, | |
"mapping": "tier0110deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.2, | |
"ceiling": 1.29, | |
"mapping": "tier0120deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.3, | |
"ceiling": 1.39, | |
"mapping": "tier0130deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.4, | |
"ceiling": 1.49, | |
"mapping": "tier0140deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.5, | |
"ceiling": 1.59, | |
"mapping": "tier0150deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.6, | |
"ceiling": 1.69, | |
"mapping": "tier0160deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.7, | |
"ceiling": 1.79, | |
"mapping": "tier0170deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.8, | |
"ceiling": 1.89, | |
"mapping": "tier0180deals", | |
"hasDeals": true | |
}, { | |
"floor": 1.9, | |
"ceiling": 1.99, | |
"mapping": "tier0190deals", | |
"hasDeals": true | |
}, { | |
"floor": 2, | |
"ceiling": 2.09, | |
"mapping": "tier0200deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.1, | |
"ceiling": 2.19, | |
"mapping": "tier0210deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.2, | |
"ceiling": 2.29, | |
"mapping": "tier0220deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.3, | |
"ceiling": 2.39, | |
"mapping": "tier0230deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.4, | |
"ceiling": 2.49, | |
"mapping": "tier0240deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.5, | |
"ceiling": 2.59, | |
"mapping": "tier0250deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.6, | |
"ceiling": 2.69, | |
"mapping": "tier0260deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.7, | |
"ceiling": 2.79, | |
"mapping": "tier0270deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.8, | |
"ceiling": 2.89, | |
"mapping": "tier0280deals", | |
"hasDeals": true | |
}, { | |
"floor": 2.9, | |
"ceiling": 2.99, | |
"mapping": "tier0290deals", | |
"hasDeals": true | |
}, { | |
"floor": 3, | |
"ceiling": 3.09, | |
"mapping": "tier0300deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.1, | |
"ceiling": 3.19, | |
"mapping": "tier0310deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.2, | |
"ceiling": 3.29, | |
"mapping": "tier0320deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.3, | |
"ceiling": 3.39, | |
"mapping": "tier0330deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.4, | |
"ceiling": 3.49, | |
"mapping": "tier0340deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.5, | |
"ceiling": 3.59, | |
"mapping": "tier0350deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.6, | |
"ceiling": 3.69, | |
"mapping": "tier0360deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.7, | |
"ceiling": 3.79, | |
"mapping": "tier0370deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.8, | |
"ceiling": 3.89, | |
"mapping": "tier0380deals", | |
"hasDeals": true | |
}, { | |
"floor": 3.9, | |
"ceiling": 3.99, | |
"mapping": "tier0390deals", | |
"hasDeals": true | |
}, { | |
"floor": 4, | |
"ceiling": 4.09, | |
"mapping": "tier0400deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.1, | |
"ceiling": 4.19, | |
"mapping": "tier0410deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.2, | |
"ceiling": 4.29, | |
"mapping": "tier0420deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.3, | |
"ceiling": 4.39, | |
"mapping": "tier0430deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.4, | |
"ceiling": 4.49, | |
"mapping": "tier0440deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.5, | |
"ceiling": 4.59, | |
"mapping": "tier0450deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.6, | |
"ceiling": 4.69, | |
"mapping": "tier0460deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.7, | |
"ceiling": 4.79, | |
"mapping": "tier0470deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.8, | |
"ceiling": 4.89, | |
"mapping": "tier0480deals", | |
"hasDeals": true | |
}, { | |
"floor": 4.9, | |
"ceiling": 4.99, | |
"mapping": "tier0490deals", | |
"hasDeals": true | |
}, { | |
"floor": 5, | |
"ceiling": 5.09, | |
"mapping": "tier0500deals", | |
"hasDeals": true | |
}, { | |
"floor": 5, | |
"ceiling": 5.49, | |
"mapping": "tier0500deals", | |
"hasDeals": true | |
}, { | |
"floor": 5.5, | |
"ceiling": 5.99, | |
"mapping": "tier0550deals", | |
"hasDeals": true | |
}, { | |
"floor": 6, | |
"ceiling": 6.49, | |
"mapping": "tier0600deals", | |
"hasDeals": true | |
}, { | |
"floor": 6.5, | |
"ceiling": 6.99, | |
"mapping": "tier0650deals", | |
"hasDeals": true | |
}, { | |
"floor": 7, | |
"ceiling": 7.49, | |
"mapping": "tier0700deals", | |
"hasDeals": true | |
}, { | |
"floor": 7.5, | |
"ceiling": 7.99, | |
"mapping": "tier0750deals", | |
"hasDeals": true | |
}, { | |
"floor": 8, | |
"ceiling": 8.49, | |
"mapping": "tier0800deals", | |
"hasDeals": true | |
}, { | |
"floor": 8.5, | |
"ceiling": 8.99, | |
"mapping": "tier0850deals", | |
"hasDeals": true | |
}, { | |
"floor": 9, | |
"ceiling": 9.49, | |
"mapping": "tier0900deals", | |
"hasDeals": true | |
}, { | |
"floor": 9.5, | |
"ceiling": 9.99, | |
"mapping": "tier0950deals", | |
"hasDeals": true | |
}, { | |
"floor": 10, | |
"ceiling": 10.49, | |
"mapping": "tier1000deals", | |
"hasDeals": true | |
}, { | |
"floor": 10.5, | |
"ceiling": 10.99, | |
"mapping": "tier1050deals", | |
"hasDeals": true | |
}, { | |
"floor": 11, | |
"ceiling": 11.49, | |
"mapping": "tier1100deals", | |
"hasDeals": true | |
}, { | |
"floor": 11.5, | |
"ceiling": 11.99, | |
"mapping": "tier1150deals", | |
"hasDeals": true | |
}, { | |
"floor": 12, | |
"ceiling": 12.49, | |
"mapping": "tier1200deals", | |
"hasDeals": true | |
}, { | |
"floor": 12.5, | |
"ceiling": 12.99, | |
"mapping": "tier1250deals", | |
"hasDeals": true | |
}, { | |
"floor": 13, | |
"ceiling": 13.49, | |
"mapping": "tier1300deals", | |
"hasDeals": true | |
}, { | |
"floor": 13.5, | |
"ceiling": 13.99, | |
"mapping": "tier1350deals", | |
"hasDeals": true | |
}, { | |
"floor": 14, | |
"ceiling": 14.49, | |
"mapping": "tier1400deals", | |
"hasDeals": true | |
}, { | |
"floor": 14.5, | |
"ceiling": 14.99, | |
"mapping": "tier1450deals", | |
"hasDeals": true | |
}, { | |
"floor": 15, | |
"ceiling": 15.49, | |
"mapping": "tier1500deals", | |
"hasDeals": true | |
}, { | |
"floor": 15.5, | |
"ceiling": 15.99, | |
"mapping": "tier1550deals", | |
"hasDeals": true | |
}, { | |
"floor": 16, | |
"ceiling": 16.49, | |
"mapping": "tier1600deals", | |
"hasDeals": true | |
}, { | |
"floor": 16.5, | |
"ceiling": 16.99, | |
"mapping": "tier1650deals", | |
"hasDeals": true | |
}, { | |
"floor": 17, | |
"ceiling": 17.49, | |
"mapping": "tier1700deals", | |
"hasDeals": true | |
}, { | |
"floor": 17.5, | |
"ceiling": 17.99, | |
"mapping": "tier1750deals", | |
"hasDeals": true | |
}, { | |
"floor": 18, | |
"ceiling": 18.49, | |
"mapping": "tier1800deals", | |
"hasDeals": true | |
}, { | |
"floor": 18.5, | |
"ceiling": 18.99, | |
"mapping": "tier1850deals", | |
"hasDeals": true | |
}, { | |
"floor": 19, | |
"ceiling": 19.49, | |
"mapping": "tier1900deals", | |
"hasDeals": true | |
}, { | |
"floor": 19.5, | |
"ceiling": 19.99, | |
"mapping": "tier1950deals", | |
"hasDeals": true | |
}, { | |
"floor": 20, | |
"ceiling": 9999, | |
"mapping": "tier2000deals", | |
"hasDeals": true | |
}, { | |
"floor": 0, | |
"ceiling": 0, | |
"mapping": "tier0000", | |
"hasDeals": false | |
}, { | |
"floor": 0.01, | |
"ceiling": 0.04, | |
"mapping": "tier0001", | |
"hasDeals": false | |
}, { | |
"floor": 0.05, | |
"ceiling": 0.09, | |
"mapping": "tier0005", | |
"hasDeals": false | |
}, { | |
"floor": 0.1, | |
"ceiling": 0.14, | |
"mapping": "tier0010", | |
"hasDeals": false | |
}, { | |
"floor": 0.15, | |
"ceiling": 0.19, | |
"mapping": "tier0015", | |
"hasDeals": false | |
}, { | |
"floor": 0.2, | |
"ceiling": 0.24, | |
"mapping": "tier0020", | |
"hasDeals": false | |
}, { | |
"floor": 0.25, | |
"ceiling": 0.29, | |
"mapping": "tier0025", | |
"hasDeals": false | |
}, { | |
"floor": 0.3, | |
"ceiling": 0.34, | |
"mapping": "tier0030", | |
"hasDeals": false | |
}, { | |
"floor": 0.35, | |
"ceiling": 0.39, | |
"mapping": "tier0035", | |
"hasDeals": false | |
}, { | |
"floor": 0.4, | |
"ceiling": 0.44, | |
"mapping": "tier0040", | |
"hasDeals": false | |
}, { | |
"floor": 0.45, | |
"ceiling": 0.49, | |
"mapping": "tier0045", | |
"hasDeals": false | |
}, { | |
"floor": 0.5, | |
"ceiling": 0.54, | |
"mapping": "tier0050", | |
"hasDeals": false | |
}, { | |
"floor": 0.55, | |
"ceiling": 0.59, | |
"mapping": "tier0055", | |
"hasDeals": false | |
}, { | |
"floor": 0.6, | |
"ceiling": 0.64, | |
"mapping": "tier0060", | |
"hasDeals": false | |
}, { | |
"floor": 0.65, | |
"ceiling": 0.69, | |
"mapping": "tier0065", | |
"hasDeals": false | |
}, { | |
"floor": 0.7, | |
"ceiling": 0.74, | |
"mapping": "tier0070", | |
"hasDeals": false | |
}, { | |
"floor": 0.75, | |
"ceiling": 0.79, | |
"mapping": "tier0075", | |
"hasDeals": false | |
}, { | |
"floor": 0.8, | |
"ceiling": 0.84, | |
"mapping": "tier0080", | |
"hasDeals": false | |
}, { | |
"floor": 0.85, | |
"ceiling": 0.89, | |
"mapping": "tier0085", | |
"hasDeals": false | |
}, { | |
"floor": 0.9, | |
"ceiling": 0.94, | |
"mapping": "tier0090", | |
"hasDeals": false | |
}, { | |
"floor": 0.95, | |
"ceiling": 0.99, | |
"mapping": "tier0095", | |
"hasDeals": false | |
}, { | |
"floor": 1, | |
"ceiling": 1.09, | |
"mapping": "tier0100", | |
"hasDeals": false | |
}, { | |
"floor": 1.1, | |
"ceiling": 1.19, | |
"mapping": "tier0110", | |
"hasDeals": false | |
}, { | |
"floor": 1.2, | |
"ceiling": 1.29, | |
"mapping": "tier0120", | |
"hasDeals": false | |
}, { | |
"floor": 1.3, | |
"ceiling": 1.39, | |
"mapping": "tier0130", | |
"hasDeals": false | |
}, { | |
"floor": 1.4, | |
"ceiling": 1.49, | |
"mapping": "tier0140", | |
"hasDeals": false | |
}, { | |
"floor": 1.5, | |
"ceiling": 1.59, | |
"mapping": "tier0150", | |
"hasDeals": false | |
}, { | |
"floor": 1.6, | |
"ceiling": 1.69, | |
"mapping": "tier0160", | |
"hasDeals": false | |
}, { | |
"floor": 1.7, | |
"ceiling": 1.79, | |
"mapping": "tier0170", | |
"hasDeals": false | |
}, { | |
"floor": 1.8, | |
"ceiling": 1.89, | |
"mapping": "tier0180", | |
"hasDeals": false | |
}, { | |
"floor": 1.9, | |
"ceiling": 1.99, | |
"mapping": "tier0190", | |
"hasDeals": false | |
}, { | |
"floor": 2, | |
"ceiling": 2.09, | |
"mapping": "tier0200", | |
"hasDeals": false | |
}, { | |
"floor": 2.1, | |
"ceiling": 2.19, | |
"mapping": "tier0210", | |
"hasDeals": false | |
}, { | |
"floor": 2.2, | |
"ceiling": 2.29, | |
"mapping": "tier0220", | |
"hasDeals": false | |
}, { | |
"floor": 2.3, | |
"ceiling": 2.39, | |
"mapping": "tier0230", | |
"hasDeals": false | |
}, { | |
"floor": 2.4, | |
"ceiling": 2.49, | |
"mapping": "tier0240", | |
"hasDeals": false | |
}, { | |
"floor": 2.5, | |
"ceiling": 2.59, | |
"mapping": "tier0250", | |
"hasDeals": false | |
}, { | |
"floor": 2.6, | |
"ceiling": 2.69, | |
"mapping": "tier0260", | |
"hasDeals": false | |
}, { | |
"floor": 2.7, | |
"ceiling": 2.79, | |
"mapping": "tier0270", | |
"hasDeals": false | |
}, { | |
"floor": 2.8, | |
"ceiling": 2.89, | |
"mapping": "tier0280", | |
"hasDeals": false | |
}, { | |
"floor": 2.9, | |
"ceiling": 2.99, | |
"mapping": "tier0290", | |
"hasDeals": false | |
}, { | |
"floor": 3, | |
"ceiling": 3.09, | |
"mapping": "tier0300", | |
"hasDeals": false | |
}, { | |
"floor": 3.1, | |
"ceiling": 3.19, | |
"mapping": "tier0310", | |
"hasDeals": false | |
}, { | |
"floor": 3.2, | |
"ceiling": 3.29, | |
"mapping": "tier0320", | |
"hasDeals": false | |
}, { | |
"floor": 3.3, | |
"ceiling": 3.39, | |
"mapping": "tier0330", | |
"hasDeals": false | |
}, { | |
"floor": 3.4, | |
"ceiling": 3.49, | |
"mapping": "tier0340", | |
"hasDeals": false | |
}, { | |
"floor": 3.5, | |
"ceiling": 3.59, | |
"mapping": "tier0350", | |
"hasDeals": false | |
}, { | |
"floor": 3.6, | |
"ceiling": 3.69, | |
"mapping": "tier0360", | |
"hasDeals": false | |
}, { | |
"floor": 3.7, | |
"ceiling": 3.79, | |
"mapping": "tier0370", | |
"hasDeals": false | |
}, { | |
"floor": 3.8, | |
"ceiling": 3.89, | |
"mapping": "tier0380", | |
"hasDeals": false | |
}, { | |
"floor": 3.9, | |
"ceiling": 3.99, | |
"mapping": "tier0390", | |
"hasDeals": false | |
}, { | |
"floor": 4, | |
"ceiling": 4.09, | |
"mapping": "tier0400", | |
"hasDeals": false | |
}, { | |
"floor": 4.1, | |
"ceiling": 4.19, | |
"mapping": "tier0410", | |
"hasDeals": false | |
}, { | |
"floor": 4.2, | |
"ceiling": 4.29, | |
"mapping": "tier0420", | |
"hasDeals": false | |
}, { | |
"floor": 4.3, | |
"ceiling": 4.39, | |
"mapping": "tier0430", | |
"hasDeals": false | |
}, { | |
"floor": 4.4, | |
"ceiling": 4.49, | |
"mapping": "tier0440", | |
"hasDeals": false | |
}, { | |
"floor": 4.5, | |
"ceiling": 4.59, | |
"mapping": "tier0450", | |
"hasDeals": false | |
}, { | |
"floor": 4.6, | |
"ceiling": 4.69, | |
"mapping": "tier0460", | |
"hasDeals": false | |
}, { | |
"floor": 4.7, | |
"ceiling": 4.79, | |
"mapping": "tier0470", | |
"hasDeals": false | |
}, { | |
"floor": 4.8, | |
"ceiling": 4.89, | |
"mapping": "tier0480", | |
"hasDeals": false | |
}, { | |
"floor": 4.9, | |
"ceiling": 4.99, | |
"mapping": "tier0490", | |
"hasDeals": false | |
}, { | |
"floor": 5, | |
"ceiling": 5.09, | |
"mapping": "tier0500", | |
"hasDeals": false | |
}, { | |
"floor": 5, | |
"ceiling": 5.49, | |
"mapping": "tier0500", | |
"hasDeals": false | |
}, { | |
"floor": 5.5, | |
"ceiling": 5.99, | |
"mapping": "tier0550", | |
"hasDeals": false | |
}, { | |
"floor": 6, | |
"ceiling": 6.49, | |
"mapping": "tier0600", | |
"hasDeals": false | |
}, { | |
"floor": 6.5, | |
"ceiling": 6.99, | |
"mapping": "tier0650", | |
"hasDeals": false | |
}, { | |
"floor": 7, | |
"ceiling": 7.49, | |
"mapping": "tier0700", | |
"hasDeals": false | |
}, { | |
"floor": 7.5, | |
"ceiling": 7.99, | |
"mapping": "tier0750", | |
"hasDeals": false | |
}, { | |
"floor": 8, | |
"ceiling": 8.49, | |
"mapping": "tier0800", | |
"hasDeals": false | |
}, { | |
"floor": 8.5, | |
"ceiling": 8.99, | |
"mapping": "tier0850", | |
"hasDeals": false | |
}, { | |
"floor": 9, | |
"ceiling": 9.49, | |
"mapping": "tier0900", | |
"hasDeals": false | |
}, { | |
"floor": 9.5, | |
"ceiling": 9.99, | |
"mapping": "tier0950", | |
"hasDeals": false | |
}, { | |
"floor": 10, | |
"ceiling": 10.49, | |
"mapping": "tier1000", | |
"hasDeals": false | |
}, { | |
"floor": 10.5, | |
"ceiling": 10.99, | |
"mapping": "tier1050", | |
"hasDeals": false | |
}, { | |
"floor": 11, | |
"ceiling": 11.49, | |
"mapping": "tier1100", | |
"hasDeals": false | |
}, { | |
"floor": 11.5, | |
"ceiling": 11.99, | |
"mapping": "tier1150", | |
"hasDeals": false | |
}, { | |
"floor": 12, | |
"ceiling": 12.49, | |
"mapping": "tier1200", | |
"hasDeals": false | |
}, { | |
"floor": 12.5, | |
"ceiling": 12.99, | |
"mapping": "tier1250", | |
"hasDeals": false | |
}, { | |
"floor": 13, | |
"ceiling": 13.49, | |
"mapping": "tier1300", | |
"hasDeals": false | |
}, { | |
"floor": 13.5, | |
"ceiling": 13.99, | |
"mapping": "tier1350", | |
"hasDeals": false | |
}, { | |
"floor": 14, | |
"ceiling": 14.49, | |
"mapping": "tier1400", | |
"hasDeals": false | |
}, { | |
"floor": 14.5, | |
"ceiling": 14.99, | |
"mapping": "tier1450", | |
"hasDeals": false | |
}, { | |
"floor": 15, | |
"ceiling": 15.49, | |
"mapping": "tier1500", | |
"hasDeals": false | |
}, { | |
"floor": 15.5, | |
"ceiling": 15.99, | |
"mapping": "tier1550", | |
"hasDeals": false | |
}, { | |
"floor": 16, | |
"ceiling": 16.49, | |
"mapping": "tier1600", | |
"hasDeals": false | |
}, { | |
"floor": 16.5, | |
"ceiling": 16.99, | |
"mapping": "tier1650", | |
"hasDeals": false | |
}, { | |
"floor": 17, | |
"ceiling": 17.49, | |
"mapping": "tier1700", | |
"hasDeals": false | |
}, { | |
"floor": 17.5, | |
"ceiling": 17.99, | |
"mapping": "tier1750", | |
"hasDeals": false | |
}, { | |
"floor": 18, | |
"ceiling": 18.49, | |
"mapping": "tier1800", | |
"hasDeals": false | |
}, { | |
"floor": 18.5, | |
"ceiling": 18.99, | |
"mapping": "tier1850", | |
"hasDeals": false | |
}, { | |
"floor": 19, | |
"ceiling": 19.49, | |
"mapping": "tier1900", | |
"hasDeals": false | |
}, { | |
"floor": 19.5, | |
"ceiling": 19.99, | |
"mapping": "tier1950", | |
"hasDeals": false | |
}, { | |
"floor": 20, | |
"ceiling": 99999, | |
"mapping": "tier2000", | |
"hasDeals": false | |
}], | |
"version": "1462902090L", | |
"modified": 1462902090000 | |
}); | |
window.rubicontag.init(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment