mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-23 08:36:29 +00:00
676f2ca479
Commit 5edce20302
summary:
```
* 5edce203 - (4 minutes ago) Merge branch 'master' of github.com:tootsuite/mastodon - Morgan Bazalgette (HEAD -> master, origin/master, origin/HEAD)
|\
| * 2c51bc0c - (4 hours ago) Add missing rejection handling for Promises (#7008) - unarist (upstream/master)
| * e7a17167 - (5 hours ago) Implement the ability for an Administrator or Moderator to remove an account avatar (#6998) - Emelia Smith
| * 4fd71acc - (5 hours ago) Fix issues with sending direct messages from user profile (#6999) - Emelia Smith
| * 3f51c6ef - (5 hours ago) Weblate translations (2018-04-02) (#7007) - Yamagishi Kazutoshi
| * b04f73ce - (6 hours ago) Russian language updated (#7005) - Evgeny Petrov
| * 24611d8d - (6 hours ago) i18n: update zh-HK translation (#7004) - luzi82
| * f890d2a7 - (16 hours ago) Support all ActivityPub actor types (#6997) - Eugen Rochko
| * 33513753 - (16 hours ago) Fix unpermitted parameters warning when generating pagination URLs (#6995) - Eugen Rochko
| * 123a343d - (19 hours ago) [WIP] Enable custom emoji on account pages and in the sidebar (#6124) - David Underwood
| * f464f98f - (19 hours ago) Update Ruby to version 2.4.4 (#6964) - Yamagishi Kazutoshi
| * 6a895e1a - (20 hours ago) Fix: Prevent submission using same logic as submit button disabling. (#6993) - Emelia Smith
* | 011eda08 - (7 minutes ago) Properly cache requests using service workers - Morgan Bazalgette
* | 8dd77f17 - (5 hours ago) Fix build - Morgan Bazalgette
* | 99373236 - (19 hours ago) Add build status - Morgan Bazalgette
* | b448a3a5 - (19 hours ago) Update README - Morgan Bazalgette
* | 68fd7ee6 - (20 hours ago) Fix statuses embedded in like/boost notifs being white - Morgan Bazalgette
* | 7a9212df - (21 hours ago) Temporary workaround to only show related statuses - Morgan Bazalgette
* | 00bd10fa - (26 hours ago) Merge branch 'master' of github.com:tootsuite/mastodon - Morgan Bazalgette
|\ \
| |/
| * 993ce0e5 - (28 hours ago) improve zh-HK localization by referring zh-TW and zh-CN (#6988) - luzi82
* | 05832497 - (30 hours ago) Merge branch 'master' of github.com:tootsuite/mastodon - Morgan Bazalgette
\ \
|/
* 929f58f1 - (32 hours ago) i18n: Update Polish translation (#6985) - Marcin Mikołajczak
```
1 line
No EOL
90 KiB
Text
1 line
No EOL
90 KiB
Text
{"version":3,"sources":["webpack:///extra_polyfills.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/requestidlecallback/index.js","webpack:///./node_modules/object-fit-images/dist/ofi.common-js.js"],"names":["webpackJsonp","801","module","__webpack_exports__","__webpack_require__","Object","defineProperty","value","__WEBPACK_IMPORTED_MODULE_0_intersection_observer__","__WEBPACK_IMPORTED_MODULE_1_requestidlecallback__","n","__WEBPACK_IMPORTED_MODULE_2_object_fit_images__","933","exports","window","document","IntersectionObserverEntry","entry","this","time","target","rootBounds","boundingClientRect","intersectionRect","getEmptyRect","isIntersecting","targetRect","targetArea","width","height","intersectionArea","intersectionRatio","IntersectionObserver","callback","opt_options","options","Error","root","nodeType","_checkForIntersections","throttle","bind","THROTTLE_TIMEOUT","_callback","_observationTargets","_queuedEntries","_rootMarginValues","_parseRootMargin","rootMargin","thresholds","_initThresholds","threshold","map","margin","unit","join","now","performance","fn","timeout","timer","setTimeout","addEvent","node","event","opt_useCapture","addEventListener","attachEvent","removeEvent","removeEventListener","detatchEvent","computeRectIntersection","rect1","rect2","top","Math","max","bottom","min","left","right","getBoundingClientRect","el","rect","err","containsDeep","parent","child","getParentNode","parentNode","host","prototype","get","registry","POLL_INTERVAL","USE_MUTATION_OBSERVER","observe","some","item","element","_registerInstance","push","_monitorIntersections","unobserve","filter","length","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","slice","opt_threshold","Array","isArray","sort","t","i","a","isNaN","opt_rootMargin","marginString","margins","split","parts","exec","parseFloat","_monitoringIntersections","_monitoringInterval","setInterval","_domObserver","MutationObserver","attributes","childList","characterData","subtree","clearInterval","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","forEach","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","newEntry","_hasCrossedThreshold","getComputedStyle","display","atRoot","parentRect","parentComputedStyle","body","documentElement","overflow","html","clientWidth","clientHeight","_expandRectByRootMargin","newRect","oldRatio","newRatio","indexOf","index","splice","934","global","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","undefined","apply","abortRunning","isRunning","lazyraf","cancelRequestAnimationFrame","lazytimer","clearTimeout","onInputorMutation","remainingTime","minThrottle","scheduleLazy","setInactive","scheduleAfterRaf","runTasks","scheduleRaf","requestAnimationFrame","throttleDelay","Date","taskStart","scheduleStart","task","len","timeThreshold","runAttempts","tasks","IdleDeadline","timeRemaining","shift","tasklength","requestIdleCallbackShim","cancelIdleCallbackShim","id","didTimeout","timestamp","check","last","requestIdleCallback","cancelIdleCallback","e","rIC","timeRemainingProto","IdleCallbackDeadline","getOwnPropertyDescriptor","configurable","call","enumerable","name","capture","passive","request","cancel","935","createPlaceholder","w","h","polyfillCurrentSrc","srcset","supportsCurrentSrc","picturefill","pf","_","ns","evaled","fillImg","reselect","curSrc","supported","currentSrc","src","getStyle","parsed","style","fontFamily","props","propRegex","setPlaceholder","img","placeholder","nativeGetAttribute","nativeSetAttribute","onImageReady","naturalWidth","fixOne","ofi","OFI","skipTest","supportsObjectFit","Image","naturalHeight","keepSrcUsable","console","warn","backgroundImage","replace","backgroundPosition","backgroundRepeat","backgroundOrigin","test","backgroundSize","descriptors","prop","set","ss","fix","imgs","opts","startAutoMode","autoModeEnabled","supportsObjectPosition","supportsOFI","getElementsByTagName","querySelectorAll","tagName","watchMQ","testImg","object-position","getAttribute","setAttribute","getOfiImageMaybe","HTMLImageElement","String"],"mappings":"AAAAA,cAAc,IAERC,IACA,SAAUC,EAAQC,EAAqBC,GAE7C,YACAC,QAAOC,eAAeH,EAAqB,cAAgBI,OAAO,GAC7C,IAAIC,GAAsDJ,EAAoB,KAE1EK,GAD8DL,EAAoBM,EAAEF,GAChCJ,EAAoB,MAExEO,GAD4DP,EAAoBM,EAAED,GAChCL,EAAoB,KACZA,GAAoBM,EAAEC,QASnGC,IACA,SAAUV,EAAQW,ICbvB,SAASC,EAAQC,GAClB,YAsCA,SAASC,GAA0BC,GACjCC,KAAKC,KAAOF,EAAME,KAClBD,KAAKE,OAASH,EAAMG,OACpBF,KAAKG,WAAaJ,EAAMI,WACxBH,KAAKI,mBAAqBL,EAAMK,mBAChCJ,KAAKK,iBAAmBN,EAAMM,kBAAoBC,IAClDN,KAAKO,iBAAmBR,EAAMM,gBAG9B,IAAIG,GAAaR,KAAKI,mBAClBK,EAAaD,EAAWE,MAAQF,EAAWG,OAC3CN,EAAmBL,KAAKK,iBACxBO,EAAmBP,EAAiBK,MAAQL,EAAiBM,MAI/DX,MAAKa,kBADHJ,EACuBG,EAAmBH,EAGnBT,KAAKO,eAAiB,EAAI,EAcvD,QAASO,GAAqBC,EAAUC,GAEtC,GAAIC,GAAUD,KAEd,IAAuB,kBAAZD,GACT,KAAM,IAAIG,OAAM,8BAGlB,IAAID,EAAQE,MAAiC,GAAzBF,EAAQE,KAAKC,SAC/B,KAAM,IAAIF,OAAM,0BAIlBlB,MAAKqB,uBAAyBC,EAC1BtB,KAAKqB,uBAAuBE,KAAKvB,MAAOA,KAAKwB,kBAGjDxB,KAAKyB,UAAYV,EACjBf,KAAK0B,uBACL1B,KAAK2B,kBACL3B,KAAK4B,kBAAoB5B,KAAK6B,iBAAiBZ,EAAQa,YAGvD9B,KAAK+B,WAAa/B,KAAKgC,gBAAgBf,EAAQgB,WAC/CjC,KAAKmB,KAAOF,EAAQE,MAAQ,KAC5BnB,KAAK8B,WAAa9B,KAAK4B,kBAAkBM,IAAI,SAASC,GACpD,MAAOA,GAAO9C,MAAQ8C,EAAOC,OAC5BC,KAAK,KAwbV,QAASC,KACP,MAAO1C,GAAO2C,aAAeA,YAAYD,KAAOC,YAAYD,MAY9D,QAAShB,GAASkB,EAAIC,GACpB,GAAIC,GAAQ,IACZ,OAAO,YACAA,IACHA,EAAQC,WAAW,WACjBH,IACAE,EAAQ,MACPD,KAcT,QAASG,GAASC,EAAMC,EAAON,EAAIO,GACG,kBAAzBF,GAAKG,iBACdH,EAAKG,iBAAiBF,EAAON,EAAIO,IAAkB,GAEjB,kBAApBF,GAAKI,aACnBJ,EAAKI,YAAY,KAAOH,EAAON,GAanC,QAASU,GAAYL,EAAMC,EAAON,EAAIO,GACG,kBAA5BF,GAAKM,oBACdN,EAAKM,oBAAoBL,EAAON,EAAIO,IAAkB,GAEnB,kBAArBF,GAAKO,cACnBP,EAAKO,aAAa,KAAON,EAAON,GAYpC,QAASa,GAAwBC,EAAOC,GACtC,GAAIC,GAAMC,KAAKC,IAAIJ,EAAME,IAAKD,EAAMC,KAChCG,EAASF,KAAKG,IAAIN,EAAMK,OAAQJ,EAAMI,QACtCE,EAAOJ,KAAKC,IAAIJ,EAAMO,KAAMN,EAAMM,MAClCC,EAAQL,KAAKG,IAAIN,EAAMQ,MAAOP,EAAMO,OACpCpD,EAAQoD,EAAQD,EAChBlD,EAASgD,EAASH,CAEtB,OAAQ9C,IAAS,GAAKC,GAAU,IAC9B6C,IAAKA,EACLG,OAAQA,EACRE,KAAMA,EACNC,MAAOA,EACPpD,MAAOA,EACPC,OAAQA,GAUZ,QAASoD,GAAsBC,GAC7B,GAAIC,EAEJ,KACEA,EAAOD,EAAGD,wBACV,MAAOG,IAKT,MAAKD,IAGCA,EAAKvD,OAASuD,EAAKtD,SACvBsD,GACET,IAAKS,EAAKT,IACVM,MAAOG,EAAKH,MACZH,OAAQM,EAAKN,OACbE,KAAMI,EAAKJ,KACXnD,MAAOuD,EAAKH,MAAQG,EAAKJ,KACzBlD,OAAQsD,EAAKN,OAASM,EAAKT,MAGxBS,GAbW3D,IAsBpB,QAASA,KACP,OACEkD,IAAK,EACLG,OAAQ,EACRE,KAAM,EACNC,MAAO,EACPpD,MAAO,EACPC,OAAQ,GAWZ,QAASwD,GAAaC,EAAQC,GAE5B,IADA,GAAIxB,GAAOwB,EACJxB,GAAM,CACX,GAAIA,GAAQuB,EAAQ,OAAO,CAE3BvB,GAAOyB,EAAczB,GAEvB,OAAO,EAUT,QAASyB,GAAczB,GACrB,GAAIuB,GAASvB,EAAK0B,UAElB,OAAIH,IAA6B,IAAnBA,EAAOhD,UAAkBgD,EAAOI,KAErCJ,EAAOI,KAETJ,EA5rBT,GAAI,wBAA0BxE,IAC1B,6BAA+BA,IAC/B,qBAAuBA,GAAOE,0BAA0B2E,UAY1D,YARM,kBAAoB7E,GAAOE,0BAA0B2E,WACzDtF,OAAOC,eAAeQ,EAAOE,0BAA0B2E,UACrD,kBACAC,IAAK,WACH,MAAO1E,MAAKa,kBAAoB,KAcxC,IAAI8D,KA6EJ7D,GAAqB2D,UAAUjD,iBAAmB,IAQlDV,EAAqB2D,UAAUG,cAAgB,KAM/C9D,EAAqB2D,UAAUI,uBAAwB,EAQvD/D,EAAqB2D,UAAUK,QAAU,SAAS5E,GAKhD,IAJ8BF,KAAK0B,oBAAoBqD,KAAK,SAASC,GACnE,MAAOA,GAAKC,SAAW/E,IAGzB,CAIA,IAAMA,GAA6B,GAAnBA,EAAOkB,SACrB,KAAM,IAAIF,OAAM,4BAGlBlB,MAAKkF,oBACLlF,KAAK0B,oBAAoByD,MAAMF,QAAS/E,EAAQH,MAAO,OACvDC,KAAKoF,wBACLpF,KAAKqB,2BAQPP,EAAqB2D,UAAUY,UAAY,SAASnF,GAClDF,KAAK0B,oBACD1B,KAAK0B,oBAAoB4D,OAAO,SAASN,GAE3C,MAAOA,GAAKC,SAAW/E,IAEpBF,KAAK0B,oBAAoB6D,SAC5BvF,KAAKwF,0BACLxF,KAAKyF,wBAQT3E,EAAqB2D,UAAUiB,WAAa,WAC1C1F,KAAK0B,uBACL1B,KAAKwF,0BACLxF,KAAKyF,uBAUP3E,EAAqB2D,UAAUkB,YAAc,WAC3C,GAAIC,GAAU5F,KAAK2B,eAAekE,OAElC,OADA7F,MAAK2B,kBACEiE,GAaT9E,EAAqB2D,UAAUzC,gBAAkB,SAAS8D,GACxD,GAAI7D,GAAY6D,IAAkB,EAGlC,OAFKC,OAAMC,QAAQ/D,KAAYA,GAAaA,IAErCA,EAAUgE,OAAOX,OAAO,SAASY,EAAGC,EAAGC,GAC5C,GAAgB,gBAALF,IAAiBG,MAAMH,IAAMA,EAAI,GAAKA,EAAI,EACnD,KAAM,IAAIhF,OAAM,yDAElB,OAAOgF,KAAME,EAAED,EAAI,MAgBvBrF,EAAqB2D,UAAU5C,iBAAmB,SAASyE,GACzD,GAAIC,GAAeD,GAAkB,MACjCE,EAAUD,EAAaE,MAAM,OAAOvE,IAAI,SAASC,GACnD,GAAIuE,GAAQ,wBAAwBC,KAAKxE,EACzC,KAAKuE,EACH,KAAM,IAAIxF,OAAM,oDAElB,QAAQ7B,MAAOuH,WAAWF,EAAM,IAAKtE,KAAMsE,EAAM,KAQnD,OAJAF,GAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GACnCA,EAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GACnCA,EAAQ,GAAKA,EAAQ,IAAMA,EAAQ,GAE5BA,GAST1F,EAAqB2D,UAAUW,sBAAwB,WAChDpF,KAAK6G,2BACR7G,KAAK6G,0BAA2B,EAI5B7G,KAAK4E,cACP5E,KAAK8G,oBAAsBC,YACvB/G,KAAKqB,uBAAwBrB,KAAK4E,gBAGtChC,EAAShD,EAAQ,SAAUI,KAAKqB,wBAAwB,GACxDuB,EAAS/C,EAAU,SAAUG,KAAKqB,wBAAwB,GAEtDrB,KAAK6E,uBAAyB,oBAAsBjF,KACtDI,KAAKgH,aAAe,GAAIC,kBAAiBjH,KAAKqB,wBAC9CrB,KAAKgH,aAAalC,QAAQjF,GACxBqH,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,SAAS,QAYnBvG,EAAqB2D,UAAUe,wBAA0B,WACnDxF,KAAK6G,2BACP7G,KAAK6G,0BAA2B,EAEhCS,cAActH,KAAK8G,qBACnB9G,KAAK8G,oBAAsB,KAE3B5D,EAAYtD,EAAQ,SAAUI,KAAKqB,wBAAwB,GAC3D6B,EAAYrD,EAAU,SAAUG,KAAKqB,wBAAwB,GAEzDrB,KAAKgH,eACPhH,KAAKgH,aAAatB,aAClB1F,KAAKgH,aAAe,QAY1BlG,EAAqB2D,UAAUpD,uBAAyB,WACtD,GAAIkG,GAAcvH,KAAKwH,eACnBC,EAAWF,EAAcvH,KAAK0H,eAAiBpH,GAEnDN,MAAK0B,oBAAoBiG,QAAQ,SAAS3C,GACxC,GAAI9E,GAAS8E,EAAKC,QACdzE,EAAauD,EAAsB7D,GACnC0H,EAAqB5H,KAAK6H,oBAAoB3H,GAC9C4H,EAAW9C,EAAKjF,MAChBM,EAAmBkH,GAAeK,GAClC5H,KAAK+H,kCAAkC7H,EAAQuH,GAE/CO,EAAWhD,EAAKjF,MAAQ,GAAID,IAC9BG,KAAMqC,IACNpC,OAAQA,EACRE,mBAAoBI,EACpBL,WAAYsH,EACZpH,iBAAkBA,GAGfyH,GAEMP,GAAeK,EAGpB5H,KAAKiI,qBAAqBH,EAAUE,IACtChI,KAAK2B,eAAewD,KAAK6C,GAMvBF,GAAYA,EAASvH,gBACvBP,KAAK2B,eAAewD,KAAK6C,GAZ3BhI,KAAK2B,eAAewD,KAAK6C,IAe1BhI,MAECA,KAAK2B,eAAe4D,QACtBvF,KAAKyB,UAAUzB,KAAK2F,cAAe3F,OAiBvCc,EAAqB2D,UAAUsD,kCAC3B,SAAS7H,EAAQuH,GAGnB,GAA+C,QAA3C7H,EAAOsI,iBAAiBhI,GAAQiI,QAApC,CAOA,IALA,GAAI3H,GAAauD,EAAsB7D,GACnCG,EAAmBG,EACnB4D,EAASE,EAAcpE,GACvBkI,GAAS,GAELA,GAAQ,CACd,GAAIC,GAAa,KACbC,EAAyC,GAAnBlE,EAAOhD,SAC7BxB,EAAOsI,iBAAiB9D,KAG5B,IAAmC,QAA/BkE,EAAoBH,QAAmB,MAmB3C,IAjBI/D,GAAUpE,KAAKmB,MAAQiD,GAAUvE,GACnCuI,GAAS,EACTC,EAAaZ,GAMTrD,GAAUvE,EAAS0I,MACnBnE,GAAUvE,EAAS2I,iBACa,WAAhCF,EAAoBG,WACtBJ,EAAatE,EAAsBK,IAMnCiE,KACFhI,EAAmBgD,EAAwBgF,EAAYhI,IAEhC,KAEzB+D,GAASE,EAAcF,GAEzB,MAAO/D,KASTS,EAAqB2D,UAAUiD,aAAe,WAC5C,GAAID,EACJ,IAAIzH,KAAKmB,KACPsG,EAAW1D,EAAsB/D,KAAKmB,UACjC,CAEL,GAAIuH,GAAO7I,EAAS2I,gBAChBD,EAAO1I,EAAS0I,IACpBd,IACEjE,IAAK,EACLK,KAAM,EACNC,MAAO4E,EAAKC,aAAeJ,EAAKI,YAChCjI,MAAOgI,EAAKC,aAAeJ,EAAKI,YAChChF,OAAQ+E,EAAKE,cAAgBL,EAAKK,aAClCjI,OAAQ+H,EAAKE,cAAgBL,EAAKK,cAGtC,MAAO5I,MAAK6I,wBAAwBpB,IAUtC3G,EAAqB2D,UAAUoE,wBAA0B,SAAS5E,GAChE,GAAIuC,GAAUxG,KAAK4B,kBAAkBM,IAAI,SAASC,EAAQgE,GACxD,MAAsB,MAAfhE,EAAOC,KAAeD,EAAO9C,MAChC8C,EAAO9C,OAAS8G,EAAI,EAAIlC,EAAKvD,MAAQuD,EAAKtD,QAAU,MAEtDmI,GACFtF,IAAKS,EAAKT,IAAMgD,EAAQ,GACxB1C,MAAOG,EAAKH,MAAQ0C,EAAQ,GAC5B7C,OAAQM,EAAKN,OAAS6C,EAAQ,GAC9B3C,KAAMI,EAAKJ,KAAO2C,EAAQ,GAK5B,OAHAsC,GAAQpI,MAAQoI,EAAQhF,MAAQgF,EAAQjF,KACxCiF,EAAQnI,OAASmI,EAAQnF,OAASmF,EAAQtF,IAEnCsF,GAcThI,EAAqB2D,UAAUwD,qBAC3B,SAASH,EAAUE,GAIrB,GAAIe,GAAWjB,GAAYA,EAASvH,eAChCuH,EAASjH,mBAAqB,GAAK,EACnCmI,EAAWhB,EAASzH,eACpByH,EAASnH,mBAAqB,GAAK,CAGvC,IAAIkI,IAAaC,EAEjB,IAAK,GAAI7C,GAAI,EAAGA,EAAInG,KAAK+B,WAAWwD,OAAQY,IAAK,CAC/C,GAAIlE,GAAYjC,KAAK+B,WAAWoE,EAIhC,IAAIlE,GAAa8G,GAAY9G,GAAa+G,GACtC/G,EAAY8G,GAAa9G,EAAY+G,EACvC,OAAO,IAWblI,EAAqB2D,UAAU+C,aAAe,WAC5C,OAAQxH,KAAKmB,MAAQgD,EAAatE,EAAUG,KAAKmB,OAUnDL,EAAqB2D,UAAUoD,oBAAsB,SAAS3H,GAC5D,MAAOiE,GAAanE,KAAKmB,MAAQtB,EAAUK,IAS7CY,EAAqB2D,UAAUS,kBAAoB,WAC7CP,EAASsE,QAAQjJ,MAAQ,GAC3B2E,EAASQ,KAAKnF,OASlBc,EAAqB2D,UAAUgB,oBAAsB,WACnD,GAAIyD,GAAQvE,EAASsE,QAAQjJ,OACf,GAAVkJ,GAAavE,EAASwE,OAAOD,EAAO,IAqL1CtJ,EAAOkB,qBAAuBA,EAC9BlB,EAAOE,0BAA4BA,GAEjCF,OAAQC,WDvBJuJ,IACA,SAAUpK,EAAQW,EAAST,IAEL,SAASmK,GE/rBpC,GAAAC,GAAAC,EAAAC,GAAA,SAAUC,GAETF,KAAAD,EAAA,MAAAI,MAAAF,EAAA,kBAAAF,KAAAK,MAAAhK,EAAA4J,GAAAD,KAAAtK,EAAAW,QAAA6J,IAMA,WACD,YAsDA,SAASI,KACLC,IACCC,GACFC,EAA4BD,GAE1BE,GACFC,aAAaD,GAEdH,GAAY,GAId,QAASK,KACO,KAAZ5I,IACF6I,EAAgB,EAChB7I,EAAW,IACX8I,EAAc,GAEXP,IACFD,IACAS,MAGFC,IAGD,QAASC,KACRT,EAAU,KACVE,EAAYrH,WAAW6H,EAAU,GAGlC,QAASC,KACRT,EAAY,KACZU,EAAsBH,GAGvB,QAASF,KAELR,IACHc,EAAgBrJ,GAAYsJ,KAAKtI,MAAQuI,GAEzCC,EAAgBF,KAAKtI,MAErBuH,GAAY,EAETO,GAAeO,EAAgBP,IACjCO,EAAgBP,GAGdO,EAAgB,EAClBX,EAAYrH,WAAW8H,EAAaE,IAEpCA,EAAgB,EAChBF,MAIF,QAASD,KACR,GAAIO,GAAM5E,EAAG6E,EACTC,EAAgBd,EAAgB,EACnC,EACA,CAQD,IALAU,EAAYD,KAAKtI,MACjBuH,GAAY,EAEZG,EAAY,KAETkB,EAAc,GAAKL,EAAYF,EAAgB,GAAKG,EACtD,IAAI3E,EAAI,EAAG6E,EAAMG,EAAM5F,OAAQY,EAAI6E,GAAOI,EAAaC,gBAAkBJ,EAAe9E,IACvF4E,EAAOI,EAAMG,QACbC,IACGR,GACFA,EAAKK,EAKLD,GAAM5F,OACR8E,IAEAa,EAAc,EAIhB,QAASM,GAAwBT,GAIhC,MAHA7B,KACAiC,EAAMhG,KAAK4F,GACXV,IACOnB,EAGR,QAASuC,GAAuBC,GAC/B,GAAIxC,GAAQwC,EAAK,EAAIH,CAClBJ,GAAMjC,KACRiC,EAAMjC,GAAS,MArJjB,GAAI4B,GAAeH,EAAeX,EAAWF,EACzC3I,EAAwB,mBAAVvB,QACjBA,WACiB8J,UAAVL,GACNA,EACArJ,SACE0K,EAAwBvJ,EAAK4I,6BAA+B5I,EAAKuJ,uBAAyB/H,WAC1FoH,EAA8B5I,EAAK4I,6BAA+BE,aAClEkB,KACAD,EAAc,EACdrB,GAAY,EACZM,EAAgB,EAChBC,EAAc,GACd9I,EAAW,IACX4H,EAAQ,EACR2B,EAAY,EACZU,EAAa,EACbH,GACHO,iBACC,OAAO,GAERN,cAAe,WACd,GAAIA,GAAgBlB,GAAiBS,KAAKtI,MAAQuI,EAClD,OAAOQ,GAAgB,EAAI,EAAIA,IAG7Bf,EAMJ,SAAkB9H,GACjB,GAAIkJ,GAAIE,EAEJC,EAAQ,WACX,GAAIC,GAAQlB,KAAKtI,MAASsJ,CAEtBE,GAJM,GAKTJ,EAAK/I,WAAWkJ,EALP,GAKqBC,IAE9BJ,EAAK,KACLlJ,KAGF,OAAO,YACNoJ,EAAYhB,KAAKtI,MACboJ,IACHA,EAAK/I,WAAWkJ,EAdP,OARe,WAC1B1B,EAAgB,GAChB7I,EAAW,GACX8I,EAAc,GA4Hf,IAAIjJ,EAAK4K,qBAAwB5K,EAAK6K,mBAmBrC,IACC7K,EAAK4K,oBAAoB,cAAetJ,QAAS,IAChD,MAAMwJ,IACP,SAAUC,GACT,GAAIC,GAAoBd,CAOxB,IANAlK,EAAK4K,oBAAsB,SAASvJ,EAAIC,GACvC,MAAGA,IAAqC,gBAAnBA,GAAQA,QACrByJ,EAAI1J,EAAIC,EAAQA,SAEjByJ,EAAI1J,IAETrB,EAAKiL,uBAAyBD,EAAqBC,qBAAqB3H,WAAW,CAErF,KADA4G,EAAgBlM,OAAOkN,yBAAyBF,EAAoB,oBAC9Cd,EAAciB,eAAiBjB,EAAc3G,IAAK,MACxEvF,QAAOC,eAAe+M,EAAoB,iBACzC9M,MAAQ,WACP,MAAOgM,GAAc3G,IAAI6H,KAAKvM,OAE/BwM,YAAY,EACZF,cAAc,MAGdnL,EAAK4K,yBAxCT5K,GAAK4K,oBAAsBP,EAC3BrK,EAAK6K,mBAAqBP,EAEvBtK,EAAKtB,UAAYA,SAASmD,mBAC5B7B,EAAK6B,iBAAiB,SAAUkH,GAAmB,GACnD/I,EAAK6B,iBAAiB,SAAUkH,GAEhCrK,SAASmD,iBAAiB,QAASkH,GAAmB,GACtDrK,SAASmD,iBAAiB,YAAakH,GAAmB,IACzD,QAAS,WAAY,aAAc,aAAavC,QAAQ,SAAS8E,GACjE5M,SAASmD,iBAAiByJ,EAAMvC,GAAoBwC,SAAS,EAAMC,SAAS,MAG1ExL,EAAK8F,kBACP,GAAIA,kBAAkBiD,GAAoBpF,QAASjF,SAAS2I,iBAAkBrB,WAAW,EAAME,SAAS,EAAMH,YAAY,IA8B7H,QACC0F,QAASpB,EACTqB,OAAQpB,OFmsBmBc,KAAK5M,EAAST,EAAoB,MAIzD4N,IACA,SAAU9N,EAAQW,EAAST,GAEjC,YG94BA,SAAS6N,GAAkBC,EAAGC,GAC7B,MAAQ,uEAAyED,EAAI,aAAeC,EAAI,iBAGzG,QAASC,GAAmBlJ,GAC3B,GAAIA,EAAGmJ,SAAWC,GAAsBxN,OAAOyN,YAAa,CAC3D,GAAIC,GAAK1N,OAAOyN,YAAYE,CAEvBvJ,GAAGsJ,EAAGE,KAAQxJ,EAAGsJ,EAAGE,IAAIC,QAE5BH,EAAGI,QAAQ1J,GAAK2J,UAAU,IAGtB3J,EAAGsJ,EAAGE,IAAII,SAEd5J,EAAGsJ,EAAGE,IAAIK,WAAY,EACtBP,EAAGI,QAAQ1J,GAAK2J,UAAU,KAI3B3J,EAAG8J,WAAa9J,EAAGsJ,EAAGE,IAAII,QAAU5J,EAAG+J,KAIzC,QAASC,GAAShK,GAIjB,IAHA,GACIiK,GADAC,EAAQhG,iBAAiBlE,GAAImK,WAE7BC,KACwC,QAApCH,EAASI,EAAU1H,KAAKuH,KAC/BE,EAAMH,EAAO,IAAMA,EAAO,EAE3B,OAAOG,GAGR,QAASE,GAAeC,EAAK7N,EAAOC,GAEnC,GAAI6N,GAAczB,EAAkBrM,GAAS,EAAGC,GAAU,EAGtD8N,GAAmBlC,KAAKgC,EAAK,SAAWC,GAC3CE,EAAmBnC,KAAKgC,EAAK,MAAOC,GAItC,QAASG,GAAaJ,EAAKxN,GAGtBwN,EAAIK,aACP7N,EAASwN,GAET5L,WAAWgM,EAAc,IAAKJ,EAAKxN,GAIrC,QAAS8N,GAAO7K,GACf,GAAIkK,GAAQF,EAAShK,GACjB8K,EAAM9K,EAAG+K,EAIb,IAHAb,EAAM,cAAgBA,EAAM,eAAiB,QAGxCY,EAAIP,IAAK,CAEb,GAA4B,SAAxBL,EAAM,cACT,MAID,KACEY,EAAIE,UACLC,IACCf,EAAM,mBAEP,OAKF,IAAKY,EAAIP,IAAK,CACbO,EAAIP,IAAM,GAAIW,OAAMlL,EAAGtD,MAAOsD,EAAGrD,QACjCmO,EAAIP,IAAIpB,OAASsB,EAAmBlC,KAAKvI,EAAI,oBAAsBA,EAAGmJ,OACtE2B,EAAIP,IAAIR,IAAMU,EAAmBlC,KAAKvI,EAAI,iBAAmBA,EAAG+J,IAIhEW,EAAmBnC,KAAKvI,EAAI,eAAgBA,EAAG+J,KAC3C/J,EAAGmJ,QACNuB,EAAmBnC,KAAKvI,EAAI,kBAAmBA,EAAGmJ,QAGnDmB,EAAetK,EAAIA,EAAG4K,cAAgB5K,EAAGtD,MAAOsD,EAAGmL,eAAiBnL,EAAGrD,QAGnEqD,EAAGmJ,SACNnJ,EAAGmJ,OAAS,GAEb,KACCiC,EAAcpL,GACb,MAAOE,GACJtE,OAAOyP,SACVA,QAAQC,KAAK,mCAKhBpC,EAAmB4B,EAAIP,KAEvBvK,EAAGkK,MAAMqB,gBAAkB,SAAaT,EAAIP,IAAIT,YAAcgB,EAAIP,IAAIR,KAAKyB,QAAQ,KAAM,OAAU,KACnGxL,EAAGkK,MAAMuB,mBAAqBvB,EAAM,oBAAsB,SAC1DlK,EAAGkK,MAAMwB,iBAAmB,YAC5B1L,EAAGkK,MAAMyB,iBAAmB,cAExB,aAAaC,KAAK1B,EAAM,eAC3BS,EAAaG,EAAIP,IAAK,WACjBO,EAAIP,IAAIK,aAAe5K,EAAGtD,OAASoO,EAAIP,IAAIY,cAAgBnL,EAAGrD,OACjEqD,EAAGkK,MAAM2B,eAAiB,UAE1B7L,EAAGkK,MAAM2B,eAAiB,SAI5B7L,EAAGkK,MAAM2B,eAAiB3B,EAAM,cAAcsB,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,aAGvFb,EAAaG,EAAIP,IAAK,SAAUA,GAC/BD,EAAetK,EAAIuK,EAAIK,aAAcL,EAAIY,iBAI3C,QAASC,GAAcpL,GACtB,GAAI8L,IACHpL,IAAK,SAAaqL,GACjB,MAAO/L,GAAG+K,GAAKR,IAAIwB,GAAc,QAElCC,IAAK,SAAa3Q,EAAO0Q,GAIxB,MAHA/L,GAAG+K,GAAKR,IAAIwB,GAAc,OAAS1Q,EACnCqP,EAAmBnC,KAAKvI,EAAK,YAAc+L,EAAO1Q,GAClDwP,EAAO7K,GACA3E,GAGTF,QAAOC,eAAe4E,EAAI,MAAO8L,GACjC3Q,OAAOC,eAAe4E,EAAI,cACzBU,IAAK,WAAc,MAAOoL,GAAYpL,IAAI,iBAE3CvF,OAAOC,eAAe4E,EAAI,UACzBU,IAAK,WAAc,MAAOoL,GAAYpL,IAAI,WAC1CsL,IAAK,SAAUC,GAAM,MAAOH,GAAYE,IAAIC,EAAI,aAmBlD,QAASC,GAAIC,EAAMC,GAClB,GAAIC,IAAiBC,IAAoBH,CAIzC,IAHAC,EAAOA,MACPD,EAAOA,GAAQ,MAEVI,IAA2BH,EAAKpB,WAAcwB,EAClD,OAAO,CAIK,SAATL,EACHA,EAAOtQ,SAAS4Q,qBAAqB,OACX,gBAATN,GACjBA,EAAOtQ,SAAS6Q,iBAAiBP,GACrB,UAAYA,KACxBA,GAAQA,GAIT,KAAK,GAAIhK,GAAI,EAAGA,EAAIgK,EAAK5K,OAAQY,IAChCgK,EAAKhK,GAAG4I,GAAOoB,EAAKhK,GAAG4I,KACtBC,SAAUoB,EAAKpB,UAEhBH,EAAOsB,EAAKhK,GAGTkK,KACHxQ,SAAS0I,KAAKvF,iBAAiB,OAAQ,SAAUiJ,GACvB,QAArBA,EAAE/L,OAAOyQ,SACZT,EAAIjE,EAAE/L,QACL8O,SAAUoB,EAAKpB,aAGf,GACHsB,GAAkB,EAClBH,EAAO,OAIJC,EAAKQ,SACRhR,OAAOoD,iBAAiB,SAAUkN,EAAI3O,KAAK,KAAM4O,GAChDnB,SAAUoB,EAAKpB,YAzNlB,GAAID,GAAM,6BACNV,EAAY,kDACZwC,EAA2B,mBAAV3B,QAAyBhB,OAAQ4C,kBAAmB,IAAM,GAAI5B,OAC/ED,EAAoB,cAAgB4B,GAAQ3C,MAC5CqC,EAAyB,mBAAqBM,GAAQ3C,MACtDsC,EAAc,mBAAqBK,GAAQ3C,MAC3Cd,EAAmD,gBAAvByD,GAAQ/C,WACpCW,EAAqBoC,EAAQE,aAC7BrC,EAAqBmC,EAAQG,aAC7BV,GAAkB,CAqNtBJ,GAAIjB,kBAAoBA,EACxBiB,EAAIK,uBAAyBA,EA9D7B,WACC,QAASU,GAAiBjN,EAAIyI,GAC7B,MAAOzI,GAAG+K,IAAQ/K,EAAG+K,GAAKR,MAAiB,QAAT9B,GAA2B,WAATA,GAAqBzI,EAAG+K,GAAKR,IAAMvK,EAEnFuM,IACJW,iBAAiBzM,UAAUsM,aAAe,SAAUtE,GACnD,MAAOgC,GAAmBlC,KAAK0E,EAAiBjR,KAAMyM,GAAOA,IAG9DyE,iBAAiBzM,UAAUuM,aAAe,SAAUvE,EAAMpN,GACzD,MAAOqP,GAAmBnC,KAAK0E,EAAiBjR,KAAMyM,GAAOA,EAAM0E,OAAO9R,SAwD7EL,EAAOW,QAAUuQ","file":"extra_polyfills.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 801:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_intersection_observer__ = __webpack_require__(933);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_intersection_observer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_intersection_observer__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_requestidlecallback__ = __webpack_require__(934);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_requestidlecallback___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_requestidlecallback__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_object_fit_images__ = __webpack_require__(935);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_object_fit_images___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_object_fit_images__);\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_2_object_fit_images___default()();\n\n/***/ }),\n\n/***/ 933:\n/***/ (function(module, exports) {\n\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function (window, document) {\n 'use strict';\n\n // Exits early if all IntersectionObserver and IntersectionObserverEntry\n // features are natively supported.\n\n if ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n }\n\n /**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observering a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\n var registry = [];\n\n /**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\n function IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n this.intersectionRatio = intersectionArea / targetArea;\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n }\n\n /**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\n function IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function (margin) {\n return margin.value + margin.unit;\n }).join(' ');\n }\n\n /**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\n IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n /**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\n IntersectionObserver.prototype.POLL_INTERVAL = null;\n\n /**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\n IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n /**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\n IntersectionObserver.prototype.observe = function (target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function (item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({ element: target, entry: null });\n this._monitorIntersections();\n this._checkForIntersections();\n };\n\n /**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\n IntersectionObserver.prototype.unobserve = function (target) {\n this._observationTargets = this._observationTargets.filter(function (item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n };\n\n /**\n * Stops observing all target elements for intersection changes.\n */\n IntersectionObserver.prototype.disconnect = function () {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n };\n\n /**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\n IntersectionObserver.prototype.takeRecords = function () {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n };\n\n /**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\n IntersectionObserver.prototype._initThresholds = function (opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function (t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n };\n\n /**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n * value and unit.\n */\n IntersectionObserver.prototype._parseRootMargin = function (opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function (margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return { value: parseFloat(parts[1]), unit: parts[2] };\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n };\n\n /**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibilty state is visible.\n * @private\n */\n IntersectionObserver.prototype._monitorIntersections = function () {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(this._checkForIntersections, this.POLL_INTERVAL);\n } else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n };\n\n /**\n * Stops polling for intersection changes.\n * @private\n */\n IntersectionObserver.prototype._unmonitorIntersections = function () {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n };\n\n /**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\n IntersectionObserver.prototype._checkForIntersections = function () {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function (item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget && this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n };\n\n /**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\n IntersectionObserver.prototype._computeTargetAndRootIntersection = function (target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ? window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the <body>\n // or <html> element, update the intersection rect.\n // Note: <body> and <html> cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body && parent != document.documentElement && parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n };\n\n /**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\n IntersectionObserver.prototype._getRootRect = function () {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use <html>/<body> instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n };\n\n /**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\n IntersectionObserver.prototype._expandRectByRootMargin = function (rect) {\n var margins = this._rootMarginValues.map(function (margin, i) {\n return margin.unit == 'px' ? margin.value : margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n };\n\n /**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\n IntersectionObserver.prototype._hasCrossedThreshold = function (oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ? oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ? newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio || threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n };\n\n /**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\n IntersectionObserver.prototype._rootIsInDom = function () {\n return !this.root || containsDeep(document, this.root);\n };\n\n /**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\n IntersectionObserver.prototype._rootContainsTarget = function (target) {\n return containsDeep(this.root || document, target);\n };\n\n /**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\n IntersectionObserver.prototype._registerInstance = function () {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n };\n\n /**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\n IntersectionObserver.prototype._unregisterInstance = function () {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n };\n\n /**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\n function now() {\n return window.performance && performance.now && performance.now();\n }\n\n /**\n * Throttles a function and delays its executiong, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\n function throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function () {\n fn();\n timer = null;\n }, timeout);\n }\n };\n }\n\n /**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\n function addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n } else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n }\n\n /**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\n function removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n } else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n }\n\n /**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\n function computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return width >= 0 && height >= 0 && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n }\n\n /**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\n function getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n }\n\n /**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\n function getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n\n /**\n * Checks to see if a parent element contains a child elemnt (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\n function containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n }\n\n /**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\n function getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n return parent;\n }\n\n // Exposes the constructors globally.\n window.IntersectionObserver = IntersectionObserver;\n window.IntersectionObserverEntry = IntersectionObserverEntry;\n})(window, document);\n\n/***/ }),\n\n/***/ 934:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (factory) {\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory();\n\t} else {\n\t\twindow.idleCallbackShim = factory();\n\t}\n})(function () {\n\t'use strict';\n\n\tvar scheduleStart, throttleDelay, lazytimer, lazyraf;\n\tvar root = typeof window != 'undefined' ? window : typeof global != undefined ? global : this || {};\n\tvar requestAnimationFrame = root.cancelRequestAnimationFrame && root.requestAnimationFrame || setTimeout;\n\tvar cancelRequestAnimationFrame = root.cancelRequestAnimationFrame || clearTimeout;\n\tvar tasks = [];\n\tvar runAttempts = 0;\n\tvar isRunning = false;\n\tvar remainingTime = 7;\n\tvar minThrottle = 35;\n\tvar throttle = 125;\n\tvar index = 0;\n\tvar taskStart = 0;\n\tvar tasklength = 0;\n\tvar IdleDeadline = {\n\t\tget didTimeout() {\n\t\t\treturn false;\n\t\t},\n\t\ttimeRemaining: function () {\n\t\t\tvar timeRemaining = remainingTime - (Date.now() - taskStart);\n\t\t\treturn timeRemaining < 0 ? 0 : timeRemaining;\n\t\t}\n\t};\n\tvar setInactive = debounce(function () {\n\t\tremainingTime = 22;\n\t\tthrottle = 66;\n\t\tminThrottle = 0;\n\t});\n\n\tfunction debounce(fn) {\n\t\tvar id, timestamp;\n\t\tvar wait = 99;\n\t\tvar check = function () {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tid = setTimeout(check, wait - last);\n\t\t\t} else {\n\t\t\t\tid = null;\n\t\t\t\tfn();\n\t\t\t}\n\t\t};\n\t\treturn function () {\n\t\t\ttimestamp = Date.now();\n\t\t\tif (!id) {\n\t\t\t\tid = setTimeout(check, wait);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction abortRunning() {\n\t\tif (isRunning) {\n\t\t\tif (lazyraf) {\n\t\t\t\tcancelRequestAnimationFrame(lazyraf);\n\t\t\t}\n\t\t\tif (lazytimer) {\n\t\t\t\tclearTimeout(lazytimer);\n\t\t\t}\n\t\t\tisRunning = false;\n\t\t}\n\t}\n\n\tfunction onInputorMutation() {\n\t\tif (throttle != 125) {\n\t\t\tremainingTime = 7;\n\t\t\tthrottle = 125;\n\t\t\tminThrottle = 35;\n\n\t\t\tif (isRunning) {\n\t\t\t\tabortRunning();\n\t\t\t\tscheduleLazy();\n\t\t\t}\n\t\t}\n\t\tsetInactive();\n\t}\n\n\tfunction scheduleAfterRaf() {\n\t\tlazyraf = null;\n\t\tlazytimer = setTimeout(runTasks, 0);\n\t}\n\n\tfunction scheduleRaf() {\n\t\tlazytimer = null;\n\t\trequestAnimationFrame(scheduleAfterRaf);\n\t}\n\n\tfunction scheduleLazy() {\n\n\t\tif (isRunning) {\n\t\t\treturn;\n\t\t}\n\t\tthrottleDelay = throttle - (Date.now() - taskStart);\n\n\t\tscheduleStart = Date.now();\n\n\t\tisRunning = true;\n\n\t\tif (minThrottle && throttleDelay < minThrottle) {\n\t\t\tthrottleDelay = minThrottle;\n\t\t}\n\n\t\tif (throttleDelay > 9) {\n\t\t\tlazytimer = setTimeout(scheduleRaf, throttleDelay);\n\t\t} else {\n\t\t\tthrottleDelay = 0;\n\t\t\tscheduleRaf();\n\t\t}\n\t}\n\n\tfunction runTasks() {\n\t\tvar task, i, len;\n\t\tvar timeThreshold = remainingTime > 9 ? 9 : 1;\n\n\t\ttaskStart = Date.now();\n\t\tisRunning = false;\n\n\t\tlazytimer = null;\n\n\t\tif (runAttempts > 2 || taskStart - throttleDelay - 50 < scheduleStart) {\n\t\t\tfor (i = 0, len = tasks.length; i < len && IdleDeadline.timeRemaining() > timeThreshold; i++) {\n\t\t\t\ttask = tasks.shift();\n\t\t\t\ttasklength++;\n\t\t\t\tif (task) {\n\t\t\t\t\ttask(IdleDeadline);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tasks.length) {\n\t\t\tscheduleLazy();\n\t\t} else {\n\t\t\trunAttempts = 0;\n\t\t}\n\t}\n\n\tfunction requestIdleCallbackShim(task) {\n\t\tindex++;\n\t\ttasks.push(task);\n\t\tscheduleLazy();\n\t\treturn index;\n\t}\n\n\tfunction cancelIdleCallbackShim(id) {\n\t\tvar index = id - 1 - tasklength;\n\t\tif (tasks[index]) {\n\t\t\ttasks[index] = null;\n\t\t}\n\t}\n\n\tif (!root.requestIdleCallback || !root.cancelIdleCallback) {\n\t\troot.requestIdleCallback = requestIdleCallbackShim;\n\t\troot.cancelIdleCallback = cancelIdleCallbackShim;\n\n\t\tif (root.document && document.addEventListener) {\n\t\t\troot.addEventListener('scroll', onInputorMutation, true);\n\t\t\troot.addEventListener('resize', onInputorMutation);\n\n\t\t\tdocument.addEventListener('focus', onInputorMutation, true);\n\t\t\tdocument.addEventListener('mouseover', onInputorMutation, true);\n\t\t\t['click', 'keypress', 'touchstart', 'mousedown'].forEach(function (name) {\n\t\t\t\tdocument.addEventListener(name, onInputorMutation, { capture: true, passive: true });\n\t\t\t});\n\n\t\t\tif (root.MutationObserver) {\n\t\t\t\tnew MutationObserver(onInputorMutation).observe(document.documentElement, { childList: true, subtree: true, attributes: true });\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\troot.requestIdleCallback(function () {}, { timeout: 0 });\n\t\t} catch (e) {\n\t\t\t(function (rIC) {\n\t\t\t\tvar timeRemainingProto, timeRemaining;\n\t\t\t\troot.requestIdleCallback = function (fn, timeout) {\n\t\t\t\t\tif (timeout && typeof timeout.timeout == 'number') {\n\t\t\t\t\t\treturn rIC(fn, timeout.timeout);\n\t\t\t\t\t}\n\t\t\t\t\treturn rIC(fn);\n\t\t\t\t};\n\t\t\t\tif (root.IdleCallbackDeadline && (timeRemainingProto = IdleCallbackDeadline.prototype)) {\n\t\t\t\t\ttimeRemaining = Object.getOwnPropertyDescriptor(timeRemainingProto, 'timeRemaining');\n\t\t\t\t\tif (!timeRemaining || !timeRemaining.configurable || !timeRemaining.get) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tObject.defineProperty(timeRemainingProto, 'timeRemaining', {\n\t\t\t\t\t\tvalue: function () {\n\t\t\t\t\t\t\treturn timeRemaining.get.call(this);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})(root.requestIdleCallback);\n\t\t}\n\t}\n\n\treturn {\n\t\trequest: requestIdleCallbackShim,\n\t\tcancel: cancelIdleCallbackShim\n\t};\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(46)))\n\n/***/ }),\n\n/***/ 935:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*! npm.im/object-fit-images 3.2.3 */\n\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? { style: { 'object-position': 1 } } : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\";\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, { reselect: true });\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, { reselect: true });\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + (ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"') + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-\" + prop, value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () {\n\t\t\treturn descriptors.get('currentSrc');\n\t\t}\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () {\n\t\t\treturn descriptors.get('srcset');\n\t\t},\n\t\tset: function (ss) {\n\t\t\treturn descriptors.set(ss, 'srcset');\n\t\t}\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif (supportsObjectPosition && !opts.skipTest || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// extra_polyfills.js","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observering a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n this.intersectionRatio = intersectionArea / targetArea;\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections();\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibilty state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(\n this._checkForIntersections, this.POLL_INTERVAL);\n }\n else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the <body>\n // or <html> element, update the intersection rect.\n // Note: <body> and <html> cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body &&\n parent != document.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use <html>/<body> instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its executiong, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n/**\n * Checks to see if a parent element contains a child elemnt (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/intersection-observer/intersection-observer.js","(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory();\n\t} else {\n\t\twindow.idleCallbackShim = factory();\n\t}\n}(function(){\n\t'use strict';\n\tvar scheduleStart, throttleDelay, lazytimer, lazyraf;\n\tvar root = typeof window != 'undefined' ?\n\t\twindow :\n\t\ttypeof global != undefined ?\n\t\t\tglobal :\n\t\t\tthis || {};\n\tvar requestAnimationFrame = root.cancelRequestAnimationFrame && root.requestAnimationFrame || setTimeout;\n\tvar cancelRequestAnimationFrame = root.cancelRequestAnimationFrame || clearTimeout;\n\tvar tasks = [];\n\tvar runAttempts = 0;\n\tvar isRunning = false;\n\tvar remainingTime = 7;\n\tvar minThrottle = 35;\n\tvar throttle = 125;\n\tvar index = 0;\n\tvar taskStart = 0;\n\tvar tasklength = 0;\n\tvar IdleDeadline = {\n\t\tget didTimeout(){\n\t\t\treturn false;\n\t\t},\n\t\ttimeRemaining: function(){\n\t\t\tvar timeRemaining = remainingTime - (Date.now() - taskStart);\n\t\t\treturn timeRemaining < 0 ? 0 : timeRemaining;\n\t\t},\n\t};\n\tvar setInactive = debounce(function(){\n\t\tremainingTime = 22;\n\t\tthrottle = 66;\n\t\tminThrottle = 0;\n\t});\n\n\tfunction debounce(fn){\n\t\tvar id, timestamp;\n\t\tvar wait = 99;\n\t\tvar check = function(){\n\t\t\tvar last = (Date.now()) - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tid = setTimeout(check, wait - last);\n\t\t\t} else {\n\t\t\t\tid = null;\n\t\t\t\tfn();\n\t\t\t}\n\t\t};\n\t\treturn function(){\n\t\t\ttimestamp = Date.now();\n\t\t\tif(!id){\n\t\t\t\tid = setTimeout(check, wait);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction abortRunning(){\n\t\tif(isRunning){\n\t\t\tif(lazyraf){\n\t\t\t\tcancelRequestAnimationFrame(lazyraf);\n\t\t\t}\n\t\t\tif(lazytimer){\n\t\t\t\tclearTimeout(lazytimer);\n\t\t\t}\n\t\t\tisRunning = false;\n\t\t}\n\t}\n\n\tfunction onInputorMutation(){\n\t\tif(throttle != 125){\n\t\t\tremainingTime = 7;\n\t\t\tthrottle = 125;\n\t\t\tminThrottle = 35;\n\n\t\t\tif(isRunning) {\n\t\t\t\tabortRunning();\n\t\t\t\tscheduleLazy();\n\t\t\t}\n\t\t}\n\t\tsetInactive();\n\t}\n\n\tfunction scheduleAfterRaf() {\n\t\tlazyraf = null;\n\t\tlazytimer = setTimeout(runTasks, 0);\n\t}\n\n\tfunction scheduleRaf(){\n\t\tlazytimer = null;\n\t\trequestAnimationFrame(scheduleAfterRaf);\n\t}\n\n\tfunction scheduleLazy(){\n\n\t\tif(isRunning){return;}\n\t\tthrottleDelay = throttle - (Date.now() - taskStart);\n\n\t\tscheduleStart = Date.now();\n\n\t\tisRunning = true;\n\n\t\tif(minThrottle && throttleDelay < minThrottle){\n\t\t\tthrottleDelay = minThrottle;\n\t\t}\n\n\t\tif(throttleDelay > 9){\n\t\t\tlazytimer = setTimeout(scheduleRaf, throttleDelay);\n\t\t} else {\n\t\t\tthrottleDelay = 0;\n\t\t\tscheduleRaf();\n\t\t}\n\t}\n\n\tfunction runTasks(){\n\t\tvar task, i, len;\n\t\tvar timeThreshold = remainingTime > 9 ?\n\t\t\t9 :\n\t\t\t1\n\t\t;\n\n\t\ttaskStart = Date.now();\n\t\tisRunning = false;\n\n\t\tlazytimer = null;\n\n\t\tif(runAttempts > 2 || taskStart - throttleDelay - 50 < scheduleStart){\n\t\t\tfor(i = 0, len = tasks.length; i < len && IdleDeadline.timeRemaining() > timeThreshold; i++){\n\t\t\t\ttask = tasks.shift();\n\t\t\t\ttasklength++;\n\t\t\t\tif(task){\n\t\t\t\t\ttask(IdleDeadline);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(tasks.length){\n\t\t\tscheduleLazy();\n\t\t} else {\n\t\t\trunAttempts = 0;\n\t\t}\n\t}\n\n\tfunction requestIdleCallbackShim(task){\n\t\tindex++;\n\t\ttasks.push(task);\n\t\tscheduleLazy();\n\t\treturn index;\n\t}\n\n\tfunction cancelIdleCallbackShim(id){\n\t\tvar index = id - 1 - tasklength;\n\t\tif(tasks[index]){\n\t\t\ttasks[index] = null;\n\t\t}\n\t}\n\n\tif(!root.requestIdleCallback || !root.cancelIdleCallback){\n\t\troot.requestIdleCallback = requestIdleCallbackShim;\n\t\troot.cancelIdleCallback = cancelIdleCallbackShim;\n\n\t\tif(root.document && document.addEventListener){\n\t\t\troot.addEventListener('scroll', onInputorMutation, true);\n\t\t\troot.addEventListener('resize', onInputorMutation);\n\n\t\t\tdocument.addEventListener('focus', onInputorMutation, true);\n\t\t\tdocument.addEventListener('mouseover', onInputorMutation, true);\n\t\t\t['click', 'keypress', 'touchstart', 'mousedown'].forEach(function(name){\n\t\t\t\tdocument.addEventListener(name, onInputorMutation, {capture: true, passive: true});\n\t\t\t});\n\n\t\t\tif(root.MutationObserver){\n\t\t\t\tnew MutationObserver( onInputorMutation ).observe( document.documentElement, {childList: true, subtree: true, attributes: true} );\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttry{\n\t\t\troot.requestIdleCallback(function(){}, {timeout: 0});\n\t\t} catch(e){\n\t\t\t(function(rIC){\n\t\t\t\tvar timeRemainingProto, timeRemaining;\n\t\t\t\troot.requestIdleCallback = function(fn, timeout){\n\t\t\t\t\tif(timeout && typeof timeout.timeout == 'number'){\n\t\t\t\t\t\treturn rIC(fn, timeout.timeout);\n\t\t\t\t\t}\n\t\t\t\t\treturn rIC(fn);\n\t\t\t\t};\n\t\t\t\tif(root.IdleCallbackDeadline && (timeRemainingProto = IdleCallbackDeadline.prototype)){\n\t\t\t\t\ttimeRemaining = Object.getOwnPropertyDescriptor(timeRemainingProto, 'timeRemaining');\n\t\t\t\t\tif(!timeRemaining || !timeRemaining.configurable || !timeRemaining.get){return;}\n\t\t\t\t\tObject.defineProperty(timeRemainingProto, 'timeRemaining', {\n\t\t\t\t\t\tvalue: function(){\n\t\t\t\t\t\t\treturn timeRemaining.get.call(this);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})(root.requestIdleCallback)\n\t\t}\n\t}\n\n\treturn {\n\t\trequest: requestIdleCallbackShim,\n\t\tcancel: cancelIdleCallbackShim,\n\t};\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/requestidlecallback/index.js","/*! npm.im/object-fit-images 3.2.3 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/object-fit-images/dist/ofi.common-js.js"],"sourceRoot":""} |