PageSourceSearch

https://guardian.com.my/sw.js

js guardian.com.my collected 2026-09-24 20:28:39 UTC 36,682 bytes, 217 lines download raw bytes

1/*!
2 * @version da10c90
3 * 
4 */
5!function(e){var t={}
6function __webpack_require__(r){if(t[r])return t[r].exports
7var n=t[r]={i:r,l:!1,exports:{}},s=!0
8try{e[r].call(n.exports,n,n.exports,__webpack_require__),s=!1}finally{s&&delete t[r]}return n.l=!0,n.exports}__webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,r){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e
9if(4&t&&"object"==typeof e&&e&&e.__esModule)return e
10var r=Object.create(null)
11if(__webpack_require__.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)__webpack_require__.d(r,n,function(t){return e[t]}.bind(null,n))
12return r},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e}
13return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="/",__webpack_require__(__webpack_require__.s="0Gu+")}({"0Gu+":function(e,t,r){"use strict"
14r.r(t)
15r("J4zp")
16var n={}
17r("Bxln")
18const s=(e,...t)=>{let r=e
19return t.length>0&&(r+=` :: ${JSON.stringify(t)}`),r}
20class WorkboxError_WorkboxError extends Error{constructor(e,t){super(s(e,t)),this.name=e,this.details=t}}const o=new Set
21const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=e=>[a.prefix,e,a.suffix].filter(e=>e&&e.length>0).join("-"),c={updateDetails:e=>{(e=>{for(const t of Object.keys(a))e(t)})(t=>{"string"==typeof e[t]&&(a[t]=e[t])})},getGoogleAnalyticsName:e=>e||i(a.googleAnalytics),getPrecacheName:e=>e||i(a.precache),getPrefix:()=>a.prefix,getRuntimeName:e=>e||i(a.runtime),getSuffix:()=>a.suffix}
22const u=e=>{return new URL(String(e),location.href).href.replace(new RegExp(`^${location.origin}`),"")},h=(e,t)=>e.filter(e=>t in e),l=async({request:e,mode:t,plugins:r=[]})=>{const n=h(r,"cacheKeyWillBeUsed")
23let s=e
24for(const e of n)"string"==typeof(s=await e.cacheKeyWillBeUsed.call(e,{mode:t,request:s}))&&(s=new Request(s))
25return s},p=async({cacheName:e,request:t,event:r,matchOptions:n,plugins:s=[]})=>{const o=await self.caches.open(e),a=await l({plugins:s,request:t,mode:"read"})
26let i=await o.match(a,n)
27for(const t of s)if("cachedResponseWillBeUsed"in t){const s=t.cachedResponseWillBeUsed
28i=await s.call(t,{cacheName:e,event:r,matchOptions:n,cachedResponse:i,request:a})}return i},f={put:async({cacheName:e,request:t,response:r,event:n,plugins:s=[],matchOptions:a})=>{const i=await l({plugins:s,request:t,mode:"write"})
29if(!r)throw new WorkboxError_WorkboxError("cache-put-with-no-response",{url:u(i.url)})
30const c=await(async({request:e,response:t,event:r,plugins:n=[]})=>{let s=t,o=!1
31for(const t of n)if("cacheWillUpdate"in t){o=!0
32const n=t.cacheWillUpdate
33if(!(s=await n.call(t,{request:e,response:s,event:r})))break}return o||(s=s&&200===s.status?s:void 0),s||null})({event:n,plugins:s,response:r,request:i})
34if(!c)return
35const f=await self.caches.open(e),d=h(s,"cacheDidUpdate"),_=d.length>0?await p({cacheName:e,matchOptions:a,request:i}):null
36try{await f.put(i,c)}catch(e){throw"QuotaExceededError"===e.name&&await async function executeQuotaErrorCallbacks(){for(const e of o)await e()}(),e}for(const t of d)await t.cacheDidUpdate.call(t,{cacheName:e,event:n,oldResponse:_,newResponse:c,request:i})},match:p}
37let d
38function dontWaitFor(e){e.then(()=>{})}class DBWrapper{constructor(e,t,{onupgradeneeded:r,onversionchange:n}={}){this._db=null,this._name=e,this._version=t,this._onupgradeneeded=r,this._onversionchange=n||(()=>this.close())}get db(){return this._db}async open(){if(!this._db)return this._db=await new Promise((e,t)=>{let r=!1
39setTimeout(()=>{r=!0,t(new Error("The open request was blocked and timed out"))},this.OPEN_TIMEOUT)
40const n=indexedDB.open(this._name,this._version)
41n.onerror=(()=>t(n.error)),n.onupgradeneeded=(e=>{r?(n.transaction.abort(),n.result.close()):"function"==typeof this._onupgradeneeded&&this._onupgradeneeded(e)}),n.onsuccess=(()=>{const t=n.result
42r?t.close():(t.onversionchange=this._onversionchange.bind(this),e(t))})}),this}async getKey(e,t){return(await this.getAllKeys(e,t,1))[0]}async getAll(e,t,r){return await this.getAllMatching(e,{query:t,count:r})}async getAllKeys(e,t,r){return(await this.getAllMatching(e,{query:t,count:r,includeKeys:!0})).map(e=>e.key)}async getAllMatching(e,{index:t,query:r=null,direction:n="next",count:s,includeKeys:o=!1}={}){return await this.transaction([e],"readonly",(a,i)=>{const c=a.objectStore(e),u=t?c.index(t):c,h=[],l=u.openCursor(r,n)
43l.onsuccess=(()=>{const e=l.result
44e?(h.push(o?e:e.value),s&&h.length>=s?i(h):e.continue()):i(h)})})}async transaction(e,t,r){return await this.open(),await new Promise((n,s)=>{const o=this._db.transaction(e,t)
45o.onabort=(()=>s(o.error)),o.oncomplete=(()=>n()),r(o,e=>n(e))})}async _call(e,t,r,...n){return await this.transaction([t],r,(r,s)=>{const o=r.objectStore(t),a=o[e].apply(o,n)
46a.onsuccess=(()=>s(a.result))})}close(){this._db&&(this._db.close(),this._db=null)}}DBWrapper.prototype.OPEN_TIMEOUT=2e3
47const _={readonly:["get","count","getKey","getAll","getAllKeys"],readwrite:["add","put","clear","delete"]}
48for(const[e,t]of Object.entries(_))for(const r of t)r in IDBObjectStore.prototype&&(DBWrapper.prototype[r]=async function(t,...n){return await this._call(r,t,e,...n)})
49const g=async e=>{await new Promise((t,r)=>{const n=indexedDB.deleteDatabase(e)
50n.onerror=(()=>{r(n.error)}),n.onblocked=(()=>{r(new Error("Delete blocked"))}),n.onsuccess=(()=>{t()})})},m={fetch:async({request:e,fetchOptions:t,event:r,plugins:n=[]})=>
50{if("string"==typeof e&&(e=new Request(e)),r instanceof FetchEvent&&r.preloadResponse){const e=await r.preloadResponse
51if(e)return e}const s=h(n,"fetchDidFail"),o=s.length>0?e.clone():null
52try{for(const t of n)if("requestWillFetch"in t){const n=t.requestWillFetch,s=e.clone()
53e=await n.call(t,{request:s,event:r})}}catch(e){throw new WorkboxError_WorkboxError("plugin-error-request-will-fetch",{thrownError:e})}const a=e.clone()
54try{let i
55i="navigate"===e.mode?await fetch(e):await fetch(e,t)
56for(const e of n)"fetchDidSucceed"in e&&(i=await e.fetchDidSucceed.call(e,{event:r,request:a,response:i}))
57return i}catch(e){for(const t of s)await t.fetchDidFail.call(t,{error:e,event:r,originalRequest:o.clone(),request:a.clone()})
58throw e}}}
59const y={get googleAnalytics(){return c.getGoogleAnalyticsName()},get precache(){return c.getPrecacheName()},get prefix(){return c.getPrefix()},get runtime(){return c.getRuntimeName()},get suffix(){return c.getSuffix()}}
60async function copyResponse(e,t){const r=e.clone(),n={headers:new Headers(r.headers),status:r.status,statusText:r.statusText},s=t?t(n):n,o=function canConstructResponseFromBodyStream(){if(void 0===d){const e=new Response("")
61if("body"in e)try{new Response(e.body),d=!0}catch(e){d=!1}d=!1}return d}()?r.body:await r.blob()
62return new Response(o,s)}r("xwD5")
63const w=[],x={get:()=>w,add(e){w.push(...e)}}
64const b="__WB_REVISION__"
65function createCacheKey(e){if(!e)throw new WorkboxError_WorkboxError("add-to-cache-list-unexpected-type",{entry:e})
66if("string"==typeof e){const t=new URL(e,location.href)
67return{cacheKey:t.href,url:t.href}}const{revision:t,url:r}=e
68if(!r)throw new WorkboxError_WorkboxError("add-to-cache-list-unexpected-type",{entry:e})
69if(!t){const e=new URL(r,location.href)
70return{cacheKey:e.href,url:e.href}}const n=new URL(r,location.href),s=new URL(r,location.href)
71return n.searchParams.set(b,t),{cacheKey:n.href,url:s.href}}class PrecacheController_PrecacheController{constructor(e){this._cacheName=c.getPrecacheName(e),this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map}addToCacheList(e){const t=[]
72for(const r of e){"string"==typeof r?t.push(r):r&&void 0===r.revision&&t.push(r.url)
73const{cacheKey:e,url:n}=createCacheKey(r),s="string"!=typeof r&&r.revision?"reload":"default"
74if(this._urlsToCacheKeys.has(n)&&this._urlsToCacheKeys.get(n)!==e)throw new WorkboxError_WorkboxError("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(n),secondEntry:e})
75if("string"!=typeof r&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new WorkboxError_WorkboxError("add-to-cache-list-conflicting-integrities",{url:n})
76this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(n,e),this._urlsToCacheModes.set(n,s),t.length>0){t.join(", ")
771}}}async install({event:e,plugins:t}={}){const r=[],n=[],s=await self.caches.open(this._cacheName),o=await s.keys(),a=new Set(o.map(e=>e.url))
78for(const[e,t]of this._urlsToCacheKeys)a.has(t)?n.push(e):r.push({cacheKey:t,url:e})
79const i=r.map(({cacheKey:r,url:n})=>{const s=this._cacheKeysToIntegrities.get(r),o=this._urlsToCacheModes.get(n)
80return this._addURLToCache({cacheKey:r,cacheMode:o,event:e,integrity:s,plugins:t,url:n})})
81return await Promise.all(i),{updatedURLs:r.map(e=>e.url),notUpdatedURLs:n}}async activate(){const e=await self.caches.open(this._cacheName),t=await e.keys(),r=new Set(this._urlsToCacheKeys.values()),n=[]
82for(const s of t)r.has(s.url)||(await e.delete(s),n.push(s.url))
83return{deletedURLs:n}}async _addURLToCache({cacheKey:e,url:t,cacheMode:r,event:n,plugins:s,integrity:o}){const a=new Request(t,{integrity:o,cache:r,credentials:"same-origin"})
84let i,c=await m.fetch({event:n,plugins:s,request:a})
85for(const e of s||[])"cacheWillUpdate"in e&&(i=e)
86if(!(i?await i.cacheWillUpdate({event:n,request:a,response:c}):c.status<400))throw new WorkboxError_WorkboxError("bad-precaching-response",{url:t,status:c.status})
87c.redirected&&(c=await copyResponse(c)),await f.put({event:n,plugins:s,response:c,request:e===t?a:new Request
87(e),cacheName:this._cacheName,matchOptions:{ignoreSearch:!0}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href)
88return this._urlsToCacheKeys.get(t.href)}async matchPrecache(e){const t=e instanceof Request?e.url:e,r=this.getCacheKeyForURL(t)
89if(r){return(await self.caches.open(this._cacheName)).match(r)}}createHandler(e=!0){return async({request:t})=>{try{const r=await this.matchPrecache(t)
90if(r)return r
91throw new WorkboxError_WorkboxError("missing-precache-entry",{cacheName:this._cacheName,url:t instanceof Request?t.url:t})}catch(r){if(e)return fetch(t)
92throw r}}}createHandlerBoundToURL(e,t=!0){if(!this.getCacheKeyForURL(e))throw new WorkboxError_WorkboxError("non-precached-url",{url:e})
93const r=this.createHandler(t),n=new Request(e)
94return()=>r({request:n})}}let R
95const v=()=>(R||(R=new PrecacheController_PrecacheController),R)
96const E=(e,t)=>{const r=v().getURLsToCacheKeys()
97for(const n of function*generateURLVariations(e,{ignoreURLParametersMatching:t,directoryIndex:r,cleanURLs:n,urlManipulation:s}={}){const o=new URL(e,location.href)
98o.hash="",yield o.href
99const a=function removeIgnoredSearchParams(e,t=[]){for(const r of[...e.searchParams.keys()])t.some(e=>e.test(r))&&e.searchParams.delete(r)
100return e}(o,t)
101if(yield a.href,r&&a.pathname.endsWith("/")){const e=new URL(a.href)
102e.pathname+=r,yield e.href}if(n){const e=new URL(a.href)
103e.pathname+=".html",yield e.href}if(s){const e=s({url:o})
104for(const t of e)yield t.href}}(e,t)){const e=r.get(n)
105if(e)return e}},q=({ignoreURLParametersMatching:e=[/^utm_/],directoryIndex:t="index.html",cleanURLs:r=!0,urlManipulation:n}={})=>{const s=c.getPrecacheName()
106self.addEventListener("fetch",o=>{const a=E(o.request.url,{cleanURLs:r,directoryIndex:t,ignoreURLParametersMatching:e,urlManipulation:n})
107if(!a)return void 0
108let i=self.caches.open(s).then(e=>e.match(a)).then(e=>e||fetch(a))
109o.respondWith(i)})}
110let k=!1
111const N=e=>{const t=v(),r=x.get()
112e.waitUntil(t.install({event:e,plugins:r}).catch(e=>{throw e}))},C=e=>{const t=v()
113e.waitUntil(t.activate())}
114function precacheAndRoute(e,t){!function precache(e){v().addToCacheList(e),e.length>0&&(self.addEventListener("install",N),self.addEventListener("activate",C))}(e),function addRoute(e){k||(q(e),k=!0)}(t)}r("2KUI")
115const W="workbox-expiration",T="cache-entries",U=e=>{const t=new URL(e,location.href)
116return t.hash="",t.href}
117class CacheTimestampsModel_CacheTimestampsModel{constructor(e){this._cacheName=e,this._db=new DBWrapper(W,1,{onupgradeneeded:e=>this._handleUpgrade(e)})}_handleUpgrade(e){const t=e.target.result.createObjectStore(T,{keyPath:"id"})
118t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1}),g(this._cacheName)}async setTimestamp(e,t){const r={url:e=U(e),timestamp:t,cacheName:this._cacheName,id:this._getId(e)}
119await this._db.put(T,r)}async getTimestamp(e){return(await this._db.get(T,this._getId(e))).timestamp}async expireEntries(e,t){const r=await this._db.transaction(T,"readwrite",(r,n)=>{const s=r.objectStore(T).index("timestamp").openCursor(null,"prev"),o=[]
120let a=0
121s.onsuccess=(()=>{const r=s.result
122if(r){const n=r.value
123n.cacheName===this._cacheName&&(e&&n.timestamp<e||t&&a>=t?o.push(r.value):a++),r.continue()}else n(o)})}),n=[]
124for(const e of r)await this._db.delete(T,e.id),n.push(e.url)
125return n}_getId(e){return this._cacheName+"|"+U(e)}}class CacheExpiration_CacheExpiration{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._cacheName=e,this._timestampModel=new CacheTimestampsModel_CacheTimestampsModel(e)}async expireEntries(){if(this._isRunning)return void(this._rerunRequested=!0)
126this._isRunning=!0
127const e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),r=await self.caches.open(this._cacheName)
128for(const e of t)await r.delete(e)
129this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,dontWaitFor(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){return await this._timestampModel.getTimestamp(e)<Date.now()-1e3*this._maxAgeSeconds}return!1}async delete(){this._rerunRequested=!1,await this._timestampModel.expireEntries(1/0)}}class ExpirationPlugin_ExpirationPlugin{constructor(e={}){this.cachedResponseWillBeUsed=(async({event:e,request:t,cacheName:r,cachedResponse:n})=>{if(!n)return null
130const s=this._isResponseDateFresh(n),o=this._getCacheExpiration(r)
131dontWaitFor(o.expireEntries())
132const a=o.updateTimestamp(t.url)
133if(e)try{e.waitUntil(a)}catch(e){0}return s?n:null}),this.cacheDidUpdate=(async({cacheName:e,request:t})=>{const r=this._getCacheExpiration(e)
134await r.updateTimestamp(t.url),await r.expireEntries()}),this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&function registerQuotaErrorCallback(e){o.add(e)}(()=>
134this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===c.getRuntimeName())throw new WorkboxError_WorkboxError("expire-custom-caches-only")
135let t=this._cacheExpirations.get(e)
136return t||(t=new CacheExpiration_CacheExpiration(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0
137const t=this._getDateHeaderTimestamp(e)
138return null===t||t>=Date.now()-1e3*this._maxAgeSeconds}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null
139const t=e.headers.get("date"),r=new Date(t).getTime()
140return isNaN(r)?null:r}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete()
141this._cacheExpirations=new Map}}r("5tLK")
142const S="GET",P=e=>e&&"object"==typeof e?e:{handle:e}
143class Route_Route{constructor(e,t,r=S){this.handler=P(t),this.match=e,this.method=r}}class RegExpRoute_RegExpRoute extends Route_Route{constructor(e,t,r){super(({url:t})=>{const r=e.exec(t.href)
144if(r&&(t.origin===location.origin||0===r.index))return r.slice(1)},t,r)}}class Router_Router{constructor(){this._routes=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,r=this.handleRequest({request:t,event:e})
145r&&e.respondWith(r)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&"CACHE_URLS"===e.data.type){const{payload:t}=e.data
1460
147const r=Promise.all(t.urlsToCache.map(e=>{"string"==typeof e&&(e=[e])
148const t=new Request(...e)
149return this.handleRequest({request:t})}))
150e.waitUntil(r),e.ports&&e.ports[0]&&r.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const r=new URL(e.url,location.href)
151if(!r.protocol.startsWith("http"))return void 0
152const{params:n,route:s}=this.findMatchingRoute({url:r,request:e,event:t})
153let o=s&&s.handler
154if(!o&&this._defaultHandler&&(o=this._defaultHandler),!o)return void 0
155let a
156try{a=o.handle({url:r,request:e,event:t,params:n})}catch(e){a=Promise.reject(e)}return a instanceof Promise&&this._catchHandler&&(a=a.catch(n=>this._catchHandler.handle({url:r,request:e,event:t}))),a}findMatchingRoute({url:e,request:t,event:r}){const n=this._routes.get(t.method)||[]
157for(const s of n){let n
158const o=s.match({url:e,request:t,event:r})
159if(o)return n=o,Array.isArray(o)&&0===o.length?n=void 0:o.constructor===Object&&0===Object.keys(o).length?n=void 0:"boolean"==typeof o&&(n=void 0),{route:s,params:n}}return{}}setDefaultHandler(e){this._defaultHandler=P(e)}setCatchHandler(e){this._catchHandler=P(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new WorkboxError_WorkboxError("unregister-route-but-not-found-with-method",{method:e.method})
160const t=this._routes.get(e.method).indexOf(e)
161if(!(t>-1))throw new WorkboxError_WorkboxError("unregister-route-route-not-registered")
162this._routes.get(e.method).splice(t,1)}}let L
163const O=()=>(L||((L=new Router_Router).addFetchListener(),L.addCacheListener()),L)
164function registerRoute(e,t,r){let n
165if("string"==typeof e){const s=new URL(e,location.href)
1660,n=new Route_Route(({url:e})=>e.href===s.href,t,r)}else if(e instanceof RegExp)n=new RegExpRoute_RegExpRoute(e,t,r)
167else if("function"==typeof e)n=new Route_Route(e,t,r)
168else{if(!(e instanceof Route_Route))throw new WorkboxError_WorkboxError("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"})
169n=e}return O().registerRoute(n),n}r("aqiC")
170class CacheFirst_CacheFirst{constructor(e={}){this._cacheName=c.getRuntimeName(e.cacheName),this._plugins=e.plugins||[],this._fetchOptions=e.fetchOptions,this._matchOptions=e.matchOptions}async handle({event:e,request:t}){"string"==typeof t&&(t=new Request(t))
171let r,n=await f.match({cacheName:this._cacheName,request:t,event:e,matchOptions:this._matchOptions,plugins:this._plugins})
172if(n)0
173else{0
174try{n=await this._getFromNetwork(t,e)}catch(e){r=e}0}if(!n)throw new WorkboxError_WorkboxError("no-response",{url:t.url,error:r})
175return n}async _getFromNetwork(e,t){const r=await m.fetch({request:e,event:t,fetchOptions:this._fetchOptions,plugins:this._plugins}),n=r.clone(),s=f.put({cacheName:this._cacheName,request:e,response:n,event:t,plugins:this._plugins})
176if(t)try{t.waitUntil(s)}catch(e){0}return r}}const M={cacheWillUpdate:async({response:e})=>200===e.status||0===e.status?e:null}
177class NetworkFirst_NetworkFirst{constructor(e={}
177){if(this._cacheName=c.getRuntimeName(e.cacheName),e.plugins){const t=e.plugins.some(e=>!!e.cacheWillUpdate)
178this._plugins=t?e.plugins:[M,...e.plugins]}else this._plugins=[M]
179this._networkTimeoutSeconds=e.networkTimeoutSeconds||0,this._fetchOptions=e.fetchOptions,this._matchOptions=e.matchOptions}async handle({event:e,request:t}){const r=[]
180"string"==typeof t&&(t=new Request(t))
181const n=[]
182let s
183if(this._networkTimeoutSeconds){const{id:o,promise:a}=this._getTimeoutPromise({request:t,event:e,logs:r})
184s=o,n.push(a)}const o=this._getNetworkPromise({timeoutId:s,request:t,event:e,logs:r})
185n.push(o)
186let a=await Promise.race(n)
187if(a||(a=await o),!a)throw new WorkboxError_WorkboxError("no-response",{url:t.url})
188return a}_getTimeoutPromise({request:e,logs:t,event:r}){let n
189return{promise:new Promise(t=>{n=setTimeout(async()=>{t(await this._respondFromCache({request:e,event:r}))},1e3*this._networkTimeoutSeconds)}),id:n}}async _getNetworkPromise({timeoutId:e,request:t,logs:r,event:n}){let s,o
190try{o=await m.fetch({request:t,event:n,fetchOptions:this._fetchOptions,plugins:this._plugins})}catch(e){s=e}if(e&&clearTimeout(e),s||!o)o=await this._respondFromCache({request:t,event:n})
191else{const e=o.clone(),r=f.put({cacheName:this._cacheName,request:t,response:e,event:n,plugins:this._plugins})
192if(n)try{n.waitUntil(r)}catch(e){0}}return o}_respondFromCache({event:e,request:t}){return f.match({cacheName:this._cacheName,request:t,event:e,matchOptions:this._matchOptions,plugins:this._plugins})}}class StaleWhileRevalidate_StaleWhileRevalidate{constructor(e={}){if(this._cacheName=c.getRuntimeName(e.cacheName),this._plugins=e.plugins||[],e.plugins){const t=e.plugins.some(e=>!!e.cacheWillUpdate)
193this._plugins=t?e.plugins:[M,...e.plugins]}else this._plugins=[M]
194this._fetchOptions=e.fetchOptions,this._matchOptions=e.matchOptions}async handle({event:e,request:t}){"string"==typeof t&&(t=new Request(t))
195const r=this._getFromNetwork({request:t,event:e})
196let n,s=await f.match({cacheName:this._cacheName,request:t,event:e,matchOptions:this._matchOptions,plugins:this._plugins})
197if(s){if(e)try{e.waitUntil(r)}catch(n){0}}else{0
198try{s=await r}catch(e){n=e}}if(!s)throw new WorkboxError_WorkboxError("no-response",{url:t.url,error:n})
199return s}async _getFromNetwork({request:e,event:t}){const r=await m.fetch({request:e,event:t,fetchOptions:this._fetchOptions,plugins:this._plugins}),n=f.put({cacheName:this._cacheName,request:e,response:r.clone(),event:t,plugins:this._plugins})
200if(t)try{t.waitUntil(n)}catch(e){0}return r}}r("cDf5"),r("yXPU"),r("jLCR")
201class CacheableResponse{constructor(e={}){this._statuses=e.statuses,this._headers=e.headers}isResponseCacheable(e){let t=!0
202return this._statuses&&(t=this._statuses.includes(e.status)),this._headers&&t&&(t=Object.keys(this._headers).some(t=>e.headers.get(t)===this._headers[t])),t}}class CacheableResponsePlugin_CacheableResponsePlugin{constructor(e){this.cacheWillUpdate=(async({response:e})=>this._cacheableResponse.isResponseCacheable(e)?e:null),this._cacheableResponse=new CacheableResponse(e)}}new RegExp(/\.(?:png|jpg|jpeg)$/)
203var K=function fetchIfNotCached(e){return new Promise(function(t){caches.match(e).then(function(r){t(r||function fetchAndCacheImage(e){return fetch(e,{mode:"no-cors"}).then(function(t){return caches.open("images").then(function(r){return r.put(e,t.clone())}).then(function(){return t})})}(e))})})},A=function handleImagePreFetchRequest(e,t){return function isFastNetwork(){return!(navigator.connection&&"effectiveType"in navigator.connection)||"4g"===navigator.connection.effectiveType}()?Promise.all(e.urls.map(K)).then(function(e){return t.ports[0].postMessage({status:"done"}),e}).catch(function(e){return t.ports[0].postMessage({status:"error",message:JSON.stringify(e)}),null}):(t.ports[0].postMessage({status:"error",message:"Slow Network detected. Not pre-fetching images. ".concat(e.urls)}),null)}
204importScripts("https://storage.googleapis.com/workbox-cdn/releases/5.1.3/workbox-sw.js"),function skipWaiting(){self.addEventListener("install",()=>self.skipWaiting())}(),function clientsClaim(){self.addEventListener("activate",()=>self.clients.claim())}(),precacheAndRoute([{'revision':'bc5cc9c236a966f754f161779b30e973','url':'/1.e008e9d0d6b31620952c.js'},{'revision':'57cbaaa330683e2d210cf609fd6ef414','url':'/10.d2fe0a667df4f485abba.js'},{'revision':'b2a1ef2e22f3ec293c6f738a3f224fb3','url':'/11.c0ea4022b0452f5c4895.js'},{'revision':'5f188178e0732b5a92e199ca58f8d31f','url':'/12.019f4f626c206d726a3d.js'},{'revision':'1dc092b894440b7c0ba962d1755faeb5','url':'/13.d5a17b074d86e84419e1.js'},{'revision':'710cb98b830eb5b147053c531d716dcc','url':'/14.cc63f4787a78f07d39cf.js'},{'revision':'cb3bc267661cf0e55f27722c4b82a264','url':'/15.3b8d8f34307ba334bc92.js'},{'revision':'01b1cf73a154cf82b05d5dc53151d9a5','url':'/16.e00bbeebc3526ad8a1d9.js'},{'revision':'42898d5fde2b87296bdf87c74450ed95','url':'/17.2d508c1bb69f0d515ac4.js'},{'revision':'faa069b22ea040ba79c46ed17d71cef8','url':'/18.70745b9b5de30b2a3c56.js'},{'revision':'f44ee391a07460b8c1b10be81b00d4b0','url':'/19.680204971a021c1272d5.js'},{'revision':'43ece101582ef8afc7c30e62acdd67f2','url':'/2.160bf5d679743055d4bf.js'},{'revision':'09704996d7e00cda6d2910ca38deefab','url':'/20.4fa3b5566e29694a5311.js'},{'revision':'00ac3e6ff935687074977409b853abcd','url':'/21.1a57efca6998d9af2be1.js'},{'revision':'3771894d2450d2faca2d4d93f1484fe2','url':'/22.1708ad8fb8ea95122ef1.js'},{'revision':'5215a5ab84c379ea64ac5ce6a969e7b9','url':'/23.e61c5465da601e7e7e59.js'},{'revision':'f9cb06c766d8733207373efc318f0b6d','url':'/24.a2031ad4dc822f95eb92.js'},{'revision':'d2d9616e9c2cbd07e296702ae2ea9961','url':'/3.fa3eb0c8f0bc42920aca.js'},{'revision':'a6db7500d574c4b8106abffa2d5c10a3','url':'/35.a047c1983c18d8207084.js'},{'revision':'3478019e8d66f52afa73a055cfb3d9d8','url':'/36.1da38274fedf5e6acae6.js'},{'revision':'23d3f8699883e8d25f0d97cd4d4e11e8','url':'/37.ea4853381954efe403d8.js'},{'revision':'43d896512775fc78d697409ca2d71a4e','url':'/38.ae6678821c0c806f64f1.js'},{'revision':'8961273ce86ebfbac5f8745fd4c56f6e','url':'/39.29804cd4ebe2883572be.js'},{'revision':'49f702e3c6ed896d1b9e70bb8519a0bc','url':'/4.433e488218e8b20eb13c.js'},{'revision':'cdff616109c5595829730f1d5dacac4c','url':'/40.26d847c2320e820b41ce.js'},{'revision':'4730b6317aa77d8b564f24f9f468da4e','url':'/41.4557db56d78950f60356.js'},{'revision':'2efb1153e683664d832ae61bac686519','url':'/42.ddb77711ab930d839854.js'},{'revision':'975ad1f0d972dfaf410a16a6ac541db3','url':'/43.84a0316e19ea11da9e55.js'},{'revision':'537f7d3ba6473ffdd23416289ae1b40a','url':'/44.d08795c54a532f703f95.js'},{'revision':'f50f376a4ef8c3d3707fd5fb8e6c839d','url':'/45.44caa994d3737b3265b0.js'}
204,{'revision':'23868d33d2b45f7e9df3d0a7601e4947','url':'/46.333a0f8763927fb982f9.js'},{'revision':'a6567863347101c883bddd88912015fc','url':'/47.5c8888c4a5a81d6520f8.js'},{'revision':'4e8c6871e090e41fc9795cd8ff6bcea6','url':'/48.e103c6defa48706522fb.js'},{'revision':'a65ed41239b7e1f2001e3e71b05f91e0','url':'/49.1aaa80034b1884c0fd41.js'},{'revision':'76ce0706409b8705bfd5729b8ae0d893','url':'/5.029540f1e2bb194c228e.js'},{'revision':'595fa4d8a134c43ed1d50ec87305beca','url':'/50.6ae11d57726663290c9e.js'},{'revision':'eadcf825f85e4d4356f091edea4144e7','url':'/51.0af71694288d92c4bc4a.js'},{'revision':'05411a5106947bb14cb94bbb45b1e7ac','url':'/52.e6b6abeb5bedba95fa40.js'},{'revision':'4477c91ef4b25e387b614d4ddde939bf','url':'/53.b78f8f6da1625ae2c475.js'},{'revision':'b8de63e2e0ef0f5816d2b2c46934405c','url':'/54.011eaa306d4976b47b46.js'},{'revision':'483f470eb80c3d596ec6926fa9528416','url':'/55.6e88892480ade051dd4a.js'},{'revision':'1dd49dc4c8f00df88828003845f06cac','url':'/56.9a84265983491d0db84e.js'},{'revision':'fd8ac5454c593e59860d4906fd07823b','url':'/57.9bf7e3b7125f84801ecf.js'},{'revision':'8cafb4c2edd0d620b3dffc0f8c16b61d','url':'/58.8b3f498ef0cc029c1eaa.js'},{'revision':'0aa32e66f652d8476a3f17b709123369','url':'/59.cbd4def1cc6edd278576.js'},{'revision':'3fabaeb742ad5b89671f4da442d233d7','url':'/6.c66ed97309cb5cb177aa.js'},{'revision':'99961d11da59ff9c3154e393fef2b2a8','url':'/60.f2e1eec67a9785ed56d1.js'},{'revision':'a52b07d3eba1e58b24d2eddc1e8439ef','url':'/61.6824aa5b08f964367a07.js'},{'revision':'e49fc8558b9a91de81439edf5e03deb0','url':'/62.31614ae1d838eef06ac2.js'},{'revision':'fe63f0eb7e8aedd37eefb03eec8bab51','url':'/63.1fa42618b7cc168c2025.js'},{'revision':'71db1b506b5c8161e9e4048979683c2f','url':'/64.5d6350961636315f6b76.js'},{'revision':'cd1330f48a3fe25a8517e69128a91aa4','url':'/65.c547df2447153f16dbc7.js'},{'revision':'b166245d44f6b665d75755b44a372cdc','url':'/66.7c658dbb1f2a404fffb7.js'},{'revision':'deaff444212ab42a6dd5982d45ab5cce','url':'/67.d94c4f85db7df97812f0.js'},{'revision':'7e02d8509b42445de9b4c1eb45e36db7','url':'/68.8f759b3cc0e9d7742bf7.js'},{'revision':'33d7982295c22715032fac42f9dc1dd1','url':'/7.50335d5368bcf056afa8.js'},{'revision':'d1341e255a05a7ab713caceb745e7176','url':'/8.21117672930bb5623ff8.js'},{'revision':'da83cfb13a4946b590edc5c14681599b','url':'/9.8b81eb0de407dc6c053f.js'},{'revision':'482762e090ebc0f25e9ffe0356796937','url':'/ArrowLeft-7QS.svg'},{'revision':'1070dc857eacd5a60723e4498b60e404','url':'/ArrowRight-B3b.svg'},{'revision':'b1a8b7c47cbf403607119939ed07b676','url':'/Calendar-fEd.svg'},{'revision':'64e31ddec5e96466a2db028e23c0d8e8','url':'/CartBlack-uKE.svg'},{'revision':'04a1faa609b9bf26fa36f41d4ef556f8','url':'/CartOrange-wEC.svg'},{'revision':'a956cf934fea90dc5e895b533362b9f3','url':'/CartWhite-w6z.svg'},{'revision':'b982534d2bde43ceefdbee280a705b35','url':'/CheckWhite-7A9.svg'},{'revision':'fd1d1400abaa33f77f47e1d464b72aa2','url':'/ClickCollectWhite-m2s.svg'},{'revision':'76f8f2116a0298d9d717995b3724fda5','url':'/Clock-muP.svg'},{'revision':'07515f26c55bb11e27e5248d534c7039','url':'/CloseSquare-86o.svg'},{'revision':'0cf84ea55fc802b872ee6490625c8288','url':'/Edit-hRG.svg'},{'revision':'96ba0afb0dab6427544e0ae5fd1a165c','url':'/FilesWhite-cnw.svg'},{'revision':'a1678d1df0b31a790dcf16aecd641b55','url':'/InfoSquare-bvx.svg'},{'revision':'9a8ca56bbc114bf5f38e8f5542533bf2','url':'/MapPoint-vUT.svg'},{'revision':'7586e4ff868c1c32e2bc2ee69c77109e','url':'/Oos-kw5.svg'},{'revision':'cfef019001b1eb7c8f116ef56ecf3722','url':'/Print-5e5.svg'},{'revision':'b535a6c3bb23b19d14bfbf476079876e','url':'/RootCmp_CATEGORY__default.663b6ca46208e9f5608a.js'},{'revision':'8c23b92110fbf968484c6516c3aefe8c','url':'/RootCmp_CMS_PAGE__default.34d77c36e36a5593ae89.js'},{'revision':'c6e4e9d7c5ba6c439857ccbeba772ede','url':'/RootCmp_NOTFOUND__default.315e7ace486a9f6a5f63.js'},{'revision':'7a346ef86f0200325842153c13339111','url':'/RootCmp_PRODUCT__default.878cdbdce6b43baa9123.js'},{'revision':'76dad453af2a39f66059c8f72501a2a2','url':'/RootCmp_SEARCH__default.9e69306d8073798e43ae.js'},{'revision':'2946c81b0d6b6b34003436b883487434','url':'/Save-7tF.svg'}
204,{'revision':'4280819446837cde0f8011bdfdfefeb1','url':'/Send-nYP.svg'},{'revision':'b3dc4bdd34e10a80c23e8f991a24078d','url':'/Ticket-iq4.svg'},{'revision':'d62d84961371dd11f48f4e5a85301537','url':'/TicketBlack-7Nv.svg'},{'revision':'ac9c22d1cdc250aa77c3aa9c630df923','url':'/click_collect-5rD.svg'},{'revision':'d8ba9c6c13ab270be96bb33d217c2e3c','url':'/client.045f6fb1ae7c3aa4b307.js'},{'revision':'c1c32f34b25280bc492568fc43b85dbf','url':'/i18n-en_US.87a1fe9a6f28ce91c69b.js'},{'revision':'cb892a9666a91b8b0ee9af1a6d10f0c3','url':'/pin_location-qcj.svg'},{'revision':'1edc15feebf8f845a87bf2b8c4348a2e','url':'/runtime~client.7ac24ec896d12db98a28.js'},{'revision':'f97e3bbf73254b0112091d0192f17aec','url':'/slick-vcG.svg'},{'revision':'540c71ed9135fc296cdf4f690601520b','url':'/vendors.2322e955f6af5bfe08e9.js'},{'revision':'f5704404e3acc67fdce81783326f3ed3','url':'/vendors~RootCmp_PRODUCT__default.108850f4e149df26b999.js'},{'revision':'051993d19c2b7581680ad8703e922eb8','url':'/vendors~client.ccdd9036de70ea7f3fcc.js'},{'revision':'b6b1a3d4c274958c5334d8ecb257c904','url':'/venia-static/app-skin-analysis.html'},{'revision':'a0c67ab7554bceb02eedced32f05d2cc','url':'/venia-static/lib/smartbanner.css'},{'revision':'414b9bb71c13d4050603e9d8c5aeed03','url':'/venia-static/lib/smartbanner.js'},{'revision':'fa4690e3f2d40c0bb3e6617aadf09b49','url':'/venia-static/modiface/dist/CoreSDK.js'},{'revision':'70ea685dec8463acf6fc95c9edb6a7dc','url':'/venia-static/modiface/dist/face_tracker/MFEFaceTracker.js'},{'revision':'376632445d12d615cc24284d6e56af28','url':'/venia-static/modiface/dist/import.min.js'},{'revision':'c3e0d9cd0b15a6d5d4f55e6c2386194d','url':'/venia-static/modiface/dist/init.js'},{'revision':'e25888ef5808f94e3cdbb777dcf01457','url':'/venia-static/modiface/dist/makeup_module.min.js'},{'revision':'d0c1d95d1cd5cbee2beb41a23ae65dbd','url':'/venia-static/modiface/dist/tutorials/TutorialCoreSDKWrapper.js'},{'revision':'56b0aeabfb9c8a58ffdf526dbe855347','url':'/venia-static/modiface/dist/tutorials/web/TutorialCoreSDK.js'},{'revision':'7085d44e474a9cca8a338dc74b027e24','url':'/venia-static/modiface/dist/tutorials/wechat-wasm/TutorialCoreSDK.js'},{'revision':'bb6281386fc8df20e32b3e75cb1215da','url':'/venia-static/modiface/sdk.js'},{'revision':'0740ba3e3e02097c27c59bc27104b595','url':'/venia-static/modiface_hair/dist/import.js'},{'revision':'a07014d4f3e54c98eaf13d2548d8fcb4','url':'/venia-static/modiface_hair/dist/index.js'},{'revision':'b38a7153eed8d03ca4a2f949cdf14b72','url':'/venia-static/modiface_hair/dist/init.js'},{'revision':'4a2c395c5aef6905dd28d6b8cf3e5437','url':'/venia-static/modiface_hair/sdk.js'},{'revision':'8a407ea73d5b422a794ef13cda959c78','url':'/venia-static/modiface_hair/vendors/MFEHairColoring.js'},{'revision':'88a7855efa75a40ed6acadd6e3ee3291','url':'/venia-static/modiface_hair/vendors/MFEHairColoring_SM.js'},{'revision':'8bde4b376e91548871e3a233bf4e73bc','url':'/venia-static/qg-sw.9cc3b684365958bdd809.js'}]||[]),function(){!function createImageCacheHandler(){new NetworkFirst_NetworkFirst({cacheName:"images",plugins:[new ExpirationPlugin_ExpirationPlugin({maxEntries:60,maxAgeSeconds:2592e3}),new CacheableResponsePlugin_CacheableResponsePlugin({statuses:[0,200]})]})}()
205registerRoute(new RegExp("(robots.txt|favicon.ico|manifest.json)"),new StaleWhileRevalidate_StaleWhileRevalidate),registerRoute(new RegExp(/\.js$/),new CacheFirst_CacheFirst),registerRoute(function(e){return function isHTMLRoute(e){return function isHomeRoute(e){if("/"===e.pathname)return!0}(e)||new RegExp("\\.html$").test(e.pathname)}(e.url)},new StaleWhileRevalidate_StaleWhileRevalidate({plugins:[{cacheKeyWillBeUsed:function cacheKeyWillBeUsed(){return"index.html"}}],cacheName:y.precache}))}(),function registerImagePreFetchHandler(){!function registerMessageHandler(e,t){n[e]||(n[e]=[]),n[e].push(t)}("PREFETCH_IMAGES",A)}(),self.addEventListener("message",function(e){var t=e.data
206!function handleMessageFromClient(e,t,r){var s=n[e]
207s&&s.forEach(function(e){e(t,r)})}(t.type,t.payload,e)})},"2KUI":function(e,t,r){"use strict"
208try{self["workbox:expiration:5.1.4"]&&_()}catch(e){}},"5tLK":function(e,t,r){"use strict"
209try{self["workbox:routing:5.1.4"]&&_()}catch(e){}},Bxln:function(e,t,r){"use strict"
210try{self["workbox:core:5.1.4"]&&_()}catch(e){}},J4zp:function(e,t,r){var n=r("wTVA"),s=r("m0LI"),o=r("wkBT")
211e.exports=function _slicedToArray(e,t){return n(e)||s(e,t)||o()}},aqiC:function(e,t,r){"use strict"
212try{self["workbox:strategies:5.1.4"]&&_()}catch(e){}},cDf5:function(e,t){function _typeof2(e){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof2(e){return typeof e}:function _typeof2(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _typeof(t){return"function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?e.exports=_typeof=function _typeof(e){return _typeof2(e)}:e.exports=_typeof=function _typeof(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":_typeof2(e)},_typeof(t)}e.exports=_typeof},jLCR:function(e,t,r){"use strict"
213try{self["workbox:cacheable-response:5.1.4"]&&_()}catch(e){}},m0LI:function(e,t){e.exports=function _iterableToArrayLimit(e,t){var r=[],n=!0,s=!1,o=void 0
214try{for(var a,i=e[Symbol.iterator]();!(n=(a=i.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){s=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(s)throw o}}return r}},wTVA:function(e,t){e.exports=function _arrayWithHoles(e){if(Array.isArray(e))return e}},wkBT:function(e,t){e.exports=function _nonIterableRest(){throw new TypeError("Invalid attempt to de
214structure non-iterable instance")}},xwD5:function(e,t,r){"use strict"
215try{self["workbox:precaching:5.1.4"]&&_()}catch(e){}},yXPU:function(e,t){function asyncGeneratorStep(e,t,r,n,s,o,a){try{var i=e[o](a),c=i.value}catch(e){return void r(e)}i.done?t(c):Promise.resolve(c).then(n,s)}e.exports=function _asyncToGenerator(e){return function(){var t=this,r=arguments
216return new Promise(function(n,s){var o=e.apply(t,r)
217function _next(e){asyncGeneratorStep(o,n,s,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(o,n,s,_next,_throw,"throw",e)}_next(void 0)})}}}})

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.