Ebene Magazine – Bitcoin Price dips after Elon Musk announced that Tesla will no longer accept it

0
8

It’s time to get acquainted with the rational world of cryptocurrency prices, where a coin conceived as a joke last week turned several Shiba Inu enthusiasts into paper millionaires before an actual billionaire replenished value through jokes on live television .

This billionaire Elon Musk wreaked havoc again on Wednesday, which will turn out to be a far more momentous market decision than the doge coin drama and his appearance on SNL. Musk tweeted a statement announcing that his electric motor company would no longer allow Tesla customers to pay for cars with Bitcoin due to the significant environmental impact of crypto:

The announcement in which Musk said Tesla would buy into its Bitcoin Hold on hold came just three months after he announced the company had invested $ 1.5 billion in the coin, which caused the price to skyrocket. Shortly after Musk’s tweet on Wednesday, the price of the digital asset fell nearly $ 8,000. Stocks of companies that were heavily invested in Bitcoin also took a nosedive.

The stocks of companies that have invested in Bitcoin are also falling: Here is Nexon, a Japanese online games company that was last month because of its « Long-term stability » has bought Bitcoin worth $ 100 million. pic.twitter.com/g3LLnGgCV2

Although Musk has tweeted in the past to manipulate the stock prices of his own electric car company, the announcement came as a surprise. It has been common knowledge for at least four years that the energy needed to mine Bitcoin is an environmental crisis. (A recent analysis by the University of Cambridge found that cryptocurrency uses more energy per year than Argentina, a nation of nearly 45 million people.) How did Musk, one of the world’s best-known financiers, make Tesla’s decision to invest heavily ? the price, which is set to rise almost 20 percent in February – find out right now or worry about the carbon footprint of the material?

Based on the plan that Tesla will stick to its Bitcoin until “mining to more sustainable ones Energy is switched, ”the move could be an attempt to reconcile its ideals of carbon-free futurism with the realities of its business, which requires more lithium – which involves an invasive degradation process that produces many pollutants – than the next four competitors combined. Just like Musk tweeted to change his own company’s share price, Wednesday’s announcement could be a chaotic attempt to force Bitcoin miners to consider renewable sources over cheap and dirty coal. Or it could just be more noise.

Senator Joe Manchin is breaking with Democrats and throwing his weight behind a more moderate suffrage bill in place of the comprehensive Democratic Voting Reform Bill that Majority Leader Chuck Schumer has identified as the caucus’ top priority. </ The West Virginia Democrat exclusively told ABC News that he intended to support the John Lewis Voting Rights Act, a more closely coordinated law on voting rights that he believes could attract bipartisan support, even if the right to vote is one The focal point between the US will be two parties.

« I think Democrats and Republicans place great value on protecting the ballot boxes that allow people to protect the right to vote, make it accessible, fair and safe do, and the John Lewis Voting Rights Act, if we apply this to all 50 states and territories, it’s something that can be done n – it should be done, « Manchin told ABC News’ Rachel Scott. « It could be non-partisan to regain confidence in our system. »

A federal judge on Tuesday dismissed the National Rifle Association’s bankruptcy case and left the powerful gun rights group in front of a New York State lawsuit in which it was financially viable The case was about whether the NRA would be allowed to travel to Texas instead of New York, where the state is suing to break up the group. Although the NRA is headquartered in Virginia, it was incorporated and incorporated into the state in New York in 1871 as a nonprofit.

Judge Harlin Hale said in a written order that he dismissed the case because he found that the Bankruptcy was not filed in good faith.

[Former President Trump’s] blog has attracted a significantly smaller audience than its once powerful, according to engagement data compiled with BuzzSumo, a social media analytics firm Social media accounts. The data gives an indication that while Trump remains a political force, his online footprint continues to depend on a return to Facebook, Twitter and YouTube.

Donald J. Trump’s desk is limited – users can see the actual ones Not commenting on or editing posts other than sharing them with other platforms, an action that, according to the data, only a few people take.

Trump’s new blog has attracted a little over 212,000 engagements, defined as backlinks and social interactions – including Likes, shares and comments – received via Facebook, Twitter, Pinterest and Reddit. Before the ban, a single Trump tweet was typically liked and retweeted a hundred thousand times.

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

Already a subscriber?
Sign up or link your magazine subscription

= 0 (u = f (str, 0, v), c = f (str 1)): (u = f, c = «  »), i = decodeURIComponent (u), l = decodeURIComponent (c ), hasOwnProperty (o, i)? isArray (o [i])? o [i] .push (l): o [i] = [o [i], l]: o [i] = l} return o}; var isArray = Array.isArray || function (r) {return « [object Array] » === Object.prototype.toString.call (r)};
}, {}];
window.modules [« 1183 »] = [function (required, module, export) {« use strict »; var stringifyPrimitive = function (r) {switch (typeof r) {case « string »: return r; case « boolean »: return r? « true »: « false »; case « number »: return isFinite (r)? r: «  »; default: return «  »}}; module.exports = function (r, e, t, n) {return e = e || « & », t = t || « = », null === r&& (r = void 0), « object » == typeof r? map (objectKeys (r), function (n) {var i = encodeURIComponent (stringifyPrimitive (n)) t; return isArray (r [n])? map (r [n], function (r) {return i encodeURIComponent (stringifyPrimitive (r))}). join (e): i encodeURIComponent (stringifyPrimitive (r [n]))}). join (e): n? encodeURIComponent (stringifyPrimitive (n)) t encodeURIComponent (stringifyPrimitive (r)): «  »}; var isArray = Array.isArray | | function (r) {return « [object Array] » === Object.prototype.toString.call (r)}; Function assignment (r, e) {if (r.map) return r.map (e); for (var t = [], n = 0; n0&&a [a.length-1]) && (6 === i [0] || 2 === i [0])) {o = 0; continue} if (3 === i [0] && (! a || i [1]> a [0] &&i [1] « : » akbar-men « , » ∑ « : » majmou « , » ¤  » : « omla »}, az: {}, ca: {« ∆ »: « delta », « ∞ »: « infinite », « ♥ »: « amor », « & »: « i », « | »: « o », «  »: « mes que », « ∑ »: « suma dels », « ¤ »: « moneda »}, cz: {« ∆ »: « delta », « ∞ »: « nekonecno »,  » ♥ « : » laska « , » & « : » a « , » | « : » nebo « , » « : » vice jako « , » ∑ « : » soucet « , » ¤ « : » mena « }, de: {« ∆ »: « delta », « ∞ »: « infinite », « ♥ »: « love », « & »: « and », « | »: « or », «  »: « greater than »,  » ∑ « : » Sum of « , » ¤ « : » Currency « }, dv: { » ∆ « : » delta « , » ∞ « : » kolunulaa « , » ♥ « : » loabi « , » & « : » aai « , » | « : » noonee « , » « : » ah vure bodu « , » ∑ « : » jumula « , » ¤ « : » faisaa « }, en: { » ∆ « : » delta « , » ∞  » : « infinite », « ♥ »: « love », « & »: « and », « | »: « or », «  »: « greater than », « ∑ »: « sum », « ¤ »:  » Currency « }, es: { » ∆ « : » Delta « , » ∞ « : » infinito « , » ♥ « : » amor « , » & « : » y « , » | « : » u « , » « : « mas que », « ∑ »: « suma de los », « ¤ »: « moneda »}, fr: {« ∆ »: « Delta », « ∞ »: « Infiniment », « ♥ »: « Amour », « & »: « et », « | »: « ou « , » « : » superieure a « , » ∑ « : » somme des « , » ¤ « : » monnaie « }, gr: {}, hu: { » ∆ « : » delta « , » ∞ « : » vegtelen « , » ♥ « : » szerelem « , » & « : » es « , » | « : » vagy « , » « : » nagyobb mint « , » ∑ « : » szu mma « , » ¤ « : » penznem « }, it: { » ∆ « : » delta « , » ∞ « : » infinito  » , « ♥ »: « amore », « & »: « e », « | « : » o « , » « : » maggiore di « , » ∑ « : » somma « , » ¤ « : » moneta « }, lt: {}, lv: { » ∆ « : » delta « , » ∞  » : « bezgaliba », « ♥ »: « milestiba », « & »: « un », « | »: « vai », «  »: « lielaks neka », « ∑ »: « summa », « ¤ »:  » valuta « }, my: { » ∆ « : » kwahkhyaet « , » ∞ « : » asaonasme « , » ♥ « : » akhyait « , » & « : » nhin « , » | « : » tho « , »: « kyithaw », « ∑ »: « paungld », « ¤ »: « ngwekye »}, mk: {}, nl: {« ∆ »: « delta », « ∞ »:  » oneindig « , » ♥ « : » leads « , » & « : » en « , » | « : » of « , » « : » groter dan « , » ∑ « : » som « , » ¤ « : » valuta  » }, pl: {« ∆ »: « Delta », « ∞ »: « nieskonczonosc », « ♥ »: « milosc », « & »: « i », « | »: « lub », «  »: « wieksze niz « , » ∑ « : » suma « , » ¤ « : » waluta « }, pt: { » ∆ « : » delta « , » ∞ « : » infinito « , » ♥ « : » amor « , » &  » : « e », « | »: « ou », «  »: « maior que », « ∑ »: « soma », « ¤ »: « moeda »}, ro: {« ∆ »: « delta »,  » ∞ « : » infinit « , » ♥ « : » dragoste « , » & « : » si « , » | « : » sau « , » « : » mai mare ca « , » ∑ « : » suma « , » ¤ « : » valuta « }, ru: { » ∆ « : » delta « , » ∞ « : » beskonechno « , » ♥ « : » lubov « , » & « : » i « , » | « : » ili « , «  »: « bolshe », « ∑ »: « summa », « ¤ »: « valjuta »}, sk: {« ∆ »: « delta », « ∞ »: « nekonecno », « ♥ »: « laska » , « & »: « a », « | »: « alebo », «  »: « viac ako », « ∑ »: « sucet », « ¤ »: « mena »}, sr: {}, tr: { « ∆ »: « Delta », « ∞ »: « Sonsuzluk », « ♥ »: « ask », « & »: « ve », « | » : « veya », «  »: « buyuktur », « ∑ »: « toplam », « ¤ »: « para birimi »}, uk: {« ∆ »: « delta », « ∞ »: « bezkinechnist »,  » ♥ « : » lubov « , » & « : » i « , » | « : » abo « , » « : » bilshe « , » ∑ « : » suma « , » ¤ « : » valjuta « }, vn: { « ∆ »: « delta », « ∞ »: « vo cuc », « ♥ »: « yeu », « & »: « va », « | « : » hoac « , » « : » lon hon « , » ∑ « : » tong « , » ¤ « : » tien te « }}; if ( » string « ! = typeof e) return » « ; if ( » string « == typeof a&& (A = a), m = I.en, c = C.en, » object « == type of a) for (g in n = a.maintainCase ||! 1, O = a .custom&& « object » == type of a.custom? a.custom: O, u = a.truncate> 1&&a.truncate ||! 1, l = a.uric ||! 1, s = a.uricNoSlash || ! 1, r = a.mark ||! 1, S =! 1! == a.symbols&&! 1! == a.lang, A = a.separator || A, l&& (p = b.join ( » « )), s&& (p = z.join ( » « )), r&& (p = [« . « , »! « , » ~ « , » * « , » ‘ », » (« , ») « ] . join («  »)), m = a.lang&&I [a.lang] && S? I [a.lang]: S? I.en: {}, c = a.lang&&C [a.lang]? C [ a.lang] :! 1 === a.lang ||! 0 == = a.lang? {}: C.en, a.titleCase&& « number » == typeof a.titleCase.length&&Array.prototype.toString. call ( a.titleCase)? (a.titleCase.forEach (function (e) {O [e «  »] = e «  »}), t =! 0): t = !! a.titleCase, a.custom&& « number » == typeof a.custom.length&&Array.prototype.toString.call (a. custom) &&a.custom.forEach (function (s) {O « e » «  » }), Object.keys (O) .forEach (function (a) {var n; n = a.length> 1 new RegExp (« \ b » o (a) « \ b », « gi »): new RegExp (o (a), « gi »), e = e.replace (n, O [a])}), O) p = g; for (p = o (p = A), f =! 1, y =! 1, d = 0, k = (e = e.replace (/ (^ s | ) s $) / g, «  » )). Length; d = 0? (j = g, g = «  ») :! 0 === y? (g = U [j] v [g], j = « ): g = f&&v [g] .match (/ [A-Za-z0-9] /)? v [g]: v [g], f =! 1, y =! 1): g in U? (J = g, g = «  », d === k-1&& (g = U [j]), y =! 0) :! M [g ] || l&&-1! == b.join («  ») .indexOf (g) || s&&-1! == z.join («  »). indexOf (g)? (! 0 === y? (g = U [j] g, j = «  », y =! 1): f&& (/ [A-Za-z0-9] /. Test (g) || E. substr (-1). match ( / A-Za-z0-9] /)) && (g = «  » g), f =! 1) 🙁 g = f || E.substr (-1) .match (/ [A-Za -z0 -9] /)? A m [g]: m [g], g = void 0! == e [d 1] &&e [d 1] .match (/ [A-Za-z0-9] /)? A: «  », f =! 0), E = g.replace (new RegExp (« [^ \ w \ s » p « _-] », « g »), A); return t&& (E = E.replace (/ ( w) ( S *) / g, function (e, a, n) {var t = a.toUpperCase () (null! == n? N: «  »); return Object. keys (O) .indexOf (t.toLowerCase ()) u&& (h = E.charAt (u) === A, E = E.slice (0, u), h || (E = E.slice (0, E.lastIndexOf (A)))), n || t || (E = E.toLowerCase ()), E}, t = function (s) {return function (a) {return n (a, e)}}, o = function (s) {return e.replace (/ [- \ ^ $ *?. () | [] {} /] / g, « \ $ & »)}, i = function (e, a) {for (var n in a) if (a [ n] === e) return! 0}; if (« undefined »! = type of module &&module.exports) module.exports = n, module.exports.createSlug = t; else if (« undefined »! = typeof define&&define.amd) define ([], function () {return n}); else try {if (e.getSlug || e.createSlug) throw « Speakingurl: Globals exists /(getSlug|createSlug)/ »;e.getSlug=n,e.createSlug=t Genealogiecatch(e)} Genealogie(this );
}, {}];
window.modules [« 1213 »] = [function (required, module, export) {var namespace = « expire_mixin »; Function expirePlugin () {var e = this.createStore (this.storage, null, this._namespacePrefix namespace); return {set: function (t, n, a, r) ​​{this.hasNamespace (Namespace) || e.set (n, r); return t ()}, get: function (e, n) {this.hasNamespace (Namespace) || t.call (this, n); return e ()}, remove: function (t, n) {this.hasNamespace (Namespace) || e.remove (n); return t ()}, getExpiration: function (t, n) {return e.get (n)}, removeExpiredKeys: function (s) {var n = []; this.each (function (e, t) {n.push (t)}); for (var a = 0; a = 0; r -) {var l = localStorage (). key (r); e (read (l), l)}} function remove (e) {return localStorage () .removeItem (e)} function clearAll () {return localStorage (). clear ()} module.exports = {Name: « localStorage », Read: Read, Write: Write, each: Remove: Remove, DeleteAll: DeleteAll};
}, {« 1215 »: 1215}];
window.modules [« 1217 »] = [Function (required, module, export) {module.exports = {Name: « memoryStorage », read: read, write: write, each: remove: remove, deleteAll: deleteAll}; var memoryStorage = {}; Function read (e) {return memoryStorage [e]} Function write (e, r) {memoryStorage [e] = r} Function each (e) {for (var r in memoryStorage) memoryStorage.hasOwnProperty (r) &&e (memoryStorage [ r], r)} function remove (e) {delete memoryStorage [e]} function clearAll (e) {memoryStorage = {}}
}, {}];
window.modules [« 1238 »] = [function (required, module, export) {! Function (s) {var t = function (s) {return new y (e)}; t.version = « 0.6.8 », « undefined »! = typeof module&&module.exports? module.exports = t: « function » == typeof define&&define.amd? define (function () {return t}): e.typogr = t; var n = function (e, t) {return new RegExp (e, t)}, s = /] *> / i, r = t.amp = function (e) {var t = / ( s |) ( & | & | & # 38;) ( s |) / g; if (e || « string » == typeof e) e.replace (/ ()? ([^)? / G, function (e, n, r, a) {return a = a || «  », ( n = n || «  »). match (s)? nra: n (r = r.replace (t, ‘$ 1& $ 3’)) a})}, a = t.ord = function (e) { if (e || « string » == typeof e) {var t, n = f (e), r = [], a =! 1, p = / ( d) (st | nd | rd | th) / g; return n.forEach (function (e) {« tag » === e.type? (r.push (e.txt), t = s.exec (e.txt), a =! (! t || void 0! == t [1])): a? R.push (e.txt): r.push (e.txt.replace (p, ‘$ 1 $ 2’))}), r.join ( » « )}}, p = t.initQuotes = function (s) {var t = n ( » (?: (?:] *> | ^) \ s * (?:] *> \ s *) * ) (?: (« | » | « ) | (‘|’ | ‘)) », « i »); if (e || « string » = = typeof e) return e.replace (t, function (e , t, n) {var s = t? « dquo »: « quo », r = t || n; return [e.slice (0, e.lastIndexOf (r)),  », r, «  »] . join («  »)})}, c = t.widont = function (s) {var t = « (?:] *?>) *? [^ \ s] (? 🙁 ?: a | em | span | strong | i | b) [^>] *?>) *? « , s = n ( » (\ s « t » \ s « t ») (?: \ s) ([^ \ s] (?: \ s * (?: a | em | span | strong | i | b) [^>] *?> \ s * \. *) *? (?: \ s *? (?: p | h [1-6] | li | dt | dd )> | $)) « , » gi « ); return e.replace (s, ‘$ 1 $ 2’)}, i = t.caps = function (e) {var t, r = f (e), a = [], p =! 1, c = n (« ((\ b [AZ \ d] * [AZ] \ d * [AZ] [) AZ \ d ‘] * \ b) | (\ b [AZ] \. \ s? (?: [AZ] \. \ s?)) (?: \ s | \ b | $)) « , » g « ) ; return r.forEach (function (e) {« tag » === e.type? (a.push (e.txt), t = s.exec (e.txt), p =! (! t || void 0! == t [1])): p? a.push (e.txt): a.push (e.txt.replace (c, function (e, t, n, s) {var r, a ; return n? ‘% s’.replace (« % s », n) 🙁 «  » === s.slice (-1)? (r = s.slice (0, -1), a = «  » ) 🙁 r = s, a = «  »), ‘% s1% s2’.replace (« % s1 », r) .replace (« % s2 », a))}))}), a.join ( «  »)}; t.typogrify = function (e) {var t = e; return e.jquery&&e.html&& (t = e.html ()), t = r (t), t = c (t), t = u (t), t = i (t), t = p (t), t = a (t)}; va r l, o, u = t function (e) {var t, n, r = f (e), a = [], p = [], c = «  », i = «  », l =! 1, o = «  »; return r.forEach (function (s) {if (« tag » === e.type) a.push (e.txt), null! == (i = s.exec (e.txt)) && (c = i [2] .toLowerCase (), i [1]? (p.length> 0&&c === p [p.length-1] &&p.pop (), 0 === p.length&& (l =! 1 )) 🙁 p.push (c), l =! 0)); else {if (n = (n = e.txt) .replace (/ (rock) ‘n’ (roll) / gi, « $ 1 ‘n’ $ 2 « ), t = n.Slice (-1),! l) switch (n = g (n)), n = h (n), n = d (n), n = x (n )) {case « ‘ »: n = / S / .test (o)? « ‘ »: « ‘ »; break; case ‘ »‘: n = / S / .test (o)? » « : » « ; break; default: n = m (n)} o = t, a.push (n)}}), a.join ( » « )}, f = t.tokenize = function (s) { for (var t, n = [], s = 0, r = / ([^] *>) / gi; null! == (t = r.exec (e));) {var a = t [1 ], p = t [2]; a&&n.push ({type: « text », txt: a}), n.push ({type: « Tag », txt: p}), s = r.lastIndex} return r.lastIndex) / g, « $ 1 -« )}, d = t.smartEllipses = function (s) {return e.replace (/…/ g, « … »). Replace (/ . . ./ g, « … »)}, x = t.smartBackticks = function (s) {return e.replace (/ «  / g, «  » « ). replace (/  » / g, «  » « )}, m = t.smartQuotes = function (s) {var t = » (? =% s \ B) « . Replace (« % s « , » [! « # \ $ \% \ ‘() *, -. \ /:;? \ @ \ [\\] \ ^ _` {|} ~] « ), s = « [^ \ \ t \ r n \ [\ {\ (\ -] », r = n (« (\ s | | – | & [mn] dash; | – | – | ȁ [34];) ‘(? = \ w) « , » g « ), a = n ( » (« s »)’ (?! \ s | s \ b | \ d ) « , » g « ), p = n ( » (« s ») ‘(?! \ s | s \ b) « , » g « ), c = n (‘ (\ s | | – | & [mn] dash; | – | – | ȁ [34];) « (? = \ w) ‘, » g « ), i = n (‘ » (? = \ s) ‘, « g « ), l = n ( » (« ) s’) » ‘, « g »); return e.replace (n (« ^’% s » .replace (« % s », t), « g ») , « ‘ »). replace (n (‘ ^ « % s’.replace (« % s « , t), » g « ), » « ). replace (/ « ‘(? = w) / g, » « ‘ »). replace (/ ‘ »(? = w) / g, »‘ «  »). Replace (/ b ‘(? = D {2} s) / g, « ‘ »). Replace (r, « $ 1 ‘ »). replace (a, « $ 1 ‘ »). replace (p, « $ 1 ‘$ 2 »). replace (« ‘ », « ‘ »). replace (c, « $ 1 » « ). replace (i, » «  ») .replace (l, « $ 1 » « ). replace (‘ »‘, «  » « )}, y = function (s) { this._wrapped = e}, v = function (e, n) {y.prototype [e] = function () {return e = n.call (t, this._wrapped), this._chain? t (e). chain (): e; var e}}; for (l in t) t.hasOwnProperty (l) && ((o = t [l]) &CS SEANDCHARo.constructor&&o.call&&o.apply) ); y.prototype.chain = function () {return this._chain =! 0, this}, y.prototype.value = function (function) this._wrapped}} (this);
}, {}];
window.modules [« 1334 »] = [function (required, module, export) {« use strict »; const universalAgora = required (1336), universalRest = required (35), universalQuery = required (1335), _ get = required (9); Function searchByQueryWithRawResults (e, r) {const t = `// $ {r.site.host} $ {80! == r.site.port? `: $ {R.site.port}`: «  »} $ {r.site.path} / _ agora / _search`; return universalRest.post (t, e,! 0)} function getProducts (e, r, t) {return searchByQueryWithRawResults (universalAgora.buildProductsQuery (e), r) .then (e => {const r = universalQuery.formatSearchResult (e ); return {total: e.hits.total, products: t? universalAgora.filterByLocale (r): r}})} function getMerchantsList (e) {return searchByQueryWithRawResults (universalAgora.buildMerchantsAggregation (1e6, _get (e, « site. agoraLocale « )), e) .then (universalQuery.formatAggregationResults ({aggregation name: » dealer « , field: » key « , subfield: » name « ))} module.exports.getProduct = universalAgora.getProduct, module.exports.getProducts = getProducts, module.exports.getMerchantsList = getMerchantsList, module.exports.searchByQueryWithR awResults = searchByQueryWithRawResults, module.exports.buildMerchantsByUrlQuery = universalAgora.buildMerchantsByUrlQuery;
}, {9: 9, 35: 35, 1335: 1335, 1336: 1336}];
window.modules [« 1335 »] = [function (required, module, export) {« use strict »; const _map = require (66), _ get = require (9), _ isArray = require (165), _ set = require (123), _ isObject = require (102), _ cloneDeep = require (84), _ uniq = require (107); function formatSearchResult (e) {return _map (e.hits.hits, « _ source »)} function newQuery (e) {if (! e) throw new Error (« An » index « is required to create a query »); return {index: e, type: « _ doc », body: {query: {}}}} function addShould (e, o) {var t = _get (e, « body.query.bool.should », void 0 ), r = _isArray (o); return t? r? _set (e, « body.query.bool.should », t.concat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.should », t)): _ set (e, « body.query.bool.should », r? o: [o]), e} function addMust (e, o) {var t = _get (e, « body.query.bool.must », void 0), r = _isArray (o); return t? r? _set (e, « body.query.bool.must », t.concat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.must », t)): _ set (e, « body.query.bool.must », r? o: [o]), e} Function addMustNot (e, o) {var t = _get (e, « body.query.bool.must_not », void 0), r = _isArray (o); return t? r? _set (e, « body.query.bool.must_not », t. concat (o)) 🙁 t.push (o), _ set (e, « body.query.bool.must_not », t)): _ set (e, « body.query.bool.must_not », r? o: [o]), e} function addFilter (e, o) {var t = _get (e, « body.query.bool.filter », void 0); if (! _ isObject (o)) throws a new error (« filter ») query required to be an object « ); returns t? _isArray (t)? (t.push (o), _ set (e, « body.query.bool.filter », t)): _ set (e, « body. query.bool.filter », [_ cloneDeep (t), o]): _ set (e, « body.query. bool.filter « , o), e} Function addMinimumShould (e, o) {if ( » number « ! = typeof o) throw new Error ( » A number is required as the second argument « ); return _set (e, » body .query.bool.minimum_should_match « , o), e} Function addSort (e, o) {var t = _get (e, » body.sort « ); return _isArray (t) || _set (e, » body.sort « , t = []), t.push (o), e} function addSize (e, o) {if (! o&&0! == o) return e; if (o = parseInt (o), isNaN (o) ) triggers a new error (`the second argument must be a number: $ {o}`); return _set (e, « body.size », o)} function addFrom (e, o) {if (! o&&0! == o) returns e; if (o = parseInt (o), isNaN (o)) throws a new error (`The second argument must be a Be a number: $ {o} `); return _set (e, « body.from », o)} function onlyWithTheseFields (e, o) {if (! _ isArray (o)) throws a new error (« The second argument must be an array »); return _set (e, « body._source.include », _ uniq (o)), e} function onlyWithinThisSite (e, o) {return o.subsiteSlug? AddFilter (e, {term: {subsite: o. SubsiteSlug}}) 🙁 addFilter (e, {term: {site: o.slug}}), addMustNot (e, {exists: {field: « subsite »}} )), e} function onlyWithinThisDomain (e, o) {return addFilter (e, {Prefix: {canonicalUrl: `http: // $ {o.host}`}}), e} Function within this SiteAndCrossposts (e, o ) {var t = {term: {}}, r = {bool: {should: [], minimum_should_match: 1}}; return t.term [« crosspost ». (o.subsiteSlug || o.slug)] =! 0, r.bool.should.push (t), o.subsiteSlug? r.bool.should.push ({term: {subsite: o.subsiteSlug}}): (r.bool.should.push ({term: {site: o.slug}}), addMustNot (e, {exists: {field: « subsite »}})), addFilter (e, r), e} Function within thisDomainOrCrossposts (e, o) {return addShould (e, {term: {[`crosspost. $ {o.subsiteSlug || o .slug} `] :! 0}}), addShould (e, {Prefix: {canonicalUrl:` http: // $ {o.host} `}}), addMinimumShould (e, 1), e} Function moreLikeThis ( e, o, t) {let r = {fields: [« tags »], like: {_index: e.index, _type: « _ doc », _ id: o}, include:! 1, min_term_freq: 1, max_query_terms: 12, min_doc_freq: 1}; return {more_like_this: Object.assign (r, t)}} function addAggregation (e = {}, o) {const {body: t = {}} = e; return o? (t.aggs? _set (e, « body.aggs », Object.assign (t.aggs, o)): _ set (e, « body.aggs », o), e): e} Function formatAggregationResults ({aggregationName : e = «  », field: o = «  », subfield: t = «  », skipEmpty: r =! 0}) {return function (s = {}) {let u = _get (s, `aggregations. $ {E } $ {t? « . » T « . »: « . »} Buckets`, []); return r&& (u = u.filter (e => 0! == _ get (e, « doc_count », 0))), u.map (e => e [o] || «  »)}} function addGeo (e, o) {if (! _ isArray (o)) throws a new error (« The second argument must be an array »); if (2! == o.length) throw new Error (« Array must be length 2 »); if (o.some (isNaN)) throw new Error (« Array may only contain numbers »); return _set (e, « body.query.geo_shape.location.shape.type », « point »), _ set (e, « body.query.geo_shape.location.shape.coordinates », o), e} function combinFunctionScoreQueries (e, o) {let t = _cloneDeep (_get (e, « body.query », {})), r = _cloneDeep (_get (o, « body.query », {})), s = _get (e , « body.sort »); return _set (e, « body.query », {}), _ set (e, « body.query.function_score.functions », []), e.body.query.function_score.functions.push ({filter: t , weight: 20}), e.body.query.function_score.functions.push ({filter: r, weight: 10}), e.body.query.function_score.score_mode = « max », e.body. query.function_score.min_score = 10, _isArray (s) || _set (e, « body.sort », s = []), s.unshift ({_ score: « desc »}), e} Function addNestedObjQuery (e, o, t) {if (! e) solves a new one Error from (« There is no basic query to perform the addNestedObjQuery ion operation »); if (! o) throws a new error (« There is no nested object path on which to run the nested query »); if (! t) throws a new error (« There is no nested query path to run the nested query against »); return _set (e, « nested », {path: o, query: t}), e} function addMatchAll (e) {return _set (e, « body.query », {match_all: {}}), e} function addMultiMatch (e, o) {const t = _get (e, « body.query.bool.must », void 0), {fields: r, type: s, character string: u} = o, i = {multi_match: { query: u, fields: r, type: s}}; return t? (t.push (i), _ set (e, « body.query.bool.must », t)): _ set (e, « body.query.bool.must », [i]), e} module .exports = newQuery, module.exports.addGeo = addGeo, module.exports.addAggregation = addAggregation, module.exports.addShould = addShould, module. exports.addFilter = addFilter, module.exports.addMust = addMust, module.exports.addMustNot = addMustNot, module.exports.addMinimumShould = addMinimumShould, module.exports.addSort = addSort, module.exports.addSize = addSize, module.exports. addFrom = addFrom, module.exports.onlyWithTheseFields = only with synthesis fields, module.exports.onlyWithinThisS ITE = only within this site, module.exports.onlyWithinThisDomain = only within this domain, module.exports.withinThisSiteAndCrossposts = withinThisSiteAndCrossposts, module.exports.withinThisDomainOrCrossposts = withinThisDomainOrCrossposts, module.exports.formatAggregationResults = formatAggregationResults, module.exports.formatSearchResult = formatSearchResult, module.exports.moreLikeThis = moreLikeThis, module.exports.combineFunctionScoreQueries = combinFunctionScoreQueries, module.exports.addNestedObjQuery = addNestedOblljQuultiMatch = addNestedOblljQuultiMatch = addNestedOblljQuery, module.export = addMatchAatchA = addMatchAlls. ;
}, {9: 9, 66: 66, 84: 84, 102: 102, 107: 107, 123: 123, 165: 165}];
window.modules [« 1336 »] = [function (required, module, export) {(function (process, __ file name) {(function () {
« use strict »; const _forEach = require (56), _ get = require (9), _ filter = require (149), _ map = require (66), _ isEmpty = require (103), urlParse = require (67), log = require (20) .setup ({file: __ filename}), queryService = require (1335), universalRest = require (35), AGORA_HOST = window.process.env.AGORA_HOST, AGORA_ELASTIC_PREFIX = window.process.env.AGORA_ELASTIC_PREFDPIC, AGORA_FELAST ? `$ {AGORA_HOST} / api / v1`: null, requestHeader = { » Content Type « : » application / json « }, PRODUCTS_INDEX = » Agora Products « , AFFILIATES_INDEX = » Partners « , RETAILERS_INDEX = » Retailers « , FILTER_KEY = { Dealer: « Name », Partner: « Partner »}, URL_RE = / ^ https?: / /.*$/; Function getProducts (e, t) {const {limit: r = 100, start: a = 0, search: s = «  », sortDate: i = « desc »} = e, n = `$ {AGORA_ENDPOINT} / products? limit = $ {r} &start = $ {a} &search = $ {encodeURIComponent (s)} &sortDate = $ {i} `; return fetch (n) .then (handleResponse) .then (e => t? filterByLocale (e, t): e) .then (e => ({total: e. length, products: e})). catch (handleError (n))} function getProduct (e, t) {const r = `$ {AGORA_ENDPOI NT} / products / $ {e}`; if (! AGORA_ENDPOINT) triggers a new error (« No Agora endpoint was specified »); if (« string »! = Typeof e) triggers a new error (« Requirement must provide a product id »); return fetch (r) .then (handleResponse) .then (e => t? filterByLocale (e, t): e) .catch (handleError (r))} function postProduct (e) {const t = `$ {AGORA_ENDPOINT} / products`, r = {method: « POST », header: requestHeader, body: JSON.stringify (e)}; Return value (t, r) .then (handleResponse) .catch (handleError (t))} Function putProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {Method: « PUT », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function patchProduct (e, t) {const r = `$ {AGORA_ENDPOINT} / products / $ {e}`, a = {method : « PATCH », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteProduct (e) {const t = `$ {AGORA_ENDPOINT} / products / $ {e}`; return fetch (t, {method: « DELETE », header: requestHeader}). Then (handleResponse) .catch (handleError (t))} function getMerchantList (e) {const {limit: t = 100, fields: r = «  »} = e; return Promise.resolve ([{name: « Amazon »}]). catch (handleError («  »))} function getMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`; if (« string »! = typeof e) throws a new error (« Request must specify a merchant ID »); return fetch (t) .then (handleResponse) .catch (handleError (t))} function patchMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`, a = {method:  » PATCH « , header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function postMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants`, r = {method: » POST « , header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function putMerchant (e, t) {const r = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`, a = {method : « PUT », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteMerchant (e) {const t = `$ {AGORA_ENDPOINT} / Merchants / $ {e}`; return fetch (t, {method: « DELETE », head ers: requestHeader}). then (handleResponse) .catch (handleError (t))} function migrateMerchants (e) {const t = `$ {AGORA_ENDPOINT} / Händler / migrate-Affiliate`, r = {method: » POST « , header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function getRetailers (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT } / Retailer? limit = $ {t} &start = $ {r} `; return fetch (a) .then (handleResponse) .then (e => ({total: e.length, retailer: e})). catch (handleError (a))} function getRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer / $ {e}`; return fetch (t). then (handleResponse) .catch (handleError (t))} function postRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer`, r = {method: » POST « , header: requestHeader, body: JSON.stringify ( e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} Function putRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / retailer / $ {e}`, a = {method : « PUT », headers: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function deleteRetailer (e) {const t = `$ {AGORA_ENDPOINT} / retailer / $ {e}`; return fetch (t, {method: « DELETE », header: requestHeader}). then (handleResponse) .catch (handleError (t))} function getAffiliates (e) {const {limit: t = 100, start: r = 0} = e, a = `$ {AGORA_ENDPOINT} / affiliates? limit = $ {t} &start = $ {r} `; return fetch (a) .then (handleResponse) .then (e => ({total: e.length, Affiliates: e})). catch (handleError (a))} function getAffiliateRetailers (e) {const t = `$ {AGORA_ENDPOINT} / retailers / $ {e} / affiliates`; return fetch (t) .then (handleResponse) .catch (handleError (t))} function getAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates / $ {t}` ; return fetch (r) .then (handleResponse) .catch (handleError (r))} function postAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates`, a = {method : « POST », header: requestHeader, body: JSON.stringify (t)}; Return value (r, a) .then (handleResponse) .catch (handleError (r))} Function putAffiliateRetailer (e, t, r) {const a = `$ {AGORA_ENDPOINT} / Retailers / $ {e} / Affiliates / $ { t} `, s = {method: » PUT « , header: requestHeader, body: JSON.stringify (r)}; return fetch (a, s) .then (handleResponse) .catch (handleError (a))} Function deleteAffiliateRetailer (e, t) {const r = `$ {AGORA_ENDPOINT} / Retailer / $ {e} / Affiliates / $ {t } `; return fetch (r, {method: « DELETE », header: requestHeader}). catch (handleError (r))} function postLocale (e) {const t = `$ {AGORA_ENDPOINT} / locales /`, r = {method: « POST », header: requestHeader, body: JSON.stringify (e)}; return fetch (t, r) .then (handleResponse) .catch (handleError (t))} function patchLocale (e, t) {const r = `$ {AGORA_ENDPOINT} / locales / $ {e}`, a = {method : « PATCH », header: requestHeader, body: JSON.stringify (t)}; return fetch (r, a) .then (handleResponse) .catch (handleError (r))} function handleResponse (e) {try {return e.json (). then (t => {if (e.status> = 400) {const e = _get (t, « message.details [0] .message »); throw a new error (e)} return t})} catch ( e) {throw new Fehler (e.message)}} function handleError (e) {return t => {throw log (« warn », `failed request to $ {e}`, t), new error (`request to $ {e} failed `)}} Function buildProductsCross y ({search: e = » « , limit: t = 100, start: r = 0, sortDate: a = » « , filter: s, locale: i}) {const n = queryService (PRODUCTS_INDEX), c = s&&Object .keys (s) .length? Object.keys (s) .filter (e => Array.isArray (s [e]) &&s [e] .length): [], o = {}, l = {}; if (prependElasticPrefix (n), e || c.length || i || queryService.addMatchAll (n), i&& (queryService.addMust (o, {match: {« locales.locale »: i}}), queryService. addMust (l, {match: {« Merchants.locale »: i}})), e) if (isURL (e)) queryService.addMust (n, [queryService.addNestedObjQuery ({}, « Merchants », {match: {« Merchants.buyUrl »: e}})]); else {const t = {}; queryService.addShould (t, [{match: {« locales.productId »: e}}, {match: {« locales. name »: {query: e, boost: 2}}}]), queryService.addMinimumShould (t , 1), queryService.addMust (o, _get (t, « body.query »))} if (c.length) {const e = {}; c.forEach (t => {const r = s [t], a = FILTER_KEY [t], i = {}; a&& (i [`Dealer. $ {a}`] = r, queryService.addShould (e, {Terms: i}))}), queryService.addMinimumShould (e, 1), queryService.addMust (l, _get (e, « body.que ») ry « ))} return _isEmpty (o) || queryService.addMust (n, [queryService.addNestedObjQuery ({}, « locales », _ get (o, « body.query »))]), _ isEmpty (l) || queryService.addMust (n, [queryService.addNestedObjQuery ({}) , « Dealer », _ get (l, « body.query »))]), queryService.addSize (n, t), r> = 0&&queryService.addFrom (n, r), « desc » === a || « asc » === a? queryService.addSort (n, {updatedAt: {order: a}}): e&&queryService.addSort (n, {_ score: {order: « desc »}}), n} function prependElasticPrefix ( e) {return e.index = AGORA_ELASTIC_PREFIX? `$ {AGORA_ELASTIC_PREFIX} _ $ {e.index}`: e.index, e} Function buildMerchantsAggregation (e = 1e6, t) {const r = queryService (PRODUCTS_INDEX); return prependElasticPrefix (r), querySe rvice.addMust (r, {match: {active:! 0}}), t&&queryService.addMust (r, queryService.addNestedObjQuery ({}, « Dealer ») _get (queryService.addMust ({}, {match: {« Merchants.locale »: t}}), « body.query « ))), queryService.addAggregation (r, {Merchants: {nested: {Path: » Merchants « }, aggs: {name: {Terms: {field: » Merchants.name « , size: e}}}}} ), queryService.addSize (r, 0), r} function isURL (e) {return URL_RE.test (e)} function filterByLocale (e, t, r = {locales: « US »}) {const a = array. isArray (e); if (_isEmpty (e)) a? [] returns: {}; const s = [« locales », « dealers »], i = a? e: [e], n = Object.keys (r), c = _map (i, e => {const a = Object.assign ({}, e); return _forEach (s, s => {if (Object .keys (a)). contains (s)) {const i = t? _filter (e [s], [« locale », t]): e [s]; a [s] = i,! i.length&&n .includes (s) && (a [s] = (_ filter (e [s], [« locale », r [s]]) || []). map (e => (e.id = null, e.locale = t, e)))}}), a.name = _get (a, « locales [0] .name », «  »), a}); return a&&c.length? c: _get (c, « [0] », {})} function searchByQueryWithRawResults (e, t) {const r = `// $ {t.site.host} $ {80! == t.site.port? `: $ {t.site.port}`: «  »} $ {t.site.path} / _ agora / _search`; return universalRest.post (r, e,! 0)} function buildMerchantsByUrlQuery (e) {const t = queryService (PRODUCTS_INDEX); return prependElasticPrefix (t), queryService. addNestedObjQuery (t.body.query, « Händler », {match: {« Merchants.buyUrl »: e}}), t} function ge tAffiliatesByLocale (e, t) {const r = queryService (AFFILIATES_INDEX); return prependElasticPrefix (r), queryService.addMust (r, {match: {locale: e}}), queryService.addSize (r, 1e3), queryService.addSort (r, {name: « asc »}), searchByQueryWithRawResults (r , t) .then (e => _ get (e, « Hits.hits », []). map (e => _ get (e, « _ source »), {})))} function buildRetailersQuery ({ search: e = «  », limit: t = 50, start: r = 0, direction: a = « asc », locale: s = « US »}) {const i = queryService (RETAILERS_INDEX); return prependElasticPrefix (i), queryService.addMust (i, {match: {locale: s}}), e? queryService.addMultiMatch (i, {fields: [« Name ^ 2 », « Domains »], string: e, type: « phrase prefix »}) 🙁 queryService.addSort (i, {« name.keyword »: a}) , queryService.addSize (i, t), r> = 0&&queryService.addFrom (i, r)), i} function getRetailersList (e, t) {return searchByQueryWithRawResults (buildRetailersQuery (e), t) .then (e => ( {total: _get (e, « Hits.total », 0), retailer: _get (e, « Hits.hits », []). map (e => _ get (e, « _ source », {}) )})} Function getRetailersByAffiliateId (e, t, r) {const a = queryService (RETAILERS_INDEX); r eturn e? (PrependElasticPrefix (a), queryService.addMust (a, {match: {locale: r}}), queryService .addMust (a, [queryService.addNestedObjQuery ({}, « AffiliateRetailers », {match: {« AffiliateRetailers) .affiliateId »: e}})]), queryService.addSize (a, 1e4), queryService.addSort (a, {« name.keyword »: « asc »}), searchByQueryWithRawResults (a, t) .then (e => _get (e, « Hits.hits », []). map (e => _ get (e,  » _ source « , {}))): Promise.reject ()} Function getMerchantsList (e) {return searchByQueryWithRawResults (buildMerchantsAggregation (1e6, _get (e, « site.agoraLocale »)), e) .then (queryService.formatAggregationResults ({aggregationName: « Merchants », field: « key » « , Subfield: « name »}))} function queryRetailersByUrl (e, t, r) {const a = urlParse (e) .host.split (« www. »). join («  »), s = queryService (RETAILERS_INDEX); return queryService.addMust (s, {match: {locale: r}}), queryService.addMust (s, {match: {Domains: a}}), prependElasticPrefix (s), queryService.addSize (s, 10), searchByQueryWithRawResults (s, t) .then (e => _ get (e, « hit.hits », []). map (e => _ get (e, « _ source », {}))} function queryRetailersByNa me ( e, t, r) {const a = queryService (RETAILERS_INDEX); return queryService.addMust (a, {match: {locale: r}}), queryService.addMust (a, {match: {« name.keyword »: e }}), prependElasticPrefix (a), queryService.addSize (a, 10), searchByQueryWithRawResults (a, t) .then (e => _ get (e, « Hits.hits », []). map (e => _get (e, « _ source », {}))}} require (223), module.exports = {buildProductsQuery: buildProductsQuery, buildMerchantsAggregation: buildMerchantsAggregation, getProducts: getProducts, getProduct: getProduct, postProduct:. postProduct, deleteProduct : deleteProduct, getMerchantList: getMerchantList, getMerchant: getMerchant, postMerchant: postMerchant, patchMerchant : Patch merchant, putMerchant: putMerchant, deleteMerchant: deleteMerchant, migrateMerchants: migrateMerchants, getRetailers: getRetailers, getRetailersList: getRetailersList, getRetailer: getRetailer, post retailer: post retailer, putRetailer: putRetailer, deleteRetailer: deleteRetailer, getRetailersByAffiliateId: getRetailersByAffiliateId, getAffiliates: getAffiliates, GetAffiliateRetailers: getAffiliateRetailers , getAffiliateRetailer: getAffiliateRetailer, post affiliate retailer: post affiliate retailer, putAffiliateRetailer: putAffiliateRetailer, deleteAffiliateRetailer: deleteAffiliateRetailer, isURL: isURL, filterByLocale: filterByLocale, patch locale: patch locale, post locale: post locale, buildMerchantsByUrlQuery: buildMerchantsByUrlQuery, getAffiliatesByLocale: getAffiliatesByLocale, searchByQueryWithRawResults: searchByQueryWithRawResults, getMerchantsList: getMerchantsList, queryRetailersByUrl : queryRetailersByUrl, queryRetailersByName: queryRetailersByName};

}). call (this)}). call (this, require (18), « / services / universal / agora.js »)}, {« 9 »: 9, « 18 »: 18, « 20 »: 20, 35: 35, 56: 56, 66 : 66, 67: 67, 103: 103, 149: 149, 223: 223, 1335: 1335}] ;;
window.modules [« 1337 »] = [function (required, module, export) {« use strict »; const _map = require (66), _ mapValues ​​= require (218), _ reduce = require (106), _ assign = require (153), _ get = require (9), _ pickBy = require (154), _ find = require (59), AffiliateFields = [« siteShortKey », « pageUri », « productId », « utmMedium », « utmSource », « sessionCount », « format », « utmCampaign », « referrer », « deviceAbbreviation » , « zone »], AffiliateSettings = {amazon: {Domains: [« amazon.com », « amazon.co.uk »], subtagKey: « ascsubtag » « , maxLength: 99, separator: » Standard « , coding:! 1}, narrative: {Domains: [« shop-links.co/ »‹,subtagKey: »u1″,maxLength:99,delimiter: »standard », encode:! 0}, rakuten: {Domains: [« click. linksynergy.com/deeplink », »linksynergy.walmart.com/deeplink »‹,subtagKey: »u1″,maxLength:72,delimiter: »standard »,encode:! 1}, shareasale: {Domains: [« shareasale.com « ], subtagKey: » afftrack « , maxLength: 99, separator: » standard « , encode:! 1}, Skimlinks: {Domains: [ » go.redirectingat .com « ], subtagKey: » xcust « , maxLength: 50, Delimiter: » old « , encode:! 1}, effect: {Domains: [], subtagKey: « subId2 », maxLeng th: 99, separator: « Standard », coding:! 1}, Avantlink: {Domains: [« avantlink.com »], SubtagKey: « ctc », maxLength: 64, separator: « old », coding:! 1}, cj: {Domains: [« tkqlhce.com », « jdoqocy.com », « dpbolvw.net », « anrdoezrs.net », « kqzyfj.com »], subtagKey: « sid », maxLength: 64, Separator: « old », code:! 1, joinBy: « / », assignBy: « / », positioned:! 0, position: « after », positionKey: « type / dlg / »}, partnerize: {Domains: [« prf .hn »], subtagKey: « pubref », maxLength: 100, separator: « old », encode:! 1, joinBy: « / », assignBy: « : », positioned:! 0, position: « before », positionKey: « target »}, Pepperjam: {Domains: [« gopjn.com », « pntrac.com », « pjtra.com », « pjatr.com », « pntrs.com » , « pntra.com »], subtagKey: « sid », maxLength: 100, separator: « old », encode:! 1}, awin: {Domains: [« awin1.com »], subtagKey: « pref1 », maxLength: 100, separator: « old », encode:! 1, positioned:! 0, position: « before », positionKey: « ued »}}, subtagDictionary = {siteShortKey: «  », pageUri: « p », productId: « i », zone: « z », deviceAbbreviation: « d », utmSource: « s », utmMedium: « m », utmCampaign: « c », sessionCount: « u », referrer: « r », format: « t »}, separator s = {standard: [« [« , « ] »] , old: [« __ », « _ »]}; Function parseValueFromSubtag (e, t, i) {const a = t [0] et [1], s = i.split (a) [1] || «  »; return s? s.split (t [0]) [0]: null} function parseSubtag (e, t = delimiters.standard) {return _pickBy (_mapValues ​​(subtagDictionary, i => parseValueFromSubtag (i, t, e))} function generateSubtag ( e, t, i = limiter.standard, a =! 1) {const s = (e => t => `$ {e [0]} $ {t} $ {e [1]}`) (i) ; let n = _reduce (AffiliateFields, (t, i) => {const a = s (subtagDictionary [i]), n = e [i]; return t (n? an: «  »)}, «  »); return a&& (n = encodeURIComponent (n)), n} Function applySubtagMaxlength (e, t) {var i = t-3 * (e .split (« , »). length-1 e.split (« | »). length-1); return e.substr (0, i)} function getSubtagData ({getters: e, fields: t = [], visitState: i, locals: a, productLink: s}) {let n = {}; return t.forEach (t => {n [t] = e [t] &&e [t] ({visitState: i, locals: a, productLink: s})}), n} function parseQuery (e = «  ») {return e.split (« & »). redu ((e, t) => {const i = t.split (« =) ») [0], a = t.split (« = ») [1] ; return void 0! == a&CSS EANDCHAR (e [i] = a), e}, {})} func tion processSubtagPosition ({url: e, positionKey: t, subtagKey: i, position: a = « after », subtagString: s, joinBy: n, assignBy: o} = {}) {const [r, l] = e. split (t), u = `$ {i} $ {o} $ {s}`, g = []; if (« after » === a) {if (! l) return e; const [a, s = «  »] = l.split (`$ {i} $ {o}`), d = s.split (n) .slice (1) .join (n); g.push (`$ {r} $ {t}`, u), a&&g.push (a), d&&g.push (d)} if (« before » === a) {const [e, a =  » « ] = r.split (` $ {i} $ {o} `), s = a.split (n) .slice (1) .join (n); g.push (e), s&&g.push (s), g.push (u, `$ {t} $ {l}`)} return g.reduce ((e, t) => {return e.slice ( -1) === n&& (e = e.slice (0, -1)), e.length? [E, t] .join (n): t}, «  »)} function processSubtag ({getters: e , Affiliate: t, url: i, visitState: a = {}, local: s}) {const n = AffiliateFields, o = _get (AffiliateSettings [t], « subtagKey »), r = _get (AffiliateSettings [t], « maxLength »), l = _get (AffiliateSettings [t], « encode »), u = _get (AffiliateSettings [t], « separator »), g = _get (AffiliateSettings [t], « positioned »,! 1), d = _get (AffiliateSettings [t], « Position »), c = _get (AffiliateSettings [t]], « positionKey »), p = _get (AffiliateSettings [t], « assignBy », « = »), m = _get (AffiliateSettings [t], « joinBy », « & »), f = delimiter [u]; let b, y, S = i. indexOf (« ? »)> = 0? i.split (« ? »). pop (): «  », h = parseQuery (S), _ = getSubtagData ({getters: e, fields: n, visitState: a, local: s, productLink: i}); return o&& (y = h [o] || «  », y = applySubtagMaxlength (b = generateSubtag (_ = _ assign (parseSubtag (y, f), _ pickBy (_)), t, f, l), r) , h [o] = y, S = _map (h, (e, t) => `$ {t} = $ {e}`) .join (« & »), i = g? processSubtagPosition ({url: i, positionKey: c, subtagKey: o, position: d, subtagString: y, joinBy: m, assignBy: p}): i.split (« ? ») [0] `? $ {S}`), i} Function getAffiliate (e) {const t = Object.keys (AffiliateSettings); Return _find (t, t => _ find (AffiliateSettings [t] .domains, t => e.includes (t. ToLowerCase ()))) || «  »} Function createSubtagProcessor (e) {return ({url: t, visitState: i, locals: a, affiliate: s}) => (s = getAffiliate (t) || s)? processSubtag ({getters: e, url: t, Affiliate: s, visitState: i, Locals: a}): «  »} module.exports.generateSubtag = generateSubtag, module.exports.getAffiliate = getAffiliate, module.expo rts.createSubtagProcessor = createSubtagProcessor, module.exports.processSubtag = processSubtag;
}, {9: 9, 59: 59, 66: 66, 106: 106, 153: 153, 154: 154, 218: 218}];
window.modules [« article-nav.client »] = [function (required, module, export) {« use strict »; const dom = required (4), _ throttle = required (53), $ visibility = required (5), $ popup = require (68), $ gtm = require (3), {reportSocial: reportSocial} = require (69) , auth0 = require (7); module.exports = (t => {let e = dom.find (« .page-header »), i = dom.find (« . article-content »), r = dom.find (t, « . deepscroll- headline « ), o = dom.find (t, ». deepscroll-rubric « ), s = dom.find (t, ». deepscroll-rubric-sponsored « ), l = dom.find (« . article .article- header .rubric « ), n = dom.find ( » # deepscroll_center_divider « ), a = dom.find (« . tone paragraph « ), d = dom.find (t, ». logo « ), c = dom. find (t, « . dyn-cut-logo »), p = dom.find (t, « . article-nav-top »), u = dom.find (t, « . article-nav-deepscroll »), m = dom.find (‘link [rel = « canonical »]’), f = m&&m.getAttribute (« href »), g = dom.find (‘meta [property = « og: image »]’)? dom .find (‘meta [property = « og: image »]’) .getAttribute (« content »): «  », h = dom.find (‘meta [property = « og: title »]’)? dom.find (‘meta [property = « og: title »]’). getAttribute (« content »): «  », y = dom.find (t, « . share -link.facebook »), w = dom.find (t , « . share-link.twitter »), v = dom.find (t, « . share-link.pinterest »), b = t.cla ssList.contains (« header-simple »), x = window.getComputedStyle (d, null) .getPropertyValue (« – targetFlexBasis »), L = window.getComputedStyle (d, null) .getPropertyValue (« – verticalStart ») || 0, C = window.getComputedStyle (d, null) .getPropertyValue (« – verticalEnd ») || 0, $ =! 1, _ = 55; Function k () {_ = parseInt (window.getComputedStyle (d, null)) .getPropertyValue (« – stickyTop »)) || _, C = $ visibility.getViewportWidth ()> = 1180? window.getComputedStyle (d, null) .getPropertyValue (« – verticalEndDesktop ») || C: window.getComputedStyle (d, null) .getPropertyValue (« – verticalEnd ») || C} function S () {$ =! 1, P ()} Function P () {let {top: r} = t.getBoundingClientRect (), o = window.getComputedStyle (d, null) .getPropertyValue (« – baseFlexBasis »), s = ox, l = ( _- e.getBoundingClientRect (). top) / _, n = Math.max (0, Math. min (1, l)), m = LC-2, f = Math.round (L- (m * n 2 )), g = Math.ceil (os * n); if (lt? e.classList.add (« Header-After-Scroll »): e.classList.remove (« Header-After-Scroll »), p.style.transfo rm = `translateY ($ {C} px) `, u.style.transform =` translateY ($ {C} px) `, void (d.style.flexBasis = x » px « )} window.scrollY> r? t.classList.add ( » after-scroll  » ): t.classList.remove (« after-scroll »), window.scrollY> r? e.classList.add (« header-after-scroll »): e.classList .remove (« header-after-scroll ») , p.style.transform = `translateY ($ {f} px)`, u.style.transform = `translateY ($ {f} px)`, d.style. flexBasis = g « px », c&& (c. style.flexBasis = g « px »), $ Visibility.getViewportWidth ()> = 1180&&i&&function () {const t = a? 0, e = $ Visibility.getPageOffset (i) .top, r = Math.max (e, t ); Returns Math.max (window.scrollY, document.body.scrollTop)> = r} ()? T.classList .add (« deep-scroll »): t.classList.remove (« deep-scroll »)} Function V (t) {var e = t.currentTarget, i = e.getAttribute (« href »), r = e .getAttribute (« D atenhandle « ), o = $ popup.getPopupClass (e.classList), s = $ Visibility.isBelowPrimaryContent (e)? « bottom »: « top »; $ gtm.reportNow ({event: « social -share-widget », clickLocation: s, socialNetw ork: o}), reportSocial (o), $ Visibility.getViewportWidth ()> = 768&&o&& (t.preventDefault (), $ popup .popWindow (o, r, i))}! function () {const e = _throttle P, 30); if (k (), dom.findAll (t, « . Share-link »). ForEach (t => t.addEventListener (« click », V)), y&& (y.href = « http: // www. facebook.com/sharer/sharer.php? u = « f »? utm_source = fb&utm_medium = s3&utm_campaign = sharebutton-t « ), w&& (w.href = » https: // titter? text = « encodeURIComponent = « f »? utm_source = tw&utm_medium = s3&utm_campaign = sharebutton-t&via = « w.getAttribute ( » data-handle « )), vCSSEANDAR com / pin / create / button /? url = » f « ? utM_mediumampAND = » f « ? utSSEANDCHARvia = » sharebutton-t&description = « encodeURIComponent (h) » &media = « g), b) return; auth0.on ») => {auth0.isSubscriber () &&t.classList.add (« subscribed to »)}), windowener .addEventL is (« scroll », e), window.addEventListener (« resize », S), window.addEventListener (« resize », k), l? l.classList.contains (« rubric-sponsor-story ») &&s? (o.classList.remove (« visible »), s.classList.add (« visible »), s.textContent = l.text || l.textContent) 🙁 o.textContent = l.text || l.textContent , o.href = l.href || « # ») 🙁 n.style.display = « none », o.style.display = « none »); S (), r.textContent = h} ()}) ;;
}, {3: 3, 4: 4, 5: 5, 7: 7, 53: 53, 68: 68, 69: 69}];
window.modules [« nav-search-button.client »] = [function (required, module, export) {« use strict »; const dom = required (4), $ gtm = required (3), {reportSearch: reportSearch} = require (69), openClass = « open », closeClass = « closed »; module.exports = (e => {const s = e, t = dom.find (e, « . nav-search-button-trigger »), n = dom.find (e, « . nav-search-form » ), o = dom.find (e, « . search-input »); function i () {const e = dom.find (« body »); s.classList.toggle (closeClass), s.classList.toggle ( openClass), e.classList.toggle (« disabled »), e.classList.toggle (« search-active »)} function c () {i (), s.classList.contains (openClass) &&o.focus ()} Function a (e) {! S.contains (e.target) &&s.classList.contains (openClass) &&i ()} function) {27 === e.keyCode&&s.classList.contains (openClass) &i (e) {e.preventDefault (), $ gtm.reportCustomEvent ({category: « search », label: « on = » window.location.href, action: o.value}), reportSearch ((o.value || «  »). split («  »), () => n.submit ())}! function (e, s, t) {s&&s.addEventListener (« click », c); t&&t.addEventListener (« submit », d); e.addEventListener (« click », a), document.addEventListener (« keydown », r), e) .addEventListener (« touchend », a), n.addEventListener (« submit », d)} (dom.find ( « body »), t, dom.find (e, « . nav-search-form submit »))});
}, {« 3 »: 3, « 4 »: 4, « 69 »: 69}];
window.modules [« nav-dropdown-button.client »] = [function (required, module, export) {« use strict »; const dom = required (4), visibility = required (5), {reportSearch: reportSearch} = require (69); function getNextSchildren (e) {const t = []; let i = e; for (; i = i.nextElementSibling;) t.push (i); return t} function getMainChildren (e, t) {let i = [], n = e.firstChild; for (; n = n.nextElementSibling;) n.contains (t)? n.isSameNode (t) || (i = i.concat (getMainChildren (n, t)))): i.push (n); return i} function isMobile () {return visibility.getViewportWidth () {let t; const i = e.querySelector (« . nav-dropdown-button-trigger »), n = dom.find (« body »), o = dom.find (« . top »), l = dom.find (« . confetti-list « ), s = dom.find (« . nav-dropdown-button_nymag-homepage «  »), r = dom.find (« header.page-header ») || o, c = dom.find (‘ [data-editable = « main »] ‘), a = dom.closest (e, « . Page header »), d = a? a.querySelectorAll (« . confetti-image.blue »): «  », g = a ? a.querySelectorAll (« . confetti-image.green »): «  », u = a? a.querySelectorAll (« . confetti-image.orange »): «  », f = a? a.querySelectorAll (« . confetti -image.orange2 « ): » « , m = a? a.querySe lectorAll (« . confetti-image.pink « ): » « , p = a? a.querySelectorAll (« . confetti-image.purple « ): «  », h = a? a.querySelectorAll (« . confetti-image. yellow »): «  », y = e.querySelectorAll (« . dropdown-nav-search-form »); function b (e) {let t = e.currentTarget, i = t.querySelector (« . nav-search- input »), n = i? i.value.split («  »): []; e.preventDefault (), reportSearch (n, () => t.submit ())} i.addEventListener (« click » , () => {initializeHeight (e), v ()}); for (let e = 0, t = y.length; e (function (e) {e.classList.remove (« c-right », « c -rightdown », « c-left », « c-leftdown ») }) (e))}, 500)} ()) 🙁 i.setAttribute (« aria-expanded », « true »), t = window .scrollY), e.classList.toggle (« closed »), e .classList.toggle (« open »), n.classList.toggle (« deactivated »), a&&e.isSameNode (s)? function () {if (o.contains (e)) {const e = getMainChildren (o, s); S (e), w (o)} if (c.contains (e)) {const e = getMainChildren (c, s); o. classList.toggle (« hidden component »), w (c), S (e)} e.classList.toggle (« open-mobile »)} (): a&&! y&&r&& (w (r), function () {const i = e .classList.contains (« open »)? 0: t; window.scrollTo ({top: i})} ())} function w (e) { S (getNextSchildren (e))} Function S (e) {e .forEach (e => {e.classList.toggle (« hidden component »)})} n.addEventListener (« click », t => {! E .contains (t.target) &&e.classList.contains (« open ») &&v ()}), document.addEventListener (« keydown », t => {27 === t.keyCode&&e.contains (« open » list « ). ) &&v ()})});
}, {« 4 »: 4, « 5 »: 5, « 69 »: 69}];
window.modules [« follow.client »] = [function (required, module, export) {« use strict »; const _find = require (59), $ popup = require (68); DS.controller (« follow », [function () {function e (e) {this.el = e, this.handle = e.getAttribute (« data handle »)} return e.prototype = {events: {click:  » openFollow « }, openFollow: Function (s) {var t, n, a = $ popup.position, o = $ popup.params, l = {}, r = {w: 780, h: 500}, s = new a (rw, rh), c = this.el.classList; l.handle = this.handle, r.left = s.left, r.top = s.top, n = _find ([{className: « facebook » , url: « https: //facebook.com/ Genealogiehandle Genealogie « ,network: »Facebook » Genealogie {{className: »pinterest »,url: »http://www.pinterest.com/ regis-handle} « ,network : « Pinterest »}, {className: « instagram », URL: « https://www.instagram.com/ Zonenhandle} », network: « Instagram »}, {className: « rss », URL: « http: //feeds.feedburner. com / {handle} « , network: » RSS « }, {class name: » Twitter « , URL: » https://twitter.com/intent/follow?screen_name=phiahandle Genealogie&tw_p=followbutton&variant = 2.0 « , network: » Twitter « }, {className: » snapchat « , URL: » https://www.snapchat.com/discover/ Genealogiehandle} « , netw ork: » Snapchat « }], radio tion (e) {return c.contains (e.className)}), l.url = n.url.replace (« {handle} », l.handle), l.network = n.network, l.name = « Follow » l.handle « on » l.network, t = new o (l, r), window.open (t.address, t.name, t.features), e. PreventDefault ()}}, e}]);
}, {59: 59, 68: 68}];
window.modules [« comment-link.client »] = [function (required, module, export) {« use strict »; const dom = required (4), _ get = required (9), _ isFinite = required (125), ajax = require (124); DS.controller (« comments link », [function () {var t, e = « http: // » document.documentElement.getAttribute (« data-uri ») « .html »; function n (n) {var o; (this.el = n, this.coral_talk_root = n.getAttribute (« data coral talk »), this.commentsCount = dom.find (n, « . comments link number »), this.commentsText = dom.find (n, « . Comments-Link-Text »), this.isNavVariation = n.classList.contains (« Comments-Link-Article-Nav »), this.cutoffCnt = n.getAttribute (« data-cutoffCnt » ) || 1e3, t = `$ {this.coral_talk_root} /api/v1/graph/ql`,this.shouldRenderCommentStream ()) && (o = this.onCommentCountFetched.bind (this), ajax. SendReceiveJson ({method: « GET », URL: t ‘? Query = {Asset (URL: « ‘ e ‘ ») {totalCommentCount}}’, data type: « json »}, function (t, e) {var n = _get (e,  » data.asset.totalCommentCount « , 0); return t? o (t): _ isFinite (n)? void o (null, n): o ( » Unexpected Coral Talk response « )})}) return n. per totype.onCommentCountFetched = function (t, e) {if (t) retur n console.warn (t); e> 0&& (this.isNavVariation&&e1? « s »: «  »), this.el.classList.remove (« no- comments »))}, n.prototype.shouldRenderCommentStream = function () {return-1! == e.indexOf (« @ shared »)}, n}]);
}, {4: 4, 9: 9, 124: 124, 125: 125}];
window.modules [« head-gtm.client »] = [function (required, module, export) {« use strict »; const {getCLS: getCLS, getFID: getFID, getLCP: getLCP} = require (157), isProduction = require (8) (); function reportWebVitals (e) {isProduction || console.log (« reportWebVitals:% O », e); const t = « string » == typeof e.name?e.name.toUpperCase (): e.name; window.dataLayer = window.dataLayer || [], window.dataLayer.push ({event: « analysisEvent », event_action: t, event_category: « Web Vitals », event_label: e.id, event_value: e .delta, eventAction: t, eventCategory: « Web Vitals », eventLabel: e.id, eventNonInt:! 0, eventValue: e.delta, nonInteraction:! 0, transport: « beacon »})} getCLS (e => {e.delta = Math.round (1e3 * e.delta) , reportWebVitals (e)}), getFID (e => {e.delta = Math.round (e.delta), reportWebVitals (e)}), getLCP (e => {e.delta = Math.round (e. delta), reportWebVitals (e)});
}, {« 8 »: 8, « 157 »: 157}];
window.modules [« concert-ads.client »] = [function (required, module, export) {« use strict »; const customMappings = {« Crime-Assault »: « Power », « Career-Money-Productivity »: « Power », « Feminism-Politics-Identity »: « Power », « Culture-Media »: « Culture », Celebrity: « Culture », life: « style », fashion: « style », shopping: « style », weddings: « style », beauty: « style », animals: « self », « learning creativity »: « self »,  » Relationship-friends family « : » self « , » mental health personality social behavior « : » self « , » learning « creativity »: « self », « health-wellness »: « self », parenting: « self », « relationship -Sex dating marriage « : » self « }, striptags = require (70); function installConcertAds () {const e = new URLSearchParams (window.location.search) .get ( » konzert_config_url « ), t = e || window.concertConfigUrl; window._nymPermutive || console.warn (« ConcertAds will be initialized without Permutive »), window.concertAds = createConcertAds (), window.concertAds.loadRemoteConfig (t) .then (function () {window.concertAds.install ()})} function createConcertAds () {co nst e = getAuthStatus (); let t = getD ata (« title »), n = window.location.href, i = getData (« section »), o = «  », a = getData (« type »), r = getData (« vertical ») ; t&& (t = striptags (htmlDecode (t)). split («  »)), n = n.slice (n.lastIndexOf (« / ») 1); const l = {kw: getKeywords (), network: r, page_type: a, entry_group: i, keywords: t, pn: n}; return « Homepage » === a? o = « homepage »: « Section Page » === a&& (o = (o = window.location.pathname). Replace (/ // g, «  »)), i&&-1 === i.index ( «  ») && (o = i), customMappings [i] && (o = customMappings [i]), window.location .hostname.match (/ . Aws ./ i) ​​&& (l.clay_sandbox_env = r ), new window.ConcertAds ({cmd: [], Slots: [], dfpVariables: l, slugPath: « / » or replace (/ – | – / g, « -« ), registered: « not authenticated »! == e, paywallActive: getPaywallStatus (e)})} function getKeywords () {try {const e = window._nymPermutive.article.keywords; return e&&e.length> 0&&e.some (Boolean)? e: (document.querySelector (‘meta [name = « keywords »]’) || document.querySelector (‘meta [property = « article: tag »]’)). getAttribute (« content »). split (« , »). map (function (e) {return e.trim ()})} catch (e) {return}} function getData (e) {if (window._nymPermutive) {if (e in window._nymPermutive) return window._nymPermutive [ e]; if (window._nymPermutive.article&&e in window._nymPermutive.article) return window. _nymPermutive.article [e]; if (window._nymPermutive.user&&e in window._nymPermutive.user) return window._nymPermutive.user [e]}} function htmlDecode (e) {var t = document.createElement (« div »); return t.innerHTML = e, 0 === t.childNodes.length? «  »: t.childNodes [0] .nodeValue} function getAuthStatus () {const e = JSON.parse (localStorage.getItem (« auth0: profile »))), t = e? e [« http://nymag.com/app_metadata »]: null; return t? t.has_subscription? « with the title »: « unentitled »: « not authenticated »} function getPaywallStatus (e) {const t = getData (« totalCount ») || 0; return Boolean (t> = 3&& « with the title »! == e)} window.ConcertAds? installConcertAds (): window.addEventListener (« konzertAdsReady », in StallConcertAds);
}, {« 70 »: 70}];
window.modules [« curated-feed.client »] = [function (required, module, export) {« use strict »; const dom = require (4), lazyLoad = require (111); Function lazyLoadImage (e) {const o = dom.find (e, « img [data-src] »), t = dom.findAll (e, « source [data-srcset] »), a = dom.closest (e , « . feed-item »); if (o&&a) {new lazyLoad.LazyLoader (a, o, t) .init ()}} function handleLazyLoad (e) {(dom.findAll (e, « . feed-item ») || []). forEach (lazyLoadImage)} module.exports = (e => {const o = e.querySelectorAll (« button.show-more »); function t (e) {const {currentTarget: o} = e; if (o) { const e = o.parentElement.parentElement; e&&e.querySelector (« . content »). classList.toggle (« reduced »)}} o&&o.forEach (function (e) {e.addEventListener (« click », t)}) , handleLazyLoad (e)});
}, {« 4 »: 4, « 111 »: 111}];
window.modules [« coral-talk.client »] = [function (required, module, export) {« use strict »; const dom = required (4), store = required (131), visibility = required (5), auth0 = require (7), TALK_AUTH = « talk: auth_token »; let coralEmbed, hasEmbedScriptLoaded =! 1, hasCoralTalkRendered =! 1; function renderComments (e) {if (hasEmbedScriptLoaded&&! hasCoralTalkRendered {const) e.CORAL_TALK_HOST} `, auth_token: getAuthToken (), asset_url: e.TALK_ASSET_URL}; hasCoralTalkRendered =! 0, coralEmbed = window.Coral.Talk.render (e.commentStreamContainer, t)}} Function getAuthToken (e) {e) = e&&e [« http://nymag.com/coral_talk »] || auth0.getTalkJwt (), i = store.get (TALK_AUTH); return t? i&&t == i? i: (store.set (TALK_AUTH, t), t) 🙁 i&&store.remove (TALK_AUTH), null)} function coralLogin () {coralEmbed.login (getAuthToken ())} function embeddedScript (e, t) {let i = document.createElement (« script »); i.type = « text / javascript », i.async =! 0, i.src = e, i.addEventListener (« load », () => {hasEmbedScriptLoaded =! 0, r enderComments (t)}), document.getElementsByTagName (« head ») [0] .appendChild (i) } Function initVerificationMessage () {auth0.isAuthenticated () &&auth0.refresh (); let e = document.querySelector (« . coral -talk-container »); auth0.isAuthenticated () &&! auth0.isEmailVerified () && (e.insertAdjacentHTML (« beforebegin », ‘ n n Please check your account to enable commenting. You haven’t received a confirmation email? Send the email again now . N ‘), document.querySelector (« . Activation-link »). AddEventListener (« click », sendVerificationEmail))} function sendVerificationEmail () {let e = document.querySelector (« . Coral-talk -verify-address » ); return fetch (`https: // $ {window.location.host} / _user / verification-email? user_id = $ {auth0.getUserID ()}`, {method: « GET », headers: {« Content-Type » : « application / json »}}). Then (e => e) .then (t => {t&&200 == t.status? E.innerHTML = « Confirmation email was sent successfully »: e.innerHTML = `$ {t.statusText}`}) . catch (e => console.log (e))} Function tryScriptEmbedding (e, t) {initVerificationMessage (), hasEmbedScriptLoaded? renderComments (t): embeddedScript (t .EMBED_URL, t)} function addVisibilityListener (e, t) {new Visibility.Visible (e, {PreloadThreshold: 750}). On (« Preload », () => tryScriptEmbedding (e, t))} function removeSignInButton (e) {e&&e.parentNode&&dom.removeElement (e)} function (e) {const init Talk -Host « ), i =` $ {t} / static / embedded.js`, n = `http: // $ {document.documentElement.getAttribute ( » data-uri « )}. html`, a = « true » === e.getAttribute (« data-care »), o = -1! == n.indexOf (« @ published »), r = e.querySelector (« . coral-talk-container »), s = e.querySelector (« . coral-talk-btn-signin »), c = {CORAL_TALK_HOST : t, EMBED_URL: i, commentStreamContainer: r, signInButton: s, TALK_ASSET_URL: n} ;! « , () => auth0.showLogin ()), auth0.isAuthenticated () &&removeSignInButton (s)}), auth0.on ( » login « , t => {removeSignInButton (s), getAuthToken (t), visibility.isElementInViewport (e) &&attemptScriptEmbedding (c), hasCoralTalkRendered&&coralLogin ()}), auth0.on (« logout », () => {store.remove (TALK_AUTH)})} module.exports = init;
}, {4: 4, 5: 5, 7: 7, 131: 131}];
window.modules [« choreographer.client »] = [function (required, module, export) {« use strict »; const cookie = required (57), _ get = require (9), _ omit = require (89), {insertSpeedBumpComponents: insertSpeedBumpComponents} = require (94), {insertNewsletterSpeedBumpComponents: insertNewsletterSpeedBumpComponents} = require (93), {generateGrowl: generateGrowl } = require (92), gtm = require (3), {getLocalStorage: getLocalStorage, setLocalStorage: setLocalStorage: setLocalStorage: setLocalStorage: setLocalStorage 37), {reportPaywall: reportPaywall} = require (69), moment = require (42), { getClientHistory: getClientHistory, updateClientHistoryWithPageData: updateClientHistoryWithPageData} = require (95), auth0 = require (7), {scenario: scenario} = require (90), cidReadyEvent = « nymcid-set », cidKey = « nymcid = », isProduction 8) (), logger = require (88) .Logger (() => getLocalStorage (« show_choreographer_logs »)), {Verdon: Verdon} = require (91), TEST_COHORT_FLAG = « optimizeCohort »; Function displayDebug (e = «  ») {if (« Permission »! == e.split (« # »). Pop ()) return; const t = _get (window, « dataLayer [0] .userDetails », {}), o = _get (window, « dataLayer [0] .pageDetails.featureTypes », «  »), n = o.includes (« magazine » )? « magazine »: «  », r = o.includes (« feature »)? « Featured »: «  », i = « Value of the article: » (n || r || « Article »), a = _get (JSON.parse (localStorage.getItem (« auth0: profile »)), « http://nymag.com/app_metadata »), l = « Authentication status: » (a? « Authenticated »: « not authenticated »), s = « Authorization status: » (!! a&&a.has_subscription? « With the title »: « unentitled »), c = Object.keys (_omit (t, « newYorkMediaUserID »)). map (e => `$ {e}: $ {t [e]}`), d = document.body, g = document.createElement (« div »), u = document.createElement (« ul »); [i, l, s, … c] .map (e => {const t = document.createElement (« li »); return t.classList.add (« debug -item »), t.appendChild (document .createTextNode (e)), t}). forEach (e => {u.appendChild (e)}), u.classList.add (« data-bullets »), g .classList.add (« Debug-Choreographer »), g.classList.add (« Display- Debug data « ), g.appendChild (u), d.appendChild (g)} Function initializeChoreographer (e) {const t = e.getAttribute ( » data-site-slug « ), o = pageShouldCountAsView (t), n = auth0.isSubscriber (); return t? getClientId (cidKey, 8e3) .then (e => (logger.h1 (« Choreographer initialized »)), logger.log (`clientId: $ {e}`), logger.log (`Page counts as one view: $ {o} `), window.nymViewsResponse || (o? updateClientHistoryWithPageData (e, t): getClientHistory (e))). then (r => {if (logger.group (), logger.h2 (« Client history »), logger.table (r), logger.groupEnd (), isNCR ()) return; const {scenarios: i, touts: a, testCohort: l = «  »} = readJSONFromScript (e.querySelector (« script »)); if (! (l === (document.body.dataset [TEST_COHORT_FLAG] || «  »))) return; const s = i.map (e => scenario (Object.assign ({}), e, {history: r, siteSlug: t, isSubscriber: n}))). filter (e => (logger.group (), logger.h2 (« Evaluate scenarios »), logger.log (e), logger .groupEnd (), e.shouldShow)). redu ((e, {action: t, min: o, number: n}) => {const r = a.find (({value: e}) => e === t); return r? (e [r.type] = r, e [r.type] .viewCount = no, e): e}, {}); logger.group (), logger.h2 (« Active Touts »), logger.log (s), logger.groupEnd (), executeTouts (e, o, s, r)}). Catch (console.error): console.error (« siteSlug not found. »)} Function documentIncludes component (s) {return document.querySelector (`[data-uri * = » / $ {e} / « ]`)} Function pageShouldCountAsView (e) {const t = « strategist » === e, o = [« product », « product-grid »]. find (e => documentIncludesComponent (e)); return t ||! o} Function executeTouts (e, t, o = {}, n) {const {global: r} = n, i = {featureArticleCount: r.Feature || 0, magazineArticleCount: r.Magazine || 0, standardArticleCount: r.Article || 0, totalArticleCount: r.total || 0}, a = window.concertAds, l = window.ConcertAds; if (o [« Speed-Bump »] && (_get (a, « adsBlocked »,! 0)? insertSpeedBumpComponents (findTemplate (e, « Speed-Bump »), o [« Speed-Bump »], i): a .lifecycle.listenAndPlayback (l.events.slotsInserted, () => {insertSpeedBumpComponents (findTemplate (e, « Speed-Bump »), o [« Speed-Bump »], i)}), o [« Newsletter-Speed- Bump « ] && (_get (a, » adsBlocked « ,! 0)? InsertNewsletterSpeedBumpComponents (findTemplate (e, » Newsletter-Speed-Bump « ), o [ » Newsletter-Speed-Bump « ], i): a.lifecycle. listenAndPlayback (l.events.slotsInserted, () => {insertNewsletterSpeedBumpComponents (findTemplate (e, « news) Letter-Speed-Bump »), o [« Newsletter-Speed-Bump »], i)}), o [« Branded -Growl « ] &&brandedTakeoverTime (o [ » Branded-Growl « ]) &&t) return logger.log ( » should show brand growl « ), void growlManager (findTemplate (e, » brand growl « ), {baseTrackingData: body: o [« brand growl »]. brandedGrowlBody, contentClass: « brand content », cta : o [« Branded-Growl »]. BrandedGrowlCTA, imageUrl: o [« Branded-Growl »]. ImageUrl, Link: o [« Branded-Growl »]. BrandedGrowlLink, Name: o [« Branded-Growl »]. Name, scrollDepth: o [« Branded-Growl »]. BrandedGrowlScrollDepth, title: o [« Branded-Growl »]. BrandedGrowlTitle, toutType: « Branded Growl »}, « # Branded-Growl »); if (t&&o [« content-cliff »]) contentCliff (findTemplate (e, « content-cliff »), o [« content-cliff »], o [« content-cliff »]. viewsLeft, n); else {if (t&&o [« cliff-takeover »]) return / coronavirus news | pivot | paywall exclude / i.test (window._nymGtmPage.tags)? void (isProduction&&logger.log (« Content cliff no-op due to excluded tag match: », window._nymGtmPage.tags)): void cliffTakeover (findTemplate (e, « Paywall reader interface »), i, o [« Cliff- Takeover « ]); if (o [« Growl-Newletter »] ||! o [« Promo-Growl »]) if (o [« Baby-Growl »]) babyGrowl (findTemplate (e, « Paywall Reader Interface »), i, o [« baby growls »]); else {if (! o [« warning-growl-2 »]) return o [« warning-growl »] &&shouldWarn ()? (setContentCliffWarningDisplayed (), logger.log (« should show warning »), void growlManager (findTemplate (e, « warning-growl »), {contentClass: « warning-content », title: o [« warning-growl »]. warningGrowlTitle, Name: o [« Warning-Growl »]. Name, scrollDepth: o [« Warning-Growl » « ] .warningGrowlScrollDepth, cta: o [ » Warning-Growl « ]. WarningGrowlCTA, Body: o [ » Warning-Growl « ]. WarningGrowlBody, Link: o [ » Warning-Growl « ]. WarningGrowlLink, baseTrackingData: i, toutType: » Warning-Growl « }, » # Warning-Growl « )): void 0; WarningGrowl (findTemplate (e, » Paywall -Reader interface « ), i, o [ » warning-growl-2 « ])} else growlManager (findTemplate (e, » growl-message « ), {contentClass: » Promo-Content « , title: void 0, name : o [« Promo-Growl » « ] .name, scrollDepth: o [ » Promo-Growl « ]. PromoGrowlScrollDepth, cta: o [ » Promo-Growl « ]. PromoGrowlCTA, body: o [ » Promo-Growl « ]. PromoGrowlMessage, Link: o [« Promo -growl »]. PromoGrowlLink, baseTrackingData: i, toutType: « promo growl « }, » # growl-message « )}} function shouldWarn () {return! contentCliffWarningDisplayed ()} function getContentCliffWarningDisplayedKey () {const e = new Date, t = e.getMonth (); return`content-cliff-warning-displayed – $ {e.getFullYear ()} – $ {t} `} Function contentCliffWarningDisplayed () {const e = getContentCliffWarningDisplayedKey (); return « true » = == getLocalStorage (e)} function setContentCliffWarningDisplayed () {const e = getContentCliffWarningDisplayedKey (); Returns setLocalStorage (e, « true »)} Function growlManager (e, {contentClass: t, scrollDepth: o, Name: n, Title: r, body: i, cta: a, link: l, baseTrackingData: s, toutType: c, imageUrl: d = null}, g = «  ») {const u = function () {const e = ` n n n n $ {r} n $ {d?  »: «  »} n $ {i} n $ {d? « : «  »} n $ {a} n n n n `; return document.createRange (). createContextualFragment (e)} (), p = {creative: i, id: c, name: n, position: « growl »}; u.querySelector (« a ») .addEventListener (« click », () => PromotionReport (« Click », s, p)), generateGrowl (e.g. {content: u, scrollDepth: o, onShow: () => PromotionReport (« View », s, p)})} Function contentCliff (e, t, o, n) {const {first_visit: r, global: i} = n, a = {totalArticleCount: i.total || 0, standardArticleCount: i.Article | | 0, featureArticleCount: i.Feature || 0, magazineArticleCount: i.Magazine || 0}, {contentCliffBody: l} = t, s = document.importNode (e,! 0) .querySelector (« . Content-cliff »), c = document.querySelector (« . Article content> .clay paragraph »), d = {motif: l, ID: « content cliff », name: « content cliff », position: « in-article »}; s&& (c.insertAdjacentHTML (« afterend », s.outerHTML), require (« content-cliff.client ») (document.querySelector (« . content-cliff »), {contentCliffOptions: t, viewsLeft: o, firstVisit: number (r), onShow: () => PromotionReport (« view », a, d), onClickCliff: () => PromotionReport (« click », a, d)})}} Function n verdonFosseToutSetter (e, t, o , n, r) {const i = new Verdon ({Container: « .paywall-reader-interface », URL: « https://fosse.nymag.com/fosse/v1.6.1 /index.html »}), a = e.type, l = {email: auth0.getEmail (), isAuthenticated: auth0.isAuthenticated (), isSubscriber: auth0.isSubscriber ()}; n.classList.add (a), i.once (« frame: ready « , () => {i.sendMessage ( » tout: show « , {readerState: l, toutType: a, toutData: e}), r&&i.sendMessage ( » frame: height « ))}), i.on (« tout: visible », () => {PromotionReport (« View », t, o)}), i.on (« tout: sign-in », () => {auth0 .showLogin (window.location. href)}), i.on (« tout: log-out », () => {auth0.logout ()}), i.on (« tout: dismissed », () => {n.classList.add (« dismissed »), i.sendMessage (« tout: hide », {toutType: a, toutData: e})}), i.on (« tout: subscribe », ( ) => {e.ctaLink = replaceQueryParams (e.ctaLink), PromotionReport (« Click », t, o), window.open (e.ctaLink, « _ ​​blank »)}), i.on (« frame : height « , e => {n.style.height =` $ {e.payload.currentHeight 10} px`}), i.on (« tout: view-account », () => {window.location. href = « https: / /subs.nymag.com/account »}) promotion promotion report (e, t, o) {const {creative: n, id: r, name: i, position: a} = o; t.event = `eec.promotion $ {e}`, t.ecommerce = {promoView: {Promotions: [{Creative: n.trim (), ID: r, Name: i, Position: a}]}}, gtm.reportNow (t), reportPaywall ({Creative: n.trim (), eventType: e, id: r, name: i, position: a})} function babyGrowl (e, t, o) {const n = document .importNode (e,! 0) .querySelector (« . paywall-reader-interface »), r = {creative: o.babygrowlDescription, id: « baby growl », name: « baby growl », position: « growl »}; document.body.appendChild (n), o.ctaLink = o.babygrowlCtaLink, o. ctaText = o.babygrowlMessage, o.headline = o.babygrowlDescription, verdonFosseToutSetter (o, t, r, n)} Function cliffTakeover (e, t , o): a, cliffTakeoverPromo: l, cliffTakeoverStatus: s, type: c} = o, d = document.importNode (e,! 0) .querySelector (« . paywall-reader-interface »), g = document.querySelectorAll (« . Sound paragraph »), u = {Creative: l, ID: « Content Cliff », Name: « Content Cliff », Position: « Growl »}, p = {cta: n, ctaLink: r, Description: i, age: a, promo: l, status: s, type: c}; document.body.appendChild (d), g.forEach ((e, t) => {0! == t&&e.remove ()}), verdonFosseToutSetter (p, t, u, d,! 0), document.querySelector (« html »). style.overflowY = « hidden », document.body.style.position = « fixed »} function warningGrowl (e, t, o) {const {type: n, WarningGrowl2CTA: r, WarningGrowl2CtaLink: i, WarningGrowl2Description: a, WarningGrowl2Image: l, WarningGrowl2Promo: s, WarningGrowl2Status: c} = o, d = document.importNode (e,! 0) .querySelector (e,! 0). « .paywall-reader-interface »), g = {creative: s, id: « warning growl », name: « warning growl », position: « growl »}, u = {cta: r, ctaLink: i, description : a, image: l, promo: s, status: c, type: n}; document.body.appendChild (d), verdonFosseToutSetter (u, t, g, d,! 0)} function getClientId (e = «  », t = 8e3) {let o = cookie.get (e); return o? Promise.resolve (o): new promise ((o, n) => {const r = setTimeout (() => {n (`) key could not be found: $ {e} on cookie after $ {t} ms `)}, t); window.addEventListener (cidReadyEvent, () => {clearTimeout (r), o (cookie.get (e))})})} function readJSONFromScript (e) {try {return J. SON.parse (e.innerHTML)} catch (e) {return {touts: [], scenarios: []}}} function findTemplate (e, t = «  ») {const o = e&&e.querySelector (`[data- template-id = » $ {t} « ]`); return o&&o.content} function isNCR () {return / [? &] source = ncr / .test (location.search)} function brandedTakeoverTime (e) {const {startTime: t, endTime: o, startDate: n, endDate: r} = e, i = n.concat («  », t), a = r.concat («  », o), l = moment (i), s = moment (a); return moment (). isBetween (l, s)} function optimizeDebugger () {return new promise (e => {const t = window.location.search || «  »; if (t) {const o = new URLSearchParams (t), n = o .get (« Optimize attribute name ») || «  », r = o.get (« Optimize attribute value ») || «  », i = o .get (« Optimize-Delay ») || 0, a = o.get (« Optimize-Cookie ») ||! 1; setTimeout (() => {a&& (document.cookie = randomNymcid ()), document. Body.setAttribute (`data – $ {n}`, r), e ( )}, i)} else e ()})} function randomNymcid () {return`nymcid = $ {(() => ([1e7] -1e3 -4e3 -8e3 -1e11) .replace (/ [018] / g, e => (e ^ 16 * crypto.getRandomValues ​​(new Uint8Array (1)) [0] >> e / 4) .toString (16) [0])) ()} `} function replaceQueryParams (e ) {const t = window.location.search || «  »; if (t) {const o = new URLSearchParams (t); if (e.includes (« ? »)) {const t = e.split (« ? »), n = new URLSearchParams (t [1]); for (let e from o.entries ()) n.set (e [0], e [1]); e = `$ {t [0]}? $ {n.toString ()} `} else e =` $ {e}? $ {o.toString ()} `} return e} module.exports = (e => new promise (e => {auth0.on ( » init « , () => {e ()})}). then (() => optimizeDebugger ()) .then (() => {displayDebug (window.location.href), initializeChoreographer (e)}));
}, {3: 3, 7: 7, 8: 8, 9: 9, 37: 37, 42: 42, 57: 57, 69: 69 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95: 95 content-cliff.client « : » content-cliff.client « }];
window.modules [« growl.client »] = [function (required, module, export) {« use strict »; require (155); const _some = require (78), dom = require (4), localStorageKeyRoot = « slideout -« , {getLocalStorage: getLocalStorage, setLocalStorage: setLocalStorage} = require (37); module.exports = ((e, t) => {const {content: o, onShow: s, scrollDepth: r = 50, rejectable: i =! 1} = t, n = number (r || e.getAttribute ( « Data display-on-page scroll percentage »)), a = dom.find (e, « . Modal »), l = « slideout- » (t.id || e.getAttribute (« id »)), c = getLocalStorage (l); function d () {a.classList.add (« hidden »)} function g () {setLocalStorage (l,! 0), d ()} i&&c? e.remove () 🙁 o&&e .querySelector (« [data content] »). appendChild (o), n&&function (e = 50) {const t = new Inters e => {_ some (e, « isIntersecting ») && (a.style.top = « inherit « , a.classList.remove ( » hidden « , » initial « ), » function « == typeof s&&s (), t .unobserve (a))}); a.style.top =` $ {document.querySelector ( « body »). scrollHeight / (100 / e)} px`, t.observe (a)} (n), e.querySelector (« . dismissed-modal »). addEventListener (« click », () => i ? g (): d ()), e.addEventListener (« growl: hide »), d), e.addEventLi stener (« growl: dismiss », g))});
}, {4: 4, 37: 37, 78: 78, 155: 155}];
window.modules [« newsletter-speed-ramp.client »] = [function (required, module, export) {« use strict »; const {loadRecaptcha: loadRecaptcha} = require (122), _ isEmpty = require (103), _ set = require (123), _ kebabCase = require (96), gtm = require (3), auth0 = require (7), Visibility = require (5), COMPONENT_NAME = « Newsletter-Speed-Bump », EMAIL_VALID_REGEX = / ^ (?: (?: [^ () [] \.,;: S @ « ] (?: . [^ () [] \.,;: s @ « ]) *) | (« . « )) @ (?: (?: [[0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3}]) | (?: (?: [A-zA-Z -0-9] .) [A-zA-Z] {2,})) $ /, LOCAL_STORAGE_KEY_NAME = « newsletterSpeedBumpSignUpStatus _ », MAX_EMAIL_LENGTH = 50; Function setClass (e, t) {e.classList.add (t)} Function getRequestUrl (e) {return e.getAttribute (« action ») {const t = e? e.getAttribute (« content »): «  »; return _kebabCase (t)} function getPayloadObject (e, t, r, s) {const n = {}; return _set (n, `vars. source _ $ {t}`, `$ {COMPONENT_NAME} _ $ {s}`), n.email = r, n.lists = {}, n.lists [t] =! 0, n.recaptcha = e, n .signuppage = `$ {document.location.href} _ $ {t}`, n [`source _ $ {t}`] = « newsleter_speedbump », n} module.exports = ((e, t) => {if (! t ||! e) return; if (« success » === window.localStorage.getItem (`$ {LOCAL_STORAGE_KEY_NAME} $ {t.newsletterSpeedBumpNewsletterId}`)) return void e .remove (); const {baseTrackingData: r, name: s, newsletterSpeedBumpCtaCopy: n, newsletterSpeedBumpDescription: i, newsletterSpeedBumpHeadline: a, newsletterSpeedBumpNewsletterId: o, newsletterSpeedBumpThankYouMessage: cE « ), = » description e.querySelector (« . input.email »), m = e.querySelector (« . error-message »), h = e.querySelector (« . form »)), E = e.querySelector (« . Form-container « ), y = e.querySelector (« . Form-recaptcha-container « ), g = e.querySelector (« . Headline « ), v = e.querySelector () » .container « ), S = e.querySelector ( « . input.newsletterId »), _ = e.querySelector (« . recaptcha-wrapper »), L = e.querySelector (« . input.submit »), w = e.querySelector (« . text-container « ), q = new visibility. Visible (e, {threshold value shown: .5}); u&& (p.removeAttribute ( » required « ), e.classList.add ( » logged on «  »)), d. innerHTML = i, g.innerHTML = a, S.value = o, Lv alue = n, q.on (« shown », function () {if (visibility.isElementNotHidden (e)) {const e = r; e. event = « eec.promotionView », e.ecommerce = {promoView: {advertising campaigns: [{creative: `$ {a} | $ {i}`, id: « Newsletter Speed ​​Bump », name: s, position: « In-Article »}]}}, gtm.reportNow (e), q.destroy ()}}), p.addEventListener (« focus », () => {_. ClassList.remove (« hidden »)} ), h.addEventListener (« submit », t => {t.preventDefault (); const s = new XMLHttpRequest, n = u | | e.querySelector (« . input.email »). value, i = getPageType (document .querySelector (‘meta [name = « type »]’)); u ||! (n.length> = 50) &&EMAIL_VALID_REGEX. test (n)? loadRecaptcha (l, « newsletterSubmit »,! 0) .then (a => {s.open (« POST », getRequestUrl (h),! 0), s.setRequestHea der (« Content-Type », « application / json; charset = UTF-8 « ), s.addEventListener ( » load « , s => {const a = s.currentTarget || s.target; if (a.status> = 200&&a.statussetClass (e, » Success « )) , [d, E, m, _]. forEach (e => setClass (e, « hidden »)), g.innerHTML = c.replace (« {{email}} », n), m.innerHTML =  » « ; const s = JSON.parse (a.response), l = _isEmpty (s.sailthruIds)? » « : Object.values ​​(s.sailthruIds) [0], u = r; u.event = » eec .purchase « , u.ecommerce = {Purchase: {actionField: {id: l, Sales: » 0.00 « }, Products: [{Category: » Newsletter Registration « , Name: S.Value, Quantity: 1, Variant: `$ {COMPONENT_NAME} – $ {i}`}]}}, gtm.reportNow (u), setTimeout (() => {e.classList.add (« hidden »)}, 5e3), t.preventDefault ()} else m.innerHTML = « * An error has occurred. Please try again. »}), S.addEventListener (« error », () => {m.classList.remove (« hidden »), m .innerHTML = « * An error occurred. Please try again. »}), s.send (JSON.stringify (getPayloadObject (a, o, n, i))), t.preventDefau lt ()}): m.innerHTML = « * Please enter a valid email address »})});
}, {3: 3, 5: 5, 7: 7, 96: 96, 103: 103, 122: 122, 123: 123}];
window.modules [« speed-batch.client »] = [function (required, module, export) {« use strict »; const gtm = required (3), visibility = required (5); module.exports = ((e, i) => {if (! i ||! e) return; const {name: o, speedbumpDescription: r, speedbumpMessage: t, speedbumpLink: n, baseTrackingData: s} = i, c = new visibility.Visible (e, {shownThreshold: .5}); e.querySelector (« . description »). innerHTML = r, e.querySelector (« . promo-link »). innerHTML = t, e.querySelector ( « . promo-link ») .href = n, e.classList.remove (« reduced »), c.on (« shown », function () {if (visibility.isElementNotHidden (e)) {let e = s; e.event = « eec. PromotionView », e.ecommerce = {PromoView: {Promotions: [{Name: o, Creative: r, ID: « Speed ​​Bump », Position: « In-Article »}]}} , gtm.reportNow (e), c .destroy ()}}), e.querySelector (« . promo-link »). addEventListener (« click », function () {let e = s; e.event = « eec .promotionClick « , e.ecommerce = {promoClick: {Promotions: [{Name: o, Creative: r, ID: » Speed ​​Bump « , Position: » In-Article « }]}}, gtm.reportNow (e )})});
}, {« 3 »: 3, « 5 »: 5}];
window.modules [« content-cliff.client »] = [function (required, module, export) {« use strict »; const auth0 = required (7), isProduction = required (8) (), logger = required (88)) .Logger (() =>! IsProduction); module.exports = ((t, e) => {if (! E) return; logger.group (), logger.h2 (« Content Cliff »); const {contentCliffOptions: o, firstVisit: n, onShow: r, onClickCliff: i} = e, c = 300, l = Number (document.querySelector (« [number of data components] »). getAttribute (« number of data components) »)), u = 3, s = [« taboola »] , a = « # content-cliff », f = t, d = function () {let t = 0; return document.querySelectorAll (« [data word » -count] « ). forEach (function (s) {t = Number (e.getAttribute ( » data word count « ) || 0.10) || 0}), t} () , g = function (t, e) {function o (t) {return Math.round (t.getTime () / 1e3 / 60)} const n = o (t), r = o (e); return no} (new date, new date (s)) {}, show: () => {r (), function () {(p = function (t = «  ») {return document.querySelectorAll (`$ {t} ~ * `)} (a)). forEach (t => t.remove ()), function () {const {contentCliffStatus: e, contentCliffPromo: n, contentCliffCTA: r, contentCliffURL: c} = o, l = t. querySelector (« [data -Inhalt- cliff-status] »), u = t.querySelector (« [data-content-cliff-promo] »), s = t.querySelector (« [data-content-cliff-cta] « ); s&&s.setAttribute ( » href « , c), s&&s.insertAdjacentHTML ( » afterbegin « , r), l&&l.insertAdjacentHTML ( » reduced. ), e = s, e.forEach (t => {co nst e = document.querySelector (`[data-uri * = » / $ {t} / « ]`)); e&&e.remove ()}), m.addEventListener (« click », () => auth0.showLogin ()); var e} ()}} [function () {if (dl) return logger.log (`Number of article words $ {d} was too short for the cliff`), logger.log (` Number of article components is less than $ {u } and not suitable for the cliff`), « noop »; if (g&&isProduction) return « noop »; g&&logger.log (`The first session check was $ {g}! The cliff is still displayed: isProduction => $ {isProduction}`); if (/ coronavirus news | pivot | paywall exclude / i.test (window._nymGtmPage.tags)) returns isProduction&&logger.log (« Content cliff no-op due to excluded tag match: », window._nymGtmPage.tags),  » noop « ; return « show »} ()], m = t.querySelector (« . content-cliff-login »); let p = []; return logger .log (`should not work due to the 30-minute window of the first session in production: $ {g}`), logger.groupEnd (), auth0.on (« login », () => {f. classList.add (« collapsed »), (p = Array.prototype.slice.call (p, 0) .reverse ()). forEach (t => f.insertAdjacentElement (« afterend », t)), p = [ ]}), « function » == typeof h? h (): void 0});
}, {« 7 »: 7, « 8 »: 8, « 88 »: 88}];
window.modules [« most-popular.client »] = [function (required, module, export) {« use strict »; const dom = require (4), lazyLoad = require (111); Function lazyLoadImage (a) {const o = dom.find (a, « img [data-src] »), d = a&&dom.findAll (a, « source [data-srcset] »), e = o&&dom.closest (o , « . feed-image-wrap »); if (o&&e) {new lazyLoad.LazyLoader (e, o, d) .init ()}} function handleLazyLoad (a) {(dom.findAll (a, « . Most popular element ») || []). forEach (lazyLoadImage)} module.exports = (a => {handleLazyLoad (a)});
}, {« 4 »: 4, « 111 »: 111}];
window.modules [« collection-package.client »] = [function (required, module, export) {« use strict »; const dom = required (4), hammer = required (115), lazyLoad = required (111), _debounce = require (114), BREAKPOINT = 768, ANIMATION_DURATION = 250; module.exports = (e => {const t = dom.find (« . collection-simple_text-top »), n = e.querySelector (« . list -wrapper »), i = e.querySelector (« . package- content « ), o = dom.findAll (e, ». article « ), r = e.classList.contains ( » carousel layout « ); var a, s = 0, c =! 1; if (r) { if (! n) return; Function d () {a.off (« swipeleft »). off (« swiperight »), s = 0, n.style .transform = « translate (0px) », window.innerWidth1? ( window.cancelAnimationFrame (s), i&&i ()) 🙁 t = r (c = d) * (2-c) * a, e.style.transform = « translate ( » t « px) », window.requestAnimationFrame ( s))}; n || (n = 0); window.requestAnimationFrame (s)} (n, i, ANIMATION_DURATION, function () {s = e, c =! 1})} function f () {c | | s> 0&&l (s-1)} Function u () {c || s {! Function (e) {const t = dom.findAll (e, « source [data-srcset] »), n = dom.find (e, « img [data-src] »), i = dom.find (e, « . article-img-wrapper »); if (t&&n&&i) {const e = new lazyLoad.Lazy Loader (i, n, t); i.classList.add (« contains-image »), e.init ()}} (e)})});
}, {4: 4, 111: 111, 114: 114, 115: 115}];
window.modules [« sticky-list.client »] = [function (required, module, export) {« use strict »; const dom = required (4), $ gtm = required (3), _ get = required (9), stickyContainer = require (« sticky-container.client »); DS.controller (« sticky-list », [« $ window », function (t) {var e = require (233), i = 40; function s (s) {let n, r = function (t) {let s = t [0], n = 0, r = e.Höhe (this.contentArea), h = this.contentArea.offsetHeight; if (this.containers&&this. container.length) {if (s.target.offsetHeight) { let t = this.breakouts.findIndex (t => (function (t, e) {return t! == document.body&&t.contains (e)}) (t, s.target.parentElement)); if (t> -1&&this.breakouts [t]) {let e = this.breakouts [t] .offsetHeight i; this.containers [t] .style.marginBottom = `$ {e} px`}} if (h! == this. currentHeigh) {const t = e.rect (this.rightRail, this.contentArea); this.currentHeight = h, this.rightRail.style.height = rt.top -a (this.rightRail) « px », this.breakouts .forEach ((s, r) => {let a = e.rect (s, this.contentArea), h = e.intersection (a, t); if (h) {let e, s = h.top- t. top-n; n = s h.height i, this.containers [r] .style.height = `$ {s} px`, this.conta iners [r] .style.minHeight = `$ {s} px`, e = this.breakouts [r] .offsetHeight i, this.containers [r] .style.marginBottom =` $ {e} px`}}) }}. bind (this); t.innerWidth {let n = _get (e, « record name », «  »), r = n.Slice (-1) || « 1 », a = [« Image_Gallery », « Standard_Article », « Feature », « One_Column_Article »]. find (t => n.includes (t)) || «  »; this.rightRail.parentElement.classList.contains (« tertiary ») &&a&& (e.dataset.name = parseInt (i, 10) se === t) | | 0; return i.slice (s 1) .reduce ((t, e) => t (e.offsetHeight || 0), 0) || 0} return s.prototype = {setPins: function () {const t = e.rect (this.rightRail, this.contentArea), i = e.height (this.contentArea), s = it.top-a (this .rightRail); let n, h, o, l; if (this.populatePinsList (), s1&&t.classList.add (« Multi-Children »), l = 0; l {const t = Array.from (e.children); let o, a, i = 0; for ( ; ia .bottom || n.righta.right)? a.bottom-n.top: 0} function getElementsOverlapAmount (e, t) {var n, a = []; return _forEach (t, function (t) {n = getE lementsVerticalOverlap (e, t), a.push (n)}), _ max (a)} Function getNYMagAdChannel (e) {var t = «  »; switch (e) {case « Company information »: t = « Company « ; break; case » New York Guides & things to do « : t = » To-Do « ; break; case » other « : t = e; break; case » sponsored guides « : t = » s-Guides « ; break; case « urbanist »: t = « urbanist »; break; default: t = «  »} return t} function appendSectionToDfpAds () {var e, t, n, a = document.querySelector (« meta [property = ‘og : site_name ‘] « ), o = document.querySelector ( » article [data-content-channel] « ), i = document.querySelectorAll (AD_NAME_SELECTOR); a&& (e = a.content), o&& (t = o.getAttr ibute « data content channel »). toLowerCase ()), t&& « New York Magazine » === e&& (n = getNYMagAdChannel (t)), n&&appendToAdd (i, n)} (« .body> div ») || {}, t = document.querySelector (« body ») || {}, n = e&&e.classList, a = n&&n.length? [… n]: [], o = _find (a, e => e.include it (« feature »)), i = document.querySelectorAll (AD_NAME_SELECTOR); n&& (o? appendPageNumberPositionToDfpAds (i, « Feature »): n.contains (« lede-gallery-content »)? appendPageNumberPositionTo « ): t.classList.contains ( » single-column layout « )? appendPageNPositionToDfpAds ( » one-column layout « )? appendPageNPositionToDfp. : n.contains (« Article content ») &&appendPageNumberPositionToDfpAds (iP « , t) {const n = [ » 528×379 « , » 1100×200 « , » 1×1 « ]; let a = e || [], o = dom.find (« . ad-splash »), i = dom.find (« section.wrapper »), r = dom.find (« . secondary »), d = dom.find (« . bottom « ), s = dom.find (« . primary « ), c = {IA: {xsMobile: {normal: 1, grid: 1}, mobile: {normal: 1, grid: 1}, tablet: {normal : 1, grid: 1}, desktop: {normal: 1, grid: 1}}, BA: {xsMobile: {normal: 1, grid: 1}, mobile: {normal: 1, grid: 1}, tablet: {normal: 1, grid: 1}, desktop: {normal: 1, grid: 1}}}; a.forEach (e => {let a, l = «  », u = e.dataset.sizes, m = e.classList.value, p = _find (n, e => u.includes (e)), g = e.parentElement.classList.contains (« imag e-gallery-mobile-grid-ad »); if (u&&! p || e.setAttribute (« Datenname », e.getAttribute (« Datenname ») « / » t ), i&&u&&! p) {) let n, u; if (o&&o.contains (e)? l = « LB »: i&&i.contains (e)? l = « IA » 🙁 r&&r.contains (e) || d&CS s&Cs. BA « ), c [l]) {if (! (U = checkForAdViewport (m))) return; G? (n = c [l] [u] .grid, c [l] [u] .grid) 🙁 n = c [l] [u] .normal, c [l] [u] .normal), a = n {e.setAttribute (« Datenname », e.getAttribute (« Datenname ») « / » t)})} Inject functionGoogleScripts () {var e = document.createElement (« script »), t = document.createElement ( » script « ), n = document. createDocumentFragment (); e.src = « // www.googletagservices.com/tag/js/gpt.js »,e.async= »async »,t.src= »//pagead2.googlesyndication.com/pagead/js /adsbygoogle.js « , t.async = » async « , n.appendChild (e), n.appendChild (t), document.getElementsByTagName ( » body « ) [0 female ndPageTypeToDfpAds (), inject GoogleScripts (), DS.controller ( » ad « ) , [« adService », function (s) {return function (t) {var n, a, o, i = t.getAttribute (« data relocation »)), r = new $ visibility.Visible (t, {pretoadThreshold: i? window.innerHeight / 4: 200}), d =! 1; Function s () {window.innerWidth> = 1180&&t.parentElement.classList.contains (« ad-repeat ») &&flaggedComponentsOnPage.length&&.&CSSEANDPage., flag-Components (t- get- component, data. gap « ) »)} function c () {s (), e.refresh (n)} function l () {e.remove (n), d || (d =! 0, r.on (« shown » , c))} document.querySelector (‘script [data-name = « concert ads »]’) || (n = e.create (t), r.preload&& $ visibility.isElementNotHidden (t)? (e.addToPageLoadQueue ( n), i&&r.on (« hidden », l)) 🙁 r.on (« Preload », function () {! n.slot&& $ visibility.isElementNotHidden (t) && (s (), e.load (n ))}), i&&r.on (« hidden », l)), this.adData = n)}}]);
}, {« 4 »: 4, « 5 »: 5, « 56 »: 56, « 58 »: 58, « 59 »: 59, « 60 »: 60}];
window.modules [« article.client »] = [function (required, module, export) {« use strict »; const $ visibility = required (5), $ gtm = required (3), ImageZoom = required (72), $ sentry = require (73); DS.controller (« article », [function () {var e = 40; function t (t) {const i = document.querySelector (« . Wrapper> .tertiary »), n = t.querySelector (« . Lede- image-wrapper.full-bleed « ), r = t.querySelector (« . attribution.full-bleed « ), o = t.querySelector (« . article-header « ), l = o? o.querySelector ( » img « ): null, c = function () {let t = o.getBoundingClientRect (). height; n&& (t = n.getBoundingClientRect (). height 25, r&& (t = r.getBoundingClientRect () .height)), i .style.paddingTop = te « px »}; i&&o&& (window.innerWidtht (e)), $ sentry.initializeIDListeners ()}}]);
}, {3: 3, 5: 5, 72: 72, 73: 73}];
window.modules [« tags.client »] = [function (required, module, export) {« use strict »; const _forEach = required (56); DS.controller (« tags », [function () {function e (e) {this.el = e} return e.prototype = {events: {« a.more click »: « showAll »}, showAll: function ( e) {var t = e.target, o = this.el. querySelectorAll (« li.hidden »); _ forEach (o, function (e) {e.classList.remove (« hidden »)}), t. parentNode.removeChild (t), e.preventDefault ()}}, e}]);
}, {« 56 »: 56}];
window.modules [« newsletter-flex-text.client »] = [function (required, module, export) {« use strict »; const dom = required (4), _ kebabCase = required (96), _ isEmpty = required (103)), _ set = require (123), permutive = require (69), cmptName = « newsletter-flex-text », {loadRecaptcha: loadRecaptcha} = require (122), gtm = require (3), EMAIL_VALID_REGEX = / ^ (?: (?: [^ () [] \.,;: s @ « ] (?: . [^ () [] \.,;: s @ « ]) *) | (« . « )) @ (?: (?: [[0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3} . [0-9] {1,3}]) | (?: (?: [A-zA- Z -0-9] .) [A-zA-Z] {2,})) $ /,MAX_EMAIL_LENGTH=50;DS.controller(cmptName,[« $window »,function(e) Genealogie function t ( t) {this.el = t, this.email = dom.find (t, « . Email »), this.title = dom.find (t, « . title »), this.description = dom.find (t , « . description »), this.source = dom.find (t, « . source »), this .form = dom.find (t, « . form »), this.returnMsg = dom.find (t,  » . return-message « ), this.newsletterId = dom.find (t, ». newsletterId « ). value, this.expandedTerms = dom.find (t, ». expanded terms « ), this.recaptchaKey = this.form. dataset.recaptchaPubl icKey, this.local = e.localStorage, this.session = e.sessionStorage, this.apiE ndpoint = this.form.dataset.post, this.displayComponent ()} return t.prototype = {getPageType: function () {var e = dom.find (‘meta [name = « type »]’), t = e e.getAttribute (« content »): «  »; return _kebabCase (t)}, getPayloadObject: function (e) {var t = {}; return t.email = this.email.value, t.recaptcha = e, _set (t, `vars.source _ $ {this.newsletterId}`, `$ {cmptName} _ $ {this.getPageType ()}`) , t.lists = {}, t.lists [this.newsletterId] =! 0, t}, displayComponent: function () {var t = this, s = « success » === this.local [« signUpColumnStatus » this.newsletterId.toString ()], i = « true » === this. form.getAttribute (« data display after login »); if (! s || i) {if (this.el.classList.remove (« initially hidden »), this.form.classList.remove (« initially hidden »), setTimeout (function () {t.el.classList .remove (« opacity-zero »)}, 100), this.session) try {this.session.setItem (« signUpColumn », « displayed »)} catch (e) {}} else t.el.parentElement.classList .add (« newsletter reduced »); e.addEventListener (« unload », function () {t.session.removeItem (« signUpColumn »))})}, events: {« . form submit »: « submitForm », « .email keypress »: « clearMsg », « . Terms button click »: « showTerms »}, clearMsg: function () {this.returnMsg.innerHTML = «  »}, showTerms: function () {this.expandedTerms.classList .add (« active »), this .expandedTerms.setAttribute (« aria-hidden », « false »)}, submitForm: function (e) {let t = this.form.getAttribute (« data-error-msg »); e.preventDefault (), this.email.value.length> = 50 ||! EMAIL_VALID_REGEX.test (this.email.value)? (t&& «  »! == t || (t = « * Please enter a valid value E-Mail »), this.returnMsg.innerHTML = t, this.returnMsg.focus ()): loadRecaptcha (this.recaptchaKey , « newsletterSubmit »,! 0) .then (e => fetch (this.apiEndpoint, {method: « POST », header: {« Content-Type »: « application / json »}, body: JSON.stringify (this .getPayloadObject (e))}). Then (e => e.json ()). Then (e => {e&&e.ok? this.successHandle (e): this.errorHandle ()}). catch (e = > this.errorHandle (e))}, reportGTM: function (e) {const t = _isEmpty (e .sailthruIds)? «  »: Object.values ​​(e.sailthruIds) [0]; let s = {event: « eec.purchase »}; s.ecommerce = {purchase: {actionField: {id: t, Revenue: « 0.00 »}, products: [{Category: « Newsletter registration », number: 1, name: this.newsletterId .toString (), variant: `$ {cmptName} – $ {this.getPageType ()}`}]}}, gtm.reportNow (s)}, errorHandle: function (e) {this.returnMsg.classList.add ( « error »), this.returnMsg.innerHTML = e || « An error occurred. Please try again. « , This.returnMsg.focus ()}, successHandle: function (e) {let t = this, s = this.form.getAttribute ( » data-success-title-msg « ), i = this. Form.getAttribute ( « data-success-description-msg »); if (s&& «  »! == s || (s = « Thank you, you’re done! »), i&& «  »! == i || (i = « You get the next newsletter in your inbox. « ), window.fbq&&window.fbq ( » track « , » Lead « ), permutive.reportNewsletterSubscribe ([this.newsletterId]), this.reportGTM (e), this.title.innerHTML = s , this.description.innerHTML = i, this.returnMsg.focus (), this.el.classList.add (« success »), setTimeout (function () {t.el.classList. add (« opacity-zero ») , setTimeout (function () {t.el.classList.add (« initially hidden »), t.el.parentElement.classList.add (« newsletter-collapsed »)}, 1e3)}, 5e3), this.local) try {this.local.setItem (« signUpColumnStatus » this.newsletterId.toString (), « success »)} catch (e) {}}}, t}]);
}, {3: 3, 4: 4, 69: 69, 96: 96, 103: 103, 122: 122, 123: 123}];
window.modules [« memo-pixel.client »] = [function (required, module, export) {« use strict »; (() => {var e = document.createElement (« script »); e.async =! 0, e.type = « text / javascript », e.src = document.location.protocol « //d16xpr36wrmcmk.cloudfront .net / js / memo.js « , (document.getElementsByTagName ( » head « ) [0] || document.getElementsByTagName ( » body « ) [0]). appendChild (e)}) (), module.exports = (() => {});
}, {}];
window.modules [« Affiliate-Links.client »] = [Function (required, module, export) {« use strict »; const dom = required (4), _ contains = required (60), _ StartsWith = required (64), globalClick = require (63), visit = require (62), productSubtags = require (65); var excluded hostnames, skimlinksBaseUrl, skimlinksId, visitState, productUrl, ignoreDataAttribute = « data-affiliate-links-ignore », article = window.Document. querySelector (« article »), isSponsored = article&& « Sponsor Story » === article.getAttribute (« data type »); Function setExcludedHostnames (t) {excludedHostnames = (t.getAttribute (« Data excluded host names ») | | «  »). toLowerCase (). split (« , »)} function isSkimLink (t) {return !! (skimlinksId = t.getAttribute (« data-skimlinks »))} Function isExcluded (t) {return _includes (excluded hostnames, t) || _startsWith (t, « www. ») &&_includes (excluded hostnames, t.slice (4)) || isSponsored} function isUrlProtocol (t) {return 0! == t.indexOf (« mailto: ») &&0! == t.indexOf (« javascript: »)} function getTargetHostname (t) {return (t.ho. stname || t.host || t.href || «  »). toLowerCase ()} function convertSkimlinkUrl (t) {return (skimlinksBaseUrl = skimlinksBaseUrl || skimlinksId? « // go.redirectingat.com/?xs=1&id= » skimlinksId « &sref = » encodeURIComponent (window.locurf)  » « : void 0) &&skimlinksBaseUrl encodeURIComponent (t)} function hasIgnoreAttribute (t) {return » true « (t) {var e, i, r, s = dom.closest (t.target, » a « ), n = s&SSEANDCHARs .href; n) || isExcluded (i) || hasIgnoreAttribute (s) || productSubtags.getAffiliate (n) || (e = convertSkimlinkUrl (n)) && (productUrl = n, r = s&&s.getAttribute (« data-track- » « ), s.href = productSubtags.ensureSubtag ({url: e, productId: r, visitState: anchorEl: s}))}} Function revertSkimLink (t) {var e = dom.closest (t.target, « a »), i = e&C SSEANDCHARe.href || «  »; i.including (skimlinksBaseUrl) &&i&CANDCHARCANDCHARi&EANDCHARC.product (e.href = productUrl) {visitState = t}), e&& (setExcludedHostnames (t), globalClick.addHandler (convertSkimlink, revertSkimLink))});
}, {« 4 »: 4, « 60 »: 60, « 62 »: 62, « 63 »: 63, « 64 »: 64, « 65 »: 65}];
window.modules [« gtm.client »] = [function (required, module, export) {« use strict »; const $ gtm = required (3); DS.controller (« gtm », [function () {return function (t) {$ gtm.init (t.getAttribute (« data container ID »), t.getAttribute (« data site slug »))}}] );
}, {« 3 »: 3}];
window.modules [« global-nav.client »] = [function (required, module, export) {« use strict »; const dom = required (4), auth0 = required (7), signInButton = dom.find (« .user-signin »), signOutButton = dom.find (« . user-signout »), globalNav = dom.find (‘ [class ^ = « global-nav »] ‘), body = dom.find (« body »)), dropdownItems = dom.findAll (« . dropdown-wrap »), gtm = require (3), pageUri = require ( 151). GetPageUri (); function closeDropdowns (e) {let n = globalNav.querySelectorAll (« . dropdown .open »); dropdownItems.forEach (function (t) {let o = t.querySelector (« . dropdown ») ;! n || t.contains (e.target) &&27! == e.keyCode || o. classList.remove ( » open « )})} Function gtmSendReport (e, n, t) {let o = {eventCategory: » ecommerce « , eventAction: » componentClick « , brand: e, Dimension23: » global-nav « , list: pageUri, pageZone: « header », variant: « nav-link »}; « global-nav-link » === t&& (o.eventLabel = n.href), gtm.reportNow (o)} function init (e) {auth0.on (« init », () => {signInButton.addEventListener (« click », function (s) {e.preventDefault (), auth0.showLogin ()}), signOutButton.add EventListener (« click », function (s) {e.preventDefault (), auth0.logout (), gtmSendReport (« Unsubscribe », e.target, « User info link »)}), auth0.isAuthenticated () &&e.classList.add (« logged in »), auth0.isSubscriber () &&e.classList.add (« subscribed to ») , e.querySelectorAll (« . User-link »). ForEach (e => {e.classList .add (« active »)})}), auth0.on (« login », () => {e.classList .add (« registered »), auth0.isSubscriber () &&e.classList.add (« subscribed »)}), auth0.on (« logout », () => {e.classList.remove (« registered »), e.classList.remove (« subscribed »)})} dropdownItems.forEach (function (s) {e.addEventListener (« click », function () {e.querySelector (« . dropdown »). classList.toggle (« open « )})}), body.addEventListener ( » click « , closeDropdowns), document.addEventListener ( » keydown « , closeDropdowns), globalNav.addEventListener ( » click « , function (s) {let n = e.target; n.classList.contains (« global-nav-track ») &&gtmSendReport (n.text, n, « global-nav-link »)}), module.exports = init;
}, {« 3 »: 3, « 4 »: 4, « 7 »: 7, « 151 »: 151}];
window.modules [« aaa-module-mount.legacy »] = [function (required, module, export) {« use strict »; const eventify = require (179), _ pickBy = require (154), _ each = require (315), fingerprintjs2 = require (314), DS = require (313); function registerGlobals () {window.DS = DS, window.Eventify = eventify, window.Fingerprint2 = fingerprintjs2, DS.value (« Eventify », eventify), DS.value (« Fingerprint2″, fingerprintjs2), DS.value ( » $ document « , window.document), DS.value ( » $ window « , window)} Function mountDollarSliceComponents () {DS.service ( » components « , [ » $ document « , » $ module « , function (e, n ) {var r = _pickBy (n.definitions, e => e.providerStrategy === n.providers.controller), o = Object.keys (r); function t (e) {return r => {try {n .get (e, r)} catch (e) {logMountError (r, e)}}} _ each (o, n => {var r = e .querySelectorAll (‘[data-uri * = « / _ components / ‘n’ / »‹’),o=e.querySelectorAll(‘[data-uri$= »/_components/ ‘n’ « ] ‘); _ each (r, t (n)), _ each (o, t (n))}), this.components = o}]), DS.get (« Components »)} Function logMountError (e, n) {const r = e .outerHTML.slice (0, e.outerHTML.indexOf (e.innerHTML)); cons ole.error (« Error attaching the controller to » r, n)} registerGlobals (), document.addEventListener (« DOMContentLoaded », () => {mountDollarSliceComponents ()});
}, {154: 154, 179: 179, 313: 313, 314: 314, 315: 315}];
window.modules [« ads.legacy »] = [function (required, module, export) {« use strict »; const _map = require (66), _ forEach = require (56), _ isString = require (198), _ intersectionWith = require (316), _ isEqual = require (204), _ each = require (315), _ debounce = require (114), _ sortBy = require (137), page = require (151), visit = require (62); DS.service (« adService », [« Eventify », « $ cid », « $ document », « $ window », function (e, t, a, i) {var o, n, s, r, d, c, l, u, g, p, m = {}, h = this, f = [], b = visit.getQueryParamsObject ([« utm_campaign »]), w = document.querySelector (‘script [data-type = « ad- a9 »] ‘); document.querySelector (‘ script [data-name = « Konzertangebote »] ‘) || (i.NYM = {}, i.NYM.analytics = {}, i.NYM.analytics . adStartTime = i.performance.now (), i.googletag = i.googletag || {}, i.googletag.cmd = i.googletag.cmd || [], c = i.googletag, w&& (i.googletag . cmd = i.googletag.cmd || [], i.googletag.cmd.push (function () {i.googletag.pubads (). disableInitialLoad ()}), l = i.setInterval (function () {void 0! == window.apstag&&void 0! == window.apstag.timeout&& (i.cle arInterval (l), window.apstag.cleared =! 0, l = null)}, 10), setTimeout (function () {l& .CSSEAND (i.clearInterval (l), i.googletag.pubads (). refresh (), window.apstag || co nsole.log (« MESSAGE: A9 load timed out, abort »))}, 500)), u = document.createElement (« script »), g = document.createDocumentFragment (), p = document .getElementsByTagName ( » head « ) [0], u.src = » https://z.moatads.com/voxprebidheader841653991752/moatheader.js « , g.appendChild (u), p.insertBefore (g, p.firstChild), o = function (e) {var t, a, o = e.data, n = []; Return o.loaded? e: (o.loaded =! 0, t = null, (t = o.sizes? c.defineSlot (o.name, o.sizes, o.id) .addService (c.pubads ()): c.defineOutOfPageSlot (o.name, o.id) .addService (c.pubads ()). setTargeting (« adid », o.id), b.hasOwnProperty (« utm_campaign ») &&t.setTargeting (« utmcamp », b.utm_campaign) , a = h.getAdCount (o.label), t.setTargeting (« label », o.label « _ » o.site « – » a), c.display (o.id), c.pubads (). addEventListener (« slotOnload », function () {i.NYM.analytics.firstAdLoadTime || (i.NYM.analytics.firstAdLoadTime = ip erformance.now (), i.NYM.analytics.firstAdLoadLabel = e.data.label)} ), (n = v (o))? window.apstag&&window.apstag.cleared&&window.apstag.fetchBids ({slots:], timeout: window.apstag.timeout}, function () {c.cmd.push (function () {window.apstag.setDisplayBids (), c.pubads (). refresh ([t], {changeCorrelator:! 1})})}): c.pubads (). refresh ([t], {changeCorrelator:! 1 }), e.slot = t, e)}, n = function (e) {var a, i, o, n = t (), s = e.getAttribute (« data name »), r = e.getAttribute (« data size »), d = e.getAttribute (« data description »), c = e.getAttribute (« data-site »); n = e.id, r&&r.length? (r = r.split (« , »), a = [], _ map (r, function (e) {e = e.split (« x »), i = parseInt (e [0]), o = parseInt (e [1]), a.push ([i, o])})) 🙁 e.classList.add (« oop »), a =! 1), this.data = {id: n, name : s, sizes: a, loaded:! 1, label: d, site: c}, m [n] = this}, r = function (e) {c.cmd.push (function () {var t = o (e); m [e.data. id] = t})}, s = function (s) {var t = []; e. Slot? (t = v (e)) &&window.apstag&&window.apstag.cleared&&window.aps tag.fetchBids ({slots: [t], timeout: window.apstag.timeout}, function () {c.cmd.push (function ()) {window.apstag.setDisplayBids (), c.pubads (). refresh ([e.slot], {changeCorrelator:! 1})})}): e&&r (e)}, c.cmd.push (function () {var e, t, o, n = page.getMeta (« article: Tag »), s = page.getMeta (« author »), r = i.location.href, d = (e = a.head.querySelector (« . head-gtm »), t = a.body.querySelector (« .gtm »), e&& « top » === e.getAttribute (« data-gtm »)? « gtmtop »: t&& « bottom » = == t.getAttribute (« data-gtm »)? « gtmbottom »: «  »); o = [], _ forEach ([n, s, d], function (s) {_ forEach (e.split ( » , « ), Function (e) {(e = e.trim (). ToLowerCase () .replace (/ s / g, » – « ). Replace (/ ‘| ‘ / g, » « )) . length&&o.push (e)})}), c.pubads (). setTargeting (« kw », o), c.pubads (). setTargeting (« entr y_group « , o), r = r.slice (r.lastIndexOf ( » / « ) 1), c.pubads (). setTargeting (« pn », r), c.companionAds (). setRefreshUnfilledSlots (! 0), c.pubads (). enableAsyncRendering (), c.enableServices ()}), this.load = r, this.create = function (e) {return new n (e)}, this.refre sh = function (s) {var t; _isString (e)? (t = this.getById (e), s (t)): s (e)}, this.remove = function (e) {var t = e .data.id; a.getElementById (t) .innerHTML = «  »}, this.getAdCount = function (s) {var t, a = 0, i = Object.keys (m); return _each (i, function (i) {(t = m [i]). data.loaded&&t.data.label === e&&a}), a}, this.getById = function (e) {return m [e] }, d = _debounce (function () {var e = {TopLeaderboard: 1, RightColTopMPU: 2, outOfPage: 99, « homepageTakeover / TopLeaderboard »: 1}, t = _sortBy (f, function (t) {return e [t .data.label] || 10}); _ forEach (t, function (e) {return e.data.sizes? R (e): i.setTimeout (function () {r (e)}, 2e3)} ), f = []}, 10), this.addToPageLoadQueue = function (e) {f.push (e), d ()}); Function v (e) {var t, a = e.sizes; return a = _intersectionWith (a, [[970.250], [970.90], [728.90], [300.600], [300.250], [320.100], [320.50]], _ isEqual), e.sizes&&e .sizes.length&& (t = {slotID: e .id, sizes: a, slotName: e.label}), t}}]);
}, {56: 56, 62: 62, 66: 66, 114: 114, 137: 137, 151: 151, 198: 198, 204: 204 315: 315, 316: 316}];
window.modules [« cid.legacy »] = [function (required, module, export) {« use strict »; DS.service (« $ cid », function () {var r = Math.floor (100 * Math. Random ()); return function () {return « cid- » r}});
}, {}];
window.modules [« facebook.legacy »] = [function (required, module, export) {« use strict »; DS.service (« facebook », [function () {this.fb = function (i) {window. FB&&window.FB [i] .apply (this, Array.prototype.slice.call (arguments, 1))}} ]);
}, {}];
require = (function e (t, n, r) {function s (o, u) {if (! n [o]) {if (! t [o]) {var a = type of require == « function » &&require; if (! U&&a) returns a (o,! 0); if (i) returns i (o,! 0); var f = new error (« module ‘ » o « ‘ » cannot be found) ; trigger f.code = « MODULE_NOT_FOUND », f} var l = n [o] = {exported: {}}; t [o] [0] .call (l.exports, function (e) {var n = t [o] [1] [e]; return s (n? n: e)}, l, l.exports, e, t, n, r)} return n [o] .exports} var i = typeof require = = « function » &&require; for (var o = 0; o key type === ‘string’ && key.match (/ . Legacy $ /)). forEach (key => window.require (key));
}}

Function tryToMount (fn, el, name) {
To attempt {
fn (el); // start the controller
} catch (e) {
const elementTag = el.outerHTML.slice (0, el.outerHTML.indexOf (el.innerHTML));
console.error (`Error initializing controller for » $ {name} « on » $ {elementTag} « `, e);
}}
}}
/ **
* Mount Client.js component controller
* /

Function mountComponentModules () {
Object.keys (window.modules) .filter (key => typeof key === ‘string’ && key.match (/ . Client $ /)). ForEach (key => {
let controllerFn = window.require (key);

if (typeof controllerFn === ‘function’) {
const name = key.replace (‘. client’,  »),
instanceSelector = `[data-uri * = » _ components / $ {name} / « ]`,
defaultSelector = `[data-uri $ = » _ components $ {name} « ]`,
instance = document.querySelectorAll (instanceSelector),
defaults = document.querySelectorAll (defaultSelector);

for (let el of instances) {
tryToMount (controllerFn, el, name);
}}

for (leave el by default) {
tryToMount (controllerFn, el, name);
}}
}}
});
} // Make sure that a `window.process.env.NODE_ENV` is available in the client for all dependencies.
// Services or components that might require it
// Note: The value «  is exchanged for the actual environment variable in /lib/cmd/compile/scripts.js

window.process = window.process || {};
window.process.env = window.process.env || {};

if (! window.process.env.NODE_ENV) {
window.process.env.NODE_ENV =  »;
} // Note: Legacy controllers that require legacy services (e.g. Dollar-Slice) must
// Wait for DOMContentLoaded to initialize itself, as the files themselves have to be mounted first

mountLegacyServices ();
mountComponentModules ();
//]]
Ebene Magazine – Bitcoin Price dips after Elon Musk announced that Tesla will no longer accept it

Ref.: https://nymag.com

QU’EN PENSEZ-VOUS?

[comment]

PUB

Laisser un commentaire, votre avis compte!

[gs-fb-comments] [comment-form]

Laisser un commentaire, votre avis compte!